@@ -31,120 +31,133 @@ private InventoryUtil() {
3131 public static IItemHandler extractHandler (@ Nullable Object object ) {
3232 if (object instanceof ICapabilityProvider capabilityProvider ) {
3333 LazyOptional <IItemHandler > cap = capabilityProvider .getCapability (ForgeCapabilities .ITEM_HANDLER );
34- if (cap .isPresent ())
34+ if (cap .isPresent ()) {
3535 return cap .orElseThrow (NullPointerException ::new );
36+ }
3637 }
37- if (object instanceof IItemHandler itemHandler )
38+ if (object instanceof IItemHandler itemHandler ) {
3839 return itemHandler ;
39- if (object instanceof Container container )
40+ }
41+ if (object instanceof Container container ) {
4042 return new InvWrapper (container );
43+ }
4144 return null ;
4245 }
4346
4447 public static int moveItem (IItemHandler inventoryFrom , IItemHandler inventoryTo , ItemFilter filter ) {
45- if (inventoryFrom == null ) return 0 ;
48+ if (inventoryFrom == null ) {
49+ return 0 ;
50+ }
4651
47- int fromSlot = filter .getFromSlot ();
48- int toSlot = filter .getToSlot ();
52+ final int fromSlot = filter .getFromSlot ();
53+ final int toSlot = filter .getToSlot ();
4954
50- int amount = filter .getCount ();
51- int transferableAmount = 0 ;
55+ final int required = filter .getCount ();
56+ int transferred = 0 ;
5257
5358 // The logic changes with storage systems since these systems do not have slots
5459 if (inventoryFrom instanceof IStorageSystemItemHandler storageSystemHandler ) {
5560 if (inventoryTo instanceof IStorageSystemItemHandler targetSSH ) {
56- ItemStack extracted = storageSystemHandler .extractItem (filter , filter . getCount () , true );
57- ItemStack remain = targetSSH .insertItem (toSlot , extracted , false );
58- return storageSystemHandler .extractItem (filter , extracted .getCount () - remain .getCount (), false ).getCount ();
61+ ItemStack extracted = storageSystemHandler .extractItem (filter , required , true );
62+ ItemStack remains = targetSSH .insertItem (toSlot , extracted , false );
63+ return storageSystemHandler .extractItem (filter , extracted .getCount () - remains .getCount (), false ).getCount ();
5964 }
6065 for (int i = toSlot == -1 ? 0 : toSlot ; i < (toSlot == -1 ? inventoryTo .getSlots () : toSlot + 1 ); i ++) {
61- ItemStack extracted = storageSystemHandler .extractItem (filter , filter .getCount (), true );
62- if (extracted .isEmpty ())
63- continue ;
64- ItemStack inserted ;
66+ ItemStack extracted = storageSystemHandler .extractItem (filter , required - transferred , true );
67+ if (extracted .isEmpty ()) {
68+ break ;
69+ }
70+ ItemStack remains ;
6571 if (toSlot == -1 ) {
66- inserted = ItemHandlerHelper .insertItem (inventoryTo , extracted , false );
72+ remains = ItemHandlerHelper .insertItem (inventoryTo , extracted , false );
6773 } else {
68- inserted = inventoryTo .insertItem (toSlot , extracted , false );
74+ remains = inventoryTo .insertItem (toSlot , extracted , false );
6975 }
70- amount -= extracted .getCount () - inserted .getCount ();
71- transferableAmount += storageSystemHandler .extractItem (filter , extracted .getCount () - inserted .getCount (), false ).getCount ();
72- if (transferableAmount >= filter .getCount ())
76+ transferred += storageSystemHandler .extractItem (filter , extracted .getCount () - remains .getCount (), false ).getCount ();
77+ if (transferred >= filter .getCount ()) {
7378 break ;
79+ }
7480 }
75- return transferableAmount ;
81+ return transferred ;
7682 }
7783
7884 if (inventoryTo instanceof IStorageSystemItemHandler storageSystemHandler ) {
7985 for (int i = fromSlot == -1 ? 0 : fromSlot ; i < (fromSlot == -1 ? inventoryFrom .getSlots () : fromSlot + 1 ); i ++) {
8086 if (filter .test (inventoryFrom .getStackInSlot (i ))) {
81- ItemStack extracted = inventoryFrom .extractItem (i , amount - transferableAmount , true );
82- if (extracted .isEmpty ())
87+ ItemStack extracted = inventoryFrom .extractItem (i , required - transferred , true );
88+ if (extracted .isEmpty ()) {
8389 continue ;
84- ItemStack inserted = storageSystemHandler .insertItem (toSlot , extracted , false );
85-
86- amount -= inserted .getCount ();
87- transferableAmount += inventoryFrom .extractItem (i , extracted .getCount () - inserted .getCount (), false ).getCount ();
88- if (transferableAmount >= filter .getCount ())
90+ }
91+ ItemStack remains = storageSystemHandler .insertItem (toSlot , extracted , false );
92+ int inserted = extracted .getCount () - remains .getCount ();
93+ if (inserted == 0 ) {
8994 break ;
95+ }
96+ transferred += inventoryFrom .extractItem (i , inserted , false ).getCount ();
97+ if (transferred >= filter .getCount ()) {
98+ break ;
99+ }
90100 }
91101 }
92- return transferableAmount ;
102+ return transferred ;
93103 }
94104
95105 for (int i = fromSlot == -1 ? 0 : fromSlot ; i < (fromSlot == -1 ? inventoryFrom .getSlots () : fromSlot + 1 ); i ++) {
96106 if (filter .test (inventoryFrom .getStackInSlot (i ))) {
97- ItemStack extracted = inventoryFrom .extractItem (i , amount - transferableAmount , true );
98- if (extracted .isEmpty ())
107+ ItemStack extracted = inventoryFrom .extractItem (i , required - transferred , true );
108+ if (extracted .isEmpty ()) {
99109 continue ;
100- ItemStack inserted ;
110+ }
111+ ItemStack remains ;
101112 if (toSlot == -1 ) {
102- inserted = ItemHandlerHelper .insertItem (inventoryTo , extracted , false );
113+ remains = ItemHandlerHelper .insertItem (inventoryTo , extracted , false );
103114 } else {
104- inserted = inventoryTo .insertItem (toSlot , extracted , false );
115+ remains = inventoryTo .insertItem (toSlot , extracted , false );
105116 }
106- amount -= inserted .getCount ();
107- transferableAmount += inventoryFrom .extractItem (i , extracted .getCount () - inserted .getCount (), false ).getCount ();
108- if (transferableAmount >= filter .getCount ())
117+ int inserted = extracted .getCount () - remains .getCount ();
118+ if (inserted == 0 ) {
109119 break ;
120+ }
121+ transferred += inventoryFrom .extractItem (i , inserted , false ).getCount ();
122+ if (transferred >= filter .getCount ()) {
123+ break ;
124+ }
110125 }
111126 }
112- return transferableAmount ;
127+ return transferred ;
113128 }
114129
115130 public static int moveFluid (IFluidHandler inventoryFrom , IFluidHandler inventoryTo , FluidFilter filter ) {
116- if (inventoryFrom == null ) return 0 ;
131+ if (inventoryFrom == null ) {
132+ return 0 ;
133+ }
117134
118- int amount = filter .getCount ();
119- int transferableAmount = 0 ;
135+ final int required = filter .getCount ();
136+ int transferred = 0 ;
120137
121138 // The logic changes with storage systems since these systems do not have slots
122139 if (inventoryFrom instanceof IStorageSystemFluidHandler storageSystemHandler ) {
123140 FluidStack extracted = storageSystemHandler .drain (filter , IFluidHandler .FluidAction .SIMULATE );
124141 int inserted = inventoryTo .fill (extracted , IFluidHandler .FluidAction .EXECUTE );
125-
126- transferableAmount += storageSystemHandler .drain (filter .setCount (inserted ), IFluidHandler .FluidAction .EXECUTE ).getAmount ();
127-
128- return transferableAmount ;
142+ transferred += storageSystemHandler .drain (filter .setCount (inserted ), IFluidHandler .FluidAction .EXECUTE ).getAmount ();
143+ return transferred ;
129144 }
130145
131- if (inventoryTo instanceof IStorageSystemFluidHandler storageSystemHandler ) {
132- if (filter .test (inventoryFrom .getFluidInTank (0 ))) {
133- FluidStack toExtract = inventoryFrom .getFluidInTank (0 ).copy ();
134- toExtract .setAmount (amount );
146+ for (int i = 0 ; i < inventoryFrom .getTanks (); i ++) {
147+ FluidStack fluid = inventoryFrom .getFluidInTank (i );
148+ if (filter .test (fluid )) {
149+ FluidStack toExtract = fluid .copy ();
150+ toExtract .setAmount (required - transferred );
135151 FluidStack extracted = inventoryFrom .drain (toExtract , IFluidHandler .FluidAction .SIMULATE );
136- if (extracted .isEmpty ())
137- return 0 ;
138- int inserted = storageSystemHandler . fill ( extracted , IFluidHandler . FluidAction . EXECUTE );
139-
152+ if (extracted .isEmpty ()) {
153+ continue ;
154+ }
155+ int inserted = inventoryTo . fill ( extracted , IFluidHandler . FluidAction . EXECUTE );
140156 extracted .setAmount (inserted );
141- transferableAmount += inventoryFrom .drain (extracted , IFluidHandler .FluidAction .EXECUTE ).getAmount ();
157+ transferred += inventoryFrom .drain (extracted , IFluidHandler .FluidAction .EXECUTE ).getAmount ();
142158 }
143-
144- return transferableAmount ;
145159 }
146-
147- return transferableAmount ;
160+ return transferred ;
148161 }
149162
150163
0 commit comments