@@ -119,11 +119,60 @@ public int execute() throws InterruptedException {
119119 private void getItemRequirements (final ItemReq ... itemReqs ) {
120120 final List <ItemReq > itemReqList = Arrays .asList (itemReqs );
121121
122- List <ItemReq > equipableItemReqs = itemReqList .stream ().filter (ItemReq ::isEquipable ).collect (Collectors .toList ());
123- Filter <Item > equipableItemReqFilter = item -> equipableItemReqs .stream ().anyMatch (req -> req .isRequirementItem (item ));
122+ final List <ItemReq > equipableItemReqs = itemReqList .stream ().filter (ItemReq ::isEquipable ).collect (Collectors .toList ());
123+ final Filter <Item > equipableItemReqFilter = item -> equipableItemReqs .stream ().anyMatch (req -> req .isRequirementItem (item ));
124+ final List <ItemReq > nonEquipableItemReqsList = itemReqList .stream ().filter (req -> !req .isEquipable ()).collect (Collectors .toList ());
125+
126+ // First we deposit any items that are not a requirement
127+ execute (new Event () {
128+ @ Override
129+ public int execute () throws InterruptedException {
130+ if (!getInventory ().contains (item -> !itemReqFilter .match (item ))) {
131+ setFinished ();
132+ return 0 ;
133+ }
134+
135+ if (!getBank ().isOpen ()) {
136+ getBank ().open ();
137+ } else {
138+ getBank ().depositAllExcept (itemReqFilter );
139+ }
140+ return 600 ;
141+ }
142+ });
143+
144+ // Then we deposit any excess item reqs we have
145+ execute (new Event () {
146+ Queue <ItemReq > nonEquipableItemReqs = new LinkedList <>(nonEquipableItemReqsList );
147+
148+ @ Override
149+ public int execute () throws InterruptedException {
150+ if (nonEquipableItemReqs .isEmpty ()) {
151+ setFinished ();
152+ return 0 ;
153+ }
154+
155+ if (!getBank ().isOpen ()) {
156+ getBank ().open ();
157+ } else {
158+ ItemReq itemReq = nonEquipableItemReqs .peek ();
159+
160+ int targetAmount = reqTargetAmountMap .get (itemReq );
161+ long amountOnPlayer = itemReq .getAmount (getInventory (), getEquipment ());
162+
163+ if (amountOnPlayer > targetAmount && targetAmount != ItemReq .QUANTITY_ALL ) {
164+ depositExcess (itemReq );
165+ } else {
166+ nonEquipableItemReqs .poll ();
167+ }
168+ }
169+ return 600 ;
170+ }
171+ });
172+
124173
125174 if (!equipableItemReqs .isEmpty ()) {
126- // First we want to withdraw any equipable item reqs
175+ // Now we want to withdraw any equipable item reqs
127176 Event withdrawEquipables = execute (new Event () {
128177 Queue <ItemReq > equipableItemReqQueue = new LinkedList <>(equipableItemReqs );
129178
@@ -132,7 +181,10 @@ private void getItemRequirements(final ItemReq... itemReqs) {
132181 public int execute () throws InterruptedException {
133182 if (equipableItemReqQueue .isEmpty ()) {
134183 setFinished ();
135- } else if (!getBank ().isOpen ()) {
184+ return 0 ;
185+ }
186+
187+ if (!getBank ().isOpen ()) {
136188 getBank ().open ();
137189 } else if (getInventory ().contains (item -> !equipableItemReqFilter .match (item ))) {
138190 getBank ().depositAllExcept (equipableItemReqFilter );
@@ -180,38 +232,35 @@ public int execute() throws InterruptedException {
180232 });
181233 }
182234
183- final List <ItemReq > nonEquipableItemReqsList = itemReqList .stream ().filter (req -> !req .isEquipable ()).collect (Collectors .toList ());
184-
185235 // Finally we want to withdraw any remaining item reqs
186236 Event withdrawNonEquipableEvent = execute (new Event () {
187237 Queue <ItemReq > nonEquipableItemReqs = new LinkedList <>(nonEquipableItemReqsList );
188238
189239 @ Override
190240 public int execute () throws InterruptedException {
241+ if (nonEquipableItemReqs .isEmpty ()) {
242+ setFinished ();
243+ return 0 ;
244+ }
245+
191246 if (!getBank ().isOpen ()) {
192247 getBank ().open ();
193- } else if (getInventory ().contains (item -> !itemReqFilter .match (item ))) {
194- getBank ().depositAllExcept (itemReqFilter );
195- } else if (nonEquipableItemReqs .isEmpty ()) {
196- setFinished ();
197- } else {
198- ItemReq itemReq = nonEquipableItemReqs .peek ();
248+ return 0 ;
249+ }
199250
200- int targetAmount = reqTargetAmountMap .get (itemReq );
201- long amountOnPlayer = itemReq .getAmount (getInventory (), getEquipment ());
251+ ItemReq itemReq = nonEquipableItemReqs .peek ();
202252
203- if (amountOnPlayer > targetAmount && targetAmount != ItemReq .QUANTITY_ALL ) {
204- depositExcess (itemReq );
205- } else if (!itemReq .hasRequirement (getInventory (), getEquipment ())) {
206- if (!withdrawItemReq (itemReq )) {
207- setFailed ();
208- }
209- } else if (amountOnPlayer < targetAmount && getBank ().contains (itemReq .getName ())) {
210- withdrawItemReq (itemReq );
211- } else {
212- nonEquipableItemReqs .poll ();
253+ int targetAmount = reqTargetAmountMap .get (itemReq );
254+ long amountOnPlayer = itemReq .getAmount (getInventory (), getEquipment ());
255+
256+ if (amountOnPlayer < targetAmount ) {
257+ if (!withdrawItemReq (itemReq )) {
258+ setFailed ();
213259 }
260+ } else {
261+ nonEquipableItemReqs .poll ();
214262 }
263+
215264 return 600 ;
216265 }
217266 });
0 commit comments