66
77import net .minecraft .item .ItemStack ;
88import net .minecraftforge .fluids .FluidStack ;
9- import net .minecraftforge .fluids .FluidTankInfo ;
109import net .minecraftforge .fluids .IFluidTank ;
11- import net .minecraftforge .fluids .capability .IFluidHandler ;
1210import net .minecraftforge .fluids .capability .IFluidTankProperties ;
1311import 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