@@ -395,15 +395,26 @@ protected int putIntoFirstInventory(UpdateReason updateReason, ItemStack itemSta
395
395
* @param ignored the inventories to ignore
396
396
* @return a map of all inventories and their visible slots
397
397
*/
398
- private SequencedMap <Inventory , Set <Integer >> getAllInventorySlots (Inventory ... ignored ) {
398
+ private SequencedMap <Inventory , Set <Integer >> getAllActiveInventorySlots (Inventory ... ignored ) {
399
+ if (isFrozen ())
400
+ return Collections .emptySortedMap ();
401
+
399
402
HashMap <Inventory , Set <Integer >> slots = new HashMap <>();
400
403
Set <Inventory > ignoredSet = Arrays .stream (ignored ).collect (Collectors .toSet ());
401
404
405
+ slotLoop :
402
406
for (SlotElement element : slotElements ) {
403
407
if (element == null )
404
408
continue ;
405
409
406
- element = element .getHoldingElement ();
410
+ // follow gui links to holding element, break out if any intermediate gui is frozen
411
+ while (element instanceof SlotElement .GuiLink (Gui gui , int slot )) {
412
+ if (gui .isFrozen ())
413
+ continue slotLoop ;
414
+
415
+ element = gui .getSlotElement (slot );
416
+ }
417
+
407
418
if (element instanceof SlotElement .InventoryLink invElement ) {
408
419
Inventory inventory = invElement .inventory ();
409
420
if (ignoredSet .contains (inventory ))
@@ -421,10 +432,10 @@ private SequencedMap<Inventory, Set<Integer>> getAllInventorySlots(Inventory...
421
432
@ Override
422
433
public SequencedCollection <? extends Inventory > getInventories (Inventory ... ignored ) {
423
434
if (!ignoreObscuredInventorySlots )
424
- return Collections .unmodifiableSequencedCollection (getAllInventorySlots (ignored ).sequencedKeySet ());
435
+ return Collections .unmodifiableSequencedCollection (getAllActiveInventorySlots (ignored ).sequencedKeySet ());
425
436
426
437
ArrayList <Inventory > inventories = new ArrayList <>();
427
- for (Map .Entry <Inventory , Set <Integer >> entry : getAllInventorySlots (ignored ).entrySet ()) {
438
+ for (Map .Entry <Inventory , Set <Integer >> entry : getAllActiveInventorySlots (ignored ).entrySet ()) {
428
439
Inventory inventory = entry .getKey ();
429
440
Set <Integer > slots = entry .getValue ();
430
441
inventories .add (new ObscuredInventory (inventory , slot -> !slots .contains (slot )));
0 commit comments