diff --git a/tubes/tags.lua b/tubes/tags.lua index ef3c18f..5911552 100644 --- a/tubes/tags.lua +++ b/tubes/tags.lua @@ -8,139 +8,139 @@ local tube_name = "pipeworks:tags_tube" local tube_description = S("Tags Sorting Pneumatic Tube Segment") local safe_tags = function(tags) - local length_limit = tonumber(minetest.settings:get("pipeworks_item_tag_name_limit") or "30") - return tags:sub(1, length_limit * 6) + local length_limit = tonumber(minetest.settings:get("pipeworks_item_tag_name_limit") or "30") + return tags:sub(1, length_limit * 6) end local update_formspec = function(pos) - local meta = minetest.get_meta(pos) - local buttons_formspec = "" - for i = 0, 5 do - buttons_formspec = buttons_formspec .. fs_helpers.cycling_button(meta, - "image_button[9," .. (i + (i * 0.25) + 1.5) .. ";1,0.6", "l" .. (i + 1) .. "s", - { - pipeworks.button_off, - pipeworks.button_on - } - ) - end - local size = "10.2,10" - meta:set_string("formspec", - "formspec_version[2]" .. - "size[" .. size .. "]" .. - "item_image[0.2,0.2;1,1; " .. tube_name .. "]" .. - "label[1.5,0.75;" .. minetest.formspec_escape(tube_description) .. "]" .. - pipeworks.fs_helpers.get_prepends(size) .. - "field[1.5,1.25;7.25,1;tags1;;${tags1}]" .. - "field[1.5,2.5;7.25,1;tags2;;${tags2}]" .. - "field[1.5,3.75;7.25,1;tags3;;${tags3}]" .. - "field[1.5,5.0;7.25,1;tags4;;${tags4}]" .. - "field[1.5,6.25;7.25,1;tags5;;${tags5}]" .. - "field[1.5,7.5;7.25,1;tags6;;${tags6}]" .. + local meta = minetest.get_meta(pos) + local buttons_formspec = "" + for i = 0, 5 do + buttons_formspec = buttons_formspec .. fs_helpers.cycling_button(meta, + "image_button[9," .. (i + (i * 0.25) + 1.5) .. ";1,0.6", "l" .. (i + 1) .. "s", + { + pipeworks.button_off, + pipeworks.button_on + } + ) + end + local size = "10.2,10" + meta:set_string("formspec", + "formspec_version[2]" .. + "size[" .. size .. "]" .. + "item_image[0.2,0.2;1,1; " .. tube_name .. "]" .. + "label[1.5,0.75;" .. minetest.formspec_escape(tube_description) .. "]" .. + pipeworks.fs_helpers.get_prepends(size) .. + "field[1.5,1.25;7.25,1;tags1;;${tags1}]" .. + "field[1.5,2.5;7.25,1;tags2;;${tags2}]" .. + "field[1.5,3.75;7.25,1;tags3;;${tags3}]" .. + "field[1.5,5.0;7.25,1;tags4;;${tags4}]" .. + "field[1.5,6.25;7.25,1;tags5;;${tags5}]" .. + "field[1.5,7.5;7.25,1;tags6;;${tags6}]" .. - "image[0.22,1.25;1,1;pipeworks_white.png]" .. - "image[0.22,2.50;1,1;pipeworks_black.png]" .. - "image[0.22,3.75;1,1;pipeworks_green.png]" .. - "image[0.22,5.00;1,1;pipeworks_yellow.png]" .. - "image[0.22,6.25;1,1;pipeworks_blue.png]" .. - "image[0.22,7.50;1,1;pipeworks_red.png]" .. - buttons_formspec .. - "button[6,8.75;1.5,1;set_items_tags;" .. S("Set") .. "]" .. - "button_exit[7.75,8.75;2,1;close;" .. S("Close") .. "]" - ) + "image[0.22,1.25;1,1;pipeworks_white.png]" .. + "image[0.22,2.50;1,1;pipeworks_black.png]" .. + "image[0.22,3.75;1,1;pipeworks_green.png]" .. + "image[0.22,5.00;1,1;pipeworks_yellow.png]" .. + "image[0.22,6.25;1,1;pipeworks_blue.png]" .. + "image[0.22,7.50;1,1;pipeworks_red.png]" .. + buttons_formspec .. + "button[6,8.75;1.5,1;set_items_tags;" .. S("Set") .. "]" .. + "button_exit[7.75,8.75;2,1;close;" .. S("Close") .. "]" + ) end pipeworks.register_tube(tube_name, { - description = tube_description, - inventory_image = "pipeworks_tag_tube_inv.png", - noctr = { "pipeworks_tag_tube_noctr_1.png", "pipeworks_tag_tube_noctr_2.png", "pipeworks_tag_tube_noctr_3.png", - "pipeworks_tag_tube_noctr_4.png", "pipeworks_tag_tube_noctr_5.png", "pipeworks_tag_tube_noctr_6.png" }, - plain = { "pipeworks_tag_tube_plain_1.png", "pipeworks_tag_tube_plain_2.png", "pipeworks_tag_tube_plain_3.png", - "pipeworks_tag_tube_plain_4.png", "pipeworks_tag_tube_plain_5.png", "pipeworks_tag_tube_plain_6.png" }, - ends = { "pipeworks_tag_tube_end.png" }, - short = "pipeworks_tag_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 stack_tag = pipeworks.get_item_tag(stack) - if not stack_tag or stack_tag == "" then - stack_tag = notag_name - end - stack_tag = pipeworks.safe_tag(stack_tag) - 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 tags_name = "tags" .. i - local tags = meta:get_string(tags_name) - local is_empty = tags == nil or tags == "" - if not is_empty then - for tag in string.gmatch(tags, "[^,]+") do - tag = pipeworks.safe_tag(tag) - if tag and tag == stack_tag 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("Tags Sorting pneumatic tube")) - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - if placer and placer:is_player() and placer:get_player_control().aux1 then - local meta = minetest.get_meta(pos) - for i = 1, 6 do - meta:set_int("l" .. tostring(i) .. "s", 0) - end - update_formspec(pos) - end - return pipeworks.after_place(pos, placer, itemstack, pointed_thing) - end, - on_receive_fields = function(pos, formname, fields, sender) - if (fields.quit and not fields.key_enter_field) - or not pipeworks.may_configure(pos, sender) then - return - end + description = tube_description, + inventory_image = "pipeworks_tag_tube_inv.png", + noctr = { "pipeworks_tag_tube_noctr_1.png", "pipeworks_tag_tube_noctr_2.png", "pipeworks_tag_tube_noctr_3.png", + "pipeworks_tag_tube_noctr_4.png", "pipeworks_tag_tube_noctr_5.png", "pipeworks_tag_tube_noctr_6.png" }, + plain = { "pipeworks_tag_tube_plain_1.png", "pipeworks_tag_tube_plain_2.png", "pipeworks_tag_tube_plain_3.png", + "pipeworks_tag_tube_plain_4.png", "pipeworks_tag_tube_plain_5.png", "pipeworks_tag_tube_plain_6.png" }, + ends = { "pipeworks_tag_tube_end.png" }, + short = "pipeworks_tag_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 stack_tag = pipeworks.get_item_tag(stack) + if not stack_tag or stack_tag == "" then + stack_tag = notag_name + end + stack_tag = pipeworks.safe_tag(stack_tag) + 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 tags_name = "tags" .. i + local tags = meta:get_string(tags_name) + local is_empty = tags == nil or tags == "" + if not is_empty then + for tag in string.gmatch(tags, "[^,]+") do + tag = pipeworks.safe_tag(tag) + if tag and tag == stack_tag 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("Tags Sorting pneumatic tube")) + end, + after_place_node = function(pos, placer, itemstack, pointed_thing) + if placer and placer:is_player() and placer:get_player_control().aux1 then + local meta = minetest.get_meta(pos) + for i = 1, 6 do + meta:set_int("l" .. tostring(i) .. "s", 0) + end + update_formspec(pos) + end + return pipeworks.after_place(pos, placer, itemstack, pointed_thing) + end, + on_receive_fields = function(pos, formname, fields, sender) + if (fields.quit and not fields.key_enter_field) + or not pipeworks.may_configure(pos, sender) then + return + end - local meta = minetest.get_meta(pos) - for i = 1, 6 do - local field_name = "tags" .. tostring(i) - if fields[field_name] then - local safe_tags = safe_tags(fields[field_name]) - meta:set_string(field_name, safe_tags) - end - end + local meta = minetest.get_meta(pos) + for i = 1, 6 do + local field_name = "tags" .. tostring(i) + if fields[field_name] then + local safe_tags = safe_tags(fields[field_name]) + meta:set_string(field_name, safe_tags) + end + end - fs_helpers.on_receive_fields(pos, fields) - update_formspec(pos) - end, - can_dig = function(pos, player) - return true - end, - }, + fs_helpers.on_receive_fields(pos, fields) + update_formspec(pos) + end, + can_dig = function(pos, player) + return true + end, + }, })