1
0
mirror of https://codeberg.org/tenplus1/mobs_animal.git synced 2024-12-22 17:00:26 +01:00
mobs_animal/bee.lua

225 lines
4.8 KiB
Lua
Raw Normal View History

2023-08-13 11:56:57 +02:00
-- Translation support
local S = minetest.get_translator("mobs_animal")
2022-09-27 10:15:59 +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",
2016-04-15 15:59:43 +02:00
textures = {
2022-09-27 10:15:59 +02:00
{"mobs_bee.png"}
2016-04-15 15:59:43 +02:00
},
blood_texture = "mobs_bee_inv.png",
blood_amount = 1,
2016-04-15 15:59:43 +02:00
makes_footstep_sound = false,
sounds = {
2022-09-27 10:15:59 +02:00
random = "mobs_bee"
2019-06-16 16:23:25 +02:00
},
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,
stand_start = 0,
stand_end = 30,
walk_start = 35,
2022-09-27 10:15:59 +02:00
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
})
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
2019-06-16 16:23:25 +02:00
mobs:register_egg("mobs_animal:bee", S("Bee"), "mobs_bee_inv.png")
2016-04-15 15:59:43 +02:00
2022-09-27 10:15:59 +02:00
-- compatibility (only required if moving from old mobs to mobs_redo)
mobs:alias_mob("mobs:bee", "mobs_animal:bee")
2016-04-15 15:59:43 +02:00
2022-09-27 10:15:59 +02:00
2016-04-15 15:59:43 +02:00
-- honey
minetest.register_craftitem(":mobs:honey", {
2016-06-11 12:14:08 +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),
2022-09-27 10:15:59 +02:00
groups = {food_honey = 1, food_sugar = 1, flammable = 1}
2016-04-15 15:59:43 +02:00
})
2022-09-27 10:15:59 +02:00
2016-04-15 15:59:43 +02:00
-- beehive (when placed spawns bee)
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,
2023-01-06 11:13:22 +01:00
sounds = default and default.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()
if hp then
puncher:set_hp(hp - 4)
end
end)
2016-04-15 15:59:43 +02:00
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
if listname == "beehive" then
return 0
end
return stack:get_count()
end,
can_dig = function(pos,player)
local meta = minetest.get_meta(pos)
-- only dig beehive if no honey inside
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
2016-04-15 15:59:43 +02:00
minetest.register_craft({
output = "mobs:beehive",
recipe = {
2022-09-27 10:15:59 +02:00
{"mobs:bee","mobs:bee","mobs:bee"}
2016-04-15 15:59:43 +02:00
}
})
-- honey block
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,
2023-01-06 11:13:22 +01:00
sounds = default and default.node_sound_dirt_defaults()
2016-04-15 15:59:43 +02:00
})
2022-09-27 10:15:59 +02:00
-- recipe
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
}
})
2022-09-27 10:15:59 +02:00
2016-04-15 15:59:43 +02:00
-- beehive workings
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,
action = function(pos, node)
-- bee's only make honey during the day
local tod = (minetest.get_timeofday() or 0) * 24000
if tod < 5500 or tod > 18500 then
return
end
-- is hive full?
local meta = minetest.get_meta(pos)
if not meta then return end -- for older beehives
local inv = meta:get_inventory()
2016-04-15 15:59:43 +02:00
local honey = inv:get_stack("beehive", 1):get_count()
-- is hive full?
2018-08-16 17:18:27 +02:00
if honey > 11 then
2016-04-15 15:59:43 +02:00
return
end
-- no flowers no honey, nuff said!
if #minetest.find_nodes_in_area_under_air(
{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
inv:add_item("beehive", "mobs:honey")
end
end
})