From a35fd9696136f20a80c510ee7ff773f43385add0 Mon Sep 17 00:00:00 2001 From: Krakenied Date: Wed, 21 May 2025 13:53:21 +0200 Subject: Add option to set per category quest menu title Closes https://github.com/LMBishop/Quests/issues/622 --- .../quests/bukkit/config/BukkitQuestsLoader.java | 3 +- .../quests/bukkit/menu/CategoryQMenu.java | 2 +- .../quests/bukkit/menu/QuestQMenu.java | 8 +++-- .../quests/bukkit/util/MenuUtils.java | 2 +- .../quests/common/quest/Category.java | 38 ++++++++++++++++++++-- docs/configuration/creating-a-category.md | 7 ++++ 6 files changed, 52 insertions(+), 8 deletions(-) diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java index 215d4b8b..ec0142b2 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java @@ -122,10 +122,11 @@ public class BukkitQuestsLoader implements QuestsLoader { for (String id : categories.getKeys(false)) { ItemStack displayItem = plugin.getConfiguredItemStack(id + ".display", categories); + String guiName = categories.getString(id + ".gui-name"); boolean permissionRequired = categories.getBoolean(id + ".permission-required", false); boolean hidden = categories.getBoolean(id + ".hidden", false); - Category category = new Category(id, permissionRequired, hidden); + Category category = new Category(id, guiName, permissionRequired, hidden); questManager.registerCategory(category); qItemStackRegistry.register(category, displayItem); } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java index 9223bc19..387ab192 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java @@ -44,7 +44,7 @@ public class CategoryQMenu extends PaginatedQMenu { } } Collections.sort(quests); - QuestQMenu questQMenu = new QuestQMenu(plugin, owner, quests, category.getId(), this); + QuestQMenu questQMenu = new QuestQMenu(plugin, owner, quests, category, this); MenuElement menuElement = new CategoryMenuElement(plugin, owner.getPlayerUUID(), category, questQMenu); categoryMenuElements.add(menuElement); } 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 13963466..074282c9 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 @@ -8,11 +8,13 @@ import com.leonardobishop.quests.bukkit.menu.element.QuestMenuElement; import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.player.QPlayer; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; +import com.leonardobishop.quests.common.quest.Category; import com.leonardobishop.quests.common.quest.Quest; import org.bukkit.Bukkit; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * Represents a menu for a specified category (or all if they are disabled), @@ -22,12 +24,12 @@ public class QuestQMenu extends PaginatedQMenu { private final String categoryName; - public QuestQMenu(BukkitQuestsPlugin plugin, QPlayer owner, List quests, String categoryName, CategoryQMenu categoryQMenu) { - super(owner, Chat.legacyColor(plugin.getQuestsConfig().getString("options.guinames.quests-menu")), + public QuestQMenu(BukkitQuestsPlugin plugin, QPlayer owner, List quests, Category category, CategoryQMenu categoryQMenu) { + super(owner, Chat.legacyColor(Objects.requireNonNullElseGet(category.getGUIName(), () -> plugin.getQuestsConfig().getString("options.guinames.quests-menu"))), plugin.getQuestsConfig().getBoolean("options.trim-gui-size.quests-menu"), 54, plugin); BukkitQuestsConfig config = (BukkitQuestsConfig) plugin.getQuestsConfig(); - this.categoryName = categoryName; + this.categoryName = category.getId(); BackMenuElement backMenuElement = categoryQMenu != null ? new BackMenuElement(plugin, owner.getPlayerUUID(), plugin.getMenuController(), categoryQMenu) 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 00a10ef0..7baa4dcc 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 @@ -103,7 +103,7 @@ public class MenuUtils { } } Collections.sort(quests); - QuestQMenu questQMenu = new QuestQMenu(plugin, qPlayer, quests, category.getId(), superMenu); + QuestQMenu questQMenu = new QuestQMenu(plugin, qPlayer, quests, category, superMenu); plugin.getMenuController().openMenu(player, questQMenu); } diff --git a/common/src/main/java/com/leonardobishop/quests/common/quest/Category.java b/common/src/main/java/com/leonardobishop/quests/common/quest/Category.java index 285eff1a..6578fb3c 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/quest/Category.java +++ b/common/src/main/java/com/leonardobishop/quests/common/quest/Category.java @@ -23,6 +23,7 @@ public final class Category { private static final String PERMISSION_PREFIX = "quests.category."; private final String id; + private final @Nullable String guiName; private final List registeredQuestIds; private final boolean permissionRequired; private final boolean hidden; @@ -31,24 +32,48 @@ public final class Category { * Constructs a Category with the specified parameters. * * @param id the unique identifier for the category; must not be null + * @param guiName the custom GUI title to be shown in this category quest menu * @param permissionRequired whether a permission is required to access this category * @param hidden whether the category should be hidden from view */ - public Category(final String id, final boolean permissionRequired, final boolean hidden) { + public Category(final String id, final @Nullable String guiName, final boolean permissionRequired, final boolean hidden) { this.id = Objects.requireNonNull(id, "id cannot be null"); + this.guiName = guiName; this.registeredQuestIds = new ArrayList<>(); this.permissionRequired = permissionRequired; this.hidden = hidden; } + /** + * Constructs a Category with no custom {@link Category#guiName}. + * + * @param id the unique identifier for the category; must not be null + * @param permissionRequired whether a permission is required to access this category + * @param hidden whether the category should be hidden from view + */ + public Category(final String id, final boolean permissionRequired, final boolean hidden) { + this(id, null, permissionRequired, hidden); + } + /** * Constructs a Category with {@link Category#hidden} set to {@code false}. * * @param id the unique identifier for the category; must not be null + * @param guiName the custom GUI title to be shown in this category quest menu + * @param permissionRequired whether a permission is required to access this category + */ + public Category(final String id, final @Nullable String guiName, final boolean permissionRequired) { + this(id, guiName, permissionRequired, false); + } + + /** + * Constructs a Category with no custom {@link Category#guiName} and {@link Category#hidden} set to {@code false}. + * + * @param id the unique identifier for the category; must not be null * @param permissionRequired whether a permission is required to access this category */ public Category(final String id, final boolean permissionRequired) { - this(id, permissionRequired, false); + this(id, null, permissionRequired); } /** @@ -61,6 +86,15 @@ public final class Category { return this.id; } + /** + * Returns the custom GUI title for this category. + * + * @return the category custom GUI title + */ + public @Nullable String getGUIName() { + return this.guiName; + } + /** * Checks if a specific permission is required to access this category and start quests within it. * The permission will be in the form of "quests.category.[category id]". diff --git a/docs/configuration/creating-a-category.md b/docs/configuration/creating-a-category.md index e777b260..c0b41d86 100644 --- a/docs/configuration/creating-a-category.md +++ b/docs/configuration/creating-a-category.md @@ -23,6 +23,13 @@ from `config.yml` if a `categories.yml` file is not present. ID of category, this is the text you should enter when putting quests inside a category. +## GUI title + + +*`gui-name`* + +The custom GUI title to be shown in this category quest menu + ## Display -- cgit v1.2.3-70-g09d2