summaryrefslogtreecommitdiff
path: root/bee.lua
diff options
context:
space:
mode:
Diffstat (limited to 'bee.lua')
-rw-r--r--bee.lua185
1 files changed, 185 insertions, 0 deletions
diff --git a/bee.lua b/bee.lua
new file mode 100644
index 0000000..039765e
--- /dev/null
+++ b/bee.lua
@@ -0,0 +1,185 @@
+
+-- Bee by KrupnoPavel
+
+mobs:register_mob("mobs_animal:bee", {
+ type = "animal",
+ passive = true,
+ hp_min = 1,
+ hp_max = 2,
+ armor = 200,
+ collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.2, 0.2},
+ visual = "mesh",
+ mesh = "mobs_bee.x",
+ textures = {
+ {"mobs_bee.png"},
+ },
+ 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 = 2,
+ 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, 25, 80, 0, true, nil)
+ end,
+})
+
+mobs:register_spawn("mobs_animal:bee", {"group:flower"}, 20, 10, 9000, 1, 31000, true)
+
+mobs:register_egg("mobs_animal:bee", "Bee", "mobs_bee_inv.png", 0)
+
+minetest.register_alias("mobs:bee", "mobs_animal:bee")
+
+-- honey
+minetest.register_craftitem(":mobs:honey", {
+ description = "Honey",
+ inventory_image = "mobs_honey_inv.png",
+ on_use = minetest.item_eat(6),
+})
+
+-- beehive (when placed spawns bee)
+minetest.register_node(":mobs:beehive", {
+ description = "Beehive",
+ drawtype = "plantlike",
+ visual_scale = 1.0,
+ tiles = {"mobs_beehive.png"},
+ inventory_image = "mobs_beehive.png",
+ paramtype = "light",
+ sunlight_propagates = true,
+ walkable = true,
+ groups = {oddly_breakable_by_hand = 3, flammable = 1},
+ sounds = default.node_sound_defaults(),
+
+ on_construct = function(pos)
+
+ local meta = minetest.get_meta(pos)
+
+ meta:set_string("formspec", "size[8,6]"
+ ..default.gui_bg..default.gui_bg_img..default.gui_slots
+ .. "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:is_player() then
+
+ minetest.set_node(pos, {name = "mobs:beehive", param2 = 1})
+
+ if math.random(1, 4) == 1 then
+ minetest.add_entity(pos, "mobs:bee")
+ end
+ end
+ end,
+]]
+ on_punch = function(pos, node, puncher)
+
+ -- yep, bee's don't like having their home punched by players
+ puncher:set_hp(puncher:get_hp() - 4)
+ 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,
+
+})
+
+minetest.register_craft({
+ output = "mobs:beehive",
+ recipe = {
+ {"mobs:bee","mobs:bee","mobs:bee"},
+ }
+})
+
+-- honey block
+minetest.register_node(":mobs:honey_block", {
+ description = "Honey Block",
+ tiles = {"mobs_honey_block.png"},
+ groups = {snappy = 3, flammable = 2},
+ sounds = default.node_sound_dirt_defaults(),
+})
+
+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 = 6,
+ 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 = minetest.get_meta(pos):get_inventory()
+ local honey = inv:get_stack("beehive", 1):get_count()
+
+ -- is hive full?
+ if honey > 19 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
+})