aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kekztech/MultiFluidHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/kekztech/MultiFluidHandler.java')
-rw-r--r--src/main/java/kekztech/MultiFluidHandler.java79
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);
}
}
}