Add simple item fluid storage API
This commit is contained in:
parent
0895cb42ea
commit
e69d16aeb0
74
api.lua
74
api.lua
@ -151,6 +151,79 @@ industrialtest.api.afterToolUse=function(itemstack)
|
|||||||
meta:set_int("industrialtest.uses",uses)
|
meta:set_int("industrialtest.uses",uses)
|
||||||
itemstack:set_wear(65535-uses/def.tool_capabilities.uses*65535)
|
itemstack:set_wear(65535-uses/def.tool_capabilities.uses*65535)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- \brief Check if itemstack contains fluid storage
|
||||||
|
-- \param itemstack ItemStack
|
||||||
|
-- \returns bool
|
||||||
|
industrialtest.api.itemHasFluidStorage=function(itemstack)
|
||||||
|
local values={"industrialtest.fluidAmount","industrialtest.fluidCapacity"}
|
||||||
|
local meta=itemstack:get_meta()
|
||||||
|
for _,value in ipairs(values) do
|
||||||
|
if not meta:contains(value) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- \brief Updates itemstack description and wear depending on contained fluid
|
||||||
|
-- \param itemstack ItemStack
|
||||||
|
-- \returns nil
|
||||||
|
industrialtest.api.updateItemFluidText=function(itemstack)
|
||||||
|
local meta=itemstack:get_meta()
|
||||||
|
local def=itemstack:get_definition()
|
||||||
|
meta:set_string("description",S("@1\n@2 / @3",def.description,meta:get_int("industrialtest.fluidAmount"),meta:get_int("industrialtest.fluidCapacity")))
|
||||||
|
itemstack:set_wear(65535-meta:get_int("industrialtest.fluidAmount")/meta:get_int("industrialtest.fluidCapacity")*65534)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- \brief Prepares itemstack containing fluid storage
|
||||||
|
-- \param itemstack ItemStack
|
||||||
|
-- \returns bool
|
||||||
|
industrialtest.api.prepareFluidStorageItem=function(itemstack)
|
||||||
|
local meta=itemstack:get_meta()
|
||||||
|
local def=itemstack:get_definition()
|
||||||
|
if industrialtest.api.itemHasFluidStorage(itemstack) or not def.groups or not def.groups._industrialtest_fluidStorage or not def._industrialtest_fluidCapacity then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
meta:set_int("industrialtest.fluidAmount",100)
|
||||||
|
meta:set_int("industrialtest.fluidCapacity",def._industrialtest_fluidCapacity)
|
||||||
|
industrialtest.api.updateItemFluidText(itemstack)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- \brief Adds fluid amount to item fluid storage
|
||||||
|
-- \param itemstack ItemStack
|
||||||
|
-- \param amount number
|
||||||
|
-- \returns number
|
||||||
|
industrialtest.api.addFluidToItem=function(itemstack,amount)
|
||||||
|
local meta=itemstack:get_meta()
|
||||||
|
if not industrialtest.api.itemHasFluidStorage(itemstack) then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
local fluidAmount=meta:get_int("industrialtest.fluidAmount")
|
||||||
|
local fluidCapacity=meta:get_int("industrialtest.fluidCapacity")
|
||||||
|
local prevFluidAmount=fluidAmount
|
||||||
|
fluidAmount=industrialtest.internal.clamp(fluidAmount+amount,0,fluidCapacity)
|
||||||
|
meta:set_int("industrialtest.fluidAmount",fluidAmount)
|
||||||
|
industrialtest.api.updateItemFluidText(itemstack)
|
||||||
|
return fluidAmount-prevFluidAmount
|
||||||
|
end
|
||||||
|
|
||||||
|
-- \brief Adds fluid to destination itemstack while subtracting it from source metadata
|
||||||
|
-- \param srcMeta MetaDataRef
|
||||||
|
-- \param itemstack ItemStack
|
||||||
|
-- \param amount number
|
||||||
|
-- \returns number
|
||||||
|
industrialtest.api.transferFluidToItem=function(srcMeta,itemstack,amount)
|
||||||
|
local flow=math.min(srcMeta:get_int("industrialtest.fluidAmount"),amount)
|
||||||
|
if flow==0 then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
local actualFlow=industrialtest.api.addFluidToItem(itemstack,flow)
|
||||||
|
srcMeta:set_int("industrialtest.fluidAmount",srcMeta:get_int("industrialtest.fluidAmount")-actualFlow)
|
||||||
|
return actualFlow
|
||||||
|
end
|
||||||
|
|
||||||
-- \brief Checks if power storage is fully charged
|
-- \brief Checks if power storage is fully charged
|
||||||
-- \param meta MetaDataRef which should be checked
|
-- \param meta MetaDataRef which should be checked
|
||||||
-- \returns true if power storage is fully charged, false otherwise
|
-- \returns true if power storage is fully charged, false otherwise
|
||||||
@ -198,6 +271,7 @@ end
|
|||||||
-- \brief Adds power to destination itemstack while subtracting it from source metadata
|
-- \brief Adds power to destination itemstack while subtracting it from source metadata
|
||||||
-- \param srcMeta MetaDataRef from which take power
|
-- \param srcMeta MetaDataRef from which take power
|
||||||
-- \param itemstack ItemStack to which add power
|
-- \param itemstack ItemStack to which add power
|
||||||
|
-- \param amount number
|
||||||
-- \returns How much of power was actually transferred
|
-- \returns How much of power was actually transferred
|
||||||
industrialtest.api.transferPowerToItem=function(srcMeta,itemstack,amount)
|
industrialtest.api.transferPowerToItem=function(srcMeta,itemstack,amount)
|
||||||
local currentFlow=math.min(srcMeta:get_int("industrialtest.powerAmount"),amount)
|
local currentFlow=math.min(srcMeta:get_int("industrialtest.powerAmount"),amount)
|
||||||
|
@ -690,8 +690,9 @@ minetest.register_tool("industrialtest:fuel_can",{
|
|||||||
inventory_image="industrialtest_fuel_can.png",
|
inventory_image="industrialtest_fuel_can.png",
|
||||||
groups={
|
groups={
|
||||||
_industrialtest_fueled=1,
|
_industrialtest_fueled=1,
|
||||||
_industrialtest_emptyOnConstruct=1
|
_industrialtest_fluidStorage=1
|
||||||
}
|
},
|
||||||
|
_industrialtest_fluidCapacity=10000
|
||||||
})
|
})
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type="shaped",
|
type="shaped",
|
||||||
@ -706,14 +707,14 @@ minetest.register_craft({
|
|||||||
-- Item callbacks
|
-- Item callbacks
|
||||||
minetest.register_on_player_inventory_action(function(player,action,inventory,info)
|
minetest.register_on_player_inventory_action(function(player,action,inventory,info)
|
||||||
if action=="put" then
|
if action=="put" then
|
||||||
if industrialtest.api.preparePowerStorageItem(info.stack) or industrialtest.api.prepareToolItem(info.stack) then
|
if industrialtest.api.preparePowerStorageItem(info.stack) or industrialtest.api.prepareToolItem(info.stack) or industrialtest.api.prepareFluidStorageItem(info.stack) then
|
||||||
inventory:set_stack(info.listname,info.index,info.stack)
|
inventory:set_stack(info.listname,info.index,info.stack)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
minetest.register_on_craft(function(itemstack)
|
minetest.register_on_craft(function(itemstack)
|
||||||
if industrialtest.api.preparePowerStorageItem(itemstack) then
|
if industrialtest.api.preparePowerStorageItem(itemstack) or industrialtest.api.prepareToolItem(itemstack) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
industrialtest.api.prepareToolItem(itemstack)
|
industrialtest.api.prepareFluidStorageItem(itemstack)
|
||||||
end)
|
end)
|
||||||
|
@ -96,10 +96,11 @@ local function onGlobalStep(player,inv,itemstack,index,def)
|
|||||||
end
|
end
|
||||||
|
|
||||||
jetpack.tryFly=function(itemstack)
|
jetpack.tryFly=function(itemstack)
|
||||||
if itemstack:get_wear()>=65533 then
|
local meta=itemstack:get_meta()
|
||||||
|
if meta:get_int("industrialtest.fluidAmount")==0 then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
itemstack:set_wear(itemstack:get_wear()+2)
|
industrialtest.api.addFluidToItem(itemstack,-1)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -109,9 +110,12 @@ registerJetpack({
|
|||||||
displayName=S("Jetpack"),
|
displayName=S("Jetpack"),
|
||||||
groups={
|
groups={
|
||||||
_industrialtest_fueled=1,
|
_industrialtest_fueled=1,
|
||||||
_industrialtest_emptyOnConstruct=1
|
_industrialtest_fluidStorage=1
|
||||||
},
|
},
|
||||||
tryFly=jetpack.tryFly
|
tryFly=jetpack.tryFly,
|
||||||
|
customKeys={
|
||||||
|
_industrialtest_fluidCapacity=5000
|
||||||
|
}
|
||||||
})
|
})
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type="shaped",
|
type="shaped",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user