aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java')
-rw-r--r--src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java33
1 files changed, 15 insertions, 18 deletions
diff --git a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java
index bd992972a8..f2e88ef711 100644
--- a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java
+++ b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java
@@ -157,24 +157,22 @@ public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase {
super.addOutput(tempStack);
} else {
- for (FluidStack storedFluid : mfh.getFluids()) {
- // Sum available output capacity
- int possibleOutput = 0;
+ for(int i = 0; i < mfh.getDistinctFluids(); i++) {
+ final FluidStack storedFluidCopy = mfh.getFluidCopy(i);
+ // Calculate how much capacity all available Output Hatches offer
for (GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) {
- if (outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluid.getUnlocalizedName())) {
- possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
- } else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluid.getUnlocalizedName())) {
- possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
+ if (outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluidCopy.getUnlocalizedName())) {
+ storedFluidCopy.amount += outputHatch.getCapacity() - outputHatch.getFluidAmount();
+ } else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluidCopy.getUnlocalizedName())) {
+ storedFluidCopy.amount += outputHatch.getCapacity() - outputHatch.getFluidAmount();
} else if (outputHatch.getFluid() == null) {
- possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount();
+ storedFluidCopy.amount += outputHatch.getCapacity() - outputHatch.getFluidAmount();
}
}
- // output as much as possible
- final FluidStack tempStack = storedFluid.copy();
- tempStack.amount = possibleOutput;
- // TODO possible concurrent modification exception as pullFluid calls remove() without an iterator
- tempStack.amount = mfh.pullFluid(tempStack, true);
- super.addOutput(tempStack);
+ // Test how much can actually be drained and drain that amount
+ storedFluidCopy.amount = mfh.pullFluid(storedFluidCopy, true);
+ // Add to output
+ super.addOutput(storedFluidCopy);
}
}
@@ -408,10 +406,10 @@ public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase {
// Update MultiFluidHandler in case storage cells have been changed
final int capacityPerFluid = (int) Math.round(fluidCapacityAcc / 25.0f);
if (mfh == null) {
- mfh = new MultiFluidHandler(capacityPerFluid);
+ mfh = MultiFluidHandler.newInstance(25, capacityPerFluid);
} else {
if (mfh.getCapacity() != capacityPerFluid) {
- mfh = new MultiFluidHandler(capacityPerFluid, mfh.getFluids());
+ mfh = MultiFluidHandler.newAdjustedInstance(mfh, capacityPerFluid);
}
}
for (GTMTE_TFFTMultiHatch mh : sMultiHatches) {
@@ -488,8 +486,7 @@ public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase {
runningCost = nbt.getInteger("runningCost");
doVoidExcess = nbt.getBoolean("doVoidExcess");
- mfh = new MultiFluidHandler();
- mfh.loadNBTData(nbt);
+ mfh = mfh.loadNBTData(nbt);
for (GTMTE_TFFTMultiHatch mh : sMultiHatches) {
mh.setMultiFluidHandler(mfh);
}