From 286f95596f5e9dace78fd89417614af6b751e31e Mon Sep 17 00:00:00 2001 From: mrkubax10 Date: Sun, 19 Nov 2023 14:53:43 +0100 Subject: [PATCH] Machines now explode when there is too much power transferred --- api.lua | 38 ++++++++++++++++++++---------------- compatibility.lua | 5 +++++ machines/nuclear_reactor.lua | 1 + 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/api.lua b/api.lua index 27e65e2..74d2406 100644 --- a/api.lua +++ b/api.lua @@ -244,26 +244,30 @@ industrialtest.api.powerFlow=function(pos) local roomAvailable=false for _,endpoint in ipairs(network) do local endpointMeta=minetest.get_meta(endpoint.position) - -- TODO: if supplying machine power flow is too large for receiving machine to handle then that machine should explode local transferredToEndpoint=false - if industrialtest.api.transferPower(meta,endpointMeta,math.min(powerDistribution,endpoint.flow))>0 then - transferred=true - transferredToEndpoint=true - end - local def=minetest.registered_nodes[minetest.get_node(endpoint.position).name] - if def then - local updateFormspec=def._industrialtest_updateFormspec - if updateFormspec then - updateFormspec(endpoint.position) + if powerDistribution<=endpoint.flow then + if industrialtest.api.transferPower(meta,endpointMeta,powerDistribution)>0 then + transferred=true + transferredToEndpoint=true end - local onPowerFlow=def._industrialtest_onPowerFlow - if onPowerFlow and transferredToEndpoint then - onPowerFlow(endpoint.position,industrialtest.api.getOppositeSide(1)) + local def=minetest.registered_nodes[minetest.get_node(endpoint.position).name] + if def then + local updateFormspec=def._industrialtest_updateFormspec + if updateFormspec then + updateFormspec(endpoint.position) + end + local onPowerFlow=def._industrialtest_onPowerFlow + if onPowerFlow and transferredToEndpoint then + onPowerFlow(endpoint.position,industrialtest.api.getOppositeSide(1)) + end end - end - minetest.get_node_timer(endpoint.position):start(industrialtest.updateDelay) - if not industrialtest.api.isFullyCharged(endpointMeta) then - roomAvailable=true + minetest.get_node_timer(endpoint.position):start(industrialtest.updateDelay) + if not industrialtest.api.isFullyCharged(endpointMeta) then + roomAvailable=true + end + else + minetest.remove_node(endpoint.position) + industrialtest.internal.explode(endpoint.position,2) end end return roomAvailable,transferred diff --git a/compatibility.lua b/compatibility.lua index bb4a0c7..7aa154e 100644 --- a/compatibility.lua +++ b/compatibility.lua @@ -70,6 +70,7 @@ if industrialtest.mclAvailable then end return itemstack end + industrialtest.internal.explode=mcl_explosions.explode end -- compatibilty that adds not existing elements @@ -647,6 +648,10 @@ if industrialtest.mclAvailable then y_min=mcl_vars.mg_overworld_min }) elseif industrialtest.mtgAvailable then + industrialtest.internal.explode=function(pos,radius) + tnt.boom(pos,{radius=radius}) + end + industrialtest.registerMetal=function(name,displayName,hardness) minetest.register_craftitem("industrialtest:"..name.."_lump",{ description=S(displayName.." Lump"), diff --git a/machines/nuclear_reactor.lua b/machines/nuclear_reactor.lua index 69b156c..607ae19 100644 --- a/machines/nuclear_reactor.lua +++ b/machines/nuclear_reactor.lua @@ -243,6 +243,7 @@ reactor.activeOnTimer=function(pos,elapsed,meta,inv) if heat>200 then -- TODO: Explode minetest.remove_node(pos) + industrialtest.internal.explode(pos,#maxCluster*4) return false,false end meta:set_int("heat",heat)