diff options
-rw-r--r-- | crafts.lua | 132 | ||||
-rw-r--r-- | init.lua | 4 | ||||
-rw-r--r-- | routing_tubes.lua | 82 | ||||
-rw-r--r-- | signal_tubes.lua | 109 | ||||
-rw-r--r-- | sorting_tubes.lua | 134 | ||||
-rw-r--r-- | tubes.lua | 387 | ||||
-rw-r--r-- | vacuum_tubes.lua | 145 |
7 files changed, 491 insertions, 502 deletions
@@ -148,136 +148,4 @@ if minetest.get_modpath("homedecor") == nil then }) end -minetest.register_craft( { - output = "pipeworks:one_way_tube 2", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "group:stick", "default:mese_crystal", "homedecor:plastic_sheeting" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, -}) - - -minetest.register_craft( { - output = "pipeworks:tube_1 6", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "", "", "" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:mese_tube_1 2", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "", "default:mese_crystal", "" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, -}) - -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" - }, -}) - -minetest.register_craft( { - output = "pipeworks:conductor_tube_off_1 6", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "mesecons:mesecon", "mesecons:mesecon", "mesecons:mesecon" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:detector_tube_off_1 2", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "mesecons:mesecon", "mesecons_materials:silicon", "mesecons:mesecon" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:accelerator_tube_1 2", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "default:mese_crystal_fragment", "default:steel_ingot", "default:mese_crystal_fragment" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:sand_tube_1 2", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "default:sand", "default:sand", "default:sand" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:sand_tube_1 2", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "default:desert_sand", "default:desert_sand", "default:desert_sand" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:sand_tube_1", - recipe = { - { "default:desert_sand", "pipeworks:tube_1", "default:desert_sand" }, - }, -}) - -minetest.register_craft( { - output = "pipeworks:mese_sand_tube_1 2", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "default:sand", "default:mese_crystal", "default:sand" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:mese_sand_tube_1 2", - recipe = { - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "default:desert_sand", "default:mese_crystal", "default:desert_sand" }, - { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } - }, -}) - -minetest.register_craft( { - output = "pipeworks:crossing_tube_1 5", - recipe = { - { "", "pipeworks:tube_1", "" }, - { "pipeworks:tube_1", "pipeworks:tube_1", "pipeworks:tube_1" }, - { "", "pipeworks:tube_1", "" } - }, -}) - - -minetest.register_craft( { - type = "shapeless", - output = "pipeworks:mese_sand_tube_1", - recipe = { - "pipeworks:sand_tube_1", - "default:mese_crystal_fragment", - "default:mese_crystal_fragment", - "default:mese_crystal_fragment", - "default:mese_crystal_fragment" - }, -}) - @@ -116,6 +116,10 @@ dofile(pipeworks.modpath.."/item_transport.lua") dofile(pipeworks.modpath.."/flowing_logic.lua") dofile(pipeworks.modpath.."/crafts.lua") dofile(pipeworks.modpath.."/tubes.lua") +dofile(pipeworks.modpath.."/routing_tubes.lua") +dofile(pipeworks.modpath.."/sorting_tubes.lua") +dofile(pipeworks.modpath.."/vacuum_tubes.lua") +dofile(pipeworks.modpath.."/signal_tubes.lua") dofile(pipeworks.modpath.."/filter-injector.lua") dofile(pipeworks.modpath.."/trashcan.lua") dofile(pipeworks.modpath.."/wielder.lua") diff --git a/routing_tubes.lua b/routing_tubes.lua new file mode 100644 index 0000000..acd93af --- /dev/null +++ b/routing_tubes.lua @@ -0,0 +1,82 @@ +if pipeworks.enable_accelerator_tube then + local accelerator_noctr_textures = {"pipeworks_accelerator_tube_noctr.png", "pipeworks_accelerator_tube_noctr.png", "pipeworks_accelerator_tube_noctr.png", + "pipeworks_accelerator_tube_noctr.png", "pipeworks_accelerator_tube_noctr.png", "pipeworks_accelerator_tube_noctr.png"} + local accelerator_plain_textures = {"pipeworks_accelerator_tube_plain.png" ,"pipeworks_accelerator_tube_plain.png", "pipeworks_accelerator_tube_plain.png", + "pipeworks_accelerator_tube_plain.png", "pipeworks_accelerator_tube_plain.png", "pipeworks_accelerator_tube_plain.png"} + local accelerator_end_textures = {"pipeworks_accelerator_tube_end.png", "pipeworks_accelerator_tube_end.png", "pipeworks_accelerator_tube_end.png", + "pipeworks_accelerator_tube_end.png", "pipeworks_accelerator_tube_end.png", "pipeworks_accelerator_tube_end.png"} + local accelerator_short_texture = "pipeworks_accelerator_tube_short.png" + local accelerator_inv_texture = "pipeworks_accelerator_tube_inv.png" + + pipeworks.register_tube("pipeworks:accelerator_tube", "Accelerating Pneumatic Tube Segment", accelerator_plain_textures, + accelerator_noctr_textures, accelerator_end_textures, accelerator_short_texture, accelerator_inv_texture, + {tube = {can_go = function(pos, node, velocity, stack) + velocity.speed = velocity.speed+1 + return pipeworks.notvel(pipeworks.meseadjlist, velocity) + end} + }) +end + +if pipeworks.enable_crossing_tube then + local crossing_noctr_textures = {"pipeworks_crossing_tube_noctr.png", "pipeworks_crossing_tube_noctr.png", "pipeworks_crossing_tube_noctr.png", + "pipeworks_crossing_tube_noctr.png", "pipeworks_crossing_tube_noctr.png", "pipeworks_crossing_tube_noctr.png"} + local crossing_plain_textures = {"pipeworks_crossing_tube_plain.png" ,"pipeworks_crossing_tube_plain.png", "pipeworks_crossing_tube_plain.png", + "pipeworks_crossing_tube_plain.png", "pipeworks_crossing_tube_plain.png", "pipeworks_crossing_tube_plain.png"} + local crossing_end_textures = {"pipeworks_crossing_tube_end.png", "pipeworks_crossing_tube_end.png", "pipeworks_crossing_tube_end.png", + "pipeworks_crossing_tube_end.png", "pipeworks_crossing_tube_end.png", "pipeworks_crossing_tube_end.png"} + local crossing_short_texture = "pipeworks_crossing_tube_short.png" + local crossing_inv_texture = "pipeworks_crossing_tube_inv.png" + + pipeworks.register_tube("pipeworks:crossing_tube", "Crossing Pneumatic Tube Segment", crossing_plain_textures, + crossing_noctr_textures, crossing_end_textures, crossing_short_texture, crossing_inv_texture, + {tube = {can_go = function(pos, node, velocity, stack) + return {velocity} + end} + }) +end + +if pipeworks.enable_one_way_tube then + minetest.register_node("pipeworks:one_way_tube", { + description = "One way tube", + tiles = {"pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_output.png", + "pipeworks_one_way_tube_input.png", "pipeworks_one_way_tube_side.png", "pipeworks_one_way_tube_top.png"}, + paramtype2 = "facedir", + drawtype = "nodebox", + paramtype = "light", + node_box = {type = "fixed", + fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}}, + groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + tube = { + connect_sides = {left = 1, right = 1}, + can_go = function(pos, node, velocity, stack) + return {velocity} + end, + can_insert = function(pos, node, stack, direction) + local dir = minetest.facedir_to_right_dir(node.param2) + return vector.equals(dir, direction) + end, + priority = 75 -- Higher than normal tubes, but lower than receivers + }, + }) + +end + +minetest.register_craft( { + output = "pipeworks:accelerator_tube_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "default:mese_crystal_fragment", "default:steel_ingot", "default:mese_crystal_fragment" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:crossing_tube_1 5", + recipe = { + { "", "pipeworks:tube_1", "" }, + { "pipeworks:tube_1", "pipeworks:tube_1", "pipeworks:tube_1" }, + { "", "pipeworks:tube_1", "" } + }, +}) diff --git a/signal_tubes.lua b/signal_tubes.lua new file mode 100644 index 0000000..cf93876 --- /dev/null +++ b/signal_tubes.lua @@ -0,0 +1,109 @@ +if pipeworks.enable_detector_tube then + local detector_plain_textures = {"pipeworks_detector_tube_plain.png", "pipeworks_detector_tube_plain.png", "pipeworks_detector_tube_plain.png", + "pipeworks_detector_tube_plain.png", "pipeworks_detector_tube_plain.png", "pipeworks_detector_tube_plain.png"} + local detector_inv_texture = "pipeworks_detector_tube_inv.png" + local detector_tube_step = 2 * tonumber(minetest.setting_get("dedicated_server_step")) + pipeworks.register_tube("pipeworks:detector_tube_on", "Detecting Pneumatic Tube Segment on (you hacker you)", detector_plain_textures, pipeworks.noctr_textures, + pipeworks.end_textures, pipeworks.short_texture, detector_inv_texture, + {tube = {can_go = function(pos, node, velocity, stack) + local meta = minetest.get_meta(pos) + local name = minetest.get_node(pos).name + local nitems = meta:get_int("nitems")+1 + meta:set_int("nitems", nitems) + local saved_pos = vector.new(pos) + minetest.after(detector_tube_step, minetest.registered_nodes[name].item_exit, saved_pos) + return pipeworks.notvel(pipeworks.meseadjlist,velocity) + end}, + groups = {mesecon = 2, not_in_creative_inventory = 1}, + drop = "pipeworks:detector_tube_off_1", + mesecons = {receptor = {state = "on", + rules = pipeworks.mesecons_rules}}, + item_exit = function(pos) + local meta = minetest.get_meta(pos) + local nitems = meta:get_int("nitems")-1 + local node = minetest.get_node(pos) + local name = node.name + local fdir = node.param2 + if nitems == 0 then + minetest.set_node(pos, {name = string.gsub(name, "on", "off"), param2 = fdir}) + mesecon.receptor_off(pos, pipeworks.mesecons_rules) + else + meta:set_int("nitems", nitems) + end + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_int("nitems", 1) + local name = minetest.get_node(pos).name + local saved_pos = vector.new(pos) + minetest.after(detector_tube_step, minetest.registered_nodes[name].item_exit, saved_pos) + end + }) + pipeworks.register_tube("pipeworks:detector_tube_off", "Detecting Pneumatic Tube Segment", detector_plain_textures, pipeworks.noctr_textures, + pipeworks.end_textures, pipeworks.short_texture, detector_inv_texture, + {tube = {can_go = function(pos, node, velocity, stack) + local node = minetest.get_node(pos) + local name = node.name + local fdir = node.param2 + minetest.set_node(pos,{name = string.gsub(name, "off", "on"), param2 = fdir}) + mesecon.receptor_on(pos, pipeworks.mesecons_rules) + return pipeworks.notvel(pipeworks.meseadjlist, velocity) + end}, + groups = {mesecon = 2}, + mesecons = {receptor = {state = "off", + rules = pipeworks.mesecons_rules}} + }) +end + +if pipeworks.enable_conductor_tube then + local conductor_plain_textures = {"pipeworks_conductor_tube_plain.png", "pipeworks_conductor_tube_plain.png", "pipeworks_conductor_tube_plain.png", + "pipeworks_conductor_tube_plain.png", "pipeworks_conductor_tube_plain.png", "pipeworks_conductor_tube_plain.png"} + local conductor_noctr_textures = {"pipeworks_conductor_tube_noctr.png", "pipeworks_conductor_tube_noctr.png", "pipeworks_conductor_tube_noctr.png", + "pipeworks_conductor_tube_noctr.png", "pipeworks_conductor_tube_noctr.png", "pipeworks_conductor_tube_noctr.png"} + local conductor_end_textures = {"pipeworks_conductor_tube_end.png", "pipeworks_conductor_tube_end.png", "pipeworks_conductor_tube_end.png", + "pipeworks_conductor_tube_end.png", "pipeworks_conductor_tube_end.png", "pipeworks_conductor_tube_end.png"} + local conductor_short_texture = "pipeworks_conductor_tube_short.png" + local conductor_inv_texture = "pipeworks_conductor_tube_inv.png" + + local conductor_on_plain_textures = {"pipeworks_conductor_tube_on_plain.png", "pipeworks_conductor_tube_on_plain.png", "pipeworks_conductor_tube_on_plain.png", + "pipeworks_conductor_tube_on_plain.png", "pipeworks_conductor_tube_on_plain.png", "pipeworks_conductor_tube_on_plain.png"} + local conductor_on_noctr_textures = {"pipeworks_conductor_tube_on_noctr.png", "pipeworks_conductor_tube_on_noctr.png", "pipeworks_conductor_tube_on_noctr.png", + "pipeworks_conductor_tube_on_noctr.png", "pipeworks_conductor_tube_on_noctr.png", "pipeworks_conductor_tube_on_noctr.png"} + local conductor_on_end_textures = {"pipeworks_conductor_tube_on_end.png", "pipeworks_conductor_tube_on_end.png", "pipeworks_conductor_tube_on_end.png", + "pipeworks_conductor_tube_on_end.png", "pipeworks_conductor_tube_on_end.png", "pipeworks_conductor_tube_on_end.png"} + + pipeworks.register_tube("pipeworks:conductor_tube_off", "Conducting Pneumatic Tube Segment", conductor_plain_textures, conductor_noctr_textures, + conductor_end_textures, conductor_short_texture, conductor_inv_texture, + {groups = {mesecon = 2}, + mesecons = {conductor = {state = "off", + rules = pipeworks.mesecons_rules, + onstate = "pipeworks:conductor_tube_on_#id"}} + }) + + pipeworks.register_tube("pipeworks:conductor_tube_on", "Conducting Pneumatic Tube Segment on (you hacker you)", conductor_on_plain_textures, conductor_on_noctr_textures, + conductor_on_end_textures, conductor_short_texture, conductor_inv_texture, + {groups = {mesecon = 2, not_in_creative_inventory = 1}, + drop = "pipeworks:conductor_tube_off_1", + mesecons = {conductor = {state = "on", + rules = pipeworks.mesecons_rules, + offstate = "pipeworks:conductor_tube_off_#id"}} + }) +end + +minetest.register_craft( { + output = "pipeworks:conductor_tube_off_1 6", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "mesecons:mesecon", "mesecons:mesecon", "mesecons:mesecon" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:detector_tube_off_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "mesecons:mesecon", "mesecons_materials:silicon", "mesecons:mesecon" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, +}) diff --git a/sorting_tubes.lua b/sorting_tubes.lua new file mode 100644 index 0000000..933ecf2 --- /dev/null +++ b/sorting_tubes.lua @@ -0,0 +1,134 @@ +if pipeworks.enable_mese_tube then + local mese_noctr_textures = {"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"} + local mese_plain_textures = {"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"} + local mese_end_textures = {"pipeworks_mese_tube_end.png", "pipeworks_mese_tube_end.png", "pipeworks_mese_tube_end.png", + "pipeworks_mese_tube_end.png", "pipeworks_mese_tube_end.png", "pipeworks_mese_tube_end.png"} + local mese_short_texture = "pipeworks_mese_tube_short.png" + local mese_inv_texture = "pipeworks_mese_tube_inv.png" + 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.item_drop(stack, "", pos) + end + end + end + local buttons_formspec = "" + for i = 0, 5 do + buttons_formspec = buttons_formspec .. fs_helpers.cycling_button(meta, + "image_button[7,"..(i)..";1,1", "l"..(i+1).."s", + {{text="",texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"}, {text="",texture="pipeworks_button_on.png", addopts="false;false;pipeworks_button_interm.png"}}) + 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;]") + end + pipeworks.register_tube("pipeworks:mese_tube", "Sorting Pneumatic Tube Segment", mese_plain_textures, mese_noctr_textures, + mese_end_textures, mese_short_texture, mese_inv_texture, + {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 + if meta:get_int("l"..i.."s") == 1 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 + 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", "Mese pneumatic tube") + end, + on_punch = update_formspec, + on_receive_fields = function(pos, formname, fields, sender) + 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) + 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) + 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) + qupdate_formspec(pos) -- For old tubes + local inv = minetest.get_meta(pos):get_inventory() + inv:set_stack(from_list, from_index, ItemStack("")) + return 0 + end, + }, true) -- Must use old tubes, since the textures are rotated with 6d ones +end + +minetest.register_craft( { + output = "pipeworks:mese_tube_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "", "default:mese_crystal", "" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, +}) + +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" + }, +}) @@ -216,377 +216,24 @@ if REGISTER_COMPATIBILITY then }) end --- now let's actually call that function to get the real work done! -local noctr_textures = {"pipeworks_tube_noctr.png", "pipeworks_tube_noctr.png", "pipeworks_tube_noctr.png", +-- the default tube and default textures +pipeworks.noctr_textures = {"pipeworks_tube_noctr.png", "pipeworks_tube_noctr.png", "pipeworks_tube_noctr.png", "pipeworks_tube_noctr.png", "pipeworks_tube_noctr.png", "pipeworks_tube_noctr.png"} -local plain_textures = {"pipeworks_tube_plain.png", "pipeworks_tube_plain.png", "pipeworks_tube_plain.png", +pipeworks.plain_textures = {"pipeworks_tube_plain.png", "pipeworks_tube_plain.png", "pipeworks_tube_plain.png", "pipeworks_tube_plain.png", "pipeworks_tube_plain.png", "pipeworks_tube_plain.png"} -local end_textures = {"pipeworks_tube_end.png", "pipeworks_tube_end.png", "pipeworks_tube_end.png", +pipeworks.end_textures = {"pipeworks_tube_end.png", "pipeworks_tube_end.png", "pipeworks_tube_end.png", "pipeworks_tube_end.png", "pipeworks_tube_end.png", "pipeworks_tube_end.png"} -local short_texture = "pipeworks_tube_short.png" -local inv_texture = "pipeworks_tube_inv.png" - -pipeworks.register_tube("pipeworks:tube", "Pneumatic tube segment", plain_textures, noctr_textures, end_textures, short_texture, inv_texture) - -if pipeworks.enable_mese_tube then - local mese_noctr_textures = {"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"} - local mese_plain_textures = {"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"} - local mese_end_textures = {"pipeworks_mese_tube_end.png", "pipeworks_mese_tube_end.png", "pipeworks_mese_tube_end.png", - "pipeworks_mese_tube_end.png", "pipeworks_mese_tube_end.png", "pipeworks_mese_tube_end.png"} - local mese_short_texture = "pipeworks_mese_tube_short.png" - local mese_inv_texture = "pipeworks_mese_tube_inv.png" - 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.item_drop(stack, "", pos) - end - end - end - local buttons_formspec = "" - for i = 0, 5 do - buttons_formspec = buttons_formspec .. fs_helpers.cycling_button(meta, - "image_button[7,"..(i)..";1,1", "l"..(i+1).."s", - {{text="",texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"}, {text="",texture="pipeworks_button_on.png", addopts="false;false;pipeworks_button_interm.png"}}) - 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;]") - end - pipeworks.register_tube("pipeworks:mese_tube", "Sorting Pneumatic Tube Segment", mese_plain_textures, mese_noctr_textures, - mese_end_textures, mese_short_texture, mese_inv_texture, - {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 - if meta:get_int("l"..i.."s") == 1 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 - 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", "Mese pneumatic tube") - end, - on_punch = update_formspec, - on_receive_fields = function(pos, formname, fields, sender) - 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) - 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) - 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) - update_formspec(pos) -- For old tubes - local inv = minetest.get_meta(pos):get_inventory() - inv:set_stack(from_list, from_index, ItemStack("")) - return 0 - end, - }, true) -- Must use old tubes, since the textures are rotated with 6d ones -end - -if pipeworks.enable_detector_tube then - local detector_plain_textures = {"pipeworks_detector_tube_plain.png", "pipeworks_detector_tube_plain.png", "pipeworks_detector_tube_plain.png", - "pipeworks_detector_tube_plain.png", "pipeworks_detector_tube_plain.png", "pipeworks_detector_tube_plain.png"} - local detector_inv_texture = "pipeworks_detector_tube_inv.png" - local detector_tube_step = 2 * tonumber(minetest.setting_get("dedicated_server_step")) - pipeworks.register_tube("pipeworks:detector_tube_on", "Detecting Pneumatic Tube Segment on (you hacker you)", detector_plain_textures, noctr_textures, - end_textures, short_texture, detector_inv_texture, - {tube = {can_go = function(pos, node, velocity, stack) - local meta = minetest.get_meta(pos) - local name = minetest.get_node(pos).name - local nitems = meta:get_int("nitems")+1 - meta:set_int("nitems", nitems) - local saved_pos = vector.new(pos) - minetest.after(detector_tube_step, minetest.registered_nodes[name].item_exit, saved_pos) - return pipeworks.notvel(pipeworks.meseadjlist,velocity) - end}, - groups = {mesecon = 2, not_in_creative_inventory = 1}, - drop = "pipeworks:detector_tube_off_1", - mesecons = {receptor = {state = "on", - rules = pipeworks.mesecons_rules}}, - item_exit = function(pos) - local meta = minetest.get_meta(pos) - local nitems = meta:get_int("nitems")-1 - local node = minetest.get_node(pos) - local name = node.name - local fdir = node.param2 - if nitems == 0 then - minetest.set_node(pos, {name = string.gsub(name, "on", "off"), param2 = fdir}) - mesecon.receptor_off(pos, pipeworks.mesecons_rules) - else - meta:set_int("nitems", nitems) - end - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_int("nitems", 1) - local name = minetest.get_node(pos).name - local saved_pos = vector.new(pos) - minetest.after(detector_tube_step, minetest.registered_nodes[name].item_exit, saved_pos) - - end - }) - pipeworks.register_tube("pipeworks:detector_tube_off", "Detecting Pneumatic Tube Segment", detector_plain_textures, noctr_textures, - end_textures, short_texture, detector_inv_texture, - {tube = {can_go = function(pos, node, velocity, stack) - local node = minetest.get_node(pos) - local name = node.name - local fdir = node.param2 - minetest.set_node(pos,{name = string.gsub(name, "off", "on"), param2 = fdir}) - mesecon.receptor_on(pos, pipeworks.mesecons_rules) - return pipeworks.notvel(pipeworks.meseadjlist, velocity) - end}, - groups = {mesecon = 2}, - mesecons = {receptor = {state = "off", - rules = pipeworks.mesecons_rules}} - }) -end - -if pipeworks.enable_conductor_tube then - local conductor_plain_textures = {"pipeworks_conductor_tube_plain.png", "pipeworks_conductor_tube_plain.png", "pipeworks_conductor_tube_plain.png", - "pipeworks_conductor_tube_plain.png", "pipeworks_conductor_tube_plain.png", "pipeworks_conductor_tube_plain.png"} - local conductor_noctr_textures = {"pipeworks_conductor_tube_noctr.png", "pipeworks_conductor_tube_noctr.png", "pipeworks_conductor_tube_noctr.png", - "pipeworks_conductor_tube_noctr.png", "pipeworks_conductor_tube_noctr.png", "pipeworks_conductor_tube_noctr.png"} - local conductor_end_textures = {"pipeworks_conductor_tube_end.png", "pipeworks_conductor_tube_end.png", "pipeworks_conductor_tube_end.png", - "pipeworks_conductor_tube_end.png", "pipeworks_conductor_tube_end.png", "pipeworks_conductor_tube_end.png"} - local conductor_short_texture = "pipeworks_conductor_tube_short.png" - local conductor_inv_texture = "pipeworks_conductor_tube_inv.png" - - local conductor_on_plain_textures = {"pipeworks_conductor_tube_on_plain.png", "pipeworks_conductor_tube_on_plain.png", "pipeworks_conductor_tube_on_plain.png", - "pipeworks_conductor_tube_on_plain.png", "pipeworks_conductor_tube_on_plain.png", "pipeworks_conductor_tube_on_plain.png"} - local conductor_on_noctr_textures = {"pipeworks_conductor_tube_on_noctr.png", "pipeworks_conductor_tube_on_noctr.png", "pipeworks_conductor_tube_on_noctr.png", - "pipeworks_conductor_tube_on_noctr.png", "pipeworks_conductor_tube_on_noctr.png", "pipeworks_conductor_tube_on_noctr.png"} - local conductor_on_end_textures = {"pipeworks_conductor_tube_on_end.png", "pipeworks_conductor_tube_on_end.png", "pipeworks_conductor_tube_on_end.png", - "pipeworks_conductor_tube_on_end.png", "pipeworks_conductor_tube_on_end.png", "pipeworks_conductor_tube_on_end.png"} - - pipeworks.register_tube("pipeworks:conductor_tube_off", "Conducting Pneumatic Tube Segment", conductor_plain_textures, conductor_noctr_textures, - conductor_end_textures, conductor_short_texture, conductor_inv_texture, - {groups = {mesecon = 2}, - mesecons = {conductor = {state = "off", - rules = pipeworks.mesecons_rules, - onstate = "pipeworks:conductor_tube_on_#id"}} - }) - - pipeworks.register_tube("pipeworks:conductor_tube_on", "Conducting Pneumatic Tube Segment on (you hacker you)", conductor_on_plain_textures, conductor_on_noctr_textures, - conductor_on_end_textures, conductor_short_texture, conductor_inv_texture, - {groups = {mesecon = 2, not_in_creative_inventory = 1}, - drop = "pipeworks:conductor_tube_off_1", - mesecons = {conductor = {state = "on", - rules = pipeworks.mesecons_rules, - offstate = "pipeworks:conductor_tube_off_#id"}} - }) -end - -if pipeworks.enable_accelerator_tube then - local accelerator_noctr_textures = {"pipeworks_accelerator_tube_noctr.png", "pipeworks_accelerator_tube_noctr.png", "pipeworks_accelerator_tube_noctr.png", - "pipeworks_accelerator_tube_noctr.png", "pipeworks_accelerator_tube_noctr.png", "pipeworks_accelerator_tube_noctr.png"} - local accelerator_plain_textures = {"pipeworks_accelerator_tube_plain.png" ,"pipeworks_accelerator_tube_plain.png", "pipeworks_accelerator_tube_plain.png", - "pipeworks_accelerator_tube_plain.png", "pipeworks_accelerator_tube_plain.png", "pipeworks_accelerator_tube_plain.png"} - local accelerator_end_textures = {"pipeworks_accelerator_tube_end.png", "pipeworks_accelerator_tube_end.png", "pipeworks_accelerator_tube_end.png", - "pipeworks_accelerator_tube_end.png", "pipeworks_accelerator_tube_end.png", "pipeworks_accelerator_tube_end.png"} - local accelerator_short_texture = "pipeworks_accelerator_tube_short.png" - local accelerator_inv_texture = "pipeworks_accelerator_tube_inv.png" - - pipeworks.register_tube("pipeworks:accelerator_tube", "Accelerating Pneumatic Tube Segment", accelerator_plain_textures, - accelerator_noctr_textures, accelerator_end_textures, accelerator_short_texture, accelerator_inv_texture, - {tube = {can_go = function(pos, node, velocity, stack) - velocity.speed = velocity.speed+1 - return pipeworks.notvel(pipeworks.meseadjlist, velocity) - end} - }) -end - -if pipeworks.enable_crossing_tube then - local crossing_noctr_textures = {"pipeworks_crossing_tube_noctr.png", "pipeworks_crossing_tube_noctr.png", "pipeworks_crossing_tube_noctr.png", - "pipeworks_crossing_tube_noctr.png", "pipeworks_crossing_tube_noctr.png", "pipeworks_crossing_tube_noctr.png"} - local crossing_plain_textures = {"pipeworks_crossing_tube_plain.png" ,"pipeworks_crossing_tube_plain.png", "pipeworks_crossing_tube_plain.png", - "pipeworks_crossing_tube_plain.png", "pipeworks_crossing_tube_plain.png", "pipeworks_crossing_tube_plain.png"} - local crossing_end_textures = {"pipeworks_crossing_tube_end.png", "pipeworks_crossing_tube_end.png", "pipeworks_crossing_tube_end.png", - "pipeworks_crossing_tube_end.png", "pipeworks_crossing_tube_end.png", "pipeworks_crossing_tube_end.png"} - local crossing_short_texture = "pipeworks_crossing_tube_short.png" - local crossing_inv_texture = "pipeworks_crossing_tube_inv.png" - - pipeworks.register_tube("pipeworks:crossing_tube", "Crossing Pneumatic Tube Segment", crossing_plain_textures, - crossing_noctr_textures, crossing_end_textures, crossing_short_texture, crossing_inv_texture, - {tube = {can_go = function(pos, node, velocity, stack) - return {velocity} - end} - }) -end - -if pipeworks.enable_sand_tube then - local sand_noctr_textures = {"pipeworks_sand_tube_noctr.png", "pipeworks_sand_tube_noctr.png", "pipeworks_sand_tube_noctr.png", - "pipeworks_sand_tube_noctr.png", "pipeworks_sand_tube_noctr.png", "pipeworks_sand_tube_noctr.png"} - local sand_plain_textures = {"pipeworks_sand_tube_plain.png", "pipeworks_sand_tube_plain.png", "pipeworks_sand_tube_plain.png", - "pipeworks_sand_tube_plain.png", "pipeworks_sand_tube_plain.png", "pipeworks_sand_tube_plain.png"} - local sand_end_textures = {"pipeworks_sand_tube_end.png", "pipeworks_sand_tube_end.png", "pipeworks_sand_tube_end.png", - "pipeworks_sand_tube_end.png", "pipeworks_sand_tube_end.png", "pipeworks_sand_tube_end.png"} - local sand_short_texture = "pipeworks_sand_tube_short.png" - local sand_inv_texture = "pipeworks_sand_tube_inv.png" - - pipeworks.register_tube("pipeworks:sand_tube", "Vacuuming Pneumatic Tube Segment", sand_plain_textures, sand_noctr_textures, sand_end_textures, - sand_short_texture, sand_inv_texture, - {groups = {sand_tube = 1}}) - - minetest.register_abm({nodenames = {"group:sand_tube"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - for _, object in ipairs(minetest.get_objects_inside_radius(pos, 2)) do - if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then - if object:get_luaentity().itemstring ~= "" then - pipeworks.tube_inject_item(pos, pos, vector.new(0, 0, 0), object:get_luaentity().itemstring) - end - object:get_luaentity().itemstring = "" - object:remove() - end - end - end - }) -end - -if pipeworks.enable_mese_sand_tube then - local mese_sand_noctr_textures = {"pipeworks_mese_sand_tube_noctr.png", "pipeworks_mese_sand_tube_noctr.png", "pipeworks_mese_sand_tube_noctr.png", - "pipeworks_mese_sand_tube_noctr.png", "pipeworks_mese_sand_tube_noctr.png", "pipeworks_mese_sand_tube_noctr.png"} - local mese_sand_plain_textures = {"pipeworks_mese_sand_tube_plain.png", "pipeworks_mese_sand_tube_plain.png", "pipeworks_mese_sand_tube_plain.png", - "pipeworks_mese_sand_tube_plain.png", "pipeworks_mese_sand_tube_plain.png", "pipeworks_mese_sand_tube_plain.png"} - local mese_sand_end_textures = {"pipeworks_mese_sand_tube_end.png", "pipeworks_mese_sand_tube_end.png", "pipeworks_mese_sand_tube_end.png", - "pipeworks_mese_sand_tube_end.png", "pipeworks_mese_sand_tube_end.png", "pipeworks_mese_sand_tube_end.png"} - local mese_sand_short_texture = "pipeworks_mese_sand_tube_short.png" - local mese_sand_inv_texture = "pipeworks_mese_sand_tube_inv.png" - - pipeworks.register_tube("pipeworks:mese_sand_tube", "Adjustable Vacuuming Pneumatic Tube Segment", mese_sand_plain_textures, mese_sand_noctr_textures, - mese_sand_end_textures, mese_sand_short_texture,mese_sand_inv_texture, - {groups = {mese_sand_tube = 1}, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_int("dist", 0) - meta:set_string("formspec", - "size[2,1]".. - "field[.5,.5;1.5,1;dist;distance;${dist}]") - meta:set_string("infotext", "Adjustable Vacuuming Pneumatic Tube Segment") - end, - on_receive_fields = function(pos,formname,fields,sender) - local meta = minetest.get_meta(pos) - local dist - _, dist = pcall(tonumber, fields.dist) - if dist and 0 <= dist and dist <= 8 then meta:set_int("dist", dist) end - end, - }) - - local function get_objects_with_square_radius(pos, rad) - rad = rad + .5; - local objs = {} - for _,object in ipairs(minetest.get_objects_inside_radius(pos, math.sqrt(3)*rad)) do - if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then - local opos = object:getpos() - if pos.x - rad <= opos.x and opos.x <= pos.x + rad and pos.y - rad <= opos.y and opos.y <= pos.y + rad and pos.z - rad <= opos.z and opos.z <= pos.z + rad then - objs[#objs + 1] = object - end - end - end - return objs - end - - minetest.register_abm({nodenames = {"group:mese_sand_tube"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - for _,object in ipairs(get_objects_with_square_radius(pos, minetest.get_meta(pos):get_int("dist"))) do - if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then - if object:get_luaentity().itemstring ~= "" then - pipeworks.tube_inject_item(pos, pos, vector.new(0, 0, 0), object:get_luaentity().itemstring) - end - object:get_luaentity().itemstring = "" - object:remove() - end - end - end - }) -end - -if pipeworks.enable_one_way_tube then - minetest.register_node("pipeworks:one_way_tube", { - description = "One way tube", - tiles = {"pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_output.png", - "pipeworks_one_way_tube_input.png", "pipeworks_one_way_tube_side.png", "pipeworks_one_way_tube_top.png"}, - paramtype2 = "facedir", - drawtype = "nodebox", - paramtype = "light", - node_box = {type = "fixed", - fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}}, - groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1}, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - tube = { - connect_sides = {left = 1, right = 1}, - can_go = function(pos, node, velocity, stack) - return {velocity} - end, - can_insert = function(pos, node, stack, direction) - local dir = minetest.facedir_to_right_dir(node.param2) - return vector.equals(dir, direction) - end, - priority = 75 -- Higher than normal tubes, but lower than receivers - }, - }) -end +pipeworks.short_texture = "pipeworks_tube_short.png" +pipeworks.inv_texture = "pipeworks_tube_inv.png" + +pipeworks.register_tube("pipeworks:tube", "Pneumatic tube segment", pipeworks.plain_textures, pipeworks.noctr_textures, pipeworks.end_textures, pipeworks.short_texture, pipeworks.inv_texture) + +minetest.register_craft( { + output = "pipeworks:tube_1 6", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "", "", "" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, +}) diff --git a/vacuum_tubes.lua b/vacuum_tubes.lua new file mode 100644 index 0000000..35fc063 --- /dev/null +++ b/vacuum_tubes.lua @@ -0,0 +1,145 @@ +if pipeworks.enable_sand_tube then + local sand_noctr_textures = {"pipeworks_sand_tube_noctr.png", "pipeworks_sand_tube_noctr.png", "pipeworks_sand_tube_noctr.png", + "pipeworks_sand_tube_noctr.png", "pipeworks_sand_tube_noctr.png", "pipeworks_sand_tube_noctr.png"} + local sand_plain_textures = {"pipeworks_sand_tube_plain.png", "pipeworks_sand_tube_plain.png", "pipeworks_sand_tube_plain.png", + "pipeworks_sand_tube_plain.png", "pipeworks_sand_tube_plain.png", "pipeworks_sand_tube_plain.png"} + local sand_end_textures = {"pipeworks_sand_tube_end.png", "pipeworks_sand_tube_end.png", "pipeworks_sand_tube_end.png", + "pipeworks_sand_tube_end.png", "pipeworks_sand_tube_end.png", "pipeworks_sand_tube_end.png"} + local sand_short_texture = "pipeworks_sand_tube_short.png" + local sand_inv_texture = "pipeworks_sand_tube_inv.png" + + pipeworks.register_tube("pipeworks:sand_tube", "Vacuuming Pneumatic Tube Segment", sand_plain_textures, sand_noctr_textures, sand_end_textures, + sand_short_texture, sand_inv_texture, + {groups = {sand_tube = 1}}) + + minetest.register_abm({nodenames = {"group:sand_tube"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + for _, object in ipairs(minetest.get_objects_inside_radius(pos, 2)) do + if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then + if object:get_luaentity().itemstring ~= "" then + pipeworks.tube_inject_item(pos, pos, vector.new(0, 0, 0), object:get_luaentity().itemstring) + end + object:get_luaentity().itemstring = "" + object:remove() + end + end + end + }) +end + +if pipeworks.enable_mese_sand_tube then + local mese_sand_noctr_textures = {"pipeworks_mese_sand_tube_noctr.png", "pipeworks_mese_sand_tube_noctr.png", "pipeworks_mese_sand_tube_noctr.png", + "pipeworks_mese_sand_tube_noctr.png", "pipeworks_mese_sand_tube_noctr.png", "pipeworks_mese_sand_tube_noctr.png"} + local mese_sand_plain_textures = {"pipeworks_mese_sand_tube_plain.png", "pipeworks_mese_sand_tube_plain.png", "pipeworks_mese_sand_tube_plain.png", + "pipeworks_mese_sand_tube_plain.png", "pipeworks_mese_sand_tube_plain.png", "pipeworks_mese_sand_tube_plain.png"} + local mese_sand_end_textures = {"pipeworks_mese_sand_tube_end.png", "pipeworks_mese_sand_tube_end.png", "pipeworks_mese_sand_tube_end.png", + "pipeworks_mese_sand_tube_end.png", "pipeworks_mese_sand_tube_end.png", "pipeworks_mese_sand_tube_end.png"} + local mese_sand_short_texture = "pipeworks_mese_sand_tube_short.png" + local mese_sand_inv_texture = "pipeworks_mese_sand_tube_inv.png" + + pipeworks.register_tube("pipeworks:mese_sand_tube", "Adjustable Vacuuming Pneumatic Tube Segment", mese_sand_plain_textures, mese_sand_noctr_textures, + mese_sand_end_textures, mese_sand_short_texture,mese_sand_inv_texture, + {groups = {mese_sand_tube = 1}, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_int("dist", 0) + meta:set_string("formspec", + "size[2,1]".. + "field[.5,.5;1.5,1;dist;distance;${dist}]") + meta:set_string("infotext", "Adjustable Vacuuming Pneumatic Tube Segment") + end, + on_receive_fields = function(pos,formname,fields,sender) + local meta = minetest.get_meta(pos) + local dist + _, dist = pcall(tonumber, fields.dist) + if dist and 0 <= dist and dist <= 8 then meta:set_int("dist", dist) end + end, + }) + + local function get_objects_with_square_radius(pos, rad) + rad = rad + .5; + local objs = {} + for _,object in ipairs(minetest.get_objects_inside_radius(pos, math.sqrt(3)*rad)) do + if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then + local opos = object:getpos() + if pos.x - rad <= opos.x and opos.x <= pos.x + rad and pos.y - rad <= opos.y and opos.y <= pos.y + rad and pos.z - rad <= opos.z and opos.z <= pos.z + rad then + objs[#objs + 1] = object + end + end + end + return objs + end + + minetest.register_abm({nodenames = {"group:mese_sand_tube"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + for _,object in ipairs(get_objects_with_square_radius(pos, minetest.get_meta(pos):get_int("dist"))) do + if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then + if object:get_luaentity().itemstring ~= "" then + pipeworks.tube_inject_item(pos, pos, vector.new(0, 0, 0), object:get_luaentity().itemstring) + end + object:get_luaentity().itemstring = "" + object:remove() + end + end + end + }) +end + +minetest.register_craft( { + output = "pipeworks:sand_tube_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "default:sand", "default:sand", "default:sand" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:sand_tube_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "default:desert_sand", "default:desert_sand", "default:desert_sand" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:sand_tube_1", + recipe = { + { "default:desert_sand", "pipeworks:tube_1", "default:desert_sand" }, + }, +}) + +minetest.register_craft( { + output = "pipeworks:mese_sand_tube_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "default:sand", "default:mese_crystal", "default:sand" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, +}) + +minetest.register_craft( { + output = "pipeworks:mese_sand_tube_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "default:desert_sand", "default:mese_crystal", "default:desert_sand" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, +}) + +minetest.register_craft( { + type = "shapeless", + output = "pipeworks:mese_sand_tube_1", + recipe = { + "pipeworks:sand_tube_1", + "default:mese_crystal_fragment", + "default:mese_crystal_fragment", + "default:mese_crystal_fragment", + "default:mese_crystal_fragment" + }, +}) |