From 3d4e062901bf2b13a5b19833bad7e4817f2a9351 Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Fri, 3 Mar 2023 17:36:07 +0100 Subject: [PATCH] Improved window building - Removed the "retain" parameter from Windows - all Windows can now be closed and reopened - Added open handlers to Windows - Added quick build methods Window.Builder.build(Player) and Window.Builder.show(Player) - Added some NotNull annotations --- .../adventure/AdventureWindowContexts.kt | 2 +- .../invui/window/AbstractDoubleWindow.java | 40 +++--- .../invui/window/AbstractMergedWindow.java | 5 +- .../invui/window/AbstractSingleWindow.java | 18 +-- .../invui/window/AbstractSplitWindow.java | 23 ++- .../invui/window/AbstractWindow.java | 132 +++++++++++------- .../invui/window/AnvilSingleWindowImpl.java | 23 +-- .../invui/window/AnvilSplitWindowImpl.java | 23 +-- .../xenondevs/invui/window/AnvilWindow.java | 6 +- .../window/CartographySingleWindowImpl.java | 24 +--- .../window/CartographySplitWindowImpl.java | 24 +--- .../invui/window/CartographyWindow.java | 6 +- .../invui/window/NormalMergedWindowImpl.java | 13 +- .../invui/window/NormalSingleWindowImpl.java | 26 +--- .../invui/window/NormalSplitWindowImpl.java | 13 +- .../xyz/xenondevs/invui/window/Window.java | 131 +++++++++-------- .../xenondevs/invui/window/WindowManager.java | 6 +- 17 files changed, 251 insertions(+), 264 deletions(-) diff --git a/invui-kotlin/src/main/kotlin/xyz/xenondevs/invui/adventure/AdventureWindowContexts.kt b/invui-kotlin/src/main/kotlin/xyz/xenondevs/invui/adventure/AdventureWindowContexts.kt index 81859db..55fb5eb 100644 --- a/invui-kotlin/src/main/kotlin/xyz/xenondevs/invui/adventure/AdventureWindowContexts.kt +++ b/invui-kotlin/src/main/kotlin/xyz/xenondevs/invui/adventure/AdventureWindowContexts.kt @@ -14,4 +14,4 @@ import xyz.xenondevs.invui.window.Window * @return This Window Builder */ @Contract("_ -> this") -fun > B.setTitle(title: Component): B = setTitle(AdventureComponentWrapper(title)) \ No newline at end of file +fun > B.setTitle(title: Component): B = setTitle(AdventureComponentWrapper(title)) \ No newline at end of file diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/AbstractDoubleWindow.java b/invui/src/main/java/xyz/xenondevs/invui/window/AbstractDoubleWindow.java index 573a1d6..0b938a0 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/AbstractDoubleWindow.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/AbstractDoubleWindow.java @@ -24,34 +24,33 @@ public abstract class AbstractDoubleWindow extends AbstractWindow { private final Inventory playerInventory; private final ItemStack[] playerItems = new ItemStack[36]; protected Inventory upperInventory; - private boolean isCurrentlyOpened; - public AbstractDoubleWindow(Player player, ComponentWrapper title, int size, Inventory upperInventory, boolean closeable, boolean retain) { - super(player.getUniqueId(), title, size, closeable, retain); + public AbstractDoubleWindow(Player player, ComponentWrapper title, int size, Inventory upperInventory, boolean closeable) { + super(player.getUniqueId(), title, size, closeable); this.upperInventory = upperInventory; this.playerInventory = player.getInventory(); } - protected void initUpperItems() { + @Override + protected void initItems() { + // init upper inventory for (int i = 0; i < upperInventory.getSize(); i++) { SlotElement element = getSlotElement(i); redrawItem(i, element, true); } - } - - private void initPlayerItems() { - for (int i = upperInventory.getSize(); i < upperInventory.getSize() + 36; i++) { - SlotElement element = getSlotElement(i); - redrawItem(i, element, true); - } - } - - private void clearPlayerInventory() { + + // store and clear player inventory Inventory inventory = getViewer().getInventory(); for (int i = 0; i < 36; i++) { playerItems[i] = inventory.getItem(i); inventory.setItem(i, null); } + + // init player inventory + for (int i = upperInventory.getSize(); i < upperInventory.getSize() + 36; i++) { + SlotElement element = getSlotElement(i); + redrawItem(i, element, true); + } } private void restorePlayerInventory() { @@ -71,7 +70,7 @@ public abstract class AbstractDoubleWindow extends AbstractWindow { @Override protected void setInvItem(int slot, ItemStack itemStack) { if (slot >= upperInventory.getSize()) { - if (isCurrentlyOpened) { + if (isOpen()) { int invSlot = SlotUtils.translateGuiToPlayerInv(slot - upperInventory.getSize()); setPlayerInvItem(invSlot, itemStack); } @@ -88,7 +87,7 @@ public abstract class AbstractDoubleWindow extends AbstractWindow { @Override public void handleViewerDeath(PlayerDeathEvent event) { - if (isCurrentlyOpened) { + if (isOpen()) { List drops = event.getDrops(); if (!event.getKeepInventory()) { drops.clear(); @@ -103,15 +102,10 @@ public abstract class AbstractDoubleWindow extends AbstractWindow { protected void handleOpened() { // Prevent players from receiving advancements from UI items InventoryAccess.getPlayerUtils().stopAdvancementListening(getViewer()); - - isCurrentlyOpened = true; - clearPlayerInventory(); - initPlayerItems(); } @Override protected void handleClosed() { - isCurrentlyOpened = false; restorePlayerInventory(); // Start the advancement listeners again @@ -136,7 +130,7 @@ public abstract class AbstractDoubleWindow extends AbstractWindow { @Override public Inventory[] getInventories() { - return isCurrentlyOpened ? new Inventory[] {upperInventory, playerInventory} : new Inventory[] {upperInventory}; + return isOpen() ? new Inventory[] {upperInventory, playerInventory} : new Inventory[] {upperInventory}; } public Inventory getUpperInventory() { @@ -147,8 +141,6 @@ public abstract class AbstractDoubleWindow extends AbstractWindow { return playerInventory; } - protected abstract SlotElement getSlotElement(int index); - protected abstract Pair getWhereClicked(InventoryClickEvent event); } diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/AbstractMergedWindow.java b/invui/src/main/java/xyz/xenondevs/invui/window/AbstractMergedWindow.java index bea780a..4cef469 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/AbstractMergedWindow.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/AbstractMergedWindow.java @@ -17,12 +17,11 @@ public abstract class AbstractMergedWindow extends AbstractDoubleWindow { private final AbstractGui gui; - public AbstractMergedWindow(Player player, ComponentWrapper title, AbstractGui gui, Inventory upperInventory, boolean closeable, boolean retain) { - super(player, title, gui.getSize(), upperInventory, closeable, retain); + public AbstractMergedWindow(Player player, ComponentWrapper title, AbstractGui gui, Inventory upperInventory, boolean closeable) { + super(player, title, gui.getSize(), upperInventory, closeable); this.gui = gui; gui.addParent(this); - initUpperItems(); } @Override diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/AbstractSingleWindow.java b/invui/src/main/java/xyz/xenondevs/invui/window/AbstractSingleWindow.java index c549119..13509d2 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/AbstractSingleWindow.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/AbstractSingleWindow.java @@ -25,16 +25,16 @@ public abstract class AbstractSingleWindow extends AbstractWindow { private final int size; protected Inventory inventory; - public AbstractSingleWindow(UUID viewerUUID, ComponentWrapper title, AbstractGui gui, Inventory inventory, boolean initItems, boolean closeable, boolean retain) { - super(viewerUUID, title, gui.getSize(), closeable, retain); + public AbstractSingleWindow(UUID viewerUUID, ComponentWrapper title, AbstractGui gui, Inventory inventory, boolean closeable) { + super(viewerUUID, title, gui.getSize(), closeable); this.gui = gui; this.size = gui.getSize(); this.inventory = inventory; gui.addParent(this); - if (initItems) initItems(); } + @Override protected void initItems() { for (int i = 0; i < size; i++) { SlotElement element = gui.getSlotElement(i); @@ -109,27 +109,27 @@ public abstract class AbstractSingleWindow extends AbstractWindow { } @SuppressWarnings("unchecked") - public abstract static class AbstractBuilder> - extends AbstractWindow.AbstractBuilder - implements Builder.Single + public abstract static class AbstractBuilder> + extends AbstractWindow.AbstractBuilder + implements Builder.Single { protected Supplier guiSupplier; @Override - public S setGui(@NotNull Supplier guiSupplier) { + public @NotNull S setGui(@NotNull Supplier guiSupplier) { this.guiSupplier = guiSupplier; return (S) this; } @Override - public S setGui(@NotNull Gui gui) { + public @NotNull S setGui(@NotNull Gui gui) { this.guiSupplier = () -> gui; return (S) this; } @Override - public S setGui(@NotNull Gui.Builder builder) { + public @NotNull S setGui(@NotNull Gui.Builder builder) { this.guiSupplier = builder::build; return (S) this; } diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/AbstractSplitWindow.java b/invui/src/main/java/xyz/xenondevs/invui/window/AbstractSplitWindow.java index 1994406..f0de24a 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/AbstractSplitWindow.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/AbstractSplitWindow.java @@ -21,14 +21,13 @@ public abstract class AbstractSplitWindow extends AbstractDoubleWindow { private final AbstractGui upperGui; private final AbstractGui lowerGui; - public AbstractSplitWindow(Player player, ComponentWrapper title, AbstractGui upperGui, AbstractGui lowerGui, Inventory upperInventory, boolean initItems, boolean closeable, boolean retain) { - super(player, title, upperGui.getSize() + lowerGui.getSize(), upperInventory, closeable, retain); + public AbstractSplitWindow(Player player, ComponentWrapper title, AbstractGui upperGui, AbstractGui lowerGui, Inventory upperInventory, boolean closeable) { + super(player, title, upperGui.getSize() + lowerGui.getSize(), upperInventory, closeable); this.upperGui = upperGui; this.lowerGui = lowerGui; upperGui.addParent(this); lowerGui.addParent(this); - if (initItems) initUpperItems(); } @Override @@ -68,46 +67,46 @@ public abstract class AbstractSplitWindow extends AbstractDoubleWindow { } @SuppressWarnings("unchecked") - public static abstract class AbstractBuilder> - extends AbstractWindow.AbstractBuilder - implements Window.Builder.Double + public static abstract class AbstractBuilder> + extends AbstractWindow.AbstractBuilder + implements Window.Builder.Double { protected Supplier upperGuiSupplier; protected Supplier lowerGuiSupplier; @Override - public S setUpperGui(@NotNull Supplier guiSupplier) { + public @NotNull S setUpperGui(@NotNull Supplier guiSupplier) { this.upperGuiSupplier = guiSupplier; return (S) this; } @Override - public S setUpperGui(@NotNull Gui gui) { + public @NotNull S setUpperGui(@NotNull Gui gui) { this.upperGuiSupplier = () -> gui; return (S) this; } @Override - public S setUpperGui(@NotNull Gui.Builder builder) { + public @NotNull S setUpperGui(@NotNull Gui.Builder builder) { this.upperGuiSupplier = builder::build; return (S) this; } @Override - public S setLowerGui(@NotNull Supplier guiSupplier) { + public @NotNull S setLowerGui(@NotNull Supplier guiSupplier) { this.lowerGuiSupplier = guiSupplier; return (S) this; } @Override - public S setLowerGui(@NotNull Gui gui) { + public @NotNull S setLowerGui(@NotNull Gui gui) { this.lowerGuiSupplier = () -> gui; return (S) this; } @Override - public S setLowerGui(@NotNull Gui.Builder builder) { + public @NotNull S setLowerGui(@NotNull Gui.Builder builder) { this.lowerGuiSupplier = builder::build; return (S) this; } diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/AbstractWindow.java b/invui/src/main/java/xyz/xenondevs/invui/window/AbstractWindow.java index a069c7b..72a9080 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/AbstractWindow.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/AbstractWindow.java @@ -20,6 +20,7 @@ import org.jetbrains.annotations.Nullable; import xyz.xenondevs.inventoryaccess.InventoryAccess; import xyz.xenondevs.inventoryaccess.component.BaseComponentWrapper; import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; +import xyz.xenondevs.inventoryaccess.component.i18n.Languages; import xyz.xenondevs.invui.InvUI; import xyz.xenondevs.invui.gui.AbstractGui; import xyz.xenondevs.invui.gui.Gui; @@ -41,25 +42,20 @@ public abstract class AbstractWindow implements Window, GuiParent { private static final NamespacedKey SLOT_KEY = new NamespacedKey(InvUI.getInstance().getPlugin(), "slot"); private final UUID viewerUUID; - private final boolean retain; private final SlotElement[] elementsDisplayed; + private List openHandlers; private List closeHandlers; private ComponentWrapper title; private boolean closeable; - private boolean removed; + private boolean currentlyOpen; - public AbstractWindow(UUID viewerUUID, ComponentWrapper title, int size, boolean closeable, boolean retain) { + public AbstractWindow(UUID viewerUUID, ComponentWrapper title, int size, boolean closeable) { this.viewerUUID = viewerUUID; this.title = title; this.closeable = closeable; - this.retain = retain; this.elementsDisplayed = new SlotElement[size]; } - protected void register() { - WindowManager.getInstance().addWindow(this); - } - protected void redrawItem(int index) { redrawItem(index, getSlotElement(index), false); } @@ -168,18 +164,29 @@ public abstract class AbstractWindow implements Window, GuiParent { event.setCursor(cursorStack); } - public void handleOpen(InventoryOpenEvent event) { - if (!event.getPlayer().equals(getViewer())) + public void handleOpenEvent(InventoryOpenEvent event) { + if (!event.getPlayer().equals(getViewer())) { event.setCancelled(true); - else handleOpened(); + } else { + if (currentlyOpen) + throw new IllegalStateException("Window is already opened!"); + + currentlyOpen = true; + handleOpened(); + + if (openHandlers != null) { + openHandlers.forEach(Runnable::run); + } + } } - public void handleClose(Player player) { + public void handleCloseEvent(Player player) { if (closeable) { - if (!retain) { - remove(false); - } + if (!currentlyOpen) + throw new IllegalStateException("Window is already closed!"); + currentlyOpen = false; + remove(false); handleClosed(); if (closeHandlers != null) { @@ -211,15 +218,7 @@ public abstract class AbstractWindow implements Window, GuiParent { && ((SlotElement.VISlotElement) element).getVirtualInventory() == virtualInventory); } - public void remove() { - remove(true); - } - public void remove(boolean closeForViewer) { - if (removed) - return; - removed = true; - WindowManager.getInstance().removeWindow(this); Arrays.stream(elementsDisplayed) @@ -252,14 +251,20 @@ public abstract class AbstractWindow implements Window, GuiParent { @Override public void show() { - if (removed) throw new IllegalStateException("The Window has already been closed."); - Player viewer = getViewer(); - if (viewer == null) throw new IllegalStateException("The player is not online."); + if (viewer == null) + throw new IllegalStateException("The player is not online."); + + initItems(); + WindowManager.getInstance().addWindow(this); + openInventory(viewer); + } + + protected void openInventory(@NotNull Player viewer) { InventoryAccess.getInventoryUtils().openCustomInventory( viewer, getInventories()[0], - title.localized(viewer.getLocale()) + title.localized(viewer) ); } @@ -270,7 +275,7 @@ public abstract class AbstractWindow implements Window, GuiParent { if (currentViewer != null) { InventoryAccess.getInventoryUtils().updateOpenInventoryTitle( currentViewer, - title.localized(currentViewer.getLocale()) + title.localized(currentViewer) ); } } @@ -285,6 +290,19 @@ public abstract class AbstractWindow implements Window, GuiParent { changeTitle(TextComponent.fromLegacyText(title)); } + @Override + public void setOpenHandlers(@NotNull List<@NotNull Runnable> openHandlers) { + this.openHandlers = openHandlers; + } + + @Override + public void addOpenHandler(@NotNull Runnable openHandler) { + if (openHandlers == null) + openHandlers = new ArrayList<>(); + + openHandlers.add(openHandler); + } + @Override public void setCloseHandlers(@NotNull List<@NotNull Runnable> closeHandlers) { this.closeHandlers = closeHandlers; @@ -321,7 +339,7 @@ public abstract class AbstractWindow implements Window, GuiParent { if (player == null) throw new IllegalStateException("Tried to receive the language from a viewer that is not online."); - return player.getLocale(); + return Languages.getInstance().getLanguage(player); } @Override @@ -340,8 +358,8 @@ public abstract class AbstractWindow implements Window, GuiParent { } @Override - public boolean isRemoved() { - return removed; + public boolean isOpen() { + return currentlyOpen; } protected abstract void setInvItem(int slot, ItemStack itemStack); @@ -354,6 +372,8 @@ public abstract class AbstractWindow implements Window, GuiParent { protected abstract Inventory[] getInventories(); + protected abstract void initItems(); + protected abstract void handleOpened(); protected abstract void handleClosed(); @@ -367,59 +387,68 @@ public abstract class AbstractWindow implements Window, GuiParent { public abstract void handleViewerDeath(PlayerDeathEvent event); @SuppressWarnings("unchecked") - public static abstract class AbstractBuilder> implements Window.Builder { + public static abstract class AbstractBuilder> implements Window.Builder { - protected V viewer; + protected Player viewer; protected ComponentWrapper title; protected boolean closeable = true; - protected boolean retain = false; + protected List openHandlers; protected List closeHandlers; protected List> modifiers; @Override - public S setViewer(@NotNull V viewer) { + public @NotNull S setViewer(@NotNull Player viewer) { this.viewer = viewer; return (S) this; } @Override - public S setTitle(@NotNull ComponentWrapper title) { + public @NotNull S setTitle(@NotNull ComponentWrapper title) { this.title = title; return (S) this; } @Override - public S setTitle(@NotNull BaseComponent @NotNull [] title) { + public @NotNull S setTitle(@NotNull BaseComponent @NotNull [] title) { this.title = new BaseComponentWrapper(title); return (S) this; } @Override - public S setTitle(@NotNull String title) { + public @NotNull S setTitle(@NotNull String title) { this.title = new BaseComponentWrapper(TextComponent.fromLegacyText(title)); return (S) this; } @Override - public S setCloseable(boolean closeable) { + public @NotNull S setCloseable(boolean closeable) { this.closeable = closeable; return (S) this; } @Override - public S setRetain(boolean retain) { - this.retain = retain; + public @NotNull S setOpenHandlers(List openHandlers) { + this.openHandlers = openHandlers; return (S) this; } @Override - public S setCloseHandlers(List closeHandlers) { + public @NotNull S addOpenHandler(Runnable openHandler) { + if (openHandlers == null) + openHandlers = new ArrayList<>(); + + openHandlers.add(openHandler); + return (S) this; + } + + @Override + public @NotNull S setCloseHandlers(List closeHandlers) { this.closeHandlers = closeHandlers; return (S) this; } @Override - public S addCloseHandler(Runnable closeHandler) { + public @NotNull S addCloseHandler(Runnable closeHandler) { if (closeHandlers == null) closeHandlers = new ArrayList<>(); @@ -428,13 +457,13 @@ public abstract class AbstractWindow implements Window, GuiParent { } @Override - public S setModifiers(List> modifiers) { + public @NotNull S setModifiers(List> modifiers) { this.modifiers = modifiers; return (S) this; } @Override - public S addModifier(Consumer modifier) { + public @NotNull S addModifier(Consumer modifier) { if (modifiers == null) modifiers = new ArrayList<>(); @@ -450,11 +479,21 @@ public abstract class AbstractWindow implements Window, GuiParent { modifiers.forEach(modifier -> modifier.accept(window)); } + @Override + public @NotNull W build() { + return build(viewer); + } + + @Override + public void show(Player viewer) { + build(viewer).show(); + } + @SuppressWarnings("unchecked") @Override public @NotNull S clone() { try { - var clone = (AbstractBuilder) super.clone(); + var clone = (AbstractBuilder) super.clone(); if (title != null) clone.title = title.clone(); if (closeHandlers != null) @@ -469,5 +508,4 @@ public abstract class AbstractWindow implements Window, GuiParent { } - } \ No newline at end of file diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/AnvilSingleWindowImpl.java b/invui/src/main/java/xyz/xenondevs/invui/window/AnvilSingleWindowImpl.java index 65cdd47..bf3e4d1 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/AnvilSingleWindowImpl.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/AnvilSingleWindowImpl.java @@ -22,15 +22,11 @@ final class AnvilSingleWindowImpl extends AbstractSingleWindow implements AnvilW @Nullable ComponentWrapper title, @NotNull AbstractGui gui, @Nullable List<@NotNull Consumer<@NotNull String>> renameHandlers, - boolean closable, - boolean retain + boolean closable ) { - super(player.getUniqueId(), title, gui, null, false, closable, retain); - anvilInventory = InventoryAccess.createAnvilInventory(player, title, renameHandlers); + super(player.getUniqueId(), title, gui, null, closable); + anvilInventory = InventoryAccess.createAnvilInventory(player, title.localized(player), renameHandlers); inventory = anvilInventory.getBukkitInventory(); - - initItems(); - register(); } @Override @@ -39,11 +35,7 @@ final class AnvilSingleWindowImpl extends AbstractSingleWindow implements AnvilW } @Override - public void show() { - if (isRemoved()) throw new IllegalStateException("The Window has already been closed."); - - Player viewer = getViewer(); - if (viewer == null) throw new IllegalStateException("The player is not online."); + protected void openInventory(@NotNull Player viewer) { anvilInventory.open(); } @@ -53,7 +45,7 @@ final class AnvilSingleWindowImpl extends AbstractSingleWindow implements AnvilW } public static final class BuilderImpl - extends AbstractSingleWindow.AbstractBuilder + extends AbstractSingleWindow.AbstractBuilder implements AnvilWindow.Builder.Single { @@ -75,7 +67,7 @@ final class AnvilSingleWindowImpl extends AbstractSingleWindow implements AnvilW } @Override - public @NotNull AnvilWindow build() { + public @NotNull AnvilWindow build(Player viewer) { if (viewer == null) throw new IllegalStateException("Viewer is not defined."); if (guiSupplier == null) @@ -86,8 +78,7 @@ final class AnvilSingleWindowImpl extends AbstractSingleWindow implements AnvilW title, (AbstractGui) guiSupplier.get(), renameHandlers, - closeable, - retain + closeable ); applyModifiers(window); diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/AnvilSplitWindowImpl.java b/invui/src/main/java/xyz/xenondevs/invui/window/AnvilSplitWindowImpl.java index cac68e5..b19ba2d 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/AnvilSplitWindowImpl.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/AnvilSplitWindowImpl.java @@ -23,16 +23,12 @@ final class AnvilSplitWindowImpl extends AbstractSplitWindow implements AnvilWin @NotNull AbstractGui upperGui, @NotNull AbstractGui lowerGui, @Nullable List<@NotNull Consumer<@NotNull String>> renameHandlers, - boolean closeable, - boolean retain + boolean closeable ) { - super(player, title, upperGui, lowerGui, null, false, closeable, retain); + super(player, title, upperGui, lowerGui, null, closeable); - anvilInventory = InventoryAccess.createAnvilInventory(player, title, renameHandlers); + anvilInventory = InventoryAccess.createAnvilInventory(player, title.localized(player), renameHandlers); upperInventory = anvilInventory.getBukkitInventory(); - - initUpperItems(); - register(); } @Override @@ -41,11 +37,7 @@ final class AnvilSplitWindowImpl extends AbstractSplitWindow implements AnvilWin } @Override - public void show() { - if (isRemoved()) throw new IllegalStateException("The Window has already been closed."); - - Player viewer = getViewer(); - if (viewer == null) throw new IllegalStateException("The player is not online."); + protected void openInventory(@NotNull Player viewer) { anvilInventory.open(); } @@ -55,7 +47,7 @@ final class AnvilSplitWindowImpl extends AbstractSplitWindow implements AnvilWin } public static final class BuilderImpl - extends AbstractSplitWindow.AbstractBuilder + extends AbstractSplitWindow.AbstractBuilder implements AnvilWindow.Builder.Split { @@ -77,7 +69,7 @@ final class AnvilSplitWindowImpl extends AbstractSplitWindow implements AnvilWin } @Override - public @NotNull AnvilWindow build() { + public @NotNull AnvilWindow build(Player viewer) { if (viewer == null) throw new IllegalStateException("Viewer is not defined."); if (upperGuiSupplier == null) @@ -91,8 +83,7 @@ final class AnvilSplitWindowImpl extends AbstractSplitWindow implements AnvilWin (AbstractGui) upperGuiSupplier.get(), (AbstractGui) lowerGuiSupplier.get(), renameHandlers, - closeable, - retain + closeable ); applyModifiers(window); diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/AnvilWindow.java b/invui/src/main/java/xyz/xenondevs/invui/window/AnvilWindow.java index 90fe2b0..5626d92 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/AnvilWindow.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/AnvilWindow.java @@ -65,7 +65,7 @@ public interface AnvilWindow extends Window { * @see Window.Builder.Normal * @see CartographyWindow.Builder */ - interface Builder> extends Window.Builder { + interface Builder> extends Window.Builder { /** * Sets the rename handlers of the {@link AnvilWindow}. @@ -90,7 +90,7 @@ public interface AnvilWindow extends Window { * @see Window.Builder.Normal.Single * @see CartographyWindow.Builder.Single */ - interface Single extends Builder, Window.Builder.Single {} + interface Single extends Builder, Window.Builder.Single {} /** * A split {@link AnvilWindow} builder. Combines both {@link AnvilWindow.Builder} and {@link Window.Builder.Double} @@ -100,7 +100,7 @@ public interface AnvilWindow extends Window { * @see Window.Builder.Normal.Split * @see CartographyWindow.Builder.Split */ - interface Split extends Builder, Window.Builder.Double {} + interface Split extends Builder, Window.Builder.Double {} } diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/CartographySingleWindowImpl.java b/invui/src/main/java/xyz/xenondevs/invui/window/CartographySingleWindowImpl.java index d333461..1bd6995 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/CartographySingleWindowImpl.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/CartographySingleWindowImpl.java @@ -26,18 +26,15 @@ final class CartographySingleWindowImpl extends AbstractSingleWindow implements @NotNull Player player, @Nullable ComponentWrapper title, @NotNull AbstractGui gui, - boolean closeable, - boolean retain + boolean closeable ) { - super(player.getUniqueId(), title, gui, null, false, closeable, retain); + super(player.getUniqueId(), title, gui, null, closeable); if (gui.getWidth() != 2 || gui.getHeight() != 1) throw new IllegalArgumentException("Gui has to be 2x1"); - cartographyInventory = InventoryAccess.createCartographyInventory(player, title); + cartographyInventory = InventoryAccess.createCartographyInventory(player, title.localized(player)); inventory = cartographyInventory.getBukkitInventory(); - initItems(); resetMap(); - register(); } @Override @@ -71,23 +68,17 @@ final class CartographySingleWindowImpl extends AbstractSingleWindow implements } @Override - public void show() { - if (isRemoved()) - throw new IllegalStateException("The Window has already been closed."); - - Player viewer = getViewer(); - if (viewer == null) - throw new IllegalStateException("The player is not online."); + protected void openInventory(@NotNull Player viewer) { cartographyInventory.open(); } public static final class BuilderImpl - extends AbstractSingleWindow.AbstractBuilder + extends AbstractSingleWindow.AbstractBuilder implements CartographyWindow.Builder.Single { @Override - public @NotNull CartographyWindow build() { + public @NotNull CartographyWindow build(Player viewer) { if (viewer == null) throw new IllegalStateException("Viewer is not defined."); if (guiSupplier == null) @@ -97,8 +88,7 @@ final class CartographySingleWindowImpl extends AbstractSingleWindow implements viewer, title, (AbstractGui) guiSupplier.get(), - closeable, - retain + closeable ); applyModifiers(window); diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/CartographySplitWindowImpl.java b/invui/src/main/java/xyz/xenondevs/invui/window/CartographySplitWindowImpl.java index 4964fe8..fc8a198 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/CartographySplitWindowImpl.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/CartographySplitWindowImpl.java @@ -27,17 +27,14 @@ final class CartographySplitWindowImpl extends AbstractSplitWindow implements Ca @Nullable ComponentWrapper title, @NotNull AbstractGui upperGui, @NotNull AbstractGui lowerGui, - boolean closeable, - boolean retain + boolean closeable ) { - super(player, title, createWrappingGui(upperGui), lowerGui, null, false, closeable, retain); + super(player, title, createWrappingGui(upperGui), lowerGui, null, closeable); - cartographyInventory = InventoryAccess.createCartographyInventory(player, title); + cartographyInventory = InventoryAccess.createCartographyInventory(player, title.localized(player)); upperInventory = cartographyInventory.getBukkitInventory(); - initUpperItems(); resetMap(); - register(); } private static AbstractGui createWrappingGui(Gui upperGui) { @@ -66,23 +63,17 @@ final class CartographySplitWindowImpl extends AbstractSplitWindow implements Ca } @Override - public void show() { - if (isRemoved()) - throw new IllegalStateException("The Window has already been closed."); - - Player viewer = getViewer(); - if (viewer == null) - throw new IllegalStateException("The player is not online."); + protected void openInventory(@NotNull Player viewer) { cartographyInventory.open(); } public static final class BuilderImpl - extends AbstractSplitWindow.AbstractBuilder + extends AbstractSplitWindow.AbstractBuilder implements CartographyWindow.Builder.Split { @Override - public @NotNull CartographyWindow build() { + public @NotNull CartographyWindow build(Player viewer) { if (viewer == null) throw new IllegalStateException("Viewer is not defined."); if (upperGuiSupplier == null) @@ -93,8 +84,7 @@ final class CartographySplitWindowImpl extends AbstractSplitWindow implements Ca title, (AbstractGui) upperGuiSupplier.get(), (AbstractGui) lowerGuiSupplier.get(), - closeable, - retain + closeable ); applyModifiers(window); diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/CartographyWindow.java b/invui/src/main/java/xyz/xenondevs/invui/window/CartographyWindow.java index 49d7bf5..36ae702 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/CartographyWindow.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/CartographyWindow.java @@ -95,21 +95,21 @@ public interface CartographyWindow extends Window { * @see Window.Builder.Normal * @see Window.Builder */ - interface Builder> extends Window.Builder { + interface Builder> extends Window.Builder { /** * A single {@link CartographyWindow} builder. Combines both {@link CartographyWindow.Builder} an * {@link Window.Builder.Single} for a {@link CartographyWindow} with only one {@link Gui} that does not * access the {@link Player Player's} inventory. */ - interface Single extends Builder, Window.Builder.Single {} + interface Single extends Builder, Window.Builder.Single {} /** * A split {@link CartographyWindow} builder. Combines both {@link CartographyWindow.Builder} an * {@link Window.Builder.Double} for a {@link CartographyWindow} with two {@link Gui Guis}, where the lower * {@link Gui} is used to fill the {@link Player Player's} inventory. */ - interface Split extends Builder, Window.Builder.Double {} + interface Split extends Builder, Window.Builder.Double {} } diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/NormalMergedWindowImpl.java b/invui/src/main/java/xyz/xenondevs/invui/window/NormalMergedWindowImpl.java index 34ec049..e0412d1 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/NormalMergedWindowImpl.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/NormalMergedWindowImpl.java @@ -15,11 +15,9 @@ final class NormalMergedWindowImpl extends AbstractMergedWindow { @NotNull Player player, @Nullable ComponentWrapper title, @NotNull AbstractGui gui, - boolean closeable, - boolean retain + boolean closeable ) { - super(player, title, gui, createInventory(gui), closeable, retain); - register(); + super(player, title, gui, createInventory(gui), closeable); } private static Inventory createInventory(Gui gui) { @@ -32,12 +30,12 @@ final class NormalMergedWindowImpl extends AbstractMergedWindow { } public static final class BuilderImpl - extends AbstractSingleWindow.AbstractBuilder + extends AbstractSingleWindow.AbstractBuilder implements Window.Builder.Normal.Merged { @Override - public @NotNull Window build() { + public @NotNull Window build(Player viewer) { if (viewer == null) throw new IllegalStateException("Viewer is not defined."); if (guiSupplier == null) @@ -47,8 +45,7 @@ final class NormalMergedWindowImpl extends AbstractMergedWindow { viewer, title, (AbstractGui) guiSupplier.get(), - closeable, - retain + closeable ); applyModifiers(window); diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/NormalSingleWindowImpl.java b/invui/src/main/java/xyz/xenondevs/invui/window/NormalSingleWindowImpl.java index 0cd1ee0..981321f 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/NormalSingleWindowImpl.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/NormalSingleWindowImpl.java @@ -1,41 +1,30 @@ package xyz.xenondevs.invui.window; -import org.bukkit.OfflinePlayer; -import org.jetbrains.annotations.Contract; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; import xyz.xenondevs.invui.gui.AbstractGui; import xyz.xenondevs.invui.util.InventoryUtils; -import java.util.UUID; - final class NormalSingleWindowImpl extends AbstractSingleWindow { public NormalSingleWindowImpl( - @NotNull UUID viewerUUID, + @NotNull Player player, @Nullable ComponentWrapper title, @NotNull AbstractGui gui, - boolean closeable, - boolean retain + boolean closeable ) { - super(viewerUUID, title, gui, InventoryUtils.createMatchingInventory(gui, ""), true, closeable, retain); - register(); + super(player.getUniqueId(), title, gui, InventoryUtils.createMatchingInventory(gui, ""), closeable); } public static final class BuilderImpl - extends AbstractSingleWindow.AbstractBuilder + extends AbstractSingleWindow.AbstractBuilder implements Window.Builder.Normal.Single { - @Contract("_ -> this") - public BuilderImpl setViewer(@NotNull OfflinePlayer player) { - setViewer(player.getUniqueId()); - return this; - } - @Override - public @NotNull Window build() { + public @NotNull Window build(Player viewer) { if (viewer == null) throw new IllegalStateException("Viewer is not defined."); if (guiSupplier == null) @@ -45,8 +34,7 @@ final class NormalSingleWindowImpl extends AbstractSingleWindow { viewer, title, (AbstractGui) guiSupplier.get(), - closeable, - retain + closeable ); applyModifiers(window); diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/NormalSplitWindowImpl.java b/invui/src/main/java/xyz/xenondevs/invui/window/NormalSplitWindowImpl.java index 488902f..521bc40 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/NormalSplitWindowImpl.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/NormalSplitWindowImpl.java @@ -14,20 +14,18 @@ final class NormalSplitWindowImpl extends AbstractSplitWindow { @Nullable ComponentWrapper title, @NotNull AbstractGui upperGui, @NotNull AbstractGui lowerGui, - boolean closeable, - boolean retain + boolean closeable ) { - super(player, title, upperGui, lowerGui, InventoryUtils.createMatchingInventory(upperGui, ""), true, closeable, retain); - register(); + super(player, title, upperGui, lowerGui, InventoryUtils.createMatchingInventory(upperGui, ""), closeable); } public static final class BuilderImpl - extends AbstractSplitWindow.AbstractBuilder + extends AbstractSplitWindow.AbstractBuilder implements Window.Builder.Normal.Split { @Override - public @NotNull Window build() { + public @NotNull Window build(Player viewer) { if (viewer == null) throw new IllegalStateException("Viewer is not defined."); if (upperGuiSupplier == null) @@ -40,8 +38,7 @@ final class NormalSplitWindowImpl extends AbstractSplitWindow { title, (AbstractGui) upperGuiSupplier.get(), (AbstractGui) lowerGuiSupplier.get(), - closeable, - retain + closeable ); applyModifiers(window); diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/Window.java b/invui/src/main/java/xyz/xenondevs/invui/window/Window.java index ef9df28..f25d8bd 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/Window.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/Window.java @@ -1,7 +1,6 @@ package xyz.xenondevs.invui.window; import net.md_5.bungee.api.chat.BaseComponent; -import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.Contract; @@ -113,17 +112,11 @@ public interface Window { void close(); /** - * Gets if the {@link Window} is closed and can't be shown again. + * Gets if the viewer is currently viewing this {@link Window}. * - * @return If the {@link Window} is closed. + * @return If the {@link Window} is currently open. */ - boolean isRemoved(); - - /** - * Removes the {@link Window} from the {@link WindowManager} list. - * If this method is called, the {@link Window} can't be shown again. - */ - void remove(); + boolean isOpen(); /** * Changes the title of the {@link Inventory}. @@ -168,6 +161,20 @@ public interface Window { */ @NotNull UUID getViewerUUID(); + /** + * Replaces the currently registered open handlers with the given list. + * + * @param openHandlers The new open handlers + */ + void setOpenHandlers(@NotNull List<@NotNull Runnable> openHandlers); + + /** + * Adds an open handler that will be called when this window gets opened. + * + * @param openHandler The close handler to add + */ + void addOpenHandler(@NotNull Runnable openHandler); + /** * Replaces the currently registered close handlers with the given list. * @@ -193,10 +200,9 @@ public interface Window { * A {@link Window} builder. * * @param The window type - * @param The viewer type * @param The builder type */ - interface Builder> extends Cloneable { + interface Builder> extends Cloneable { /** * Sets the viewer of the {@link Window}. @@ -205,7 +211,7 @@ public interface Window { * @return This {@link Builder Window Builder} */ @Contract("_ -> this") - S setViewer(@NotNull V viewer); + @NotNull S setViewer(@NotNull Player viewer); /** * Sets the title of the {@link Window}. @@ -214,7 +220,7 @@ public interface Window { * @return This {@link Builder Window Builder} */ @Contract("_ -> this") - S setTitle(@NotNull ComponentWrapper title); + @NotNull S setTitle(@NotNull ComponentWrapper title); /** * Sets the title of the {@link Window}. @@ -223,7 +229,7 @@ public interface Window { * @return This {@link Builder Window Builder} */ @Contract("_ -> this") - S setTitle(@NotNull BaseComponent @NotNull [] title); + @NotNull S setTitle(@NotNull BaseComponent @NotNull [] title); /** * Sets the title of the {@link Window}. @@ -232,7 +238,7 @@ public interface Window { * @return This {@link Builder Window Builder} */ @Contract("_ -> this") - S setTitle(@NotNull String title); + @NotNull S setTitle(@NotNull String title); /** * Configures if the {@link Window} is closeable. @@ -241,16 +247,25 @@ public interface Window { * @return This {@link Builder Window Builder} */ @Contract("_ -> this") - S setCloseable(boolean closeable); + @NotNull S setCloseable(boolean closeable); /** - * Configures if the {@link Window} should be retained after it has been closed. + * Sets the open handlers of the {@link Window}. * - * @param retain If the {@link Window} should be retained + * @param openHandlers The open handlers of the {@link Window} * @return This {@link Builder Window Builder} */ @Contract("_ -> this") - S setRetain(boolean retain); + @NotNull S setOpenHandlers(List openHandlers); + + /** + * Adds an open handler to the {@link Window}. + * + * @param openHandler The open handler to add + * @return This {@link Builder Window Builder} + */ + @Contract("_ -> this") + @NotNull S addOpenHandler(Runnable openHandler); /** * Sets the close handlers of the {@link Window}. @@ -259,7 +274,7 @@ public interface Window { * @return This {@link Builder Window Builder} */ @Contract("_ -> this") - S setCloseHandlers(List closeHandlers); + @NotNull S setCloseHandlers(List closeHandlers); /** * Adds a close handler to the {@link Window}. @@ -268,7 +283,7 @@ public interface Window { * @return This {@link Builder Window Builder} */ @Contract("_ -> this") - S addCloseHandler(Runnable closeHandler); + @NotNull S addCloseHandler(Runnable closeHandler); /** * Sets the modifiers of the {@link Window}. @@ -277,7 +292,7 @@ public interface Window { * @return This {@link Builder Window Builder} */ @Contract("_ -> this") - S setModifiers(List> modifiers); + @NotNull S setModifiers(List> modifiers); /** * Adds a modifier to the {@link Window}. @@ -286,7 +301,7 @@ public interface Window { * @return This {@link Builder Window Builder} */ @Contract("_ -> this") - S addModifier(Consumer modifier); + @NotNull S addModifier(Consumer modifier); /** * Builds the {@link Window}. @@ -296,6 +311,23 @@ public interface Window { @Contract("-> new") @NotNull W build(); + /** + * Builds the {@link Window} with the specified viewer. + * If this method is used, the viewer does not need to be set using {@link #setViewer(Player)}. + * + * @param viewer The {@link Player} to build the {@link Window} for. + */ + @Contract("_ -> new") + @NotNull W build(Player viewer); + + /** + * Builds and shows the {@link Window} to the specified viewer. + * If this method is used, the viewer does not need to be set using {@link #setViewer(Player)}. + * + * @param viewer The {@link Player} to show the {@link Window} to. + */ + void show(Player viewer); + /** * Clones the {@link Builder Window Builder}. * @@ -308,15 +340,13 @@ public interface Window { * A single {@link Window} builder. Single Windows only have on {@link Gui}. * * @param The window type - * @param The viewer type * @param The builder type - * * @see Window.Builder.Normal.Single * @see Window.Builder.Normal.Merged * @see AnvilWindow.Builder.Single * @see CartographyWindow.Builder.Single */ - interface Single> extends Builder { + interface Single> extends Builder { /** * Sets the {@link Gui} of the {@link Window}. @@ -325,7 +355,7 @@ public interface Window { * @return This {@link Single Window Builder} */ @Contract("_ -> this") - S setGui(@NotNull Gui gui); + @NotNull S setGui(@NotNull Gui gui); /** * Sets the {@link Gui.Builder} for this {@link Single Window Builder}. @@ -335,7 +365,7 @@ public interface Window { * @return This {@link Single Window Builder} */ @Contract("_ -> this") - S setGui(@NotNull Gui.Builder builder); + @NotNull S setGui(@NotNull Gui.Builder builder); /** * Sets the {@link Gui} {@link Supplier} for this {@link Single Window Builder}. @@ -345,7 +375,7 @@ public interface Window { * @return This {@link Single Window Builder} */ @Contract("_ -> this") - S setGui(@NotNull Supplier guiSupplier); + @NotNull S setGui(@NotNull Supplier guiSupplier); } @@ -353,14 +383,12 @@ public interface Window { * A double {@link Window} builder. Double Windows have two {@link Gui Guis}. * * @param The window type - * @param The viewer type * @param The builder type - * * @see Window.Builder.Normal.Split * @see AnvilWindow.Builder.Split * @see CartographyWindow.Builder.Split */ - interface Double> extends Builder { + interface Double> extends Builder { /** * Sets the upper {@link Gui} of the {@link Window}. @@ -369,7 +397,7 @@ public interface Window { * @return This {@link Double Window Builder} */ @Contract("_ -> this") - S setUpperGui(@NotNull Gui gui); + @NotNull S setUpperGui(@NotNull Gui gui); /** * Sets the {@link Gui.Builder} for the upper {@link Gui} of this {@link Double Window Builder}. @@ -379,7 +407,7 @@ public interface Window { * @return This {@link Double Window Builder} */ @Contract("_ -> this") - S setUpperGui(@NotNull Gui.Builder builder); + @NotNull S setUpperGui(@NotNull Gui.Builder builder); /** * Sets the {@link Gui} {@link Supplier} for the upper {@link Gui} of this {@link Double Window Builder}. @@ -389,7 +417,7 @@ public interface Window { * @return This {@link Double Window Builder} */ @Contract("_ -> this") - S setUpperGui(@NotNull Supplier guiSupplier); + @NotNull S setUpperGui(@NotNull Supplier guiSupplier); /** * Sets the lower {@link Gui} of the {@link Window}. @@ -398,7 +426,7 @@ public interface Window { * @return This {@link Double Window Builder} */ @Contract("_ -> this") - S setLowerGui(@NotNull Gui gui); + @NotNull S setLowerGui(@NotNull Gui gui); /** * Sets the {@link Gui.Builder} for the lower {@link Gui} of this {@link Double Window Builder}. @@ -408,7 +436,7 @@ public interface Window { * @return This {@link Double Window Builder} */ @Contract("_ -> this") - S setLowerGui(@NotNull Gui.Builder builder); + @NotNull S setLowerGui(@NotNull Gui.Builder builder); /** * Sets the {@link Gui} {@link Supplier} for the lower {@link Gui} of this {@link Double Window Builder}. @@ -418,7 +446,7 @@ public interface Window { * @return This {@link Double Window Builder} */ @Contract("_ -> this") - S setLowerGui(@NotNull Supplier guiSupplier); + @NotNull S setLowerGui(@NotNull Supplier guiSupplier); } @@ -426,50 +454,37 @@ public interface Window { * A normal {@link Window} builder for {@link Window Windows} of inventories with no special functionality, such * as chests, hoppers and droppers. * - * @param The viewer type * @param The builder type - * * @see AnvilWindow.Builder * @see CartographyWindow.Builder */ - interface Normal> extends Builder { + interface Normal> extends Builder { /** * A normal single {@link Window} builder. Combines both {@link Builder.Single} and {@link Builder.Normal} * for a normal {@link Window} with only one {@link Gui} that does not access the {@link Player Player's} inventory. - * + * * @see AnvilWindow.Builder.Single * @see CartographyWindow.Builder.Single */ - interface Single extends Builder.Normal, Builder.Single { - - /** - * Sets the viewer of the {@link Window}. - * - * @param viewer The viewer of the {@link Window} - * @return This {@link Normal.Single Window Builder} - */ - @Contract("_ -> this") - Normal.Single setViewer(@NotNull OfflinePlayer viewer); - - } + interface Single extends Builder.Normal, Builder.Single {} /** * A normal split {@link Window} builder. Combines both {@link Builder.Double} and {@link Builder.Normal} * for a normal {@link Window} with two {@link Gui Guis}, where the lower {@link Gui} is used to fill the * {@link Player Player's} inventory. - * + * * @see AnvilWindow.Builder.Split * @see CartographyWindow.Builder.Split */ - interface Split extends Builder.Normal, Builder.Double {} + interface Split extends Builder.Normal, Builder.Double {} /** * A normal merged {@link Window} builder. Combines both {@link Builder.Single} and {@link Builder.Normal} * for a normal {@link Window} with one {@link Gui}, which fills both the upper inventory and the * {@link Player Player's} inventory. */ - interface Merged extends Builder.Normal, Builder.Single {} + interface Merged extends Builder.Normal, Builder.Single {} } diff --git a/invui/src/main/java/xyz/xenondevs/invui/window/WindowManager.java b/invui/src/main/java/xyz/xenondevs/invui/window/WindowManager.java index e7dfc6e..3744359 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/window/WindowManager.java +++ b/invui/src/main/java/xyz/xenondevs/invui/window/WindowManager.java @@ -152,7 +152,7 @@ public class WindowManager implements Listener { AbstractWindow window = (AbstractWindow) getWindow(event.getInventory()); if (window != null) - window.handleClose(player); + window.handleCloseEvent(player); openWindows.remove(player); } @@ -161,7 +161,7 @@ public class WindowManager implements Listener { private void handleInventoryOpen(InventoryOpenEvent event) { AbstractWindow window = (AbstractWindow) getWindow(event.getInventory()); if (window != null) { - window.handleOpen(event); + window.handleOpenEvent(event); openWindows.put((Player) event.getPlayer(), window); } } @@ -171,7 +171,7 @@ public class WindowManager implements Listener { Player player = event.getPlayer(); AbstractWindow window = (AbstractWindow) getOpenWindow(player); if (window != null) { - window.handleClose(player); + window.handleCloseEvent(player); openWindows.remove(player); } }