aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaya <10861407+serenibyss@users.noreply.github.com>2024-12-01 05:56:00 -0600
committerGitHub <noreply@github.com>2024-12-01 12:56:00 +0100
commitfd1becc546c966bf7894849c843f1dcc0919618b (patch)
treebf82d856f0b744ce89bfcc40dc8b7118bb2b2081
parentdc8102edbdb28529beeb5bf762c378f766c1243d (diff)
downloadGT5-Unofficial-fd1becc546c966bf7894849c843f1dcc0919618b.tar.gz
GT5-Unofficial-fd1becc546c966bf7894849c843f1dcc0919618b.tar.bz2
GT5-Unofficial-fd1becc546c966bf7894849c843f1dcc0919618b.zip
Fix ME Output Hatch void protection checks (#3585)
-rw-r--r--src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java5
-rw-r--r--src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java27
-rw-r--r--src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java7
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java7
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java13
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java5
-rw-r--r--src/main/java/gregtech/api/util/OutputHatchWrapper.java5
-rw-r--r--src/main/java/gregtech/api/util/VoidProtectionHelper.java6
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java10
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java10
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java10
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTENuclearReactor.java4
12 files changed, 28 insertions, 81 deletions
diff --git a/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java b/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java
index 4796d1d3ee..86db9e0f4a 100644
--- a/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java
+++ b/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java
@@ -44,11 +44,6 @@ public class MockIVoidableMachine implements IVoidable {
}
@Override
- public boolean canDumpFluidToME() {
- return false;
- }
-
- @Override
public VoidingMode getDefaultVoidingMode() {
return VoidingMode.VOID_ALL;
}
diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java
index 4c3199f33f..e98158ec7f 100644
--- a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java
+++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java
@@ -56,7 +56,6 @@ import gregtech.api.recipe.RecipeMaps;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GTUtility;
import gregtech.api.util.MultiblockTooltipBuilder;
-import gregtech.common.tileentities.machines.MTEHatchOutputME;
public class MTEMegaDistillTower extends MegaMultiBlockBase<MTEMegaDistillTower> implements ISurvivalConstructable {
@@ -393,32 +392,6 @@ public class MTEMegaDistillTower extends MegaMultiBlockBase<MTEMegaDistillTower>
}
@Override
- public boolean canDumpFluidToME() {
-
- // All fluids can be dumped to ME only if each layer contains a ME Output Hatch.
- for (List<MTEHatchOutput> tLayerOutputHatches : this.mOutputHatchesByLayer) {
-
- boolean foundMEHatch = false;
-
- for (IFluidStore tHatch : tLayerOutputHatches) {
- if (tHatch instanceof MTEHatchOutputME tMEHatch) {
- if (tMEHatch.canAcceptFluid()) {
- foundMEHatch = true;
- break;
- }
- }
- }
-
- // Exit if we didn't find a valid hatch on this layer.
- if (!foundMEHatch) {
- return false;
- }
- }
-
- return true;
- }
-
- @Override
protected void addFluidOutputs(FluidStack[] outputFluids) {
for (int i = 0; i < outputFluids.length && i < this.mOutputHatchesByLayer.size(); i++) {
FluidStack tStack = outputFluids[i].copy();
diff --git a/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java b/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java
index 047cf4df5b..5b5bb08c87 100644
--- a/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java
+++ b/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java
@@ -19,4 +19,11 @@ public interface IFluidStore extends IFluidTank {
* @return Whether to allow given fluid to be inserted into this.
*/
boolean canStoreFluid(@Nonnull FluidStack fluidStack);
+
+ /**
+ * @return The amount of fluid that can be stored in this.
+ */
+ default int getAvailableSpace() {
+ return getCapacity() - getFluidAmount();
+ }
}
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java b/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java
index 841fd07bba..f55d71debc 100644
--- a/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java
@@ -79,11 +79,4 @@ public interface IVoidable {
* as this might be called every tick and cause lag.
*/
boolean canDumpItemToME();
-
- /**
- * @return If this machine has ability to dump fluid outputs to ME network.
- * This doesn't need to check if it can actually dump to ME,
- * as this might be called every tick and cause lag.
- */
- boolean canDumpFluidToME();
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java
index 875148d9b6..2a5e3c1552 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java
@@ -109,7 +109,6 @@ import gregtech.common.tileentities.machines.MTEHatchCraftingInputME;
import gregtech.common.tileentities.machines.MTEHatchInputBusME;
import gregtech.common.tileentities.machines.MTEHatchInputME;
import gregtech.common.tileentities.machines.MTEHatchOutputBusME;
-import gregtech.common.tileentities.machines.MTEHatchOutputME;
import gregtech.common.tileentities.machines.multi.MTELargeTurbine;
import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap;
import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap;
@@ -2291,18 +2290,6 @@ public abstract class MTEMultiBlockBase extends MetaTileEntity
}
@Override
- public boolean canDumpFluidToME() {
- for (IFluidStore tHatch : getFluidOutputSlots(new FluidStack[0])) {
- if (tHatch instanceof MTEHatchOutputME) {
- if ((((MTEHatchOutputME) tHatch).canAcceptFluid())) {
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
public Pos2d getVoidingModeButtonPos() {
return new Pos2d(8, 91);
}
diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java
index d6b4ef7fe3..c0fb6cedb4 100644
--- a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java
+++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java
@@ -915,11 +915,6 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce
}
@Override
- public boolean canDumpFluidToME() {
- return false;
- }
-
- @Override
public boolean supportsInputSeparation() {
return true;
}
diff --git a/src/main/java/gregtech/api/util/OutputHatchWrapper.java b/src/main/java/gregtech/api/util/OutputHatchWrapper.java
index 55f467198a..d570780317 100644
--- a/src/main/java/gregtech/api/util/OutputHatchWrapper.java
+++ b/src/main/java/gregtech/api/util/OutputHatchWrapper.java
@@ -62,4 +62,9 @@ public class OutputHatchWrapper implements IFluidStore {
public boolean canStoreFluid(@NotNull FluidStack fluidStack) {
return outputHatch.canStoreFluid(fluidStack) && filter.test(fluidStack);
}
+
+ @Override
+ public int getAvailableSpace() {
+ return outputHatch.getAvailableSpace();
+ }
}
diff --git a/src/main/java/gregtech/api/util/VoidProtectionHelper.java b/src/main/java/gregtech/api/util/VoidProtectionHelper.java
index cf98e26b66..227601113b 100644
--- a/src/main/java/gregtech/api/util/VoidProtectionHelper.java
+++ b/src/main/java/gregtech/api/util/VoidProtectionHelper.java
@@ -214,7 +214,7 @@ public class VoidProtectionHelper {
return;
}
}
- if (protectExcessFluid && fluidOutputs.length > 0 && !machine.canDumpFluidToME()) {
+ if (protectExcessFluid && fluidOutputs.length > 0) {
maxParallel = Math.min(calculateMaxFluidParallels(), maxParallel);
if (maxParallel <= 0) {
isFluidFull = true;
@@ -255,7 +255,7 @@ public class VoidProtectionHelper {
}
for (IFluidStore tHatch : hatches) {
- int tSpaceLeft = tHatch.getCapacity() - tHatch.getFluidAmount();
+ int tSpaceLeft = tHatch.getAvailableSpace();
// check if hatch filled
if (tSpaceLeft <= 0) continue;
@@ -289,7 +289,7 @@ public class VoidProtectionHelper {
ParallelStackInfo<FluidStack> tParallel = aParallelQueue.poll();
assert tParallel != null; // will always be true, specifying assert here to avoid IDE/compiler warnings
Integer tCraftSize = tFluidOutputMap.get(tParallel.stack);
- int tSpaceLeft = tHatch.getCapacity();
+ int tSpaceLeft = tHatch.getAvailableSpace();
tParallel.batch += (tParallel.partial + tSpaceLeft) / tCraftSize;
tParallel.partial = (tParallel.partial + tSpaceLeft) % tCraftSize;
aParallelQueue.add(tParallel);
diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java
index 7ddf136a72..b502ad54d3 100644
--- a/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java
+++ b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java
@@ -161,6 +161,16 @@ public class MTEHatchOutputME extends MTEHatchOutput implements IPowerChannelSta
}
/**
+ * Get the available fluid space, up to max int.
+ */
+ @Override
+ public int getAvailableSpace() {
+ long availableSpace = getCacheCapacity() - getCachedAmount();
+ if (availableSpace > Integer.MAX_VALUE) availableSpace = Integer.MAX_VALUE;
+ return (int) availableSpace;
+ }
+
+ /**
* Attempt to store fluid in connected ME network. Returns how much fluid is accepted (if the network was down e.g.)
*
* @param aFluid input fluid
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java
index 93b64c16a8..bbba029449 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java
@@ -47,7 +47,6 @@ import gregtech.api.recipe.RecipeMap;
import gregtech.api.recipe.RecipeMaps;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.MultiblockTooltipBuilder;
-import gregtech.common.tileentities.machines.MTEHatchOutputME;
public class MTEDistillationTower extends MTEEnhancedMultiBlockBase<MTEDistillationTower>
implements ISurvivalConstructable {
@@ -294,15 +293,6 @@ public class MTEDistillationTower extends MTEEnhancedMultiBlockBase<MTEDistillat
}
@Override
- public boolean canDumpFluidToME() {
- // All fluids can be dumped to ME only if each layer contains a ME Output Hatch.
- return this.mOutputHatchesByLayer.stream()
- .allMatch(
- tLayerOutputHatches -> tLayerOutputHatches.stream()
- .anyMatch(tHatch -> (tHatch instanceof MTEHatchOutputME tMEHatch) && (tMEHatch.canAcceptFluid())));
- }
-
- @Override
public void construct(ItemStack stackSize, boolean hintsOnly) {
buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 1, 0, 0);
int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java
index 46a8d8fe3d..81a8c12573 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java
@@ -53,7 +53,6 @@ import gregtech.api.recipe.RecipeMaps;
import gregtech.api.util.GTUtility;
import gregtech.api.util.MultiblockTooltipBuilder;
import gregtech.common.pollution.PollutionConfig;
-import gregtech.common.tileentities.machines.MTEHatchOutputME;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.minecraft.PlayerUtils;
import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
@@ -436,15 +435,6 @@ public class MTEAdvDistillationTower extends GTPPMultiBlockBase<MTEAdvDistillati
}
@Override
- public boolean canDumpFluidToME() {
- // All fluids can be dumped to ME only if each layer contains a ME Output Hatch.
- return this.mOutputHatchesByLayer.stream()
- .allMatch(
- tLayerOutputHatches -> tLayerOutputHatches.stream()
- .anyMatch(tHatch -> (tHatch instanceof MTEHatchOutputME tMEHatch) && (tMEHatch.canAcceptFluid())));
- }
-
- @Override
public void setItemNBT(NBTTagCompound aNBT) {
if (mUpgraded) aNBT.setBoolean("mUpgraded", true);
super.setItemNBT(aNBT);
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTENuclearReactor.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTENuclearReactor.java
index 5be5801097..9e902d666a 100644
--- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTENuclearReactor.java
+++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTENuclearReactor.java
@@ -47,6 +47,7 @@ import gregtech.api.util.GTRecipe;
import gregtech.api.util.MultiblockTooltipBuilder;
import gregtech.api.util.OverclockCalculator;
import gregtech.api.util.shutdown.ShutDownReasonRegistry;
+import gregtech.common.tileentities.machines.MTEHatchOutputME;
import gtPlusPlus.api.recipe.GTPPRecipeMaps;
import gtPlusPlus.core.block.ModBlocks;
import gtPlusPlus.core.material.MaterialsElements;
@@ -259,7 +260,8 @@ public class MTENuclearReactor extends GTPPMultiBlockBase<MTENuclearReactor> imp
public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
mCasing = 0;
if (checkPiece(mName, 3, 3, 0) && mCasing >= 27) {
- if ((mOutputHatches.size() >= 3 || canDumpFluidToME()) && !mInputHatches.isEmpty()
+ if ((mOutputHatches.size() >= 3 || mOutputHatches.stream()
+ .anyMatch(h -> h instanceof MTEHatchOutputME)) && !mInputHatches.isEmpty()
&& mDynamoHatches.size() == 4
&& mMufflerHatches.size() == 4) {
this.turnCasingActive(false);