From d7401d4d041998101a6b54fd7c6db37c89df51df Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Wed, 4 Oct 2023 20:41:42 +0200 Subject: [PATCH] Fix events in delegating inventories --- .../invui/inventory/CompositeInventory.java | 42 +++++++++++++++---- .../invui/inventory/ObscuredInventory.java | 24 +++++++++++ 2 files changed, 58 insertions(+), 8 deletions(-) diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/inventory/CompositeInventory.java b/invui-core/src/main/java/xyz/xenondevs/invui/inventory/CompositeInventory.java index 4a00f87..09be93a 100644 --- a/invui-core/src/main/java/xyz/xenondevs/invui/inventory/CompositeInventory.java +++ b/invui-core/src/main/java/xyz/xenondevs/invui/inventory/CompositeInventory.java @@ -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 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"); + } + } diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/inventory/ObscuredInventory.java b/invui-core/src/main/java/xyz/xenondevs/invui/inventory/ObscuredInventory.java index e3cfda6..8c152ee 100644 --- a/invui-core/src/main/java/xyz/xenondevs/invui/inventory/ObscuredInventory.java +++ b/invui-core/src/main/java/xyz/xenondevs/invui/inventory/ObscuredInventory.java @@ -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"); + } + }