Don't destroy generator that has items inside

This commit is contained in:
mrkubax10 2023-03-01 15:05:34 +02:00
parent 511c4948d6
commit 6c62b8d4a3

View File

@ -32,6 +32,21 @@ local function generatorFormspec(fuelPercent)
} }
return table.concat(formspec,"") return table.concat(formspec,"")
end end
local function generatorMclAfterDigNode(pos,oldnode,oldmeta,digger)
-- Taken from https://git.minetest.land/MineClone2/MineClone2/src/branch/master/mods/ITEMS/mcl_furnaces/init.lua#L538
local meta=minetest.get_meta(pos)
local meta2=meta
meta:from_table(oldmeta)
local inv=meta:get_inventory()
for _,listname in ipairs({"src", "dst", "fuel"}) do
local stack=inv:get_stack(listname,1)
if not stack:is_empty() then
local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5}
minetest.add_item(p, stack)
end
end
meta:from_table(meta2:to_table())
end
local definition={ local definition={
description=S("Generator"), description=S("Generator"),
tiles={"industrialtest_iron_furnace.png"}, tiles={"industrialtest_iron_furnace.png"},
@ -51,18 +66,22 @@ local definition={
local fuelTime=meta:get_int("fuelTime") local fuelTime=meta:get_int("fuelTime")
local fuelList=inv:get_list("fuel") local fuelList=inv:get_list("fuel")
local chargedList=inv:get_list("charged") local chargedList=inv:get_list("charged")
if fuelTime==0 and not industrialtest.api.isFullyCharged(meta) then if industrialtest.api.isFullyCharged(meta) then
local fuel,after=minetest.get_craft_result({ return false
method="fuel", else
width=1, if fuelTime==0 then
items=fuelList local fuel,after=minetest.get_craft_result({
}) method="fuel",
if fuel.time>0 then width=1,
inv:set_stack("fuel",1,after.items[1]) items=fuelList
fuelTime=fuel.time })
meta:set_int("maxFuelTime",fuelTime) if fuel.time>0 then
else inv:set_stack("fuel",1,after.items[1])
return false fuelTime=fuel.time
meta:set_int("maxFuelTime",fuelTime)
else
return false
end
end end
end end
fuelTime=fuelTime-elapsed fuelTime=fuelTime-elapsed
@ -72,9 +91,10 @@ local definition={
meta:set_int("fuelTime",fuelTime) meta:set_int("fuelTime",fuelTime)
meta:set_string("formspec",generatorFormspec(fuelTime/meta:get_int("maxFuelTime")*100)) meta:set_string("formspec",generatorFormspec(fuelTime/meta:get_int("maxFuelTime")*100))
industrialtest.api.addPower(meta,100) industrialtest.api.addPower(meta,100)
if fuelTime>0 then if fuelTime>0 or fuelList[1]:get_count()>0 then
return true return true
end end
return false
end, end,
allow_metadata_inventory_put=function(pos,listname,index,stack,player) allow_metadata_inventory_put=function(pos,listname,index,stack,player)
if listname=="charged" and not industrialtest.api.hasPowerStorage(stack:get_meta()) then if listname=="charged" and not industrialtest.api.hasPowerStorage(stack:get_meta()) then
@ -90,7 +110,16 @@ local definition={
end end
} }
if industrialtest.mtgAvailable then if industrialtest.mtgAvailable then
definition.groups={cracky=1} definition.groups={cracky=2}
definition.sounds=default.node_sound_metal_defaults() definition.sounds=default.node_sound_metal_defaults()
definition.can_dig=function(pos)
local meta=minetest.get_meta(pos)
local inv=meta:get_inventory()
return not (inv:get_list("charged")[1]:get_count()>0 or inv:get_list("fuel")[1]:get_count()>0)
end
elseif industrialtest.mclAvailable then
definition.after_dig_node=generatorMclAfterDigNode
definition._mcl_blast_resistance=3.5
definition._mcl_hardness=3.9
end end
minetest.register_node("industrialtest:generator",definition) minetest.register_node("industrialtest:generator",definition)