Fix events in delegating inventories

This commit is contained in:
NichtStudioCode 2023-10-04 20:41:42 +02:00
parent 923af0cc8a
commit d7401d4d04
2 changed files with 58 additions and 8 deletions

@ -1,8 +1,12 @@
package xyz.xenondevs.invui.inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Consumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import xyz.xenondevs.invui.inventory.event.ItemPostUpdateEvent;
import xyz.xenondevs.invui.inventory.event.ItemPreUpdateEvent;
import xyz.xenondevs.invui.inventory.event.UpdateReason;
import xyz.xenondevs.invui.util.Pair;
import java.util.Collection;
@ -115,14 +119,6 @@ public class CompositeInventory extends Inventory {
pair.getFirst().setDirectBackingItem(pair.getSecond(), itemStack);
}
@Override
public void notifyWindows() {
super.notifyWindows();
for (Inventory inventory : inventories) {
inventory.notifyWindows();
}
}
private Pair<Inventory, Integer> findInventory(int slot) {
int pos = 0;
for (Inventory inv : inventories) {
@ -137,4 +133,34 @@ public class CompositeInventory extends Inventory {
throw new IndexOutOfBoundsException(slot);
}
@Override
public void notifyWindows() {
super.notifyWindows();
for (Inventory inventory : inventories) {
inventory.notifyWindows();
}
}
@Override
public ItemPreUpdateEvent callPreUpdateEvent(@Nullable UpdateReason updateReason, int slot, @Nullable ItemStack previousItemStack, @Nullable ItemStack newItemStack) {
var invSlot = findInventory(slot);
return invSlot.getFirst().callPreUpdateEvent(updateReason, invSlot.getSecond(), previousItemStack, newItemStack);
}
@Override
public void callPostUpdateEvent(@Nullable UpdateReason updateReason, int slot, @Nullable ItemStack previousItemStack, @Nullable ItemStack newItemStack) {
var invSlot = findInventory(slot);
invSlot.getFirst().callPostUpdateEvent(updateReason, invSlot.getSecond(), previousItemStack, newItemStack);
}
@Override
public void setPostUpdateHandler(@NotNull Consumer<@NotNull ItemPostUpdateEvent> inventoryUpdatedHandler) {
throw new UnsupportedOperationException("Update handlers need to be set in the backing inventory");
}
@Override
public void setPreUpdateHandler(@NotNull Consumer<@NotNull ItemPreUpdateEvent> preUpdateHandler) {
throw new UnsupportedOperationException("Update handlers need to be set in the backing inventory");
}
}

@ -2,8 +2,12 @@ package xyz.xenondevs.invui.inventory;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Consumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import xyz.xenondevs.invui.inventory.event.ItemPostUpdateEvent;
import xyz.xenondevs.invui.inventory.event.ItemPreUpdateEvent;
import xyz.xenondevs.invui.inventory.event.UpdateReason;
import java.util.function.IntPredicate;
@ -98,4 +102,24 @@ public class ObscuredInventory extends Inventory {
inventory.notifyWindows();
}
@Override
public ItemPreUpdateEvent callPreUpdateEvent(@Nullable UpdateReason updateReason, int slot, @Nullable ItemStack previousItemStack, @Nullable ItemStack newItemStack) {
return inventory.callPreUpdateEvent(updateReason, slots[slot], previousItemStack, newItemStack);
}
@Override
public void callPostUpdateEvent(@Nullable UpdateReason updateReason, int slot, @Nullable ItemStack previousItemStack, @Nullable ItemStack newItemStack) {
inventory.callPostUpdateEvent(updateReason, slots[slot], previousItemStack, newItemStack);
}
@Override
public void setPostUpdateHandler(@NotNull Consumer<@NotNull ItemPostUpdateEvent> inventoryUpdatedHandler) {
throw new UnsupportedOperationException("Update handlers need to be set in the backing inventory");
}
@Override
public void setPreUpdateHandler(@NotNull Consumer<@NotNull ItemPreUpdateEvent> preUpdateHandler) {
throw new UnsupportedOperationException("Update handlers need to be set in the backing inventory");
}
}