Skip to content

Commit 50785c5

Browse files
committed
casually rework IMultipleTankHandler to use an extendable interface instead of sealed class
casually rework DualEntry to not be an item handler
1 parent 5e39f63 commit 50785c5

File tree

7 files changed

+200
-244
lines changed

7 files changed

+200
-244
lines changed

src/main/java/gregtech/api/capability/DualHandler.java

Lines changed: 22 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66

77
import net.minecraft.item.ItemStack;
88
import net.minecraftforge.fluids.FluidStack;
9-
import net.minecraftforge.fluids.FluidTankInfo;
109
import net.minecraftforge.fluids.IFluidTank;
11-
import net.minecraftforge.fluids.capability.IFluidHandler;
1210
import net.minecraftforge.fluids.capability.IFluidTankProperties;
1311
import net.minecraftforge.items.IItemHandlerModifiable;
1412

@@ -29,7 +27,7 @@ public class DualHandler implements IItemHandlerModifiable, IMultipleTankHandler
2927
@NotNull
3028
IMultipleTankHandler fluidDelegate;
3129

32-
private final List<DualEntry> unwrapped;
30+
private final List<ITankEntry> unwrapped;
3331

3432
List<MetaTileEntity> notifiableEntities = new ArrayList<>();
3533
private final boolean isExport;
@@ -40,15 +38,10 @@ public DualHandler(@NotNull IItemHandlerModifiable itemDelegate,
4038
this.itemDelegate = itemDelegate;
4139
this.fluidDelegate = fluidDelegate;
4240
this.isExport = isExport;
43-
int items = itemDelegate.getSlots();
44-
int fluids = fluidDelegate.getTanks();
45-
int max = Math.max(items, fluids);
46-
47-
List<DualEntry> list = new ArrayList<>(max);
48-
for (int i = 0; i < max; i++) {
49-
list.add(new DualEntry(this,
50-
i < items ? i : -1,
51-
i < fluids ? i : -1));
41+
42+
List<ITankEntry> list = new ArrayList<>();
43+
for (var tank : this.fluidDelegate) {
44+
list.add(new DualEntry(this, tank));
5245
}
5346
this.unwrapped = list;
5447
}
@@ -137,8 +130,8 @@ public FluidStack drain(int maxDrain, boolean doDrain) {
137130
}
138131

139132
@Override
140-
public @NotNull List<MultiFluidTankEntry> getFluidTanks() {
141-
return this.fluidDelegate.getFluidTanks();
133+
public @NotNull List<ITankEntry> getFluidTanks() {
134+
return this.unwrapped;
142135
}
143136

144137
@Override
@@ -147,19 +140,15 @@ public int getTanks() {
147140
}
148141

149142
@Override
150-
public @NotNull MultiFluidTankEntry getTankAt(int index) {
151-
return this.fluidDelegate.getTankAt(index);
143+
public @NotNull ITankEntry getTankAt(int index) {
144+
return this.unwrapped.get(index);
152145
}
153146

154147
@Override
155148
public boolean allowSameFluidFill() {
156149
return this.fluidDelegate.allowSameFluidFill();
157150
}
158151

159-
public List<DualEntry> unwrap() {
160-
return this.unwrapped;
161-
}
162-
163152
public void onContentsChanged(Object handler) {
164153
for (MetaTileEntity metaTileEntity : notifiableEntities) {
165154
addToNotifiedList(metaTileEntity, handler, isExport);
@@ -182,60 +171,35 @@ public void removeNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
182171
this.notifiableEntities.remove(metaTileEntity);
183172
}
184173

185-
public static class DualEntry implements IItemHandlerModifiable, IFluidTank, IFluidHandler, INotifiableHandler {
186-
187-
private static final FluidTankInfo NULL = new FluidTankInfo(null, 0);
174+
public static class DualEntry implements ITankEntry, INotifiableHandler {
188175

189176
private final DualHandler delegate;
190-
private final int itemIndex;
191-
private final int fluidIndex;
192-
private final IFluidTankProperties[] props;
193-
194-
public DualEntry(DualHandler delegate, int itemIndex, int fluidIndex) {
195-
this.delegate = delegate;
196-
this.itemIndex = itemIndex;
197-
this.fluidIndex = fluidIndex;
198-
this.props = this.fluidIndex == -1 ?
199-
new IFluidTankProperties[0] :
200-
getTank().getTankProperties();
201-
}
202177

203-
public DualHandler getDelegate() {
204-
return this.delegate;
205-
}
206-
207-
@Override
208-
public FluidStack getFluid() {
209-
if (fluidIndex == -1) return null;
210-
return getTank().getFluid();
211-
}
178+
@NotNull
179+
private final ITankEntry tank;
212180

213-
@Override
214-
public int getFluidAmount() {
215-
if (fluidIndex == -1) return 0;
216-
return getTank().getFluidAmount();
181+
public DualEntry(DualHandler delegate, ITankEntry tank) {
182+
this.delegate = delegate;
183+
this.tank = tank;
217184
}
218185

219186
@Override
220-
public int getCapacity() {
221-
if (fluidIndex == -1) return 0;
222-
return getTank().getCapacity();
187+
public @NotNull IMultipleTankHandler getParent() {
188+
return this.delegate;
223189
}
224190

225191
@Override
226-
public FluidTankInfo getInfo() {
227-
if (fluidIndex == -1) return NULL;
228-
return getTank().getInfo();
192+
public @NotNull IFluidTank getDelegate() {
193+
return this.tank;
229194
}
230195

231196
@Override
232197
public IFluidTankProperties[] getTankProperties() {
233-
return this.props;
198+
return this.getTank().getTankProperties();
234199
}
235200

236201
@Override
237202
public int fill(FluidStack resource, boolean doFill) {
238-
if (fluidIndex == -1) return 0;
239203
int filled = getTank().fill(resource, doFill);
240204
if (doFill && filled > 0)
241205
delegate.onContentsChanged(this);
@@ -244,7 +208,6 @@ public int fill(FluidStack resource, boolean doFill) {
244208

245209
@Override
246210
public FluidStack drain(FluidStack resource, boolean doDrain) {
247-
if (fluidIndex == -1) return null;
248211
var drained = getTank().drain(resource, doDrain);
249212
if (doDrain && drained != null)
250213
delegate.onContentsChanged(this);
@@ -253,50 +216,14 @@ public FluidStack drain(FluidStack resource, boolean doDrain) {
253216

254217
@Override
255218
public FluidStack drain(int maxDrain, boolean doDrain) {
256-
if (fluidIndex == -1) return null;
257219
var drained = getTank().drain(maxDrain, doDrain);
258220
if (doDrain && drained != null)
259221
delegate.onContentsChanged(this);
260222
return drained;
261223
}
262224

263-
private MultiFluidTankEntry getTank() {
264-
return this.delegate.getTankAt(this.fluidIndex);
265-
}
266-
267-
@Override
268-
public int getSlots() {
269-
return itemIndex == -1 ? 0 : 1;
270-
}
271-
272-
@Override
273-
public ItemStack getStackInSlot(int slot) {
274-
if (itemIndex == -1) return ItemStack.EMPTY;
275-
return this.delegate.getStackInSlot(this.itemIndex);
276-
}
277-
278-
@Override
279-
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
280-
if (itemIndex == -1) return stack;
281-
return this.delegate.insertItem(this.itemIndex, stack, simulate);
282-
}
283-
284-
@Override
285-
public ItemStack extractItem(int slot, int amount, boolean simulate) {
286-
if (itemIndex == -1) return ItemStack.EMPTY;
287-
return this.delegate.extractItem(this.itemIndex, amount, simulate);
288-
}
289-
290-
@Override
291-
public int getSlotLimit(int slot) {
292-
if (itemIndex == -1) return 0;
293-
return this.delegate.getSlotLimit(this.itemIndex);
294-
}
295-
296-
@Override
297-
public void setStackInSlot(int slot, ItemStack stack) {
298-
if (itemIndex == -1) return;
299-
this.delegate.setStackInSlot(this.itemIndex, stack);
225+
private @NotNull ITankEntry getTank() {
226+
return this.tank;
300227
}
301228

302229
@Override

0 commit comments

Comments
 (0)