From bb77e194616463849ac2aea3f420a7957c495c7a Mon Sep 17 00:00:00 2001 From: mrkubax10 Date: Fri, 10 Mar 2023 21:06:10 +0100 Subject: [PATCH] Add developer utility Power Storage Inspector --- init.lua | 4 +++ utils.lua | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 utils.lua diff --git a/init.lua b/init.lua index 3ae942c..ef5dff9 100644 --- a/init.lua +++ b/init.lua @@ -22,6 +22,7 @@ industrialtest={} -- Initial constants industrialtest.updateDelay=1 -- Note: Make this value smaller to make machines update more frequently (it may make server more laggy) +industrialtest.developerMode=true -- Enables additional utils useful when developing mod -- load other lua files dofile(modpath.."/compatibility.lua") @@ -30,3 +31,6 @@ dofile(modpath.."/minerals.lua") dofile(modpath.."/machines.lua") dofile(modpath.."/craftitems.lua") dofile(modpath.."/nodes.lua") +if industrialtest.developerMode then + dofile(modpath.."/utils.lua") +end diff --git a/utils.lua b/utils.lua new file mode 100644 index 0000000..986c540 --- /dev/null +++ b/utils.lua @@ -0,0 +1,78 @@ +-- IndustrialTest +-- Copyright (C) 2023 mrkubax10 + +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. + +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. + +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +local S=minetest.get_translator("industrialtest") + +local powerStorageInspectorContext={} +local function inspectNode(pos,playerName) + local meta=minetest.get_meta(pos) + local powerCapacity=meta:get_int("industrialtest.powerCapacity") + local powerFlow=meta:get_int("industrialtest.powerFlow") + local powerAmount=meta:get_int("industrialtest.powerAmount") + local powerIOConfig=meta:get_string("industrialtest.ioConfig") + local formspec={ + "formspec_version[4]", + "size[8,8]", + "label[0.5,0.5;"..S("Power Storage Inspector").."]", + "label[0.5,1.5;"..S("Power Capacity: @1",powerCapacity).."]", + "label[0.5,1.9;"..S("Power Flow: @1",powerFlow).."]", + "label[0.5,2.3;"..S("Power Amount: @1",powerAmount).."]", + "label[0.5,2.7;"..S("Power IO Config: @1",powerIOConfig).."]", + "field[0.5,3.7;2,0.5;powerCapacity;"..S("Power Capacity")..";"..powerCapacity.."]", + "field[0.5,4.5;2,0.5;powerFlow;"..S("Power Flow")..";"..powerFlow.."]", + "field[0.5,5.4;2,0.5;powerAmount;"..S("Power Amount")..";"..powerAmount.."]", + "field[0.5,6.2;2,0.5;powerIOConfig;"..S("Power IO Config")..";"..powerIOConfig.."]", + "button[0.5,6.8;2,0.5;update;"..S("Update").."]", + "button[4.2,1.25;2.8,0.5;triggerNeighbours;"..S("Trigger Neighbours").."]" + } + powerStorageInspectorContext[playerName]=pos + minetest.show_formspec(playerName,"industrialtest:power_storage_inspector_formspec",table.concat(formspec,"")) +end +minetest.register_craftitem("industrialtest:power_storage_inspector",{ + description=S("Power Storage Inspector"), + inventory_image="industrialtest_power_storage_inspector.png", + on_place=function(itemstack,user,pointed) + if pointed.type=="node" and user and user:is_player() then + local meta=minetest.get_meta(pointed.under) + if industrialtest.api.hasPowerStorage(meta) then + inspectNode(pointed.under,user:get_player_name()) + end + end + end +}) + +minetest.register_on_player_receive_fields(function(player,formname,fields) + if formname~="industrialtest:power_storage_inspector_formspec" then + return false + end + local context=powerStorageInspectorContext[player:get_player_name()] + if fields.update then + local meta=minetest.get_meta(context) + meta:set_int("industrialtest.powerCapacity",tonumber(fields.powerCapacity)) + meta:set_int("industrialtest.powerFlow",tonumber(fields.powerFlow)) + meta:set_int("industrialtest.powerAmount",tonumber(fields.powerAmount)) + meta:set_string("industrialtest.powerIOConfig",fields.powerIOConfig) + local def=minetest.registered_nodes[minetest.get_node(context).name] + if def and def._industrialtest_updateFormspec then + def._industrialtest_updateFormspec(meta) + end + inspectNode(context,player:get_player_name()) + elseif fields.triggerNeighbours then + industrialtest.api.triggerNeighbours(context) + end + powerStorageInspectorContext[player:get_player_name()]=nil + return true +end)