123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- local S = minetest.get_translator("pipeworks")
- local fs_helpers = pipeworks.fs_helpers
- if pipeworks.enable_mese_tube then
- local function update_formspec(pos)
- local meta = minetest.get_meta(pos)
- local old_formspec = meta:get_string("formspec")
- if string.find(old_formspec, "button1") then -- Old version
- local inv = meta:get_inventory()
- for i = 1, 6 do
- for _, stack in ipairs(inv:get_list("line"..i)) do
- minetest.add_item(pos, stack)
- end
- end
- end
- local buttons_formspec = ""
- for i = 0, 5 do
- buttons_formspec = buttons_formspec .. fs_helpers.cycling_button(meta,
- "image_button[7,"..(i+0.2)..";1,0.6", "l"..(i+1).."s",
- {
- pipeworks.button_off,
- pipeworks.button_on
- }
- )
- end
- meta:set_string("formspec",
- "size[8,11]"..
- "list[context;line1;1,0;6,1;]"..
- "list[context;line2;1,1;6,1;]"..
- "list[context;line3;1,2;6,1;]"..
- "list[context;line4;1,3;6,1;]"..
- "list[context;line5;1,4;6,1;]"..
- "list[context;line6;1,5;6,1;]"..
- "image[0,0;1,1;pipeworks_white.png]"..
- "image[0,1;1,1;pipeworks_black.png]"..
- "image[0,2;1,1;pipeworks_green.png]"..
- "image[0,3;1,1;pipeworks_yellow.png]"..
- "image[0,4;1,1;pipeworks_blue.png]"..
- "image[0,5;1,1;pipeworks_red.png]"..
- buttons_formspec..
- "list[current_player;main;0,7;8,4;]" ..
- "listring[current_player;main]" ..
- "listring[current_player;main]" ..
- "listring[context;line1]" ..
- "listring[current_player;main]" ..
- "listring[context;line2]" ..
- "listring[current_player;main]" ..
- "listring[context;line3]" ..
- "listring[current_player;main]" ..
- "listring[context;line4]" ..
- "listring[current_player;main]" ..
- "listring[context;line5]" ..
- "listring[current_player;main]" ..
- "listring[context;line6]"
- )
- end
- pipeworks.register_tube("pipeworks:mese_tube", {
- description = S("Sorting Pneumatic Tube Segment"),
- inventory_image = "pipeworks_mese_tube_inv.png",
- noctr = {"pipeworks_mese_tube_noctr_1.png", "pipeworks_mese_tube_noctr_2.png", "pipeworks_mese_tube_noctr_3.png",
- "pipeworks_mese_tube_noctr_4.png", "pipeworks_mese_tube_noctr_5.png", "pipeworks_mese_tube_noctr_6.png"},
- plain = {"pipeworks_mese_tube_plain_1.png", "pipeworks_mese_tube_plain_2.png", "pipeworks_mese_tube_plain_3.png",
- "pipeworks_mese_tube_plain_4.png", "pipeworks_mese_tube_plain_5.png", "pipeworks_mese_tube_plain_6.png"},
- ends = { "pipeworks_mese_tube_end.png" },
- short = "pipeworks_mese_tube_short.png",
- no_facedir = true, -- Must use old tubes, since the textures are rotated with 6d ones
- node_def = {
- tube = {can_go = function(pos, node, velocity, stack)
- local tbl, tbln = {}, 0
- local found, foundn = {}, 0
- local meta = minetest.get_meta(pos)
- local inv = meta:get_inventory()
- local name = stack:get_name()
- for i, vect in ipairs(pipeworks.meseadjlist) do
- local npos = vector.add(pos, vect)
- local node = minetest.get_node(npos)
- local reg_node = minetest.registered_nodes[node.name]
- if meta:get_int("l"..i.."s") == 1 and reg_node then
- local tube_def = reg_node.tube
- if not tube_def or not tube_def.can_insert or
- tube_def.can_insert(npos, node, stack, vect) then
- local invname = "line"..i
- local is_empty = true
- for _, st in ipairs(inv:get_list(invname)) do
- if not st:is_empty() then
- is_empty = false
- if st:get_name() == name then
- foundn = foundn + 1
- found[foundn] = vect
- end
- end
- end
- if is_empty then
- tbln = tbln + 1
- tbl[tbln] = vect
- end
- end
- end
- end
- return (foundn > 0) and found or tbl
- end},
- on_construct = function(pos)
- local meta = minetest.get_meta(pos)
- local inv = meta:get_inventory()
- for i = 1, 6 do
- meta:set_int("l"..tostring(i).."s", 1)
- inv:set_size("line"..tostring(i), 6*1)
- end
- update_formspec(pos)
- meta:set_string("infotext", S("Sorting pneumatic tube"))
- end,
- on_punch = update_formspec,
- on_receive_fields = function(pos, formname, fields, sender)
- if not pipeworks.may_configure(pos, sender) then return end
- fs_helpers.on_receive_fields(pos, fields)
- update_formspec(pos)
- end,
- can_dig = function(pos, player)
- update_formspec(pos) -- so non-virtual items would be dropped for old tubes
- return true
- end,
- allow_metadata_inventory_put = function(pos, listname, index, stack, player)
- if not pipeworks.may_configure(pos, player) then return 0 end
- update_formspec(pos) -- For old tubes
- local inv = minetest.get_meta(pos):get_inventory()
- local stack_copy = ItemStack(stack)
- stack_copy:set_count(1)
- inv:set_stack(listname, index, stack_copy)
- return 0
- end,
- allow_metadata_inventory_take = function(pos, listname, index, stack, player)
- if not pipeworks.may_configure(pos, player) then return 0 end
- update_formspec(pos) -- For old tubes
- local inv = minetest.get_meta(pos):get_inventory()
- inv:set_stack(listname, index, ItemStack(""))
- return 0
- end,
- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
- if not pipeworks.may_configure(pos, player) then return 0 end
- update_formspec(pos) -- For old tubes
- local inv = minetest.get_meta(pos):get_inventory()
- if from_list:match("line%d") and to_list:match("line%d") then
- return count
- else
- inv:set_stack(from_list, from_index, ItemStack(""))
- return 0
- end
- end,
- },
- })
- minetest.register_craft( {
- output = "pipeworks:mese_tube_000000 2",
- recipe = {
- { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
- { "", "default:mese_crystal", "" },
- { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
- },
- })
- minetest.register_craft( {
- type = "shapeless",
- output = "pipeworks:mese_tube_000000",
- recipe = {
- "pipeworks:tube_1",
- "default:mese_crystal_fragment",
- "default:mese_crystal_fragment",
- "default:mese_crystal_fragment",
- "default:mese_crystal_fragment"
- },
- })
- end
|