diff options
| author | Krakenied <Krakenied1@gmail.com> | 2023-09-15 16:44:59 +0200 |
|---|---|---|
| committer | Krakenied <Krakenied1@gmail.com> | 2023-09-24 15:47:47 +0200 |
| commit | 1cbede7b46bf36695b581031be49bd827601b2aa (patch) | |
| tree | 77ad45186a08dc91375d2b3f638a07742e46a946 /bukkit/src/main | |
| parent | c7c9acfbfd4d3739e9055209df1f167bee2b32b7 (diff) | |
Add dedicated progress placeholders section
Diffstat (limited to 'bukkit/src/main')
5 files changed, 59 insertions, 11 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java index db1fe34c..b3932f82 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -53,6 +53,7 @@ import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHand import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler11; import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler16; import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler17; +import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler20; import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler8; import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler9; import com.leonardobishop.quests.bukkit.item.ParsedQuestItem; @@ -301,7 +302,8 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { case 9, 10 -> versionSpecificHandler = new VersionSpecificHandler9(); case 11, 12, 13, 14, 15 -> versionSpecificHandler = new VersionSpecificHandler11(); case 16 -> versionSpecificHandler = new VersionSpecificHandler16(); - default -> versionSpecificHandler = new VersionSpecificHandler17(); + case 17, 18, 19 -> versionSpecificHandler = new VersionSpecificHandler17(); + default -> versionSpecificHandler = new VersionSpecificHandler20(); } questsConfig.setItemGetter(itemGetter); 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 fd362c88..653fefa7 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 @@ -265,6 +265,7 @@ public class BukkitQuestsLoader implements QuestsLoader { int sortOrder = config.getInt("options.sort-order", 1); String category = config.getString("options.category"); Map<String, String> placeholders = new HashMap<>(); + Map<String, String> progressPlaceholders = new HashMap<>(); if (category != null && category.equals("")) category = null; @@ -283,6 +284,7 @@ public class BukkitQuestsLoader implements QuestsLoader { .withStartString(startString) .withStartCommands(startCommands) .withPlaceholders(placeholders) + .withProgressPlaceholders(progressPlaceholders) .withCooldown(cooldownTime) .withTimeLimit(timeLimtTime) .withSortOrder(sortOrder) @@ -344,6 +346,11 @@ public class BukkitQuestsLoader implements QuestsLoader { findInvalidTaskReferences(quest, config.getString("placeholders." + p), problems, "placeholders." + p); } } + if (config.isConfigurationSection("progress-placeholders")) { + for (String p : config.getConfigurationSection("progress-placeholders").getKeys(false)) { + progressPlaceholders.put(p, config.getString("progress-placeholders." + p)); + } + } questManager.registerQuest(quest); taskTypeManager.registerQuestTasksWithTaskTypes(quest); qItemStackRegistry.register(quest, displayItem); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/bossbar/BossBar_Bukkit.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/bossbar/BossBar_Bukkit.java index 6238ae46..a3072549 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/bossbar/BossBar_Bukkit.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/bossbar/BossBar_Bukkit.java @@ -23,6 +23,13 @@ public class BossBar_Bukkit implements QuestsBossBar { public BossBar_Bukkit(BukkitQuestsPlugin plugin) { this.plugin = plugin; + + //noinspection CodeBlock2Expr (for readability) + plugin.getScheduler().runTaskTimerAsynchronously(() -> { + playerQuestBarCache.asMap() + .values() + .forEach(Cache::cleanUp); + }, 0L, 2L); } @Override diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java index 11f80d4b..3d98519b 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java @@ -150,27 +150,53 @@ public class TaskUtils { taskProgress.setProgress(--progress); return progress; } - - public static void sendTrackAdvancement(Player player, Quest quest, Task task, TaskProgress taskProgress) { - String title = quest.getPlaceholders().get("progress"); - if (title == null) { - return; - } + public static void sendTrackAdvancement(Player player, Quest quest, Task task, TaskProgress taskProgress) { boolean useBossBarProgress = plugin.getConfig().getBoolean("options.bossbar.progress", false); boolean useBossBarComplete = plugin.getConfig().getBoolean("options.bossbar.complete", false); boolean useActionBarProgress = plugin.getConfig().getBoolean("options.actionbar.progress", false); boolean useActionBarComplete = plugin.getConfig().getBoolean("options.actionbar.complete", false); if (!(useBossBarProgress || useBossBarComplete || useActionBarProgress || useActionBarComplete)) { - return; // skip title coloring and placeholders application if all options are disabled + return; // skip title processing if all options are disabled + } + + String title; + + titleSearch: + { + title = quest.getProgressPlaceholders().get(task.getId()); // custom title + if (title != null) { + break titleSearch; + } + + title = quest.getProgressPlaceholders().get("*"); // one title for all tasks + if (title != null) { + break titleSearch; + } + + boolean useProgressAsFallback = plugin.getQuestsConfig().getBoolean("options.use-progress-as-fallback", true); + if (!useProgressAsFallback) { + return; + } + + title = quest.getPlaceholders().get("progress"); // fallback title + if (title != null) { + break titleSearch; + } + + return; // no valid title format found } - title = ChatColor.translateAlternateColorCodes('&', QItemStack.processPlaceholders(title, taskProgress)); - if (plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) { + title = QItemStack.processPlaceholders(title, taskProgress); + + boolean usePlaceholderAPI = plugin.getQuestsConfig().getBoolean("options.progress-use-placeholderapi", false); + if (usePlaceholderAPI) { title = plugin.getPlaceholderAPIProcessor().apply(player, title); } + title = Chat.legacyColor(title); + if (useBossBarProgress || (useBossBarComplete && taskProgress.isCompleted())) { Object progress = taskProgress.getProgress(); Double bossBarProgress = null; @@ -186,7 +212,7 @@ public class TaskUtils { } } - int bossBarTime = plugin.getConfig().getInt("options.bossbar.time", 10); + int bossBarTime = plugin.getConfig().getInt("options.bossbar.time", 5); if (bossBarProgress != null) { float bossBarFloatProgress = (float) Math.min(1.0d, Math.max(0.0d, bossBarProgress)); diff --git a/bukkit/src/main/resources/resources/bukkit/config.yml b/bukkit/src/main/resources/resources/bukkit/config.yml index cdad78e6..6a133670 100644 --- a/bukkit/src/main/resources/resources/bukkit/config.yml +++ b/bukkit/src/main/resources/resources/bukkit/config.yml @@ -104,6 +104,12 @@ options: record-log-history: true # Replace placeholders from PlaceholderAPI in rewards, rewardstrings and start strings quests-use-placeholderapi: false + # Replace placeholders from PlaceholderAPI in boss bar and action bar progress strings + progress-use-placeholderapi: false + # If true, progress string from placeholders section will be used as fallback in boss bar + # and action bar in case there is no matching string set in progress-placeholders section. + # Otherwise, the bar will not appear at all. + use-progress-as-fallback: true # PlayerBlockTracker class to be used with the hook playerblocktracker-class-name: "com.gestankbratwurst.playerblocktracker.PlayerBlockTracker" # Verify quests exist when a player's data is loaded - inconsistencies may arise when |
