diff options
2 files changed, 28 insertions, 6 deletions
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index 09995604aa..08eb16dd53 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -189,6 +189,7 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB super.loadNBTData(aNBT); if (availableData != null) { availableData.set(aNBT.getDouble("computation")); + eAvailableData = (long)availableData.get(); } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index b071196b14..8cd1b5a396 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -118,6 +118,12 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt // data required to operate protected long eRequiredData = 0; + // Counter for the computation timeout. Will be initialized one to the max time and then only decreased. + protected int eComputationTimeout = MAX_COMPUTATION_TIMEOUT; + + // Max timeout of computation in ticks + protected static int MAX_COMPUTATION_TIMEOUT = 40; + // storage for output EM that will be auto handled in case of failure to finish recipe // if you succed to use a recipe - be sure to output EM from outputEM to hatches in the output method protected EMInstanceStackMap[] outputEM; @@ -1214,20 +1220,24 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt public boolean onRunningTickCheck_EM(ItemStack aStack) { if (eRequiredData > eAvailableData) { - if (energyFlowOnRunningTick_EM(aStack, false)) { - stopMachine(); + if (!checkComputationTimeout()) { + if (energyFlowOnRunningTick_EM(aStack, false)) { + stopMachine(); + } + return false; } - return false; } return energyFlowOnRunningTick_EM(aStack, true); } public boolean onRunningTickCheck(ItemStack aStack) { if (eRequiredData > eAvailableData) { - if (energyFlowOnRunningTick(aStack, false)) { - stopMachine(); + if (!checkComputationTimeout()) { + if (energyFlowOnRunningTick(aStack, false)) { + stopMachine(); + } + return false; } - return false; } return energyFlowOnRunningTick(aStack, true); } @@ -2881,4 +2891,15 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt return adder; } } + + /** Check if the computation timeout is still active + * + * @return True if the timeout is still active or false if the machine should fail + */ + protected boolean checkComputationTimeout() { + if (eComputationTimeout > 0) { + return --eComputationTimeout > 0; + } + return false; + } } |