From e388dc8538b2994dfb4fd344d447c367f283b295 Mon Sep 17 00:00:00 2001 From: Zenon Seth Date: Mon, 13 Nov 2023 23:39:22 +0000 Subject: [PATCH] Add lots of craft items; update textures, names, roadmap --- ROADMAP.md | 3 +- api/access_point.lua | 2 +- api/cables.lua | 46 +++++++++--------- api/injector.lua | 2 +- api/item_storage.lua | 2 +- api/mass_storage.lua | 2 +- api/requester.lua | 2 +- api/supplier.lua | 2 +- item/craft_item.lua | 46 +++++++++++++----- item/craft_item_nodes.lua | 22 ++++++++- registration/item_recipes.lua | 27 ++++++++++ .../{nodes.lua => machines_api_reg.lua} | 25 ++++++---- registration/node_recipes.lua | 4 ++ registration/registration.lua | 4 +- ...rk_tool.png => logistica_hyperspanner.png} | Bin ...er_cable.png => logistica_optic_cable.png} | Bin ..._inv.png => logistica_optic_cable_inv.png} | Bin textures/logistica_photonizer.png | Bin 0 -> 3169 bytes textures/logistica_photonizer_reversed.png | Bin 0 -> 3176 bytes textures/logistica_silverin_circuit.png | Bin 0 -> 3119 bytes textures/logistica_silverin_mirror_box.png | Bin 0 -> 3423 bytes textures/logistica_silverin_plate.png | Bin 0 -> 3258 bytes textures/logistica_silverin_plate_inv.png | Bin 0 -> 2908 bytes textures/logistica_standing_wave_box.png | Bin 0 -> 3228 bytes tools/tools.lua | 15 +++--- 25 files changed, 142 insertions(+), 62 deletions(-) create mode 100644 registration/item_recipes.lua rename registration/{nodes.lua => machines_api_reg.lua} (86%) create mode 100644 registration/node_recipes.lua rename textures/{logistica_network_tool.png => logistica_hyperspanner.png} (100%) rename textures/{logistica_silver_cable.png => logistica_optic_cable.png} (100%) rename textures/{logistica_silver_cable_inv.png => logistica_optic_cable_inv.png} (100%) create mode 100644 textures/logistica_photonizer.png create mode 100644 textures/logistica_photonizer_reversed.png create mode 100644 textures/logistica_silverin_circuit.png create mode 100644 textures/logistica_silverin_mirror_box.png create mode 100644 textures/logistica_silverin_plate.png create mode 100644 textures/logistica_silverin_plate_inv.png create mode 100644 textures/logistica_standing_wave_box.png diff --git a/ROADMAP.md b/ROADMAP.md index 4687d1e..0b1faac 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -7,9 +7,10 @@ High Priority: - Mesecons compat Medium Priority -- inv_plus compatibility +- Lava Furnace inv_plus recpies - Autocrafter - Network Crafter +- Enable translation for all strings - Add crafting grid to Access Point Low Priority: diff --git a/api/access_point.lua b/api/access_point.lua index beb4ace..42a9949 100644 --- a/api/access_point.lua +++ b/api/access_point.lua @@ -62,7 +62,7 @@ minetest.register_on_player_receive_fields(logistica.on_receive_access_point_for -- `simpleName` is used for the description and for the name (can contain spaces) function logistica.register_access_point(desc, name, tiles) local lname = string.lower(name:gsub(" ", "_")) - local access_point_name = "logistica:access_point_"..lname + local access_point_name = "logistica:"..lname logistica.misc_machines[access_point_name] = true local grps = {oddly_breakable_by_hand = 3, cracky = 3 } grps[logistica.TIER_ALL] = 1 diff --git a/api/cables.lua b/api/cables.lua index c9e123b..05fb61d 100644 --- a/api/cables.lua +++ b/api/cables.lua @@ -1,31 +1,32 @@ --- todo: rework this to make tiers not tied to cable name and to be optional -- Main function to register a new cable of certain tier -function logistica.register_cable(tier, size) - local ltier = string.lower(tier) - local cable_name = "logistica:" .. ltier .. "_cable" - local cable_group = logistica.get_cable_group(ltier) - logistica.cables[cable_name] = tier - logistica.tiers[ltier] = true +-- customNodeBox can specify any of the fixed/connect_DIR - values will be overwritten per-item basis +function logistica.register_cable(desc, name, size, customNodeBox) + local lname = string.lower(name) + local cable_name = "logistica:" .. lname + local cable_group = logistica.get_cable_group(lname) + logistica.cables[cable_name] = name + logistica.tiers[lname] = true + local cnb = customNodeBox or {} local node_box = { type = "connected", - fixed = { -size, -size, -size, size, size, size }, - connect_top = { -size, -size, -size, size, 0.5, size }, -- y+ - connect_bottom = { -size, -0.5, -size, size, size, size }, -- y- - connect_front = { -size, -size, -0.5, size, size, size }, -- z- - connect_back = { -size, -size, size, size, size, 0.5 }, -- z+ - connect_left = { -0.5, -size, -size, size, size, size }, -- x- - connect_right = { -size, -size, -size, 0.5, size, size }, -- x+ + fixed = cnb.fixed or { -size, -size, -size, size, size, size }, + connect_top = cnb.connect_top or { -size, -size, -size, size, 0.5, size }, -- y+ + connect_bottom = cnb.connect_bottom or { -size, -0.5, -size, size, size, size }, -- y- + connect_front = cnb.connect_front or { -size, -size, -0.5, size, size, size }, -- z- + connect_back = cnb.connect_back or { -size, -size, size, size, size, 0.5 }, -- z+ + connect_left = cnb.connect_left or { -0.5, -size, -size, size, size, size }, -- x- + connect_right = cnb.connect_right or { -size, -size, -size, 0.5, size, size }, -- x+ } local def = { - description = tier .. " Cable", - tiles = { "logistica_" .. ltier .. "_cable.png" }, - inventory_image = "logistica_" .. ltier .. "_cable_inv.png", - wield_image = "logistica_" .. ltier .. "_cable_inv.png", + description = desc, + tiles = { "logistica_" .. lname .. "_cable.png" }, + inventory_image = "logistica_" .. lname .. "_cable_inv.png", + wield_image = "logistica_" .. lname .. "_cable_inv.png", groups = { cracky = 3, choppy = 3, @@ -35,10 +36,11 @@ function logistica.register_cable(tier, size) sounds = logistica.node_sound_metallic(), drop = cable_name, paramtype = "light", + paramtype2 = "facedir", sunlight_propagates = true, drawtype = "nodebox", node_box = node_box, - connects_to = { "group:" .. cable_group, "group:"..logistica.get_machine_group(ltier), logistica.GROUP_ALL }, + connects_to = { "group:" .. cable_group, "group:"..logistica.get_machine_group(lname), logistica.GROUP_ALL }, on_construct = function(pos) logistica.on_cable_change(pos, nil) end, after_destruct = function(pos, oldnode) logistica.on_cable_change(pos, oldnode) end, } @@ -47,10 +49,10 @@ function logistica.register_cable(tier, size) local def_broken = {} for k, v in pairs(def) do def_broken[k] = v end - def_broken.tiles = { "logistica_" .. ltier .. "_cable.png^logistica_broken.png" } - def_broken.inventory_image = "logistica_" .. ltier .. "_cable_inv.png^logistica_broken.png" + def_broken.tiles = { "logistica_" .. lname .. "_cable.png^logistica_broken.png" } + def_broken.inventory_image = "logistica_" .. lname .. "_cable_inv.png^logistica_broken.png" def_broken.groups = { cracky = 3, choppy = 3, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1 } - def_broken.description = "Broken " .. tier .. " Cable" + def_broken.description = "Broken " .. desc def_broken.node_box = { type = "fixed", fixed = { -0.5, -size, -size, 0.5, size, size } } def_broken.selection_box = def_broken.node_box def_broken.connects_to = nil diff --git a/api/injector.lua b/api/injector.lua index fc621ec..0736f4e 100644 --- a/api/injector.lua +++ b/api/injector.lua @@ -116,7 +116,7 @@ minetest.register_on_player_receive_fields(on_player_receive_fields) -- transferRate is how many items per tick this injector can transfer, -1 for unlimited function logistica.register_injector(description, name, transferRate, tiles) local lname = string.lower(name:gsub(" ", "_")) - local injectorName = "logistica:injector_"..lname + local injectorName = "logistica:"..lname logistica.injectors[injectorName] = true local grps = {oddly_breakable_by_hand = 3, cracky = 3 } grps[logistica.TIER_ALL] = 1 diff --git a/api/item_storage.lua b/api/item_storage.lua index 77fb749..9404995 100644 --- a/api/item_storage.lua +++ b/api/item_storage.lua @@ -100,7 +100,7 @@ minetest.register_on_player_receive_fields(on_player_receive_fields) -- `simpleName` is used for the description and for the name (can contain spaces) function logistica.register_item_storage(desc, name, tiles) local lname = string.lower(name:gsub(" ", "_")) - local item_storage_name = "logistica:item_storage_"..lname + local item_storage_name = "logistica:"..lname logistica.item_storage[item_storage_name] = true local grps = {oddly_breakable_by_hand = 3, cracky = 3 } grps[logistica.TIER_ALL] = 1 diff --git a/api/mass_storage.lua b/api/mass_storage.lua index 19458ab..df8444a 100644 --- a/api/mass_storage.lua +++ b/api/mass_storage.lua @@ -331,7 +331,7 @@ minetest.register_on_player_receive_fields(on_receive_storage_formspec) function logistica.register_mass_storage(simpleName, description, numSlots, numItemsPerSlot, numUpgradeSlots, tiles) local lname = string.lower(string.gsub(simpleName, " ", "_")) - local storageName = "logistica:mass_storage_"..lname + local storageName = "logistica:"..lname local grps = {cracky = 1, choppy = 1, oddly_breakable_by_hand = 1} numUpgradeSlots = logistica.clamp(numUpgradeSlots, 0, 4) grps[logistica.TIER_ALL] = 1 diff --git a/api/requester.lua b/api/requester.lua index ac526cb..34dfc26 100644 --- a/api/requester.lua +++ b/api/requester.lua @@ -117,7 +117,7 @@ minetest.register_on_player_receive_fields(on_player_receive_fields) -- transferRate is how many items per tick this requester can transfer, -1 for unlimited function logistica.register_requester(description, name, transferRate, tiles) local lname = string.lower(name:gsub(" ", "_")) - local requester_name = "logistica:requester_"..lname + local requester_name = "logistica:"..lname logistica.requesters[requester_name] = true local grps = {oddly_breakable_by_hand = 3, cracky = 3 } grps[logistica.TIER_ALL] = 1 diff --git a/api/supplier.lua b/api/supplier.lua index da0913f..7258ce8 100644 --- a/api/supplier.lua +++ b/api/supplier.lua @@ -95,7 +95,7 @@ minetest.register_on_player_receive_fields(on_player_receive_fields) -- `inventorySize` should be 16 at max function logistica.register_supplier(desc, name, inventorySize, tiles) local lname = string.lower(name:gsub(" ", "_")) - local supplier_name = "logistica:passive_supplier_"..lname + local supplier_name = "logistica:"..lname logistica.suppliers[supplier_name] = true local grps = {oddly_breakable_by_hand = 3, cracky = 3 } grps[logistica.TIER_ALL] = 1 diff --git a/item/craft_item.lua b/item/craft_item.lua index 76aedc8..42cdce3 100644 --- a/item/craft_item.lua +++ b/item/craft_item.lua @@ -1,31 +1,53 @@ local S = logistica.TRANSLATOR +local L = function(str) return "logistica:"..str end logistica.craftitem.general = {} local items = logistica.craftitem.general -items["logistica:lava_unit"] = { +items[L("lava_unit")] = { description = S("A Unit of Lava\nUse in Lava Furnace or with Empty Bucket"), inventory_image = "logistica_lava_unit.png", stack_max = 1, } -items["logistica:silverin_slice"] = { +items[L("silverin_slice")] = { description = S("Silverin Slice"), inventory_image = "logistica_silverin_slice.png", stack_max = 99, } --- items["logistica:silverin_photonizer"] = { --- description = S("Silverin Phonizer"), --- inventory_image = "logistica_silverin_slice.png", --- stack_max = 99, --- } --- items["logistica:silverin_wavebox"] = { --- description = S("Standing-Wave State Maintainer"), --- inventory_image = "logistica_silverin_slice.png", --- stack_max = 99, --- } + +items[L("silverin_circuit")] = { + description = S("A Silverin Circuit"), + inventory_image = "logistica_silverin_circuit.png", + stack_max = 99, +} + +items[L("silverin_mirror_box")] = { + description = S("Silverin Mirror Box"), + inventory_image = "logistica_silverin_mirror_box.png", + stack_max = 99, +} + +items[L("photonizer")] = { + description = S("Photonizer\nE = M*C^2"), + inventory_image = "logistica_photonizer.png", + stack_max = 99, +} + +items[L("photonizer_reversed")] = { + description = S("Photonizer (Inverted Polarity)\nM = E/C^2"), + inventory_image = "logistica_photonizer_reversed.png", + stack_max = 99, +} + +items[L("standing_wave_box")] = { + description = S("Wave Function Maintainer"), + inventory_image = "logistica_standing_wave_box.png", + stack_max = 99, +} + for name, info in pairs(items) do minetest.register_craftitem(name, { diff --git a/item/craft_item_nodes.lua b/item/craft_item_nodes.lua index fc0cacd..9ecbc15 100644 --- a/item/craft_item_nodes.lua +++ b/item/craft_item_nodes.lua @@ -20,6 +20,7 @@ items["logistica:silverin"] = { }, drawtype = "nodebox", paramtype = "light", + paramtype2 = "facedir", node_box = { type = "fixed", fixed = { @@ -34,13 +35,30 @@ items["logistica:silverin"] = { stack_max = 99, } +items["logistica:silverin_plate"] = { + tiles = { "logistica_silverin_plate.png" }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { + {-0.50, -0.50, -0.50, 0.50, -7/16, 0.50} + } + }, + groups = { cracky = 2 }, + sounds = logistica.node_sound_metallic(), + description = S("Silverin Plate"), + inventory_image = "logistica_silverin_plate_inv.png", + stack_max = 99, +} + -- items["logistica:silverin_block"] = { -- description = S("Silverin Block"), --- inventory_image = "logistica_storage_upgrade_1.png", +-- tiles = "logistica_silverin_plate.png", -- stack_max = 99, -- } - for name, def in pairs(items) do minetest.register_node(name, def) end \ No newline at end of file diff --git a/registration/item_recipes.lua b/registration/item_recipes.lua new file mode 100644 index 0000000..7e132d6 --- /dev/null +++ b/registration/item_recipes.lua @@ -0,0 +1,27 @@ + +local function L(s) return "logistica:"..s end +local SILV = L("silverin") +local SILV_SLICE = L("silverin_slice") + +minetest.register_craft({ + output = SILV_SLICE.." 8", + type = "shapeless", + recipe = { SILV }, +}) + +minetest.register_craft({ + output = SILV, + type = "shapeless", + recipe = { + SILV_SLICE, SILV_SLICE, SILV_SLICE, SILV_SLICE, + SILV_SLICE, SILV_SLICE, SILV_SLICE, SILV_SLICE + }, +}) + +-- minetest.register_craft({ +-- output = L("network_tool"), +-- recipe = { + +-- } +-- }) + diff --git a/registration/nodes.lua b/registration/machines_api_reg.lua similarity index 86% rename from registration/nodes.lua rename to registration/machines_api_reg.lua index 06d7721..136441a 100644 --- a/registration/nodes.lua +++ b/registration/machines_api_reg.lua @@ -2,7 +2,7 @@ -- Access Point -------------------------------- -logistica.register_access_point("Access Point", "base", { +logistica.register_access_point("Access Point", "access_point", { "logistica_access_point_top.png", "logistica_access_point_bottom.png", "logistica_access_point_side.png^[transformFX", @@ -16,8 +16,13 @@ logistica.register_access_point("Access Point", "base", { -------------------------------- local CABLE_SIZE = 1/16 -logistica.register_cable("Silver", CABLE_SIZE) - +logistica.register_cable("Optic cable", "optic", CABLE_SIZE) +-- TODO: plate + cable = masked cable +-- logistica.register_cable("Optic cable", "optic_wall", CABLE_SIZE, { +-- fixed = { +-- { -CABLE_SIZE, -CABLE_SIZE, -CABLE_SIZE, CABLE_SIZE, CABLE_SIZE, CABLE_SIZE } +-- } +-- }) -------------------------------- -- Controller -------------------------------- @@ -73,14 +78,14 @@ local function imp_tiles(name) return { "logistica_"..name.."_injector_front.png", } end -logistica.register_injector("Slow Network Importer\nImports 10 items at a time", "slow", 10, imp_tiles("item")) -logistica.register_injector("Fast Network Importer\nImports 99 items at a time", "fast", 99, imp_tiles("stack")) +logistica.register_injector("Slow Network Importer\nImports 10 items at a time", "injector_slow", 10, imp_tiles("item")) +logistica.register_injector("Fast Network Importer\nImports 99 items at a time", "injector_fast", 99, imp_tiles("stack")) -------------------------------- -- Item Storage -------------------------------- -logistica.register_item_storage("Tool Box\nStores Tools Only", "simple", { +logistica.register_item_storage("Tool Box\nStores Tools Only", "item_storage", { "logistica_tool_box_top.png", "logistica_tool_box_bottom.png", "logistica_tool_box_side.png^[transformFX", @@ -93,7 +98,7 @@ logistica.register_item_storage("Tool Box\nStores Tools Only", "simple", { -- Mass Storage -------------------------------- -logistica.register_mass_storage("basic", "Mass Storage", 8, 1024, 4, { +logistica.register_mass_storage("mass_storage_basic", "Mass Storage", 8, 1024, 4, { "logistica_basic_mass_storage_top.png", "logistica_basic_mass_storage_top.png", "logistica_basic_mass_storage.png", "logistica_basic_mass_storage.png", "logistica_basic_mass_storage.png", "logistica_basic_mass_storage_front.png" @@ -112,14 +117,14 @@ local function ins_tiles(lname) return { "logistica_"..lname.."_requester_front.png", } end -logistica.register_requester("Item Request Inserter\nInserts 1 item at a time", "item", 1, ins_tiles("item")) -logistica.register_requester("Bulk Request Inserter\nInserts up to 64 items at a time", "stack", 64, ins_tiles("stack")) +logistica.register_requester("Item Request Inserter\nInserts 1 item at a time", "requester_item", 1, ins_tiles("item")) +logistica.register_requester("Bulk Request Inserter\nInserts up to 64 items at a time", "requester_stack", 64, ins_tiles("stack")) -------------------------------- -- Passive Supply Chest -------------------------------- -logistica.register_supplier("Passive Supplier Chest", "simple", 16, { +logistica.register_supplier("Passive Supplier Chest", "passive_supplier", 16, { "logistica_passive_supplier_top.png", "logistica_passive_supplier_bottom.png", "logistica_passive_supplier_side.png^[transformFX", diff --git a/registration/node_recipes.lua b/registration/node_recipes.lua new file mode 100644 index 0000000..6278165 --- /dev/null +++ b/registration/node_recipes.lua @@ -0,0 +1,4 @@ + +local SILV = "logistica:silverin" +local SILV_SLICE = "logistica:silverin_slice" + diff --git a/registration/registration.lua b/registration/registration.lua index 03208bb..ffaca7f 100644 --- a/registration/registration.lua +++ b/registration/registration.lua @@ -1,4 +1,6 @@ local path = logistica.MODPATH .. "/registration" -- once again, order is important -dofile(path.."/nodes.lua") +dofile(path.."/node_recipes.lua") +dofile(path.."/item_recipes.lua") +dofile(path.."/machines_api_reg.lua") dofile(path.."/lava_furnace_recipes.lua") diff --git a/textures/logistica_network_tool.png b/textures/logistica_hyperspanner.png similarity index 100% rename from textures/logistica_network_tool.png rename to textures/logistica_hyperspanner.png diff --git a/textures/logistica_silver_cable.png b/textures/logistica_optic_cable.png similarity index 100% rename from textures/logistica_silver_cable.png rename to textures/logistica_optic_cable.png diff --git a/textures/logistica_silver_cable_inv.png b/textures/logistica_optic_cable_inv.png similarity index 100% rename from textures/logistica_silver_cable_inv.png rename to textures/logistica_optic_cable_inv.png diff --git a/textures/logistica_photonizer.png b/textures/logistica_photonizer.png new file mode 100644 index 0000000000000000000000000000000000000000..459bba07072c2079fc63dec4675edd6c701571a3 GIT binary patch literal 3169 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 literal 0 HcmV?d00001 diff --git a/textures/logistica_photonizer_reversed.png b/textures/logistica_photonizer_reversed.png new file mode 100644 index 0000000000000000000000000000000000000000..efb0d8ac6ae6371feb5730297ce5d652a49276a6 GIT binary patch literal 3176 zcmaJ^e>~IqA0JK}r8_FW?zEOrer!0uhKMaDGcim=vwg-i+p^D?C5!wB$&bYOk#Lu< zAN?X6M^TCDTok3kMI4uIS3*O|_p|AgtGhow+g|VI>-BuS-mhPu$CBOMoYp94D8OK_ zH8^LC2lNdWKk}=fPY$0y4TH%#(1|3Fgm*<#SYbwFDk}&u;)Ssx90s$o9P>AgcaGP){4ef#1`Q8|kY!M+K z$VMZPk&%%`k)}qh@L;5|m6a6|Wr8#@F@!V>IZ;fI%rj(iHj62iI4}T*5>97>bQTjX z<|GHPxS%Zp0palXL8u=FY03C6Loe73uJLZSnTDXR=8M(KQV;T{dp4}nf*CsJpRAc!@^cvg9BnC zpv1i|!it#wcEBMqt9z+rL2DF8MC%HC#4;>3ADyVH39gM^_&N##J*utk`f`~&p; z7toQ#V1;`^O$gW`j3qYW%%O2% zNFOj;goO$6BR9UEg_i4pmPChVQK8^WCBc1waE^}d;Vc@R0bv{uCkHqV>u7FlWo~Y0 zVzlG|DjFKHrPHD?WDwFaL7A8u8XFrLn-Wb-(8d;Ml-V8$sYDSP8!8zj|A(r$@8LF7 z3L2z?3_v0+&A|=^xFju!47#}a(F`&(*cQPvqyjWDmjNQSQ^LtKFpv%cVH_KzcwQLv z_aqYOZx$Qm3Kup|ba*`4na%-O;ZYxX^#l&A^eP!UI9$?9Xfj1y3tI#`oJHkQ0IKAo zQ2a|MheZP;$>G3`V5pC55j$u!I#jhNxVv~j;LuQ_jLcVBM1}wm+hu9G_owl{gta2EGa449Qe<*Hhq+|BwnTWv1q+zp03WO zxYj@?WjRgTnAe#w`{D|YkOtl4#@=%mQ%iX5=_%7j9MsMzO@1yUg6(jNTC zxOKlO^#1yi?d;2e!4y@*j}$DwPz`$D+2Jrdh@=EzHjd$UUn{A_`f=ZJ;lr@9vUB+v z9$Ds=&t}!)w<$U?w)!RALF`{Gjjt;H#bGrKii z67SKD3)?D$5048E9&*}H?hMFpy}+8pvUJQ9R1CFo_R{OHr4tRc{yt7lKAQEy-VHT# z&m5iH1dSfCPZnC`0@KX<%MR5N?^*jB)yPQS@&yn zM=SiEf*YCOL<_1<@J3hP3o0zRrQSLcTLhcpTX^-4_}3p1R_$~?e%A3-Rr5iFi{)2s zNPW`z4%0!;X3>nswX9#JI|qbGzb)R8de%C%_Qk>(1L;+@IfP0;NfKtfh5fS%}|AY9&chTj@lecHSGjD%bcP=4|LfHgY z=)TV`s$QTy4oyK8?2rq{AfE_<NzB6|OH`+*NZJ7@ z-=3m(*Rj0^84bu&w`bbClOA5I_!8%RH6e>0^jJwT6%F_e-59i*SFspU`9`@>p|X_h zz4xy)LbpY2LjBIX;y+QSZ0fXwatmQn8~gSlmj6dW($m*91s6rX3=3~W&rvI=dYTqL zxoe&)DSn>4ZB^ ztxhn1;hOYS_wtEN&CzUu$WDMfh?RyVr7N+JV~V7jFGks@~MkV`|G;+4+0MBhB@!BFYf;o2oQPz literal 0 HcmV?d00001 diff --git a/textures/logistica_silverin_circuit.png b/textures/logistica_silverin_circuit.png new file mode 100644 index 0000000000000000000000000000000000000000..d875bf0d5ce19e40872bc7afb160d8603f176231 GIT binary patch literal 3119 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∨664rKPGbtVRX#USAKL5s;; ztc8_Rn)r2!{fQ!bK^S6l6djXkRvtSMW*)j>Egw hov1HPlO_vBm+M!u%+oA929^JdJl3qE{p1oZ`#-(`c%1+M literal 0 HcmV?d00001 diff --git a/textures/logistica_silverin_plate.png b/textures/logistica_silverin_plate.png new file mode 100644 index 0000000000000000000000000000000000000000..59de553d18264bcc165b80d036ed47f38a6bfc27 GIT binary patch literal 3258 zcmaJ^c|6ql8y`nvBqGFGO(XoAa|oH8A@?<8orA<2-(fTdGv9HQ#81n{=EzOSmWV~$ z*4TAcVs^_e{e)UlZKT@Wh9wm8`_3q3Yxj@u%sij>^Sqzu^IYH8eCgxussz`D!(cEa zcQ+?r=o=w^Kqk+yIIo=c=E_#^&jXDONe003MaghyfWKHbTrv zrf~Qm0f~fg#2a!Nb&WfQ&t*!OX;c)z1XutY{3gjAvkjSY}{g-3l5_v)qJ zTN;qv>KU|*psj{lTWgT8wip36v<vRiBg-|ASKH2p2m1dszdYV|(fEhDUR>g)K(~BkR?zJV{~S+ZrfzYb0cU=N6aMq{ z{)qD}Bg&We7QGmf;fMN|l7=R$0QH>qQ+RpSj*r;?<-6#J8ulsv0X70%mqYy`qOp26ehPY3;CjY^U6=!v|GxpF`g zdVeXzxCQfIFhw=-BLyp~*ap4t^4y*5{YgiYi#$0x!Y#s-fO~|`bQ;~AZ`)@eGL?32 z*Dv0;B=v_#6VW^>GhT2|1)(W(JbjL1__69;7X$frIa)XbDNw*L0?Y5Kfw!2A;-x$WgZWhd+K;vxr)c@-PWhE=+ z^&^pW$M&Sd^FI$CS{B;D((;O#jeQLT*+$y(vNg5vG_suF4^)#-n6orHvv=W~O|Gd~ zS)GH_LK;jqe^36BvuU`;%Wu24b?v`E$yUqgl1jnre%?gHG-TEXjew+_U_P0?bCb!TK!HY?(%Go`=Z@Tpwo8wV=yJz}O_{e;@;0=aXw=eO zh_V)4d8z)^r2+Ig`p{=GzEb7S{yWhgV_SJqk*E|~UaJ|r8IFL5jNNc~WxgN2(Bi4! zV4+urF*IRguV1k~zD=#;_eO=QXUs#(gL5lfHsorML%t4$ok%WoSE$_ZKvgfhux!O`OMVrZ-`+5#^t-}7o)Q@A_I?xyDjPyl=RO1(LvUE zxiGEwx_?(MhC-=TE9+mSHzf@a7wO zSlM|Fsi&0S2M(o1Dn|&9ee*>vJi{?7JiR<(OAiK_zr17QMCF-&D>2KTcE(n}xqP3n5O5VfkeZoF%C?S{?WF{b)mxjg{}_1!3apX|H>)%{Lxyi(BL z$I#PtB=17r#mGa}07Brt|EEuRQkNO!MOPM&iMd^7%A@Z|ia)b0Q?pw#H7`ly817(K|g}^g4?(QuIJQ=zDh~GUEiT^-c@( zMkt7a89CmZD97ctb+q2JFEJU#MK^%${W8Q;_4(DoC~ZN>Da#Ae5jrkQ%gY2&%2KNG z_QU5G(la{W7RY-=oTBIo!*oj@RYVGRyH?=*3%AXjy%T5Fg+>^k-HORp(LNXZHA9<{ zT?;odsEA)$NfE_*PiM?cEi`w&o;b$}ZK*$g_z7dgq{2^ESNHq&_G;0_-t5-a;ayb^ zN9T1mD~ZP1C+Frg(7!s~+_krNhA5xfA+kB?4XuWr*zv*o`?A)f#M literal 0 HcmV?d00001 diff --git a/textures/logistica_silverin_plate_inv.png b/textures/logistica_silverin_plate_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..6f5db8ff1c94434cb5878f66e5c5d46d1ba6b6de GIT binary patch literal 2908 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 literal 0 HcmV?d00001 diff --git a/tools/tools.lua b/tools/tools.lua index b529ace..0f9ffb3 100644 --- a/tools/tools.lua +++ b/tools/tools.lua @@ -1,21 +1,20 @@ local S = logistica.TRANSLATOR -minetest.register_craftitem("logistica:network_tool",{ - description = S("Logistica Network Tool\nUse on a node to see network info"), - short_description = S("Logistica Network Tool"), - inventory_image = "logistica_network_tool.png", - wield_image = "logistica_network_tool.png", +minetest.register_craftitem("logistica:hyperspanner",{ + description = S("Hyperspanner\nA multipurpose engineering tool\nUse on nodes for network info.\nCan also reverse poliarity."), + short_description = S("Hyperspanner"), + inventory_image = "logistica_hyperspanner.png", + wield_image = "logistica_hyperspanner.png", stack_max = 1, on_place = function(itemstack, placer, pointed_thing) local pos = pointed_thing.under if not placer or not pos then return end local node = minetest.get_node_or_nil(pos) if not node or node.name:find("logistica:") == nil then return end - local network = logistica.get_network_name_or_nil(pos) or "" - -- minetest.chat_send_player(placer:get_player_name(), "Network: "..network) + local network = logistica.get_network_name_or_nil(pos) or S("") logistica.show_popup( placer:get_player_name(), - "("..pos.x..","..pos.y..","..pos.z..") Network: "..network + "("..pos.x..","..pos.y..","..pos.z..") .."..S("Network")..": "..network ) end })