From 08def662e13be5e399b890b67af3a00d48082882 Mon Sep 17 00:00:00 2001 From: Noctiro <49872497+noctiro@users.noreply.github.com> Date: Tue, 6 Oct 2026 03:01:32 +0800 Subject: [PATCH] fix(paper): prevent server stalls from inventory holder snapshots --- .../headdb/paper/gui/category/BrowseMenu.java | 2 +- .../headdb/paper/gui/category/CategoryHeadPickerMenu.java | 2 +- .../headdb/paper/gui/category/CategoryMembersMenu.java | 2 +- .../headdb/paper/gui/category/CollectionsMenu.java | 2 +- .../headdb/paper/gui/category/CreateCategoryMenu.java | 2 +- .../headdb/paper/gui/category/CreateHeadMenu.java | 2 +- .../headdb/paper/gui/category/CreateTaxonomyMenu.java | 2 +- .../headdb/paper/gui/category/CustomCategoryViewMenu.java | 2 +- .../paper/gui/category/DeleteCategoryConfirmMenu.java | 2 +- .../headdb/paper/gui/category/MoreCategoriesMenu.java | 4 ++-- .../headdb/paper/gui/category/TagsMenu.java | 2 +- .../headdb/paper/gui/config/GuiButtonEditorMenu.java | 2 +- .../headdb/paper/gui/config/GuiButtonLoreEditorMenu.java | 2 +- .../headdb/paper/gui/edit/DeleteHeadConfirmMenu.java | 2 +- .../headdb/paper/gui/edit/HeadEditListener.java | 6 +++--- .../headdb/paper/gui/favorites/FavoritesMenu.java | 2 +- .../headdb/paper/gui/hidden/HiddenHeadsMenu.java | 2 +- .../headdb/paper/gui/local/LocalHeadListMenu.java | 2 +- .../headdb/paper/gui/material/MaterialSelectionMenu.java | 2 +- .../headdb/paper/gui/settings/CommandConfirmMenu.java | 2 +- 20 files changed, 23 insertions(+), 23 deletions(-) diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/BrowseMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/BrowseMenu.java index 51bb7d8..ee0e6c8 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/BrowseMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/BrowseMenu.java @@ -107,7 +107,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof BrowseHolder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof BrowseHolder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CategoryHeadPickerMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CategoryHeadPickerMenu.java index a70fad9..d685e1b 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CategoryHeadPickerMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CategoryHeadPickerMenu.java @@ -86,7 +86,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof Holder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof Holder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CategoryMembersMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CategoryMembersMenu.java index 998b7c6..ecb913b 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CategoryMembersMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CategoryMembersMenu.java @@ -80,7 +80,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof Holder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof Holder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CollectionsMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CollectionsMenu.java index d940896..00f9024 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CollectionsMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CollectionsMenu.java @@ -107,7 +107,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof Holder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof Holder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateCategoryMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateCategoryMenu.java index e190c64..a432b41 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateCategoryMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateCategoryMenu.java @@ -104,7 +104,7 @@ public static void openExisting(@NotNull HeadDBPlugin plugin, @NotNull Player pl } public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player player, @NotNull InventoryClickEvent event) { - if (!(event.getView().getTopInventory().getHolder() instanceof Holder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof Holder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateHeadMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateHeadMenu.java index 0ea0879..cf8cdf3 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateHeadMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateHeadMenu.java @@ -121,7 +121,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - InventoryHolder holder = event.getView().getTopInventory().getHolder(); + InventoryHolder holder = event.getView().getTopInventory().getHolder(false); if (!(holder instanceof CreateHeadHolder) && !(holder instanceof CreateHeadSelectorHolder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateTaxonomyMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateTaxonomyMenu.java index 91fc401..954d608 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateTaxonomyMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CreateTaxonomyMenu.java @@ -89,7 +89,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof Holder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof Holder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CustomCategoryViewMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CustomCategoryViewMenu.java index 6127db6..69bbbf7 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CustomCategoryViewMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/CustomCategoryViewMenu.java @@ -92,7 +92,7 @@ public static void open(@NotNull HeadDBPlugin plugin, @NotNull Player player, @N } public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player player, @NotNull InventoryClickEvent event, @NotNull Consumer edit, @NotNull Consumer give) { - if (!(event.getView().getTopInventory().getHolder() instanceof Holder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof Holder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/DeleteCategoryConfirmMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/DeleteCategoryConfirmMenu.java index f346566..21da2be 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/DeleteCategoryConfirmMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/DeleteCategoryConfirmMenu.java @@ -61,7 +61,7 @@ public static void open(@NotNull HeadDBPlugin plugin, @NotNull Player player, @N } public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player player, @NotNull InventoryClickEvent event) { - if (!(event.getView().getTopInventory().getHolder() instanceof Holder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof Holder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/MoreCategoriesMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/MoreCategoriesMenu.java index 45d6042..efc9eb0 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/MoreCategoriesMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/MoreCategoriesMenu.java @@ -118,7 +118,7 @@ private static void openEditor(@NotNull HeadDBPlugin plugin, @NotNull Player pla } public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player player, @NotNull InventoryClickEvent event) { - if (event.getView().getTopInventory().getHolder() instanceof CategoryEditorHolder editor) { + if (event.getView().getTopInventory().getHolder(false) instanceof CategoryEditorHolder editor) { event.setCancelled(true); if (event.getClickedInventory() == null || !event.getClickedInventory().equals(event.getView().getTopInventory())) { return true; @@ -137,7 +137,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player return true; } - if (!(event.getView().getTopInventory().getHolder() instanceof MoreCategoriesHolder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof MoreCategoriesHolder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/TagsMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/TagsMenu.java index b98db8b..9013e36 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/TagsMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/category/TagsMenu.java @@ -107,7 +107,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof Holder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof Holder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/config/GuiButtonEditorMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/config/GuiButtonEditorMenu.java index efbfa41..b134bf2 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/config/GuiButtonEditorMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/config/GuiButtonEditorMenu.java @@ -102,7 +102,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof GuiButtonEditorHolder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof GuiButtonEditorHolder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/config/GuiButtonLoreEditorMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/config/GuiButtonLoreEditorMenu.java index 47ef884..0477e6a 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/config/GuiButtonLoreEditorMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/config/GuiButtonLoreEditorMenu.java @@ -70,7 +70,7 @@ private static void open(@NotNull HeadDBPlugin plugin, @NotNull Player player, @ } public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player player, @NotNull InventoryClickEvent event) { - if (!(event.getView().getTopInventory().getHolder() instanceof GuiButtonLoreHolder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof GuiButtonLoreHolder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/edit/DeleteHeadConfirmMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/edit/DeleteHeadConfirmMenu.java index 8ca2898..c4750f5 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/edit/DeleteHeadConfirmMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/edit/DeleteHeadConfirmMenu.java @@ -88,7 +88,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof ConfirmHolder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof ConfirmHolder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/edit/HeadEditListener.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/edit/HeadEditListener.java index fb0185e..ca9d485 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/edit/HeadEditListener.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/edit/HeadEditListener.java @@ -68,7 +68,7 @@ public void onInventoryClose(@NotNull InventoryCloseEvent event) { return; } - InventoryHolder holder = event.getInventory().getHolder(); + InventoryHolder holder = event.getInventory().getHolder(false); if (holder == null) { return; } @@ -217,7 +217,7 @@ public void onInventoryClick(@NotNull InventoryClickEvent event) { return; } - if (event.getView().getTopInventory().getHolder() instanceof HeadEditMenu.EditHolder) { + if (event.getView().getTopInventory().getHolder(false) instanceof HeadEditMenu.EditHolder) { deny(event); } } @@ -323,7 +323,7 @@ private void openEdit(@NotNull Player player, @NotNull HeadId id) { private void handleAction(@NotNull Player player, @NotNull InventoryClickEvent event, @NotNull HeadEditMenu.ActionTarget target) { String action = target.action(); HeadId id = target.id(); - HeadEditMenu.EditHolder holder = event.getView().getTopInventory().getHolder() instanceof HeadEditMenu.EditHolder editHolder ? editHolder : null; + HeadEditMenu.EditHolder holder = event.getView().getTopInventory().getHolder(false) instanceof HeadEditMenu.EditHolder editHolder ? editHolder : null; if (action.equals(HeadEditMenu.ACTION_PREVIEW)) { return; diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/favorites/FavoritesMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/favorites/FavoritesMenu.java index aad7d7f..70d7bc1 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/favorites/FavoritesMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/favorites/FavoritesMenu.java @@ -81,7 +81,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof FavoritesHolder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof FavoritesHolder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/hidden/HiddenHeadsMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/hidden/HiddenHeadsMenu.java index a13eb8f..752b4ac 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/hidden/HiddenHeadsMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/hidden/HiddenHeadsMenu.java @@ -86,7 +86,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof HiddenHeadsHolder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof HiddenHeadsHolder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/local/LocalHeadListMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/local/LocalHeadListMenu.java index eaccbd8..909601d 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/local/LocalHeadListMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/local/LocalHeadListMenu.java @@ -91,7 +91,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(edit, "edit"); Objects.requireNonNull(give, "give"); - if (!(event.getView().getTopInventory().getHolder() instanceof LocalHeadListHolder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof LocalHeadListHolder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/material/MaterialSelectionMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/material/MaterialSelectionMenu.java index 4a4274b..55a072f 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/material/MaterialSelectionMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/material/MaterialSelectionMenu.java @@ -82,7 +82,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof MaterialSelectionHolder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof MaterialSelectionHolder holder)) { return false; } diff --git a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/settings/CommandConfirmMenu.java b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/settings/CommandConfirmMenu.java index 3b4d4d8..6565c70 100644 --- a/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/settings/CommandConfirmMenu.java +++ b/headdb-platforms/headdb-paper/src/main/java/io/github/silentdevelopment/headdb/paper/gui/settings/CommandConfirmMenu.java @@ -63,7 +63,7 @@ public static boolean handleClick(@NotNull HeadDBPlugin plugin, @NotNull Player Objects.requireNonNull(player, "player"); Objects.requireNonNull(event, "event"); - if (!(event.getView().getTopInventory().getHolder() instanceof Holder holder)) { + if (!(event.getView().getTopInventory().getHolder(false) instanceof Holder holder)) { return false; }