2015-08-06 22:19:42 +03:00
local hive = { }
function hive . construct ( pos )
2015-07-05 02:38:12 +03:00
local meta = minetest.get_meta ( pos )
2015-08-24 23:50:29 +03:00
local inv = meta : get_inventory ( )
2015-08-16 22:57:17 +03:00
local xbg = default.gui_bg .. default.gui_bg_img .. default.gui_slots
2015-08-24 23:50:29 +03:00
local formspec = " size[8,5;] " .. xbg ..
2015-09-27 15:35:20 +03:00
" label[1.35,0;Bees are making honey \n with pollen around...]image[6,0;1,1;hive_bee.png]image[5,0;1,1;hive_layout.png]list[current_name;honey;5,0;1,1;]list[current_player;main;0,1.35;8,4;] "
2015-08-22 23:06:36 +03:00
meta : set_string ( " formspec " , formspec )
2015-07-05 02:38:12 +03:00
meta : set_string ( " infotext " , " Artificial Hive " )
inv : set_size ( " honey " , 1 )
end
2015-08-12 21:49:07 +03:00
function hive . dig ( pos , _ )
2015-08-24 23:50:29 +03:00
local inv = minetest.get_meta ( pos ) : get_inventory ( )
2015-08-06 22:19:42 +03:00
if not inv : is_empty ( " honey " ) then return false end
2015-07-05 02:38:12 +03:00
return true
end
xdecor.register ( " hive " , {
description = " Artificial Hive " ,
tiles = {
2015-08-07 23:51:00 +03:00
" xdecor_hive_top.png " , " xdecor_hive_top.png " ,
" xdecor_hive_side.png " , " xdecor_hive_side.png " ,
" xdecor_hive_side.png " , " xdecor_hive_front.png "
2015-07-05 02:38:12 +03:00
} ,
2015-08-03 00:47:02 +03:00
groups = { snappy = 3 , flammable = 1 } ,
2015-08-06 22:19:42 +03:00
on_construct = hive.construct ,
can_dig = hive.dig ,
2015-08-12 21:49:07 +03:00
on_punch = function ( _ , _ , puncher , _ )
2015-07-05 02:38:12 +03:00
local health = puncher : get_hp ( )
2015-08-12 21:49:07 +03:00
puncher : set_hp ( health - 4 )
2015-07-05 13:08:33 +03:00
end ,
2015-09-28 16:11:32 +03:00
on_rightclick = function ( _ , _ , clicker )
local health = clicker : get_hp ( )
clicker : set_hp ( health - 1 )
end ,
2015-08-12 21:49:07 +03:00
allow_metadata_inventory_put = function ( _ , listname , _ , stack , _ )
2015-07-05 13:08:33 +03:00
if listname == " honey " then return 0 end
2015-07-05 17:40:33 +03:00
return stack : get_count ( )
2015-08-12 23:54:26 +03:00
end
2015-07-05 02:38:12 +03:00
} )
minetest.register_abm ( {
nodenames = { " xdecor:hive " } ,
2015-08-21 16:47:51 +03:00
interval = 10 , chance = 5 ,
2015-08-12 21:49:07 +03:00
action = function ( pos , _ , _ , _ )
2015-08-24 23:50:29 +03:00
local inv = minetest.get_meta ( pos ) : get_inventory ( )
2015-08-21 23:17:18 +03:00
local honeystack = inv : get_stack ( " honey " , 1 )
local honey = honeystack : get_count ( )
2015-07-05 02:38:12 +03:00
2015-08-07 16:10:42 +03:00
local radius = 8
2015-08-12 23:14:13 +03:00
local minp = vector.add ( pos , - radius )
local maxp = vector.add ( pos , radius )
2015-07-05 02:38:12 +03:00
local flowers = minetest.find_nodes_in_area ( minp , maxp , " group:flower " )
2015-08-21 23:17:18 +03:00
if # flowers >= 4 and honey < 16 then
inv : add_item ( " honey " , " xdecor:honey " ) end
2015-07-05 02:38:12 +03:00
end
} )