From 8645e88c5cb5132bfe8824b7f814e23a60b0f5c0 Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Mon, 5 Jul 2021 10:48:37 +0100 Subject: Improve autotrack and add more configuration --- .../bukkit/menu/element/QuestMenuElement.java | 7 ++++- .../quests/bukkit/menu/itemstack/QItemStack.java | 12 +++++--- .../questcontroller/NormalQuestController.java | 36 ++++++++++++++-------- .../quests/bukkit/util/Messages.java | 23 +++++++++----- .../src/main/resources/resources/bukkit/config.yml | 12 +++++--- 5 files changed, 60 insertions(+), 30 deletions(-) (limited to 'bukkit/src') diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java index 8df5454a..577ac581 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java @@ -5,6 +5,7 @@ import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig; import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStack; import com.leonardobishop.quests.bukkit.util.Format; import com.leonardobishop.quests.bukkit.util.MenuUtils; +import com.leonardobishop.quests.bukkit.util.Messages; import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.enums.QuestStartResult; import com.leonardobishop.quests.common.player.QPlayer; @@ -64,7 +65,11 @@ public class QuestMenuElement extends MenuElement { } Map placeholders = new HashMap<>(); placeholders.put("{quest}", Chat.strip(qItemStack.getName())); - placeholders.put("{requirements}", String.join(", ", quests)); + if (quests.size() > 1 && plugin.getConfig().getBoolean("options.gui-truncate-requirements", true)) { + placeholders.put("{requirements}", quests.get(0) + Messages.UI_PLACEHOLDERS_TRUNCATED.getMessage().replace("{amount}", String.valueOf(quests.size() - 1))); + } else { + placeholders.put("{requirements}", String.join(", ", quests)); + } return MenuUtils.applyPlaceholders(plugin, owner.getPlayerUUID(), config.getItem("gui.quest-locked-display"), placeholders); } else if (status == QuestStartResult.QUEST_ALREADY_COMPLETED) { Map placeholders = new HashMap<>(); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java index 4275d934..1ac9b4ba 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java @@ -1,6 +1,7 @@ package com.leonardobishop.quests.bukkit.menu.itemstack; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.bukkit.util.Messages; import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.player.QPlayer; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; @@ -103,9 +104,7 @@ public class QItemStack { try { ism.addItemFlags(ItemFlag.HIDE_ENCHANTS); ism.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - } catch (Exception ignored) { - - } + } catch (Exception ignored) { } } else { tempLore.addAll(globalLoreAppendNotStarted); } @@ -139,7 +138,12 @@ public class QItemStack { s = s.replace("{" + m.group(1) + "}", (str.equals("null") ? String.valueOf(0) : str)); } if (parts[1].equals("complete")) { - String str = String.valueOf(questProgress.getTaskProgress(parts[0]).isCompleted()); + String str; + if (questProgress.getTaskProgress(parts[0]).isCompleted()) { + str = Messages.UI_PLACEHOLDERS_TRUE.getMessage(); + } else { + str = Messages.UI_PLACEHOLDERS_FALSE.getMessage(); + } s = s.replace("{" + m.group(1) + "}", str); } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java index b538c209..08ee62d2 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java @@ -100,8 +100,7 @@ public class NormalQuestController implements QuestController { taskProgress.setCompleted(false); taskProgress.setProgress(null); } - if (config.getBoolean("options.allow-quest-track") - && config.getBoolean("options.quest-autotrack")) { + if (config.getBoolean("options.allow-quest-track") && config.getBoolean("options.quest-autotrack")) { qPlayer.trackQuest(quest); } questProgress.setCompleted(false); @@ -191,9 +190,8 @@ public class NormalQuestController implements QuestController { questProgress.setCompleted(true); questProgress.setCompletedBefore(true); questProgress.setCompletionDate(System.currentTimeMillis()); - if (config.getBoolean("options.allow-quest-track") && config.getBoolean("options.quest-autotrack") - && !(quest.isRepeatable() && !quest.isCooldownEnabled())) { - qPlayer.trackQuest(null); + if (config.getBoolean("options.allow-quest-track")) { + trackNextQuest(qPlayer, quest); } Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID()); if (player != null) { @@ -220,14 +218,6 @@ public class NormalQuestController implements QuestController { } SoundUtils.playSoundForPlayer(player, plugin.getQuestsConfig().getString("options.sounds.quest-complete")); } - if ((config.getBoolean("options.allow-quest-track") && config.getBoolean("options.quest-autotrack") && !(quest.isRepeatable() && !quest.isCooldownEnabled())) - || (!config.getBoolean("options.allow-quest-track") && config.getBoolean("options.quest-autotrack"))) { - Quest nextQuest; - if (qPlayer.getQuestProgressFile().getStartedQuests().size() > 0) { - nextQuest = qPlayer.getQuestProgressFile().getStartedQuests().get(0); - qPlayer.trackQuest(nextQuest); - } - } return true; } @@ -271,6 +261,11 @@ public class NormalQuestController implements QuestController { } SoundUtils.playSoundForPlayer(player, plugin.getQuestsConfig().getString("options.sounds.quest-cancel")); } + if (config.getBoolean("options.allow-quest-track") + && config.getBoolean("options.quest-autotrack") + && quest.getId().equals(qPlayer.getPlayerPreferences().getTrackedQuestId())) { + trackNextQuest(qPlayer, null); + } return true; } @@ -322,4 +317,19 @@ public class NormalQuestController implements QuestController { return startedQuests; } + private void trackNextQuest(QPlayer qPlayer, Quest previousQuest) { + if (config.getBoolean("options.quest-autotrack") + && (previousQuest == null || !(previousQuest.isRepeatable() && !previousQuest.isCooldownEnabled()))) { + Quest nextQuest; + if (qPlayer.getQuestProgressFile().getStartedQuests().size() > 0) { + nextQuest = qPlayer.getQuestProgressFile().getStartedQuests().get(0); + qPlayer.trackQuest(nextQuest); + } else { + qPlayer.trackQuest(null); + } + } else if (!config.getBoolean("options.quest-autotrack")) { + qPlayer.trackQuest(null); + } + } + } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java index f13d2d7b..02b5c164 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java @@ -57,7 +57,10 @@ public enum Messages { COMMAND_QUEST_ADMIN_START_SUCCESS("messages.command-quest-admin-start-success"), COMMAND_QUEST_ADMIN_CATEGORY_PERMISSION("messages.command-quest-admin-category-permission"), COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS("messages.command-quest-admin-complete-success"), - COMMAND_QUEST_ADMIN_RESET_SUCCESS("messages.command-quest-admin-reset-success"); + COMMAND_QUEST_ADMIN_RESET_SUCCESS("messages.command-quest-admin-reset-success"), + UI_PLACEHOLDERS_TRUE("messages.ui-placeholders-completed-true", "true"), + UI_PLACEHOLDERS_FALSE("messages.ui-placeholders-completed-false", "false"), + UI_PLACEHOLDERS_TRUNCATED("messages.ui-placeholders-truncated", " +{amount} more"); static { plugin = BukkitQuestsPlugin.getPlugin(BukkitQuestsPlugin.class); @@ -66,18 +69,22 @@ public enum Messages { private static final BukkitQuestsPlugin plugin; private final String path; + private final String def; Messages(String path) { this.path = path; + this.def = path; + } + + Messages(String path, String def) { + this.path = path; + this.def = def; } public String getMessage() { - if (plugin.getConfig().contains(path)) { - String message = plugin.getQuestsConfig().getString(path); - if (message != null) { - return Chat.color(message); - } - } - return path; + String message = plugin.getQuestsConfig().getString(path); + if (message.equals(path)) message = def; + + return Chat.color(message); } } diff --git a/bukkit/src/main/resources/resources/bukkit/config.yml b/bukkit/src/main/resources/resources/bukkit/config.yml index 258fdf46..bc7cd0f9 100644 --- a/bukkit/src/main/resources/resources/bukkit/config.yml +++ b/bukkit/src/main/resources/resources/bukkit/config.yml @@ -186,8 +186,6 @@ options: titles-enabled: true # Players cannot start any more quests than this at a single time quest-started-limit: 2 - # Hide locked quests, quests on cooldown and completed (but not repeatable) quests - gui-hide-locked: false # Allow players to cancel a quest (you may want to remove the cancel instructions in the global item lore) allow-quest-cancel: true # Allow players to track a quest (you may want to remove the tracking instructions in the global item lore) @@ -206,15 +204,19 @@ options: quest-complete: "UI_TOAST_CHALLENGE_COMPLETE:1.25:3" gui: open: "ITEM_BOOK_PAGE_TURN:1:3" - interact: "ITEM_BOOK_PAGE_TURN1:3" + interact: "" # Show when quests register in console - will only show if verbose-logging-level=2. Disable if you want less console spam at startup. show-quest-registrations: true + # Hide locked quests, quests on cooldown and completed (but not repeatable) quests + gui-hide-locked: false # Hide quests which a player cannot start due to permissions. gui-hide-quests-nopermission: false # Hide categories which a player cannot open due to permissions. gui-hide-categories-nopermission: false # Replace placeholders from PlaceholderAPI in Quests GUI items gui-use-placeholderapi: false + # Truncate quest requirements when there are multiple requirements to prevent enormous display items + gui-truncate-requirements: true # Make it so players do not have to start quest themselves quest-autostart: false # Automatically track quests on start, and stop tracking on completion @@ -364,4 +366,6 @@ messages: command-quest-admin-category-permission: "&7Category &c{category} &7 could not be opened for player &c{player}&7. They do not have permission to view it." command-quest-admin-complete-success: "&7Quest &c{quest} &7completed for player &c{player}&7." command-quest-admin-reset-success: "&7Successfully reset quest '&c{quest}&7' for player &c{player}&7." - + ui-placeholder-completed-true: "true" + ui-placeholder-completed-false: "false" + ui-placeholder-truncated: " +{amount} more" -- cgit v1.2.3-70-g09d2