aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrakenied <krakenied1@gmail.com>2025-05-21 13:53:21 +0200
committerKrakenied <46192742+Krakenied@users.noreply.github.com>2025-07-29 00:06:46 +0200
commita35fd9696136f20a80c510ee7ff773f43385add0 (patch)
tree66beeff9db6b15068731601d2d76847f23ef22c2
parent2d5fee3aabfb5841c14317315dd37757f28afc8f (diff)
Add option to set per category quest menu title
Closes https://github.com/LMBishop/Quests/issues/622
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java3
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java2
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/quest/Category.java38
-rw-r--r--docs/configuration/creating-a-category.md7
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<Quest> quests, String categoryName, CategoryQMenu categoryQMenu) {
- super(owner, Chat.legacyColor(plugin.getQuestsConfig().getString("options.guinames.quests-menu")),
+ public QuestQMenu(BukkitQuestsPlugin plugin, QPlayer owner, List<Quest> 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<String> 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);
}
/**
@@ -62,6 +87,15 @@ public final class Category {
}
/**
+ * 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