Refactor batpacks

This commit is contained in:
2025-04-08 21:28:28 +02:00
parent 6147074e05
commit dfdce73376
8 changed files with 236 additions and 147 deletions

View File

@@ -15,72 +15,37 @@
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
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.updateDelay then
return
end
updateDelta=0
local players=minetest.get_connected_players()
for _,player in ipairs(players) do
if industrialtest.mtgAvailable then
local _,inv=armor:get_valid_player(player,"")
if inv then
local armorList=inv:get_list("armor")
assert(armorList)
for i=1,#armorList do
local stack=armorList[i]
local def=stack:get_definition()
if onGlobalStep(player,inv,stack,i,def) then
break
end
end
end
elseif industrialtest.mclAvailable then
local inv=player:get_inventory()
local stack=inv:get_stack("armor",3)
local def=stack:get_definition()
onGlobalStep(player,inv,stack,3,def)
end
end
end)