mckaygerhard
011bcf1f64
* provides aliasing cos spawn and eggs and entities
was not working due the naming conventions, this
backported commit b719fa7af13a713b022ff4b848be4650b48b7e7c
from b719fa7af1
229 lines
4.9 KiB
Lua
229 lines
4.9 KiB
Lua
|
|
local S = mobs.intllib_animal
|
|
|
|
|
|
-- Bee by KrupnoPavel (.b3d model by sirrobzeroone)
|
|
|
|
mobs:register_mob("mobs_jam:bee", {
|
|
type = "animal",
|
|
passive = true,
|
|
hp_min = 1,
|
|
hp_max = 2,
|
|
armor = 200,
|
|
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.5, 0.2},
|
|
visual = "mesh",
|
|
mesh = "mobs_bee.b3d",
|
|
textures = {
|
|
{"mobs_bee.png"}
|
|
},
|
|
blood_texture = "mobs_bee_inv.png",
|
|
blood_amount = 1,
|
|
makes_footstep_sound = false,
|
|
sounds = {
|
|
random = "mobs_bee"
|
|
},
|
|
walk_velocity = 1,
|
|
jump = true,
|
|
drops = {
|
|
{name = "mobs:honey", chance = 2, min = 1, max = 2}
|
|
},
|
|
water_damage = 1,
|
|
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,
|
|
walk_end = 65
|
|
},
|
|
|
|
on_rightclick = function(self, clicker)
|
|
mobs:capture_mob(self, clicker, 50, 90, 0, true, "mobs_jam:bee")
|
|
end,
|
|
|
|
-- after_activate = function(self, staticdata, def, dtime)
|
|
-- print ("------", self.name, dtime, self.health)
|
|
-- end,
|
|
})
|
|
|
|
if not mobs.custom_spawn_animal then
|
|
|
|
mobs:spawn({
|
|
name = "mobs_jam:bee",
|
|
nodes = {"group:flower"},
|
|
min_light = 14,
|
|
interval = 60,
|
|
chance = 6000,
|
|
min_height = 11,
|
|
max_height = 300,
|
|
day_toggle = true
|
|
})
|
|
end
|
|
|
|
|
|
-- spawn egg
|
|
mobs:register_egg("mobs_jam:bee", S("Bee"), "mobs_bee_inv.png")
|
|
|
|
|
|
-- compatibility (only required if moving from old mobs to mobs_redo)
|
|
mobs:alias_mob("mobs:bee", "mobs_jam:bee")
|
|
-- compatibility if removed and changed to mobs_animal
|
|
mobs:alias_mob("mobs_animal:bee", "mobs_jam:bee")
|
|
|
|
|
|
-- honey
|
|
minetest.register_craftitem(":mobs:honey", {
|
|
description = S("Honey"),
|
|
inventory_image = "mobs_honey_inv.png",
|
|
on_use = minetest.item_eat(4),
|
|
groups = {food_honey = 1, food_sugar = 1, flammable = 1}
|
|
})
|
|
|
|
|
|
-- beehive (when placed spawns bee)
|
|
minetest.register_node(":mobs:beehive", {
|
|
description = S("Beehive"),
|
|
drawtype = "plantlike",
|
|
tiles = {"mobs_beehive.png"},
|
|
inventory_image = "mobs_beehive.png",
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
walkable = true,
|
|
groups = {oddly_breakable_by_hand = 3, flammable = 1, disable_suffocation = 1},
|
|
is_ground_content = false,
|
|
sounds = default and default.node_sound_defaults(),
|
|
|
|
on_construct = function(pos)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
local gui_bg = default and default.gui_bg .. default.gui_bg_img .. default.gui_slots or ""
|
|
|
|
meta:set_string("formspec", "size[8,6]"
|
|
.. gui_bg
|
|
.. "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,
|
|
|
|
after_place_node = function(pos, placer, itemstack)
|
|
|
|
if placer and placer:is_player() then
|
|
|
|
minetest.set_node(pos, {name = "mobs:beehive", param2 = 1})
|
|
|
|
if math.random(4) == 1 then
|
|
minetest.add_entity(pos, "mobs_jam:bee")
|
|
end
|
|
end
|
|
end,
|
|
|
|
on_punch = function(pos, node, puncher)
|
|
|
|
-- yep, bee's don't like having their home punched by players
|
|
minetest.after(0.2, function()
|
|
|
|
if puncher then
|
|
|
|
local hp = puncher:get_hp()
|
|
|
|
if hp then puncher:set_hp(hp - 4) end
|
|
end
|
|
end)
|
|
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")
|
|
end
|
|
})
|
|
|
|
-- beehive recipe
|
|
minetest.register_craft({
|
|
output = "mobs:beehive",
|
|
recipe = {
|
|
{"mobs:bee","mobs:bee","mobs:bee"}
|
|
}
|
|
})
|
|
|
|
-- honey block
|
|
minetest.register_node(":mobs:honey_block", {
|
|
description = S("Honey Block"),
|
|
tiles = {"mobs_honey_block.png"},
|
|
groups = {snappy = 3, flammable = 2},
|
|
is_ground_content = false,
|
|
sounds = default and default.node_sound_dirt_defaults()
|
|
})
|
|
|
|
-- recipe
|
|
minetest.register_craft({
|
|
output = "mobs:honey_block",
|
|
recipe = {
|
|
{"mobs:honey", "mobs:honey", "mobs:honey"},
|
|
{"mobs:honey", "mobs:honey", "mobs:honey"},
|
|
{"mobs:honey", "mobs:honey", "mobs:honey"}
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "mobs:honey 9",
|
|
recipe = {
|
|
{"mobs:honey_block"}
|
|
}
|
|
})
|
|
|
|
|
|
-- beehive workings
|
|
minetest.register_abm({
|
|
nodenames = {"mobs:beehive"},
|
|
interval = 12,
|
|
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()
|
|
local honey = inv:get_stack("beehive", 1):get_count()
|
|
|
|
-- is hive full?
|
|
if honey > 11 then
|
|
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
|
|
})
|