From 9d7ea8228024b0d327e9dbcf3ad19f4777a490a4 Mon Sep 17 00:00:00 2001 From: LeMagnesium Date: Wed, 3 Aug 2016 18:17:04 +0200 Subject: [PATCH] [pipeworks] Update with digiline support --- mods/pipeworks/default_settings.txt | 3 +- mods/pipeworks/depends.txt | 1 + mods/pipeworks/devices.lua | 2 +- mods/pipeworks/filter-injector.lua | 224 ++++++++++++++++-- mods/pipeworks/flowing_logic.lua | 2 +- mods/pipeworks/init.lua | 8 +- mods/pipeworks/signal_tubes.lua | 57 ++++- .../pipeworks_digiline_detector_tube_end.png | Bin 0 -> 1068 bytes .../pipeworks_digiline_detector_tube_inv.png | Bin 0 -> 765 bytes ...pipeworks_digiline_detector_tube_noctr.png | Bin 0 -> 892 bytes ...pipeworks_digiline_detector_tube_plain.png | Bin 0 -> 1500 bytes ...pipeworks_digiline_detector_tube_short.png | Bin 0 -> 526 bytes .../pipeworks_digiline_filter_input.png | Bin 0 -> 234 bytes .../pipeworks_digiline_filter_output.png | Bin 0 -> 217 bytes .../pipeworks_digiline_filter_side.png | Bin 0 -> 236 bytes .../pipeworks_digiline_filter_top.png | Bin 0 -> 236 bytes mods/pipeworks/wielder.lua | 2 +- 17 files changed, 262 insertions(+), 37 deletions(-) create mode 100644 mods/pipeworks/textures/pipeworks_digiline_detector_tube_end.png create mode 100644 mods/pipeworks/textures/pipeworks_digiline_detector_tube_inv.png create mode 100644 mods/pipeworks/textures/pipeworks_digiline_detector_tube_noctr.png create mode 100644 mods/pipeworks/textures/pipeworks_digiline_detector_tube_plain.png create mode 100644 mods/pipeworks/textures/pipeworks_digiline_detector_tube_short.png create mode 100644 mods/pipeworks/textures/pipeworks_digiline_filter_input.png create mode 100644 mods/pipeworks/textures/pipeworks_digiline_filter_output.png create mode 100644 mods/pipeworks/textures/pipeworks_digiline_filter_side.png create mode 100644 mods/pipeworks/textures/pipeworks_digiline_filter_top.png diff --git a/mods/pipeworks/default_settings.txt b/mods/pipeworks/default_settings.txt index bbf02ce0..41a3f7ac 100755 --- a/mods/pipeworks/default_settings.txt +++ b/mods/pipeworks/default_settings.txt @@ -10,6 +10,7 @@ pipeworks.enable_pipe_devices = true pipeworks.enable_redefines = true pipeworks.enable_mese_tube = true pipeworks.enable_detector_tube = true +pipeworks.enable_digiline_detector_tube = true pipeworks.enable_conductor_tube = true pipeworks.enable_accelerator_tube = true pipeworks.enable_crossing_tube = true @@ -19,4 +20,4 @@ pipeworks.enable_one_way_tube = true pipeworks.enable_priority_tube = true pipeworks.enable_cyclic_mode = true -pipeworks.delete_item_on_clearobject = true \ No newline at end of file +pipeworks.delete_item_on_clearobject = true diff --git a/mods/pipeworks/depends.txt b/mods/pipeworks/depends.txt index 02a542cb..dff9dfbb 100755 --- a/mods/pipeworks/depends.txt +++ b/mods/pipeworks/depends.txt @@ -1,3 +1,4 @@ default mesecons? mesecons_mvps? +digilines? diff --git a/mods/pipeworks/devices.lua b/mods/pipeworks/devices.lua index c96ad977..c2e1bc41 100755 --- a/mods/pipeworks/devices.lua +++ b/mods/pipeworks/devices.lua @@ -3,7 +3,7 @@ local pipereceptor_on = nil local pipereceptor_off = nil -if mesecon then +if minetest.get_modpath("mesecons") then pipereceptor_on = { receptor = { state = mesecon.state.on, diff --git a/mods/pipeworks/filter-injector.lua b/mods/pipeworks/filter-injector.lua index f2a57c7f..78e6f257 100755 --- a/mods/pipeworks/filter-injector.lua +++ b/mods/pipeworks/filter-injector.lua @@ -12,7 +12,30 @@ end local function set_filter_formspec(data, meta) local itemname = data.wise_desc.." Filter-Injector" - local formspec = "size[8,8.5]".. + + local formspec + if data.digiline then + formspec = "size[8,2.7]".. + "item_image[0,0;1,1;pipeworks:"..data.name.."]".. + "label[1,0;"..minetest.formspec_escape(itemname).."]".. + "field[0.3,1.5;8.0,1;channel;Channel;${channel}]".. + fs_helpers.cycling_button(meta, "button[0,2;4,1", "slotseq_mode", + {"Sequence slots by Priority", + "Sequence slots Randomly", + "Sequence slots by Rotation"}).. + fs_helpers.cycling_button(meta, "button[4,2;4,1", "exmatch_mode", + {"Exact match - off", + "Exact match - on "}) + else + local exmatch_button = "" + if data.stackwise then + exmatch_button = + fs_helpers.cycling_button(meta, "button[4,3.5;4,1", "exmatch_mode", + {"Exact match - off", + "Exact match - on "}) + end + + formspec = "size[8,8.5]".. "item_image[0,0;1,1;pipeworks:"..data.name.."]".. "label[1,0;"..minetest.formspec_escape(itemname).."]".. "label[0,1;Prefer item types:]".. @@ -21,14 +44,16 @@ local function set_filter_formspec(data, meta) {"Sequence slots by Priority", "Sequence slots Randomly", "Sequence slots by Rotation"}).. + exmatch_button.. "list[current_player;main;0,4.5;8,4;]" + end meta:set_string("formspec", formspec) end -- todo SOON: this function has *way too many* parameters -local function grabAndFire(data,slotseq_mode,filtmeta,frominv,frominvname,frompos,fromnode,filterfor,fromtube,fromdef,dir,fakePlayer,all) +local function grabAndFire(data,slotseq_mode,exmatch_mode,filtmeta,frominv,frominvname,frompos,fromnode,filterfor,fromtube,fromdef,dir,fakePlayer,all) local sposes = {} - for spos,stack in ipairs(frominv:get_list(frominvname) or {}) do -- Modification made for https://github.com/MinetestForFun/server-minetestforfun/issues/426 (Mg|06/04/2016) + for spos,stack in ipairs(frominv:get_list(frominvname)) do local matches if filterfor == "" then matches = stack:get_name() ~= "" @@ -79,7 +104,11 @@ local function grabAndFire(data,slotseq_mode,filtmeta,frominv,frominvname,frompo if all then count = math.min(stack:get_count(), doRemove) if filterfor.count and filterfor.count > 1 then - count = math.min(filterfor.count, count) + if exmatch_mode ~= 0 and filterfor.count > count then + return false + else + count = math.min(filterfor.count, count) + end end else count = 1 @@ -103,7 +132,7 @@ local function grabAndFire(data,slotseq_mode,filtmeta,frominv,frominvname,frompo return false end -local function punch_filter(data, filtpos, filtnode) +local function punch_filter(data, filtpos, filtnode, msg) local filtmeta = minetest.get_meta(filtpos) local filtinv = filtmeta:get_inventory() local owner = filtmeta:get_string("owner") @@ -119,21 +148,110 @@ local function punch_filter(data, filtpos, filtnode) if not fromdef then return end local fromtube = fromdef.tube if not (fromtube and fromtube.input_inventory) then return end + + local slotseq_mode + local exact_match + local filters = {} - for _, filterstack in ipairs(filtinv:get_list("main")) do - local filtername = filterstack:get_name() - local filtercount = filterstack:get_count() - if filtername ~= "" then table.insert(filters, {name = filtername, count = filtercount}) end + if data.digiline then + local t_msg = type(msg) + if t_msg == "table" then + local slotseq = msg.slotseq + local t_slotseq = type(slotseq) + if t_slotseq == "number" and slotseq >= 0 and slotseq <= 2 then + slotseq_mode = slotseq + elseif t_slotseq == "string" then + slotseq = string.lower(slotseq) + if slotseq == "priority" then + slotseq_mode = 0 + elseif slotseq == "random" then + slotseq_mode = 1 + elseif slotseq == "rotation" then + slotseq_mode = 2 + end + end + + local exmatch = msg.exmatch + local t_exmatch = type(exmatch) + if t_exmatch == "number" and exmatch >= 0 and exmatch <= 1 then + exact_match = exmatch + elseif t_exmatch == "boolean" then + exact_match = exmatch and 1 or 0 + end + + local slotseq_index = msg.slotseq_index + if type(slotseq_index) == "number" then + -- This should allow any valid index, but I'm not completely sure what + -- constitutes a valid index, so I'm only allowing resetting it to 1. + if slotseq_index == 1 then + filtmeta:set_int("slotseq_index", slotseq_index) + set_filter_infotext(data, filtmeta) + end + end + + if slotseq_mode ~= nil then + filtmeta:set_int("slotseq_mode", slotseq_mode) + end + + if exact_match ~= nil then + filtmeta:set_int("exmatch_mode", exact_match) + end + + if slotseq_mode ~= nil or exact_match ~= nil then + set_filter_formspec(data, filtmeta) + end + + if msg.nofire then + return + end + + if type(msg.name) == "string" then + table.insert(filters, {name = msg.name, count = tonumber(msg.count) or 1}) + else + for _, filter in ipairs(msg) do + local t_filter = type(filter) + if t_filter == "table" then + if type(filter.name) == "string" then + table.insert(filters, {name = filter.name, count = tonumber(filter.count) or 1}) + end + elseif t_filter == "string" then + local filterstack = ItemStack(filter) + local filtername = filterstack:get_name() + local filtercount = filterstack:get_count() + if filtername ~= "" then table.insert(filters, {name = filtername, count = filtercount}) end + end + end + end + elseif t_msg == "string" then + local filterstack = ItemStack(msg) + local filtername = filterstack:get_name() + local filtercount = filterstack:get_count() + if filtername ~= "" then table.insert(filters, {name = filtername, count = filtercount}) end + end + else + for _, filterstack in ipairs(filtinv:get_list("main")) do + local filtername = filterstack:get_name() + local filtercount = filterstack:get_count() + if filtername ~= "" then table.insert(filters, {name = filtername, count = filtercount}) end + end end if #filters == 0 then table.insert(filters, "") end - local slotseq_mode = filtmeta:get_int("slotseq_mode") + + if slotseq_mode == nil then + slotseq_mode = filtmeta:get_int("slotseq_mode") + end + + if exact_match == nil then + exact_match = filtmeta:get_int("exmatch_mode") + end + local frommeta = minetest.get_meta(frompos) local frominv = frommeta:get_inventory() if fromtube.before_filter then fromtube.before_filter(frompos) end for _, frominvname in ipairs(type(fromtube.input_inventory) == "table" and fromtube.input_inventory or {fromtube.input_inventory}) do local done = false for _, filterfor in ipairs(filters) do - if grabAndFire(data, slotseq_mode, filtmeta, frominv, frominvname, frompos, fromnode, filterfor, fromtube, fromdef, dir, fakePlayer, data.stackwise) then + if grabAndFire(data, slotseq_mode, exact_match, filtmeta, frominv, frominvname, frompos, fromnode, filterfor, fromtube, fromdef, dir, fakePlayer, data.stackwise) then done = true break end @@ -154,8 +272,14 @@ for _, data in ipairs({ wise_desc = "Stackwise", stackwise = true, }, + { -- register even if no digilines + name = "digiline_filter", + wise_desc = "Digiline", + stackwise = true, + digiline = true, + }, }) do - minetest.register_node("pipeworks:"..data.name, { + local node = { description = data.wise_desc.." Filter-Injector", tiles = { "pipeworks_"..data.name.."_top.png", @@ -181,14 +305,6 @@ for _, data in ipairs({ pipeworks.after_place(pos) end, after_dig_node = pipeworks.after_dig, - 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) - local meta = minetest.get_meta(pos) - meta:set_int("slotseq_index", 1) - set_filter_formspec(data, meta) - set_filter_infotext(data, meta) - end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) if not pipeworks.may_configure(pos, player) then return 0 end return stack:get_count() @@ -206,18 +322,63 @@ for _, data in ipairs({ local inv = meta:get_inventory() return inv:is_empty("main") end, - mesecons = { + tube = {connect_sides = {right = 1}}, + } + + if data.digiline then + node.groups.mesecon = nil + if not minetest.get_modpath("digilines") then + node.groups.not_in_creative_inventory = 1 + end + + node.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) + + if fields.channel then + minetest.get_meta(pos):set_string("channel", fields.channel) + end + + local meta = minetest.get_meta(pos) + --meta:set_int("slotseq_index", 1) + set_filter_formspec(data, meta) + set_filter_infotext(data, meta) + end + node.digiline = { + effector = { + action = function(pos, node, channel, msg) + local meta = minetest.get_meta(pos) + local setchan = meta:get_string("channel") + if setchan ~= channel then return end + + punch_filter(data, pos, node, msg) + end, + }, + } + else + node.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) + local meta = minetest.get_meta(pos) + meta:set_int("slotseq_index", 1) + set_filter_formspec(data, meta) + set_filter_infotext(data, meta) + end + node.mesecons = { effector = { action_on = function(pos, node) punch_filter(data, pos, node) end, }, - }, - tube = {connect_sides = {right = 1}}, - on_punch = function (pos, node, puncher) + } + node.on_punch = function (pos, node, puncher) punch_filter(data, pos, node) - end, - }) + end + end + + + + minetest.register_node("pipeworks:"..data.name, node) end minetest.register_craft( { @@ -237,3 +398,14 @@ minetest.register_craft( { { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" } }, }) + +if minetest.get_modpath("digilines") then + minetest.register_craft( { + output = "pipeworks:digiline_filter 2", + recipe = { + { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" }, + { "group:stick", "digilines:wire_std_00000000", "homedecor:plastic_sheeting" }, + { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" } + }, + }) +end diff --git a/mods/pipeworks/flowing_logic.lua b/mods/pipeworks/flowing_logic.lua index 4364e02e..ae3b4ee1 100755 --- a/mods/pipeworks/flowing_logic.lua +++ b/mods/pipeworks/flowing_logic.lua @@ -71,7 +71,7 @@ pipeworks.spigot_check = function(pos, node) local belowname = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name if belowname and (belowname == "air" or belowname == "default:water_flowing" or belowname == "default:water_source") then local spigotname = minetest.get_node(pos).name - local fdir=node.param2 + local fdir=node.param2 % 4 local check = { {x=pos.x,y=pos.y,z=pos.z+1}, {x=pos.x+1,y=pos.y,z=pos.z}, diff --git a/mods/pipeworks/init.lua b/mods/pipeworks/init.lua index 51656171..b0938129 100755 --- a/mods/pipeworks/init.lua +++ b/mods/pipeworks/init.lua @@ -16,9 +16,11 @@ pipeworks.modpath = minetest.get_modpath("pipeworks") dofile(pipeworks.modpath.."/default_settings.txt") -- Read the external config file if it exists. -if io.open(pipeworks.worldpath.."/pipeworks_settings.txt","r") then - dofile(pipeworks.worldpath.."/pipeworks_settings.txt") - io.close() +local worldsettingspath = pipeworks.worldpath.."/pipeworks_settings.txt" +local worldsettingsfile = io.open(worldsettingspath, "r") +if worldsettingsfile then + worldsettingsfile:close() + dofile(worldsettingspath) end -- Random variables diff --git a/mods/pipeworks/signal_tubes.lua b/mods/pipeworks/signal_tubes.lua index 393bf8f6..63c5120e 100755 --- a/mods/pipeworks/signal_tubes.lua +++ b/mods/pipeworks/signal_tubes.lua @@ -58,10 +58,59 @@ if pipeworks.enable_detector_tube then }) minetest.register_craft( { - output = "pipeworks:conductor_tube_off_1 6", + output = "pipeworks:detector_tube_off_1 2", recipe = { { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "mesecons:mesecon", "mesecons:mesecon", "mesecons:mesecon" }, + { "mesecons:mesecon", "mesecons_materials:silicon", "mesecons:mesecon" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, + }) +end + +if minetest.get_modpath("digilines") and pipeworks.enable_digiline_detector_tube then + pipeworks.register_tube("pipeworks:digiline_detector_tube", { + description = "Digiline Detecting Pneumatic Tube Segment", + inventory_image = "pipeworks_digiline_detector_tube_inv.png", + plain = { "pipeworks_digiline_detector_tube_plain.png" }, + node_def = { + tube = {can_go = function(pos, node, velocity, stack) + local meta = minetest.get_meta(pos) + + local setchan = meta:get_string("channel") + + digiline:receptor_send(pos, digiline.rules.default, setchan, stack:to_string()) + + return pipeworks.notvel(pipeworks.meseadjlist, velocity) + end}, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", + "size[8.6,2.2]".. + "field[0.6,0.6;8,1;channel;Channel:;${channel}]".. + "image[0.3,1.3;1,1;pipeworks_digiline_detector_tube_inv.png]".. + "label[1.6,1.2;Digiline Detecting Tube]" + ) + end, + on_receive_fields = function(pos, formname, fields, sender) + if fields.channel then + minetest.get_meta(pos):set_string("channel", fields.channel) + end + end, + groups = {}, + digiline = { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) end + } + }, + }, + }) + + minetest.register_craft( { + output = "pipeworks:digiline_detector_tube_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "digilines:wire_std_00000000", "mesecons_materials:silicon", "digilines:wire_std_00000000" }, { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } }, }) @@ -99,10 +148,10 @@ if pipeworks.enable_conductor_tube then }) minetest.register_craft( { - output = "pipeworks:detector_tube_off_1 2", + output = "pipeworks:conductor_tube_off_1 6", recipe = { { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, - { "mesecons:mesecon", "mesecons_materials:silicon", "mesecons:mesecon" }, + { "mesecons:mesecon", "mesecons:mesecon", "mesecons:mesecon" }, { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } }, }) diff --git a/mods/pipeworks/textures/pipeworks_digiline_detector_tube_end.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_end.png new file mode 100644 index 0000000000000000000000000000000000000000..e9d01bae4c895d88ab7b2d180c7801b32b726c19 GIT binary patch literal 1068 zcmV+{1k?M8P)^2dM&Pp9%LymL!PGd^#Bzo8wi8V}VEU2Aa z4;#u!dAFig`aU*%x#8VCwaU@hkfS3Xo`D}jfsJ4o^Whn&A|D$n$hncb0X9TXa$~0y zpZgYgN<~6U?s_9%=_nfMsMq&}6u&t^;D)}^M*ES8A~}3?r5;U$8OcC+!J{7b#2BOQ zg&u@TjY2tmkPl`kLM`2y3LFzk6DW6VgbI~o94SM`^nK-yhdm)e#~W&)`I)X($9%gx zWQ!!<7jMO;DEFlo9`aq9|IEvEa>%m3_hsn)$oAXxbSnSa?Bc`Wc&MFrDQ5-08awL^ z6cmt=K$W?Y#v`9d=vYwmC*ek}1#IYA z(@5!>aN&wPr=nF7pTZt2>H5w^O2?9mNwk8zq>-%QPk9ea>3HHIrE5XM3l8Lb$k-SG zjOfZ}tmxX%@N}NSksM;)AS;yw)^xpa7AM(0&;C0VMUm}}Kl7qIA~-yGp7&kdix-VIze429?D=ewRKC&p+! z44jdSOyEzXQX|KohkqC~kl{c`Aszz67kB6?;VT{Xj4?xHv?qKi)I(3YMg?lDT-W#R z2g(m+=qP^}_+DQQ`vc=dVHEH=;pg0Vy%X5*{WUjo>0-kKM`{b+C3iz?ID>*(!MlSV zU?UpEoULfR^#W}8?vb;YRw^dg2!j)6F|ECEvEkeuXw0c?A=45Yp;ysZP>Uf~J#6$% z!c`3AY=n)zU(gX#C>I-2J-=|Zpi&+-22nPrF{k!I<|%B1`b5InjK(VJW24_Mc%rf7 zEK?dA+Amqqc;+k_JJ^VHN^8p5YiO|H_*+^rXB$soL+XTgQ);>6V8a9@?_z34X|Uma mJ#Zt_5*sSaxDor3PyG+7WQ2jMDLr-o0000(`)YR40)z;S5*VotB*x1?G+1uOO+}zyV-QC{a-Y2H>3;+NC z0d!JMQvg8b*k%9#00Cl4M??UK1szBL000SaNLh0L01FcU01FcV0GgZ_00007bV*G` z2jBz}5-ByFCKL_uzZ#@fk-eDu^QS;MyEs8ZZ*cq+&Vl4{B+IX=s z*c<1e76nw;Qy8TYwIy;waw-9C73=uKkx?A1BG8*HU%*?IBA25V6xQQJDvbkw3CRp(5gLM2)2 z%$^)Uvb8h0!IO0VI#Y|Dj1Ynok2xx1v^;vTA!linW~taYs<+BsYn;ZJoz^&2X)A~h v8u_j>((d=~wfT?Le}|twd>G+>O%ow3thOsh00000NkvXXu0mjf5n*=e literal 0 HcmV?d00001 diff --git a/mods/pipeworks/textures/pipeworks_digiline_detector_tube_noctr.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_noctr.png new file mode 100644 index 0000000000000000000000000000000000000000..6f078863ad8536cccf35545ae01af85357d491ca GIT binary patch literal 892 zcmV-?1B3jDP)-F& zgQ7t$Dw<4fP3`{K=U6~9VkKpz&*5|NWW|Nrbul5r4Hssfz{G?753P`sTn{nf=pC&) zPPR&7!jCFC_Z+?H5EH}jKqup9D-|Y!Z#A8SqqVrlgwQ!h1&t@FVSouwt~q+5@j?}A zOenjcXHII3F)_NY>3ja=`IwMiNy6EB>uF4Qx+0EWQCk`lGT!sYBk(H{nDC;MKOTWP zbTOg4f(wQ1VM2Hn7dA@qxgVaRR4BycW)QndhheP4!O#_ZF4SQtqkCKGcp`#WdcyJU zbutGcgzKi9O*vU` zw&1!IXSbXz=~;5sjGj3s51dW8Zq8Z8$(+uN#)Rvh=qzYVx%88-Tk)BcuS@96=^Jy+ zioPYCHGLDVnbY@^qcuHquA0*Gz|oq%gll5@aykq8R$Q~B@0nJb<=Z0v?@*RyzS;jS z%4%2SRlx^!nbq5QUDZ``c>Ooq98e`MZRz>%?Iv8DivGq z%>OG;Bk7NX6ynZ9e6u5430G-<5ClP_0__M_iX|7Sk#c?MTgr_**BQ!aI0~%L4?R97 z+=2_QHv$u`yW~P4ZA=8-o<_pE>?Xp5H7aS8yxZv!Cc-$SwczA!;9b>8YvWNfQey{ah5{$6k}rOmh_~Q%Ep9LkI$SX z)XKrcD9mScW;CA39fb*BAINAu(OHB;Obmx54|L|Va-}h$-HL?HBdu&~VItIPPNuY8 z{Qwh|`@%^|Yvl+`NS*O+N~5qWOaxxVyOhRW2AFWZ@3@d_i3#QBTu5EXr~U_J>fxan SDlsbn0000< literal 0 HcmV?d00001 diff --git a/mods/pipeworks/textures/pipeworks_digiline_detector_tube_plain.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_plain.png new file mode 100644 index 0000000000000000000000000000000000000000..86ded6f9e00b20f7c196deccd7596c10211d84f3 GIT binary patch literal 1500 zcmV<21ta>2P)Cf>sHv%`s;a81tE;T6tgWrBuCA`H zudlGMu(7eRva+(Xv$M3cw6(Rhwzjsnx3{>sxVgExy1Kf%ySu!+yuH1>zP`S{zrVo1 zz`?=6!otGC!^6bH#KpzM#>U3S$H&OX$jQmc%F4>i%gfBn%+1Zs&d$!y&(F}%(9zM+ z($dn?)6>+{)YaA1*4Eb7*VowC*xA|H+S=OO+}z&Y-r(Ti;o;%t=H`cAS8V_Q00DGT zPE!Ct=GbNc0004EOGiWihy@);00009a7bBm000XU000XU0RWnu7ytkO2XskIMF-#n z5)vshF*E@c000CdNklToR z4=#XNO-F=fj9D|T7>LjepEb9Z#p6C1Rm-Yr+R0I|p<8yX*05{EQd-JLKc&)XNls^F zMNa3GT+XbYRZP2aqPY#z(5l9nT`y|KxYlRQE<2XhaLoFtdFs|R$2O(SY&xaL86};S zo+(mR&ZZRAG#%9~=~m^qUeq*4t=4VL=KHYQy&K=$PDky*c;elAeb1lxl6>&4u)BG% zvr~Av_vii}J8xv^+h}q#oX`Eg`?tO6^lloM-wp|R{ODO~i#3N*hR7L@7?98=AZ7Ll zykzNpI!ok&gaNS@D{TU@a!BAemJSq|g(fRaVqI3c1TxAiLfgdlvkD7+Rz4HECgB>$ z$pu0?#CD`S3oQ~l#Lii10y*h5kxdr%(ph31RtCg6L|Oz+fV{Lz^Hzth%FBRr&do4JngX6j{!t zQ%^HFC7nJoEvupGE$1)SDw|GOGd1nhK>JXsS1e7pY^UhDZryV2s-|b8Y2*V|mdtvo?5Z`VX7D&oAG7A`k%kCezh=$YtRTWQ?g+G58XVOT zp_V-Y9!pcZjEGvJN2p8ezGxsquiO#p5gTeJh;WQKp&qe`TS0_+G$qm^a04UTM1)hF z5or_X!PqJyqT~)(>4AUQKtxIRNa*2N6-1cU#T6@UW>ysu<=Uu4q($J0QPo0(W6v27 zx+K!Al@L)Xd7KmJ5E@xFB5d8KP2_^m;8;aO%^nhK68h@6h*0$#Vm(6rs)h*D9jqxG)c}xh1XyMhtgcToen~)-A3Q zj0El}3`!1L*y3u735GiwgCd3P(cor@5#bKQpeEQ@iyMWBJ??k_js#oK01z0smR#GX^0>FZd+zmyZvv4_kb|z{NxeOMnjr z!N!jm#F&U+W4Nh8*w_gdgpq{J$4$p!qa!YS{7Z)>`~H6Fe&ug@(>HbV zR@CRF*|k~o)0o!eUDum>S9Pxi!RAUqn{AZxh|5GRw@Dz$dx=)WyfBek1WQ5DI#@YM zGASYk8&UWWa~3GE=0f|NNNf~&BGQbcb{y$3UwS-}&w?wd1!l9^Z1xTP0gxpkntUO| QJpcdz07*qoM6N<$f*K{?ng9R* literal 0 HcmV?d00001 diff --git a/mods/pipeworks/textures/pipeworks_digiline_filter_input.png b/mods/pipeworks/textures/pipeworks_digiline_filter_input.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ffa53bcaaa96ca6d71e636b9654159b7f6332a GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(awYD@54G#2lcTG-Aa0uNm zrR=MysOVs89TyWNz_HXFsEo6~BeIx*fm;}a85w5HkpK#^mw5WRvft+s66O+PU^m+f z6iV`RaSY+OuG_nt^MC;lYbeY4N2Wn6HV!VAb_vQI*m!An!?8X)w>@6RWeq-OHwOl9 zKA2IcVBF0+#UX?%==JX~x6o%QR#Q$E3D+7m{#2^EldS*!%O&p$f$7Jy1ysMU37eAg YFHFUlGp^6t5ojBOr>mdKI;Vst0Atxl-~a#s literal 0 HcmV?d00001 diff --git a/mods/pipeworks/textures/pipeworks_digiline_filter_output.png b/mods/pipeworks/textures/pipeworks_digiline_filter_output.png new file mode 100644 index 0000000000000000000000000000000000000000..4c57d0abdb5de861e850384dee0c32dc3c628b5f GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU^>lYlPE4@2G!G39bO_zA zsHo^*YaJI8#rmo)38;p%z$3Dlfq`2Xgc%uT&5-~KvX^-Jy0YKr5fbK7+_7u&CZJG= zr;B3<$Mw>)8wC#-a4EE+D83Uv6C8FZzf%Y+Yy85}Sb4q9e0KQC4aR2}S literal 0 HcmV?d00001 diff --git a/mods/pipeworks/textures/pipeworks_digiline_filter_top.png b/mods/pipeworks/textures/pipeworks_digiline_filter_top.png new file mode 100644 index 0000000000000000000000000000000000000000..04ffda01e6a136ac44b7ceef4f9506ee9c96fc97 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(awYD@54G#2lcTG-AkW%(_ z2;Hx!s2CR$gol_Eal|aox4|Am;%E0haHns+?g(q8zi<3v6IuHcL3CZCzb=$Y_0RT4LJi#%mX3 zGA>W!bhB^&Vv&#HXxUHx3vIVCg!0LPq3tpET3 literal 0 HcmV?d00001 diff --git a/mods/pipeworks/wielder.lua b/mods/pipeworks/wielder.lua index cc8147da..09719b29 100755 --- a/mods/pipeworks/wielder.lua +++ b/mods/pipeworks/wielder.lua @@ -10,7 +10,7 @@ end local function set_wielder_formspec(data, meta) meta:set_string("formspec", - "size[8,"..(6+data.wield_inv_height)..";]".. + "invsize[8,"..(6+data.wield_inv_height)..";]".. "item_image[0,0;1,1;"..data.name_base.."_off]".. "label[1,0;"..minetest.formspec_escape(data.description).."]".. "list[current_name;"..minetest.formspec_escape(data.wield_inv_name)..";"..((8-data.wield_inv_width)*0.5)..",1;"..data.wield_inv_width..","..data.wield_inv_height..";]"..