VirtualInventory shift-click priority

This commit is contained in:
NichtStudioCode 2021-09-01 12:51:04 +02:00
parent e92abcf079
commit 6da906fbc4
2 changed files with 29 additions and 9 deletions

@ -326,7 +326,7 @@ public abstract class BaseGUI implements GUI, Controllable {
}
private int putIntoFirstVirtualInventory(UpdateReason updateReason, ItemStack itemStack, VirtualInventory... ignored) {
List<VirtualInventory> inventories = getAllVirtualInventories(ignored);
LinkedHashSet<VirtualInventory> inventories = getAllVirtualInventories(ignored);
int originalAmount = itemStack.getAmount();
if (inventories.size() > 0) {
@ -340,19 +340,15 @@ public abstract class BaseGUI implements GUI, Controllable {
return originalAmount;
}
private List<VirtualInventory> getAllVirtualInventories(VirtualInventory... ignored) {
List<VirtualInventory> virtualInventories = new ArrayList<>();
Arrays.stream(slotElements)
private LinkedHashSet<VirtualInventory> getAllVirtualInventories(VirtualInventory... ignored) {
return Arrays.stream(slotElements)
.filter(Objects::nonNull)
.map(SlotElement::getHoldingElement)
.filter(element -> element instanceof VISlotElement)
.map(element -> ((VISlotElement) element).getVirtualInventory())
.filter(vi -> Arrays.stream(ignored).noneMatch(vi::equals))
.forEach(vi -> {
if (!virtualInventories.contains(vi)) virtualInventories.add(vi);
});
return virtualInventories;
.sorted((vi1, vi2) -> -Integer.compare(vi1.getGuiShiftPriority(), vi2.getGuiShiftPriority()))
.collect(Collectors.toCollection(LinkedHashSet::new));
}
// endregion

@ -1,6 +1,7 @@
package de.studiocode.invui.virtualinventory;
import de.studiocode.invui.InvUI;
import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.util.ArrayUtils;
import de.studiocode.invui.virtualinventory.event.ItemUpdateEvent;
import de.studiocode.invui.virtualinventory.event.UpdateReason;
@ -30,6 +31,7 @@ public class VirtualInventory implements ConfigurationSerializable {
private int[] stackSizes;
private final Set<Window> windows = new HashSet<>();
private Consumer<ItemUpdateEvent> itemUpdateHandler;
private int guiShiftPriority = 0;
/**
* Constructs a new {@link VirtualInventory}
@ -160,6 +162,28 @@ public class VirtualInventory implements ConfigurationSerializable {
this.itemUpdateHandler = itemUpdateHandler;
}
/**
* Sets the priority for shift-clicking {@link ItemStack ItemStatcks} into a {@link GUI}
* with multiple {@link VirtualInventory}.
* Not serialized with {@link VirtualInventoryManager#serializeInventory(VirtualInventory, OutputStream)}.
*
* @param guiShiftPriority The priority for shift-clicking, {@link VirtualInventory VirtualInventories} with
* a higher priority get prioritized.
*/
public void setGuiShiftPriority(int guiShiftPriority) {
this.guiShiftPriority = guiShiftPriority;
}
/**
* Gets the priority for shift-clicking {@link ItemStack ItemStatcks} into a {@link GUI}
*
* @return The priority for shift-clicking, {@link VirtualInventory VirtualInventories} with
* a higher priority get prioritized.
*/
public int getGuiShiftPriority() {
return guiShiftPriority;
}
/**
* Gets the {@link UUID} of this {@link VirtualInventory}.
*