minetest-mm/mods/mylandscaping/machine.lua
2020-11-15 20:25:38 +01:00

585 lines
20 KiB
Lua

local material = {}
local block = {}
local make_ok = false
local anzahl = 0
local material2 = {}
local stone = {}
local deco = {}
local color_tab = {
{'black', 'Black', 'dye:black'},
{'blue', 'Blue', 'dye:blue'},
{'brown', 'Brown', 'dye:brown'},
{'cyan', 'Cyan', 'dye:cyan'},
{'dark_green', 'Dark Green', 'dye:dark_green'},
{'dark_grey', 'Dark Grey', 'dye:dark_grey'},
{'green', 'Green', 'dye:green'},
{'grey', 'Grey', 'dye:grey'},
{'magenta', 'Magenta', 'dye:magenta'},
{'orange', 'Orange', 'dye:orange'},
{'pink', 'Pink', 'dye:pink'},
{'red', 'Red', 'dye:red'},
{'violet', 'Violet', 'dye:violet'},
{'white', 'White', 'dye:white'},
{'yellow', 'Yellow', 'dye:yellow'},
{'cement', '', ''},
}
minetest.register_node('mylandscaping:machine', {
description = 'Concrete Forms',
drawtype = 'mesh',
mesh = 'mylandscaping_cement_mixer.obj',
tiles = {
{name='mylandscaping_tex3.png'},{name='mylandscaping_tex1.png'},
{name='default_gravel.png'},{name='mylandscaping_tex2.png'}},
groups = {oddly_breakable_by_hand=2},
paramtype = 'light',
paramtype2 = 'facedir',
selection_box = {
type = 'fixed',
fixed = {
{-0.5, -0.5, -0.5, 1.1, 0.5, 0.5},
{1.1, -0.5, -0.1, 1.5, -0.3, 0.5}
}
},
collision_box = {
type = 'fixed',
fixed = {
{-0.5, -0.5, -0.5, 1.1, 0.5, 0.5},
{1.1, -0.5, -0.1, 1.5, -0.3, 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('input') and
inv:is_empty('dye') and
inv:is_empty('output') then
return true
else
return false
end
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
local input = stack:get_name()
if listname == 'input' then
if input == 'mylandscaping:concrete' or input == 'mylandscaping:concrete_bag' then
return 99
else
return 0
end
elseif listname == 'dye' then
if minetest.get_item_group(input, 'dye') > 0 then
return 99
else
return 0
end
elseif listname == 'output' then
return 0
end
end,
after_place_node = function(pos, placer, itemstack)
local meta = minetest.get_meta(pos)
meta:set_string('owner',placer:get_player_name())
meta:set_string('infotext','Concrete Mixer (owned by '..placer:get_player_name()..')')
end,
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string('formspec', retaining_walls)
meta:set_string('infotext', 'Concrete Mixer')
local inv = meta:get_inventory()
inv:set_size('input', 1)
inv:set_size('output', 1)
inv:set_size('dye', 1)
end,
on_receive_fields = function(pos, formname, fields, sender)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if fields['retain'] then
meta:set_string('formspec', retaining_walls)
elseif fields['patio'] then
meta:set_string('formspec', patio_pavers)
elseif fields['deco'] then
meta:set_string('formspec', deco_walls)
elseif fields['column'] then
meta:set_string('formspec', columns)
end
for i in ipairs (color_tab) do
local col = color_tab[i][1]
local coldesc = color_tab[i][2]
local dyecol = color_tab[i][3]
if fields['awall1']
or fields['awall2']
or fields['awall3']
or fields['awall4']
or fields['awall5']
then
if fields['awall1'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:awall_left_'
if inv:is_empty('input') then
return
end
end
if fields['awall2'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:awall_middle_'
if inv:is_empty('input') then
return
end
end
if fields['awall3'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:awall_right_'
if inv:is_empty('input') then
return
end
end
if fields['awall4'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:awall_icorner_'
if inv:is_empty('input') then
return
end
end
if fields['awall5'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:awall_ocorner_'
if inv:is_empty('input') then
return
end
end
local instack = inv:get_stack('input', 1)
local outstack = inv:get_stack('output', 1)
local dyestack = inv:get_stack('dye', 1)
---------------------------------------------------------------------
if instack:get_name()== 'mylandscaping:concrete_bag' and dyestack:get_name()== dyecol
or instack:get_name()== 'mylandscaping:concrete' and dyestack:get_name()== dyecol then
material = col
make_ok = true
end
---------------------------------------------------------------------
if make_ok == true then
local give = {}
if inv:room_for_item('output', block..col) then
inv:add_item('output', block..col..' '..anzahl)
instack:take_item()
inv:set_stack('input',1,instack)
if dyestack:get_name() == 'dye:'..col then
dyestack:take_item()
inv:set_stack('dye',1,dyestack)
end
end
end
end
---------------------------------------------------------------------
if fields['fwall1']
or fields['fwall2']
or fields['fwall3']
or fields['fwall4']
then
if fields['fwall1'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:fwall_left_'
if inv:is_empty('input') then
return
end
end
if fields['fwall2'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:fwall_middle_'
if inv:is_empty('input') then
return
end
end
if fields['fwall3'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:fwall_right_'
if inv:is_empty('input') then
return
end
end
if fields['fwall4'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:fwall_corner_'
if inv:is_empty('input') then
return
end
end
local instack = inv:get_stack('input', 1)
local outstack = inv:get_stack('output', 1)
local dyestack = inv:get_stack('dye', 1)
---------------------------------------------------------------------
if instack:get_name()== 'mylandscaping:concrete_bag' and dyestack:get_name()== dyecol
or instack:get_name()== 'mylandscaping:concrete' and dyestack:get_name()== dyecol then
material = col
make_ok = true
end
---------------------------------------------------------------------
if make_ok == true then
local give = {}
if inv:room_for_item('output', block..col) then
inv:add_item('output', block..col..' '..anzahl)
instack:take_item()
inv:set_stack('input',1,instack)
if dyestack:get_name() == 'dye:'..col then
dyestack:take_item()
inv:set_stack('dye',1,dyestack)
end
end
end
end
---------------------------------------------------------------------
if fields['mwall1']
or fields['mwall2']
or fields['mwall3']
then
if fields['mwall1'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:mwall_middle_'
if inv:is_empty('input') then
return
end
end
if fields['mwall2'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:mwall_icorner_'
if inv:is_empty('input') then
return
end
end
if fields['mwall3'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:mwall_ocorner_'
if inv:is_empty('input') then
return
end
end
local instack = inv:get_stack('input', 1)
local outstack = inv:get_stack('output', 1)
local dyestack = inv:get_stack('dye', 1)
---------------------------------------------------------------------
if instack:get_name()== 'mylandscaping:concrete_bag' and dyestack:get_name()== dyecol
or instack:get_name()== 'mylandscaping:concrete' and dyestack:get_name()== dyecol then
material = col
make_ok = true
end
---------------------------------------------------------------------
if make_ok == true then
local give = {}
if inv:room_for_item('output', block..col) then
inv:add_item('output', block..col..' '..anzahl)
instack:take_item()
inv:set_stack('input',1,instack)
if dyestack:get_name() == 'dye:'..col then
dyestack:take_item()
inv:set_stack('dye',1,dyestack)
end
end
end
end
---------------------------------------------------------------------
--all columns here, possible decorative caps too.
if fields['acolumn1']
or fields['acolumn2']
or fields['acolumn3']
or fields['fcolumn1']
or fields['fcolumn2']
or fields['fcolumn3']
or fields['mcolumn1']
or fields['mcolumn2']
or fields['mcolumn3']
or fields['column_sphere']
or fields['column_dragon']
or fields['column_suzanne']
or fields['column_cross']
then
if fields['acolumn1'] then
make_ok = false
anzahl = 1
block = 'mylandscaping:awall_column_m_t_'
if inv:is_empty('input') then
return
end
end
if fields['acolumn2'] then
make_ok = false
anzahl = 1
block = 'mylandscaping:awall_column_ic_t_'
if inv:is_empty('input') then
return
end
end
if fields['acolumn3'] then
make_ok = false
anzahl = 1
block = 'mylandscaping:awall_column_oc_t_'
if inv:is_empty('input') then
return
end
end
if fields['fcolumn1'] then
make_ok = false
anzahl = 1
block = 'mylandscaping:fwall_column_m_t_'
if inv:is_empty('input') then
return
end
end
if fields['fcolumn2'] then
make_ok = false
anzahl = 1
block = 'mylandscaping:fwall_column_ic_t_'
if inv:is_empty('input') then
return
end
end
if fields['fcolumn3'] then
make_ok = false
anzahl = 1
block = 'mylandscaping:fwall_column_oc_t_'
if inv:is_empty('input') then
return
end
end
if fields['column_sphere'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:column_t_sphere_'
if inv:is_empty('input') then
return
end
end
if fields['column_dragon'] then
make_ok = false
anzahl = 1
block = 'mylandscaping:column_t_dragon_'
if inv:is_empty('input') then
return
end
end
if fields['column_suzanne'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:column_t_suzanne_'
if inv:is_empty('input') then
return
end
end
if fields['column_cross'] then
make_ok = false
anzahl = 2
block = 'mylandscaping:column_t_cross_'
if inv:is_empty('input') then
return
end
end
local instack = inv:get_stack('input', 1)
local outstack = inv:get_stack('output', 1)
local dyestack = inv:get_stack('dye', 1)
---------------------------------------------------------------------
if instack:get_name()== 'mylandscaping:concrete_bag' and dyestack:get_name()== dyecol
or instack:get_name()== 'mylandscaping:concrete' and dyestack:get_name()== dyecol then
material = col
make_ok = true
end
if make_ok == true then
local give = {}
if inv:room_for_item('output', block..col) then
inv:add_item('output', block..col..' '..anzahl)
instack:take_item()
inv:set_stack('input',1,instack)
if dyestack:get_name() == 'dye:'..col then
dyestack:take_item()
inv:set_stack('dye',1,dyestack)
end
end
end
end
if fields['patio1']
or fields['patio2']
or fields['patio3']
or fields['patio4']
or fields['patio5']
or fields['patio6']
or fields['patio7']
then
if fields['patio1'] then
make_ok = false
anzahl = 3
stone = 'mylandscaping:stone_square'
if inv:is_empty('input') then
return
end
end
if fields['patio2'] then
make_ok = false
anzahl = 3
stone = 'mylandscaping:stone_square_sm'
if inv:is_empty('input') then
return
end
end
if fields['patio7'] then
make_ok = false
anzahl = 3
stone = 'mylandscaping:stone_square_xsm'
if inv:is_empty('input') then
return
end
end
if fields['patio3'] then
make_ok = false
anzahl = 3
stone = 'mylandscaping:stone_pavers'
if inv:is_empty('input') then
return
end
end
if fields['patio4'] then
make_ok = false
anzahl = 3
stone = 'mylandscaping:stone_ashlar'
if inv:is_empty('input') then
return
end
end
if fields['patio5'] then
make_ok = false
anzahl = 3
stone = 'mylandscaping:stone_flagstone'
if inv:is_empty('input') then
return
end
end
if fields['patio6'] then
make_ok = false
anzahl = 3
stone = 'mylandscaping:stone_pinwheel'
if inv:is_empty('input') then
return
end
end
local instack = inv:get_stack('input', 1)
local outstack = inv:get_stack('output', 1)
local dyestack = inv:get_stack('dye', 1)
if instack:get_name()== 'mylandscaping:concrete_bag' and dyestack:get_name()== dyecol
or instack:get_name()== 'mylandscaping:concrete' and dyestack:get_name()== dyecol then
make_ok = true
end
---------------------------------------------------------------------
if make_ok == true then
local give = {}
if inv:room_for_item('output', stone..col) then
inv:add_item('output', stone..col..' '..anzahl)
instack:take_item()
inv:set_stack('input',1,instack)
if dyestack:get_name() == 'dye:'..col then
dyestack:take_item()
inv:set_stack('dye',1,dyestack)
end
end
end
end
---------------------------------------------------------------------
if fields['deco1']
or fields['deco2']
or fields['deco3']
or fields['deco4']
or fields['deco5']
then
if fields['deco1'] then
make_ok = false
anzahl = 4
deco = 'mylandscaping:deco_wall_s_'
if inv:is_empty('input') then
return
end
end
if fields['deco2'] then
make_ok = false
anzahl = 4
deco = 'mylandscaping:deco_wall_f_'
if inv:is_empty('input') then
return
end
end
if fields['deco3'] then
make_ok = false
anzahl = 4
deco = 'mylandscaping:deco_wall_p_'
if inv:is_empty('input') then
return
end
end
if fields['deco4'] then
make_ok = false
anzahl = 4
deco = 'mylandscaping:deco_wall_r_'
if inv:is_empty('input') then
return
end
end
if fields['deco5'] then
make_ok = false
anzahl = 4
deco = 'mylandscaping:deco_column_'
if inv:is_empty('input') then
return
end
end
local instack = inv:get_stack('input', 1)
local outstack = inv:get_stack('output', 1)
local dyestack = inv:get_stack('dye', 1)
if instack:get_name()== 'mylandscaping:concrete_bag' and dyestack:get_name()== dyecol
or instack:get_name()== 'mylandscaping:concrete' and dyestack:get_name()== dyecol then
make_ok = true
end
---------------------------------------------------------------------
if make_ok == true then
local give = {}
if inv:room_for_item('output', deco..col) then
inv:add_item('output', deco..col..' '..anzahl)
instack:take_item()
inv:set_stack('input',1,instack)
if dyestack:get_name() == 'dye:'..col then
dyestack:take_item()
inv:set_stack('dye',1,dyestack)
end
end
end
end
end
end
})