124 lines
3.6 KiB
Lua
124 lines
3.6 KiB
Lua
|
minetest.register_node('mylandscaping:mixer', {
|
||
|
description = 'Concrete Mixer',
|
||
|
drawtype = 'mesh',
|
||
|
mesh = 'mylandscaping_crusher.obj',
|
||
|
tiles = {
|
||
|
{name='mylandscaping_tex1.png'},{name='mylandscaping_supports.png'},
|
||
|
{name='mylandscaping_base.png'},{name='mylandscaping_hopper.png'},
|
||
|
{name='mylandscaping_crusher.png'}},
|
||
|
groups = {oddly_breakable_by_hand=2},
|
||
|
paramtype = 'light',
|
||
|
paramtype2 = 'facedir',
|
||
|
selection_box = {
|
||
|
type = 'fixed',
|
||
|
fixed = {
|
||
|
{-0.5, -0.5, -0.5, 1.5, 1.5, 0.5},
|
||
|
}
|
||
|
},
|
||
|
collision_box = {
|
||
|
type = 'fixed',
|
||
|
fixed = {
|
||
|
{-0.5, -0.5, -0.5, 1.5, 1.5, 0.5},
|
||
|
}
|
||
|
},
|
||
|
|
||
|
can_dig = function(pos,player)
|
||
|
local meta = minetest.get_meta(pos);
|
||
|
local inv = meta:get_inventory()
|
||
|
if player:get_player_name() == meta:get_string('owner') and
|
||
|
inv:is_empty('cobble') and
|
||
|
inv:is_empty('gravel') and
|
||
|
inv:is_empty('concrete') and
|
||
|
inv:is_empty('sand') then
|
||
|
return true
|
||
|
else
|
||
|
return false
|
||
|
end
|
||
|
end,
|
||
|
|
||
|
after_place_node = function(pos, placer, itemstack)
|
||
|
local meta = minetest.get_meta(pos)
|
||
|
local timer = minetest.get_node_timer(pos)
|
||
|
meta:set_string('owner',placer:get_player_name())
|
||
|
meta:set_string('infotext','Cement Mixer (owned by '..placer:get_player_name()..')')
|
||
|
timer:start(10)
|
||
|
end,
|
||
|
|
||
|
on_construct = function(pos)
|
||
|
local meta = minetest.get_meta(pos)
|
||
|
meta:set_string('formspec', 'size[9,10;]'..
|
||
|
'background[-0.15,-0.25;9.40,10.75;mylandscaping_background.png]'..
|
||
|
--Gravel
|
||
|
'label[0.5,1;Cobble]'..
|
||
|
'label[0.5,1.5;Crusher]'..
|
||
|
'label[2.5,2;Cobble]'..
|
||
|
'list[context;cobble;2.5,1;1,1;]'..
|
||
|
'list[context;gravel;5.5,1;1,1;]'..
|
||
|
'label[6.5,1;Gravel]'..
|
||
|
--Concrete
|
||
|
'label[5,0.5;Concrete Mixer]'..
|
||
|
'list[context;sand;5.5,2.5;1,1;]'..
|
||
|
'label[6.5,2.5;Sand]'..
|
||
|
'list[context;concrete;5.5,4.5;1,1;]'..
|
||
|
'label[6.5,4.5;Output]'..
|
||
|
--Players Inven
|
||
|
'list[current_player;main;0.5,6;8,4;]')
|
||
|
meta:set_string('infotext', 'Concrete Mixer')
|
||
|
local inv = meta:get_inventory()
|
||
|
inv:set_size('cobble', 1)
|
||
|
inv:set_size('gravel', 1)
|
||
|
inv:set_size('concrete', 1)
|
||
|
inv:set_size('sand', 1)
|
||
|
end,
|
||
|
|
||
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||
|
local input = stack:get_name()
|
||
|
if listname == 'cobble' then
|
||
|
if input == 'default:cobble' or minetest.get_item_group(input, 'ml') > 0 then
|
||
|
return 99
|
||
|
else
|
||
|
return 0
|
||
|
end
|
||
|
elseif listname == 'gravel' then
|
||
|
if input ~= 'default:gravel' then
|
||
|
return 0
|
||
|
else
|
||
|
return 99
|
||
|
end
|
||
|
elseif listname == 'sand' then
|
||
|
if minetest.get_item_group(input, 'sand') > 0 then
|
||
|
return 99
|
||
|
else
|
||
|
return 0
|
||
|
end
|
||
|
elseif listname == 'concrete' then
|
||
|
return 0
|
||
|
end
|
||
|
end,
|
||
|
|
||
|
on_timer = function(pos)
|
||
|
local timer = minetest.get_node_timer(pos)
|
||
|
local meta = minetest.get_meta(pos)
|
||
|
local inv = meta:get_inventory()
|
||
|
local cobble = inv:get_stack('cobble', 1)
|
||
|
local gravel = inv:get_stack('gravel', 1)
|
||
|
local sand = inv:get_stack('sand', 1)
|
||
|
local cobble_inv= cobble:get_name()
|
||
|
local sand_inv = sand:get_name()
|
||
|
----------------------------------------------------------------------
|
||
|
if cobble:get_name() == 'default:cobble' or minetest.get_item_group(cobble_inv, 'ml') > 0 then
|
||
|
inv:add_item('gravel','default:gravel')
|
||
|
cobble:take_item()
|
||
|
inv:set_stack('cobble',1,cobble)
|
||
|
end
|
||
|
if gravel:get_name() == 'default:gravel' and minetest.get_item_group(sand_inv, 'sand') > 0 then
|
||
|
inv:add_item('concrete','mylandscaping:concrete_bag')
|
||
|
gravel:take_item()
|
||
|
inv:set_stack('gravel',1,gravel)
|
||
|
sand:take_item()
|
||
|
inv:set_stack('sand',1,sand)
|
||
|
end
|
||
|
timer:start(10)
|
||
|
end,
|
||
|
})
|