diff options
| author | Krakenied <Krakenied1@gmail.com> | 2023-02-08 15:37:27 +0100 |
|---|---|---|
| committer | Leonardo Bishop <13875753+LMBishop@users.noreply.github.com> | 2023-02-16 16:42:44 +0000 |
| commit | bc8938a208222b38e5a20a046e4ff9cf91ef9f12 (patch) | |
| tree | 0ecb8fa5572cadda6ee3d122e9daf0cbc02e09f4 /bukkit | |
| parent | 579287b875b67c4f9450351deb57ee7d10e7b00f (diff) | |
Fix ArrayIndexOutOfBoundsException
Do not show back menu element when category menu is null
Diffstat (limited to 'bukkit')
3 files changed, 12 insertions, 4 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/PaginatedQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/PaginatedQMenu.java index dd094855..2c6a03ae 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/PaginatedQMenu.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/PaginatedQMenu.java @@ -3,6 +3,7 @@ package com.leonardobishop.quests.bukkit.menu; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig; import com.leonardobishop.quests.bukkit.menu.element.*; +import com.leonardobishop.quests.bukkit.util.MenuUtils; import com.leonardobishop.quests.bukkit.util.StringUtils; import com.leonardobishop.quests.common.player.QPlayer; import org.bukkit.Bukkit; @@ -106,7 +107,7 @@ public abstract class PaginatedQMenu extends QMenu { int maxSize = pageSize - (backMenuElement == null ? 0 : 9); BukkitQuestsConfig config = (BukkitQuestsConfig) plugin.getQuestsConfig(); if ((menuElements.isEmpty() ? 0 : Collections.max(menuElements.keySet())) + 1 > maxSize - || menuElements.keySet().size() + menuElementsToFill.size() + customStaticElements > maxSize) { + || menuElements.size() + menuElementsToFill.size() + customStaticElements > maxSize) { MenuElement pageNextMenuElement = new PageNextMenuElement(config, this); MenuElement pagePrevMenuElement = new PagePrevMenuElement(config, this); MenuElement pageDescMenuElement = new PageDescMenuElement(config, this); @@ -122,8 +123,8 @@ public abstract class PaginatedQMenu extends QMenu { // else find a place for the back button if needed } else if (backMenuElement != null) { - int row = ((menuElements.keySet().size() + menuElementsToFill.size() + customStaticElements) / 9) + 1; - staticMenuElements[row * 9] = backMenuElement; + int slot = MenuUtils.getHigherOrEqualMultiple(menuElements.size() + menuElementsToFill.size() + customStaticElements, 9); + staticMenuElements[slot] = backMenuElement; } boolean staticMenuElementsIsFull = true; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java index a33f344f..2e8e1875 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java @@ -29,7 +29,9 @@ public class QuestQMenu extends PaginatedQMenu { BukkitQuestsConfig config = (BukkitQuestsConfig) plugin.getQuestsConfig(); this.categoryName = categoryName; - MenuElement backMenuElement = new BackMenuElement(config, owner.getPlayerUUID(), plugin.getMenuController(), categoryQMenu); + MenuElement backMenuElement = categoryQMenu != null + ? new BackMenuElement(config, owner.getPlayerUUID(), plugin.getMenuController(), categoryQMenu) + : null; List<MenuElement> filteredQuests = new ArrayList<>(); for (Quest quest : quests) { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java index 48840201..d5c042c0 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java @@ -143,4 +143,9 @@ public class MenuUtils { return placeholders; } + public static int getHigherOrEqualMultiple(int num, int base) { + int r = num % base; + return r == 0 ? num : num + base - r; + } + } |
