From d8c60882d408875e702a3ca12461ee5220f3a30a Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Mon, 26 Jul 2021 15:50:18 +0100 Subject: Add papi support to quest strings (closes #216) --- .../quests/bukkit/BukkitQuestsPlugin.java | 18 +++++++++++++----- .../bukkit/hook/coreprotect/CoreProtectNoHook.java | 10 ---------- .../quests/bukkit/menu/itemstack/QItemStack.java | 8 ++++---- .../bukkit/questcontroller/NormalQuestController.java | 13 ++++++++++++- .../bukkit/tasktype/type/MiningCertainTaskType.java | 4 +++- .../leonardobishop/quests/bukkit/util/MenuUtils.java | 8 ++++---- bukkit/src/main/resources/resources/bukkit/config.yml | 2 ++ 7 files changed, 38 insertions(+), 25 deletions(-) delete mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectNoHook.java (limited to 'bukkit/src/main') 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 5081c296..aedb94ee 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -6,7 +6,6 @@ import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig; import com.leonardobishop.quests.bukkit.config.BukkitQuestsLoader; import com.leonardobishop.quests.bukkit.hook.coreprotect.AbstractCoreProtectHook; import com.leonardobishop.quests.bukkit.hook.coreprotect.CoreProtectHook; -import com.leonardobishop.quests.bukkit.hook.coreprotect.CoreProtectNoHook; import com.leonardobishop.quests.bukkit.hook.itemgetter.ItemGetter; import com.leonardobishop.quests.bukkit.hook.itemgetter.ItemGetterLatest; import com.leonardobishop.quests.bukkit.hook.itemgetter.ItemGetter_1_13; @@ -91,6 +90,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.FileOutputStream; @@ -101,6 +101,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.function.BiFunction; public class BukkitQuestsPlugin extends JavaPlugin implements Quests { @@ -127,6 +128,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { private BukkitTask questAutoSaveTask; private BukkitTask questQueuePollTask; + private BiFunction placeholderAPIProcessor; @Override public @NotNull QuestsLogger getQuestsLogger() { @@ -258,11 +260,13 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { this.placeholderAPIHook = new PlaceholderAPIHook(); this.placeholderAPIHook.registerExpansion(this); + this.placeholderAPIProcessor = (player, s) -> placeholderAPIHook.replacePlaceholders(player, s); + } else { + this.placeholderAPIProcessor = (player, s) -> s; } + if (Bukkit.getPluginManager().isPluginEnabled("CoreProtect")) { this.coreProtectHook = new CoreProtectHook(); - } else { - this.coreProtectHook = new CoreProtectNoHook(); } // Start quests update checker @@ -522,11 +526,15 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { return configProblems; } - public AbstractPlaceholderAPIHook getPlaceholderAPIHook() { + public @NotNull BiFunction getPlaceholderAPIProcessor() { + return placeholderAPIProcessor; + } + + public @Nullable AbstractPlaceholderAPIHook getPlaceholderAPIHook() { return placeholderAPIHook; } - public AbstractCoreProtectHook getCoreProtectHook() { + public @Nullable AbstractCoreProtectHook getCoreProtectHook() { return coreProtectHook; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectNoHook.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectNoHook.java deleted file mode 100644 index 4fc0eae9..00000000 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectNoHook.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.leonardobishop.quests.bukkit.hook.coreprotect; - -import org.bukkit.block.Block; - -public class CoreProtectNoHook implements AbstractCoreProtectHook { - @Override - public boolean checkBlock(Block block, int time) { - return false; - } -} 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 4d155e2e..841b24a3 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 @@ -108,14 +108,14 @@ public class QItemStack { } else { tempLore.addAll(globalLoreAppendNotStarted); } - if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) { - ism.setDisplayName(plugin.getPlaceholderAPIHook().replacePlaceholders(player, ism.getDisplayName())); + if (plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) { + ism.setDisplayName(plugin.getPlaceholderAPIProcessor().apply(player, ism.getDisplayName())); } if (questProgress != null) { for (String s : tempLore) { s = processPlaceholders(s, questProgress); - if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) { - s = plugin.getPlaceholderAPIHook().replacePlaceholders(player, s); + if (plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) { + s = plugin.getPlaceholderAPIProcessor().apply(player, s); } formattedLore.add(s); } 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 08ee62d2..950d6c58 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 @@ -119,6 +119,9 @@ public class NormalQuestController implements QuestController { Messages.TITLE_QUEST_START_SUBTITLE.getMessage().replace("{quest}", displayName)); } for (String s : quest.getStartString()) { + if (plugin.getConfig().getBoolean("quests-use-placeholderapi")) { + s = plugin.getPlaceholderAPIProcessor().apply(player, s); + } player.sendMessage(Chat.color(s)); } SoundUtils.playSoundForPlayer(player, plugin.getQuestsConfig().getString("options.sounds.quest-start")); @@ -204,7 +207,12 @@ public class NormalQuestController implements QuestController { // PlayerFinishQuestEvent -- end Bukkit.getServer().getScheduler().runTask(plugin, () -> { for (String s : quest.getRewards()) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), s.replace("{player}", player.getName())); //TODO PlaceholderAPI support + s = s.replace("{player}", player.getName()); + if (plugin.getConfig().getBoolean("quests-use-placeholderapi")) { + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), plugin.getPlaceholderAPIProcessor().apply(player, s)); + } else { + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), s); + } } }); if (questFinishEvent.getQuestFinishMessage() != null) @@ -214,6 +222,9 @@ public class NormalQuestController implements QuestController { Messages.TITLE_QUEST_COMPLETE_SUBTITLE.getMessage().replace("{quest}", displayName)); } for (String s : quest.getRewardString()) { + if (plugin.getConfig().getBoolean("quests-use-placeholderapi")) { + s = plugin.getPlaceholderAPIProcessor().apply(player, s); + } player.sendMessage(Chat.color(s)); } SoundUtils.playSoundForPlayer(player, plugin.getQuestsConfig().getString("options.sounds.quest-complete")); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningCertainTaskType.java index c0e5c8a2..fc274c34 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningCertainTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningCertainTaskType.java @@ -97,7 +97,9 @@ public final class MiningCertainTaskType extends BukkitTaskType { boolean coreProtectEnabled = (boolean) task.getConfigValue("check-coreprotect", false); int coreProtectTime = (int) task.getConfigValue("check-coreprotect-time", 3600); - if (coreProtectEnabled && plugin.getCoreProtectHook().checkBlock(event.getBlock(), coreProtectTime)) { + if (coreProtectEnabled + && plugin.getCoreProtectHook() != null + && plugin.getCoreProtectHook().checkBlock(event.getBlock(), coreProtectTime)) { continue; } increment(task, taskProgress, 1); 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 8ddf8493..e58fa6e2 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 @@ -33,8 +33,8 @@ public class MenuUtils { for (Map.Entry entry : placeholders.entrySet()) { s = s.replace(entry.getKey(), entry.getValue()); } - if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) { - s = plugin.getPlaceholderAPIHook().replacePlaceholders(player, s); + if (plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) { + s = plugin.getPlaceholderAPIProcessor().apply(player, s); } newLore.add(s); } @@ -42,8 +42,8 @@ public class MenuUtils { for (Map.Entry entry : placeholders.entrySet()) { ism.setDisplayName(ism.getDisplayName().replace(entry.getKey(), entry.getValue())); } - if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) { - ism.setDisplayName(plugin.getPlaceholderAPIHook().replacePlaceholders(player, ism.getDisplayName())); + if (plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) { + ism.setDisplayName(plugin.getPlaceholderAPIProcessor().apply(player, ism.getDisplayName())); } ism.setLore(newLore); newItemStack.setItemMeta(ism); diff --git a/bukkit/src/main/resources/resources/bukkit/config.yml b/bukkit/src/main/resources/resources/bukkit/config.yml index 7bbc5c3c..85ef01fe 100644 --- a/bukkit/src/main/resources/resources/bukkit/config.yml +++ b/bukkit/src/main/resources/resources/bukkit/config.yml @@ -225,6 +225,8 @@ options: quest-autotrack: true # How much quests should log, 0 = errors only, 1 = warnings, 2 = info, 3 = debug verbose-logging-level: 2 + # Replace placeholders from PlaceholderAPI in rewards, rewardstrings and start strings + quests-use-placeholderapi: false # Verify quests exist when a player's data is loaded - inconsistencies may arise when # players progress on specific quests and those quests are later removed. The problem is that their progress # is still kept in the quest progress file, which may lead to issues such as players reaching a quest started -- cgit v1.2.3-70-g09d2