Skip to content

Commit 89f677f

Browse files
committed
Move shared code
1 parent 690ede7 commit 89f677f

File tree

3 files changed

+30
-27
lines changed

3 files changed

+30
-27
lines changed

src/main/java/github/kasuminova/mmce/common/util/AEFluidInventoryUpgradeable.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import appeng.fluids.util.IAEFluidTank;
88
import appeng.util.Platform;
99
import github.kasuminova.mmce.common.util.concurrent.ReadWriteLockProvider;
10+
import hellfirepvp.modularmachinery.common.util.HybridFluidUtils;
1011
import net.minecraft.nbt.NBTTagCompound;
1112
import net.minecraftforge.fluids.FluidStack;
1213
import net.minecraftforge.fluids.capability.IFluidTankProperties;
@@ -204,18 +205,9 @@ public int fill(final FluidStack fluid, final boolean doFill) {
204205
try {
205206
(doFill ? rwLock.writeLock() : rwLock.readLock()).lock();
206207

207-
if (oneFluidOneSlot) {
208-
int found = -1;
209-
for (int i = 0; i < fluids.length; i++) {
210-
final IAEFluidStack fluidInSlot = getFluid(i);
211-
if (fluidInSlot != null && fluidInSlot.getFluid() == insert.getFluid()) {
212-
found = i;
213-
break;
214-
}
215-
}
216-
if (found != -1) {
217-
return this.fill(found, insert, doFill);
218-
}
208+
int found = HybridFluidUtils.findSlotWithFluid(this, getTankProperties(), insert);
209+
if (found >= 0) {
210+
return this.fill(found, insert, doFill);
219211
}
220212

221213
int totalFillAmount = 0;

src/main/java/github/kasuminova/mmce/common/util/MultiFluidTank.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package github.kasuminova.mmce.common.util;
22

3+
import hellfirepvp.modularmachinery.common.util.HybridFluidUtils;
34
import net.minecraft.nbt.NBTTagCompound;
45
import net.minecraftforge.fluids.FluidStack;
56
import net.minecraftforge.fluids.capability.IFluidHandler;
@@ -10,7 +11,7 @@
1011
import java.util.Objects;
1112

1213
@SuppressWarnings("unused")
13-
public class MultiFluidTank implements IFluidHandler {
14+
public class MultiFluidTank implements IFluidHandler, IOneToOneFluidHandler {
1415
private final FluidStack[] contents;
1516
private final IFluidTankProperties[] props;
1617
private int capacity;
@@ -66,6 +67,11 @@ public MultiFluidTank setCapacity(final int capacity) {
6667
return this;
6768
}
6869

70+
@Override
71+
public boolean isOneFluidOneSlot() {
72+
return oneToOne;
73+
}
74+
6975
@Override
7076
public IFluidTankProperties[] getTankProperties() {
7177
return props;
@@ -79,20 +85,9 @@ public synchronized int fill(final FluidStack fluid, final boolean doFill) {
7985

8086
final FluidStack insert = fluid.copy();
8187

82-
if (oneToOne) {
83-
// Find the distinct slot
84-
int foundSlot = -1;
85-
for (int i = 0; i < props.length; i++) {
86-
FluidStack fluidInSlot = props[i].getContents();
87-
if (fluidInSlot != null && fluidInSlot.getFluid() == fluid.getFluid()) {
88-
foundSlot = i;
89-
break;
90-
}
91-
}
92-
if (foundSlot >= 0) {
93-
return fill(foundSlot, insert, doFill);
94-
}
95-
// Didn't find existing fluid, resume normal logic.
88+
int foundSlot = HybridFluidUtils.findSlotWithFluid(this, props, fluid);
89+
if (foundSlot >= 0) {
90+
return fill(foundSlot, insert, doFill);
9691
}
9792

9893
int totalFillAmount = 0;

src/main/java/hellfirepvp/modularmachinery/common/util/HybridFluidUtils.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.common.collect.Lists;
44
import github.kasuminova.mmce.common.concurrent.Sync;
55
import github.kasuminova.mmce.common.util.IExtendedGasHandler;
6+
import github.kasuminova.mmce.common.util.IOneToOneFluidHandler;
67
import github.kasuminova.mmce.common.util.MultiFluidTank;
78
import github.kasuminova.mmce.common.util.MultiGasTank;
89
import hellfirepvp.modularmachinery.common.crafting.helper.ProcessingComponent;
@@ -12,6 +13,7 @@
1213
import mekanism.api.gas.IGasHandler;
1314
import net.minecraftforge.fluids.FluidStack;
1415
import net.minecraftforge.fluids.capability.IFluidHandler;
16+
import net.minecraftforge.fluids.capability.IFluidTankProperties;
1517
import net.minecraftforge.fml.common.Optional;
1618

1719
import javax.annotation.Nonnull;
@@ -135,6 +137,20 @@ public static void doDrainOrFill(final GasStack drainOrFill, final long maxDrain
135137
}
136138
}
137139

140+
public static int findSlotWithFluid(final IOneToOneFluidHandler handler, final IFluidTankProperties[] props, final FluidStack fluid) {
141+
int found = -1;
142+
if (handler.isOneFluidOneSlot()) {
143+
for (int i = 0; i < props.length; i++) {
144+
FluidStack fluidInSlot = props[i].getContents();
145+
if (fluidInSlot != null && fluidInSlot.getFluid() == fluid.getFluid()) {
146+
found = i;
147+
break;
148+
}
149+
}
150+
}
151+
return found;
152+
}
153+
138154
@Nonnull
139155
public static List<IFluidHandler> castFluidHandlerComponents(final List<ProcessingComponent<?>> components) {
140156
if (components.size() == 1) {

0 commit comments

Comments
 (0)