diff --git a/init.lua b/init.lua index c0044f7..a532aaa 100644 --- a/init.lua +++ b/init.lua @@ -64,8 +64,12 @@ dofile(modpath.."/machines/solar_panel_generator.lua") dofile(modpath.."/machines/wind_mill.lua") dofile(modpath.."/tools/common.lua") +dofile(modpath.."/tools/item.lua") +dofile(modpath.."/tools/electric_item.lua") dofile(modpath.."/tools/tool.lua") +dofile(modpath.."/tools/gear_tool.lua") dofile(modpath.."/tools/electric_tool.lua") +dofile(modpath.."/tools/electric_gear_tool.lua") dofile(modpath.."/tools/batpack.lua") dofile(modpath.."/tools/electric_chainsaw.lua") dofile(modpath.."/tools/electric_drill.lua") diff --git a/tools/batpack.lua b/tools/batpack.lua index d24fcdd..2b6bdb1 100644 --- a/tools/batpack.lua +++ b/tools/batpack.lua @@ -15,72 +15,37 @@ -- along with this program. If not, see . local S=minetest.get_translator("industrialtest") +industrialtest.BatPackBase=table.copy(industrialtest.ElectricGearTool) +industrialtest.internal.unpackTableInto(industrialtest.BatPackBase,{ + part="torso" +}) -local updateDelta=0 - -local function registerBatpack(config) - if industrialtest.mtgAvailable then - armor:register_armor("industrialtest:"..config.name,{ - description=config.displayName, - inventory_image="industrialtest_"..config.name.."_inv.png", - groups={ - armor_torso=1, - armor_heal=0, - _industrialtest_batpack=1 - }, - _industrialtest_powerStorage=true, - _industrialtest_powerCapacity=config.powerCapacity, - _industrialtest_powerFlow=config.powerFlow - }) - elseif industrialtest.mclAvailable then - minetest.register_tool("industrialtest:"..config.name,{ - description=config.displayName, - inventory_image="industrialtest_"..config.name.."_inv.png", - groups={ - armor=1, - non_combat_armor=1, - armor_torso=1, - non_combat_torso=1, - _industrialtest_batpack=1 - }, - sounds={ - _mcl_armor_equip="mcl_armor_equip_iron", - _mcl_armor_unequip="mcl_armor_unequip_iron" - }, - on_place=mcl_armor.equip_on_use, - on_secondary_use=mcl_armor.equip_on_use, - _mcl_armor_element="torso", - _mcl_armor_texture="industrialtest_"..config.name..".png", - _industrialtest_powerStorage=true, - _industrialtest_powerCapacity=config.powerCapacity, - _industrialtest_powerFlow=config.powerFlow - }) - end -end - -local function onGlobalStep(player,inv,stack,index,def) - if not def.groups or not def.groups._industrialtest_batpack then - return false - end +function industrialtest.BatPackBase.update(self,player,itemstack) local wielded=player:get_wielded_item() local wieldedMeta=wielded:get_meta() - if not industrialtest.api.hasPowerStorage(wieldedMeta) or wieldedMeta:get_int("industrialtest.powerFlow")>def._industrialtest_powerFlow then - return true + if not industrialtest.api.hasPowerStorage(wieldedMeta) or wieldedMeta:get_int("industrialtest.powerFlow")>self.flow then + return false end - if industrialtest.api.transferPowerFromItem(stack,wieldedMeta,def._industrialtest_powerFlow)>0 then + if industrialtest.api.transferPowerFromItem(itemstack,wieldedMeta,self.flow)>0 then industrialtest.api.updateItemPowerText(wielded) player:set_wielded_item(wielded) - inv:set_stack("armor",index,stack) + return true end - return true + return false end -registerBatpack({ - name="batpack_v", - displayName=S("BatPack"), - powerCapacity=60000, - powerFlow=industrialtest.api.lvPowerFlow +industrialtest.BatPack=table.copy(industrialtest.BatPackBase) +industrialtest.internal.unpackTableInto(industrialtest.BatPack,{ + name="industrialtest:batpack_v", + description=S("BatPack"), + inventoryImage="industrialtest_batpack_v_inv.png", + modelImage="industrialtest_batpack_v.png", + capacity=60000, + flow=industrialtest.api.lvPowerFlow }) + +industrialtest.BatPack:register() + minetest.register_craft({ type="shaped", output="industrialtest:batpack_v", @@ -91,12 +56,18 @@ minetest.register_craft({ } }) -registerBatpack({ - name="lappack_v", - displayName=S("LapPack"), - powerCapacity=300000, - powerFlow=industrialtest.api.hvPowerFlow +industrialtest.LapPack=table.copy(industrialtest.BatPackBase) +industrialtest.internal.unpackTableInto(industrialtest.LapPack,{ + name="industrialtest:lappack_v", + description=S("LapPack"), + inventoryImage="industrialtest_lappack_v_inv.png", + modelImage="industrialtest_lappack_v.png", + capacity=60000, + flow=industrialtest.api.lvPowerFlow }) + +industrialtest.LapPack:register() + minetest.register_craft({ type="shaped", output="industrialtest:lappack_v", @@ -106,33 +77,3 @@ minetest.register_craft({ {industrialtest.elementKeys.powerCarrier,"",industrialtest.elementKeys.powerCarrier} } }) - -minetest.register_globalstep(function(dtime) - updateDelta=updateDelta+dtime - if updateDelta. + +industrialtest.ElectricGearTool=table.copy(industrialtest.GearTool) +industrialtest.internal.unpackTableInto(industrialtest.ElectricGearTool,{ + prepare=industrialtest.ElectricItem.prepare +}) diff --git a/tools/electric_item.lua b/tools/electric_item.lua new file mode 100644 index 0000000..05a0a8e --- /dev/null +++ b/tools/electric_item.lua @@ -0,0 +1,26 @@ +-- IndustrialTest +-- Copyright (C) 2025 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 . + +industrialtest.ElectricItem=table.copy(industrialtest.Item) + +function industrialtest.ElectricItem.prepare(self,itemstack) + local meta=itemstack:get_meta() + if industrialtest.api.hasPowerStorage(meta) then + return + end + industrialtest.api.addPowerStorage(meta,self.capacity,self.flow,"n/a") + industrialtest.api.updateItemPowerText(itemstack) +end diff --git a/tools/electric_tool.lua b/tools/electric_tool.lua index 69514c4..63da247 100644 --- a/tools/electric_tool.lua +++ b/tools/electric_tool.lua @@ -15,9 +15,12 @@ -- along with this program. If not, see . industrialtest.ElectricTool=table.copy(industrialtest.Tool) +industrialtest.internal.unpackTableInto(industrialtest.ElectricTool,{ + prepare=industrialtest.ElectricItem.prepare +}) function industrialtest.ElectricTool.onPlace(self,itemstack,user,pointed) - self:prepareTool(itemstack) + self:prepare(itemstack) local meta=itemstack:get_meta() local opPower=self:getOpPower() @@ -25,18 +28,10 @@ function industrialtest.ElectricTool.onPlace(self,itemstack,user,pointed) return false end - self:use(itemstack,user,pointed) - industrialtest.api.addPowerToItem(itemstack,-opPower) - return true -end - -function industrialtest.ElectricTool.prepareTool(self,itemstack) - local meta=itemstack:get_meta() - if industrialtest.api.hasPowerStorage(meta) then - return + if self:use(itemstack,user,pointed) then + industrialtest.api.addPowerToItem(itemstack,-opPower) end - industrialtest.api.addPowerStorage(meta,self.capacity,self.flow,"n/a") - industrialtest.api.updateItemPowerText(itemstack) + return true end function industrialtest.ElectricTool.getOpPower(self,itemstack) diff --git a/tools/gear_tool.lua b/tools/gear_tool.lua new file mode 100644 index 0000000..9129712 --- /dev/null +++ b/tools/gear_tool.lua @@ -0,0 +1,79 @@ +-- IndustrialTest +-- Copyright (C) 2025 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 . + +industrialtest.GearTool=table.copy(industrialtest.Item) + +function industrialtest.GearTool.createDefinitionTable(self) + local def=industrialtest.Item.createDefinitionTable(self) + + def.groups._industrialtest_gearTool=1 + def.groups["armor_"..self.part]=1 + if industrialtest.mtgAvailable then + def.groups.armor_heal=1 + elseif industrialtest.mclAvailable then + def.groups.armor=1 + def.groups.non_combat_armor=1 + def.sounds={ + _mcl_armor_equip="mcl_armor_equip_iron", + _mcl_armor_unequip="mcl_armor_unequip_iron" + } + def.on_place=mcl_armor.equip_on_use + def.on_secondary_use=mcl_armor.equip_on_use + def._mcl_armor_element=self.part + def._mcl_armor_texture=self.modelImage + end + + return def +end + +function industrialtest.GearTool.register(self) + local def=self:createDefinitionTable() + if industrialtest.mtgAvailable then + armor:register_armor(self.name,def) + elseif industrialtest.mclAvailable then + minetest.register_tool(self.name,def) + end +end + +local updateDelta=0 +minetest.register_globalstep(function(dtime) + updateDelta=updateDelta+dtime + if updateDelta. + +industrialtest.Item={} + +function industrialtest.Item.createDefinitionTable(self) + local def={ + description=self.description, + inventory_image=self.inventoryImage, + groups={}, + _industrialtest_self=self + } + + if industrialtest.mtgAvailable then + def.groups.flammable=self.flammable + end + + return def +end + +function industrialtest.Item.register(self) + local def=self:createDefinitionTable() + minetest.register_tool(self.name,def) +end + +-- Item callbacks +minetest.register_on_player_inventory_action(function(player,action,inventory,info) + if action=="put" then + local def=info.stack:get_definition() + if def and def._industrialtest_self and def._industrialtest_self.prepare then + def._industrialtest_self:prepare(info.stack) + inventory:set_stack(info.listname,info.index,info.stack) + end + end +end) +minetest.register_on_craft(function(itemstack) + local def=itemstack:get_definition() + if def and def._industrialtest_self and def._industrialtest_self.prepare then + def._industrialtest_self:prepare(itemstack) + end +end) diff --git a/tools/tool.lua b/tools/tool.lua index 2755385..70c2499 100644 --- a/tools/tool.lua +++ b/tools/tool.lua @@ -14,7 +14,7 @@ -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . -industrialtest.Tool={} +industrialtest.Tool=table.copy(industrialtest.Item) function industrialtest.Tool.use(self,itemstack,user,pointed) -- dummy function @@ -25,7 +25,7 @@ function industrialtest.Tool.onPlace(self,itemstack,user,pointed) if self:use(itemstack,user,pointed) then local meta=itemstack:get_meta() if not meta:contains("industrialtest.uses") then - self:prepareTool(itemstack) + self:prepare(itemstack) end local uses=meta:get_int("industrialtest.uses")-1 if uses==0 then @@ -44,33 +44,25 @@ function industrialtest.Tool.onPlace(self,itemstack,user,pointed) return false end -function industrialtest.Tool.prepareTool(self,itemstack) +function industrialtest.Tool.prepare(self,itemstack) local meta=itemstack:get_meta() meta:set_int("industrialtest.uses",self.uses) end function industrialtest.Tool.createDefinitionTable(self) - local def={ - description=self.description, - inventory_image=self.inventoryImage, - tool_capabilities={ - full_punch_interval=1, - uses=self.uses - }, - on_place=function(itemstack,user,pointed) - if self:onPlace(itemstack,user,pointed) then - return itemstack - end - return nil - end, - _industrialtest_self=self + local def=industrialtest.Item.createDefinitionTable(self) + def.tool_capabilities={ + full_punch_interval=1, + uses=self.uses } + def.on_place=function(itemstack,user,pointed) + if self:onPlace(itemstack,user,pointed) then + return itemstack + end + return nil + end - if industrialtest.mtgAvailable then - def.groups={ - flammable=self.flammable - } - elseif industrialtest.mclAvailable then + if industrialtest.mclAvailable then def.groups={ tool=1 } @@ -80,25 +72,3 @@ function industrialtest.Tool.createDefinitionTable(self) return def end - -function industrialtest.Tool.register(self) - local def=self:createDefinitionTable() - minetest.register_tool(self.name,def) -end - --- Item callbacks -minetest.register_on_player_inventory_action(function(player,action,inventory,info) - if action=="put" then - local def=info.stack:get_definition() - if def and def._industrialtest_self then - def._industrialtest_self:prepareTool(info.stack) - inventory:set_stack(info.listname,info.index,info.stack) - end - end -end) -minetest.register_on_craft(function(itemstack) - local def=itemstack:get_definition() - if def and def._industrialtest_self then - def._industrialtest_self:prepareTool(itemstack) - end -end)