1
0
mirror of https://codeberg.org/tenplus1/mobs_animal.git synced 2024-11-09 20:30:16 +01:00
mobs_animal/bee.lua

210 lines
4.7 KiB
Lua
Raw Normal View History

2022-09-27 10:15:59 +02:00
2024-08-10 15:10:22 +02:00
local S = minetest.get_translator("mobs_animal")
2024-08-09 08:59:02 +02:00
2019-06-16 16:23:25 +02:00
-- Bee by KrupnoPavel (.b3d model by sirrobzeroone)
2016-04-15 15:59:43 +02:00
mobs:register_mob("mobs_animal:bee", {
type = "animal",
passive = true,
hp_min = 1,
hp_max = 2,
armor = 200,
2017-07-03 20:25:49 +02:00
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.5, 0.2},
2016-04-15 15:59:43 +02:00
visual = "mesh",
2019-06-16 16:23:25 +02:00
mesh = "mobs_bee.b3d",
2024-08-10 15:10:22 +02:00
textures = { {"mobs_bee.png"} },
blood_texture = "mobs_bee_inv.png",
blood_amount = 1,
2016-04-15 15:59:43 +02:00
makes_footstep_sound = false,
2024-08-10 15:10:22 +02:00
sounds = { random = "mobs_bee" },
2016-04-15 15:59:43 +02:00
walk_velocity = 1,
jump = true,
drops = {
2022-09-27 10:15:59 +02:00
{name = "mobs:honey", chance = 2, min = 1, max = 2}
2016-04-15 15:59:43 +02:00
},
water_damage = 1,
2016-04-15 15:59:43 +02:00
lava_damage = 2,
light_damage = 0,
fall_damage = 0,
fall_speed = -3,
animation = {
speed_normal = 15,
2024-08-10 15:10:22 +02:00
stand_start = 0, stand_end = 30,
walk_start = 35, walk_end = 65
2016-04-15 15:59:43 +02:00
},
2022-09-27 10:15:59 +02:00
2016-04-15 15:59:43 +02:00
on_rightclick = function(self, clicker)
mobs:capture_mob(self, clicker, 50, 90, 0, true, "mobs_animal:bee")
2016-04-15 15:59:43 +02:00
end,
2022-09-27 10:15:59 +02:00
-- after_activate = function(self, staticdata, def, dtime)
-- print ("------", self.name, dtime, self.health)
-- end,
2016-04-15 15:59:43 +02:00
})
2024-08-10 15:10:22 +02:00
-- where to spawn
if not mobs.custom_spawn_animal then
2022-09-27 10:15:59 +02:00
mobs:spawn({
name = "mobs_animal:bee",
nodes = {"group:flower"},
min_light = 14,
interval = 60,
chance = 7000,
min_height = 3,
max_height = 200,
day_toggle = true
})
end
2016-04-15 15:59:43 +02:00
2022-09-27 10:15:59 +02:00
-- spawn egg
2016-04-15 15:59:43 +02:00
2024-08-10 15:10:22 +02:00
mobs:register_egg("mobs_animal:bee", S("Bee"), "mobs_bee_inv.png")
2022-09-27 10:15:59 +02:00
-- compatibility (only required if moving from old mobs to mobs_redo)
2016-04-15 15:59:43 +02:00
2024-08-10 15:10:22 +02:00
mobs:alias_mob("mobs:bee", "mobs_animal:bee")
2022-09-27 10:15:59 +02:00
2016-04-15 15:59:43 +02:00
-- honey
2024-08-10 15:10:22 +02:00
2016-04-15 15:59:43 +02:00
minetest.register_craftitem(":mobs:honey", {
2024-07-26 18:10:17 +02:00
description = S("Honey"),
2016-04-15 15:59:43 +02:00
inventory_image = "mobs_honey_inv.png",
2017-09-06 18:32:24 +02:00
on_use = minetest.item_eat(4),
2024-07-26 18:10:17 +02:00
groups = {food_honey = 1, food_sugar = 1}
2016-04-15 15:59:43 +02:00
})
2024-07-26 18:10:17 +02:00
mobs.add_eatable("mobs:honey", 4)
2022-09-27 10:15:59 +02:00
2024-08-10 15:10:22 +02:00
-- beehive (1 in 4 chance of spawning bee when placed)
2016-04-15 15:59:43 +02:00
minetest.register_node(":mobs:beehive", {
2016-06-11 12:14:08 +02:00
description = S("Beehive"),
2016-04-15 15:59:43 +02:00
drawtype = "plantlike",
tiles = {"mobs_beehive.png"},
inventory_image = "mobs_beehive.png",
paramtype = "light",
sunlight_propagates = true,
walkable = true,
2020-05-09 21:28:11 +02:00
groups = {oddly_breakable_by_hand = 3, flammable = 1, disable_suffocation = 1},
is_ground_content = false,
2024-08-10 15:10:22 +02:00
sounds = mobs.node_sound_defaults(),
2016-04-15 15:59:43 +02:00
on_construct = function(pos)
local meta = minetest.get_meta(pos)
2023-01-06 11:13:22 +01:00
local gui_bg = default and default.gui_bg .. default.gui_bg_img .. default.gui_slots or ""
2016-04-15 15:59:43 +02:00
meta:set_string("formspec", "size[8,6]"
2023-01-06 11:13:22 +01:00
.. gui_bg
2016-04-15 15:59:43 +02:00
.. "image[3,0.8;0.8,0.8;mobs_bee_inv.png]"
.. "list[current_name;beehive;4,0.5;1,1;]"
.. "list[current_player;main;0,2.35;8,4;]"
.. "listring[]")
meta:get_inventory():set_size("beehive", 1)
end,
2016-04-15 15:59:43 +02:00
after_place_node = function(pos, placer, itemstack)
2018-03-04 15:40:24 +01:00
if placer and placer:is_player() then
2016-04-15 15:59:43 +02:00
minetest.set_node(pos, {name = "mobs:beehive", param2 = 1})
2022-09-27 10:15:59 +02:00
if math.random(4) == 1 then
minetest.add_entity(pos, "mobs_animal:bee")
2016-04-15 15:59:43 +02:00
end
end
end,
2016-04-15 15:59:43 +02:00
on_punch = function(pos, node, puncher)
-- yep, bee's don't like having their home punched by players
2023-10-03 16:20:20 +02:00
minetest.after(0.2, function()
local hp = puncher and puncher:get_hp()
2024-08-10 15:10:22 +02:00
if hp then puncher:set_hp(hp - 4) end
2023-10-03 16:20:20 +02:00
end)
2016-04-15 15:59:43 +02:00
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
2024-08-10 15:10:22 +02:00
if listname == "beehive" then return 0 end
2016-04-15 15:59:43 +02:00
return stack:get_count()
end,
2024-08-10 15:10:22 +02:00
can_dig = function(pos,player) -- can only dig when no honey inside
2016-04-15 15:59:43 +02:00
local meta = minetest.get_meta(pos)
return meta:get_inventory():is_empty("beehive")
2022-09-27 10:15:59 +02:00
end
2016-04-15 15:59:43 +02:00
})
2022-09-27 10:15:59 +02:00
-- beehive recipe
2024-08-10 15:10:22 +02:00
2016-04-15 15:59:43 +02:00
minetest.register_craft({
output = "mobs:beehive",
2024-08-10 15:10:22 +02:00
recipe = {{"mobs:bee","mobs:bee","mobs:bee"}}
2016-04-15 15:59:43 +02:00
})
2024-08-10 15:10:22 +02:00
-- honey block and craft recipes
2016-04-15 15:59:43 +02:00
minetest.register_node(":mobs:honey_block", {
2016-06-11 12:14:08 +02:00
description = S("Honey Block"),
2016-04-15 15:59:43 +02:00
tiles = {"mobs_honey_block.png"},
groups = {snappy = 3, flammable = 2},
is_ground_content = false,
2024-08-10 15:10:22 +02:00
sounds = mobs.node_sound_dirt_defaults()
2016-04-15 15:59:43 +02:00
})
minetest.register_craft({
output = "mobs:honey_block",
recipe = {
{"mobs:honey", "mobs:honey", "mobs:honey"},
{"mobs:honey", "mobs:honey", "mobs:honey"},
2022-09-27 10:15:59 +02:00
{"mobs:honey", "mobs:honey", "mobs:honey"}
2016-04-15 15:59:43 +02:00
}
})
minetest.register_craft({
output = "mobs:honey 9",
recipe = {
2022-09-27 10:15:59 +02:00
{"mobs:honey_block"}
2016-04-15 15:59:43 +02:00
}
})
-- beehive workings
2024-08-10 15:10:22 +02:00
2016-04-15 15:59:43 +02:00
minetest.register_abm({
nodenames = {"mobs:beehive"},
2018-08-16 17:15:45 +02:00
interval = 12,
2016-04-15 15:59:43 +02:00
chance = 6,
catch_up = false,
2024-08-10 15:10:22 +02:00
2016-04-15 15:59:43 +02:00
action = function(pos, node)
-- bee's only make honey during the day
local tod = (minetest.get_timeofday() or 0) * 24000
2024-08-10 15:10:22 +02:00
if tod < 5500 or tod > 18500 then return end
2016-04-15 15:59:43 +02:00
2024-08-10 15:10:22 +02:00
local meta = minetest.get_meta(pos) ; if not meta then return end
local inv = meta:get_inventory()
2016-04-15 15:59:43 +02:00
local honey = inv:get_stack("beehive", 1):get_count()
2024-08-10 15:10:22 +02:00
if honey > 11 then return end -- return if hive full
2016-04-15 15:59:43 +02:00
-- no flowers no honey, nuff said!
if #minetest.find_nodes_in_area_under_air(
2024-08-10 15:10:22 +02:00
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4}, "group:flower") > 3 then
2016-04-15 15:59:43 +02:00
inv:add_item("beehive", "mobs:honey")
end
end
})