diff options
Diffstat (limited to 'src/main/java/kekztech/MultiFluidHandler.java')
-rw-r--r-- | src/main/java/kekztech/MultiFluidHandler.java | 79 |
1 files changed, 52 insertions, 27 deletions
diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java index a96094a8f0..f1a527b2c0 100644 --- a/src/main/java/kekztech/MultiFluidHandler.java +++ b/src/main/java/kekztech/MultiFluidHandler.java @@ -15,6 +15,8 @@ public class MultiFluidHandler { private int capacityPerFluid; private boolean locked = true; + private boolean doVoidExcess = false; + private byte fluidSelector = -1; public MultiFluidHandler() { @@ -38,6 +40,28 @@ public class MultiFluidHandler { public void setLock(boolean state) { locked = state; } + + public void setDoVoidExcess(boolean doVoidExcess) { this.doVoidExcess = doVoidExcess; } + + /** + * Used to tell the MFH if a fluid is selected by + * an Integrated Circuit in the controller. + * + * @param fluidSelector + * Selected fluid or -1 if no fluid is selected + */ + public void setFluidSelector(byte fluidSelector) { + this.fluidSelector = fluidSelector; + } + + /** + * + * @return + * Selected fluid or -1 if no fluid is selected + */ + public byte getSelectedFluid() { + return fluidSelector; + } public boolean contains(FluidStack fluid) { return !locked && fluids.contains(fluid); @@ -48,7 +72,7 @@ public class MultiFluidHandler { } public List<FluidStack> getFluids(){ - return (!locked) ? fluids : new ArrayList<FluidStack>(); + return (!locked) ? fluids : new ArrayList<>(); } public FluidStack getFluid(int slot) { @@ -110,24 +134,25 @@ public class MultiFluidHandler { return 0; } if(fluids.size() == MAX_DISTINCT_FLUIDS && !contains(push)) { + // Already contains 25 fluids and this isn't one of them return 0; } else if (fluids.size() < MAX_DISTINCT_FLUIDS && !contains(push)) { // Add new fluid - final int remcap = getCapacity(); - final int fit = Math.min(remcap, push.amount); + final int fit = Math.min(getCapacity(), push.amount); if(doPush) { fluids.add(new FluidStack(push.getFluid(), fit)); } - return fit; + // If doVoidExcess, pretend all of it fit + return doVoidExcess ? push.amount : fit; } else { // Add to existing fluid - final FluidStack fs = fluids.get(fluids.indexOf(push)); - final int remcap = getCapacity() - fs.amount; - final int fit = Math.min(remcap, push.amount); + final FluidStack existing = fluids.get(fluids.indexOf(push)); + final int fit = Math.min(getCapacity() - existing.amount, push.amount); if(doPush) { - fs.amount += fit; + existing.amount += fit; } - return fit; + // If doVoidExcess, pretend all of it fit + return doVoidExcess ? push.amount : fit; } } @@ -147,18 +172,21 @@ public class MultiFluidHandler { return 0; } if(slot < 0 || slot >= MAX_DISTINCT_FLUIDS) { + // Invalid slot return 0; } - if(!fluids.get(slot).equals(push)) { + if((fluids.get(slot) != null) && !fluids.get(slot).equals(push)) { + // Selected slot is taken by a non-matching fluid return 0; } else { - final FluidStack fs = fluids.get(slot); - final int remcap = getCapacity() - fs.amount; - final int fit = Math.min(remcap, push.amount); + // Add to existing fluid + final FluidStack existing = fluids.get(slot); + final int fit = Math.min(getCapacity() - existing.amount, push.amount); if(doPush) { - fs.amount += fit; + existing.amount += fit; } - return fit; + // If doVoidExcess, pretend all of it fit + return doVoidExcess ? push.amount : fit; } } @@ -172,18 +200,15 @@ public class MultiFluidHandler { * @return Amount of fluid that was (or would have been, if simulated) pulled. */ public int pullFluid(FluidStack pull, boolean doPull) { - if(locked) { - return 0; - } - if(!contains(pull)) { + if (locked || !contains(pull)) { return 0; } else { final FluidStack src = fluids.get(fluids.indexOf(pull)); final int rec = Math.min(pull.amount, src.amount); - if(doPull) { + if (doPull) { src.amount -= rec; } - if(src.amount == 0) { + if (src.amount == 0) { fluids.remove(src); } return rec; @@ -211,13 +236,13 @@ public class MultiFluidHandler { if(!fluids.get(slot).equals(pull)) { return 0; } else { - final FluidStack pulled = fluids.get(slot); - final int rec = Math.min(pull.amount, pulled.amount); + final FluidStack src = fluids.get(slot); + final int rec = Math.min(pull.amount, src.amount); if(doPull) { - pulled.amount -= rec; + src.amount -= rec; } - if(pulled.amount == 0) { - fluids.remove(pulled); + if(src.amount == 0) { + fluids.remove(src); } return rec; } @@ -239,7 +264,7 @@ public class MultiFluidHandler { return Math.min(getCapacity(), push.amount) > 0; } else { final int remcap = getCapacity() - fluids.get(fluids.indexOf(push)).amount; - return Math.min(remcap, push.amount) > 0; + return doVoidExcess ? true : (Math.min(remcap, push.amount) > 0); } } } |