diff options
Diffstat (limited to 'bukkit')
24 files changed, 211 insertions, 139 deletions
diff --git a/bukkit/build.gradle b/bukkit/build.gradle index fa1c3e69..822e17df 100644 --- a/bukkit/build.gradle +++ b/bukkit/build.gradle @@ -12,8 +12,8 @@ processResources { } repositories { - // Spigot - maven { url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' } + // Paper + maven { url = 'https://repo.papermc.io/repository/maven-public/' } // ASkyBlock, BentoBox maven { url = 'https://repo.codemc.org/repository/maven-public/' } // uSkyBlock @@ -48,12 +48,8 @@ repositories { dependencies { compileOnly project(':common') - // Spigot - compileOnly ('org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT') { - exclude group: 'net.md-5', module: 'bungeecord-chat' - exclude group: 'com.google.guava', module: 'guava' - exclude group: 'org.yaml', module: 'snakeyaml' - } + // Paper + compileOnly 'io.papermc.paper:paper-api:1.19-R0.1-SNAPSHOT' // ASkyBlock compileOnly ('com.wasteofplastic:askyblock:3.0.9.4') { exclude group: 'net.milkbowl.vault', module: 'VaultAPI' @@ -86,15 +82,19 @@ dependencies { // PlaceholderAPI compileOnly 'me.clip:placeholderapi:2.11.1' // EssentialsX - compileOnly "net.ess3:EssentialsX:2.18.2" + compileOnly ('net.ess3:EssentialsX:2.18.2') { + transitive = false + } // ShopGUI+ - compileOnly 'com.github.brcdev-minecraft:shopgui-api:master-SNAPSHOT' + compileOnly ('com.github.brcdev-minecraft:shopgui-api:master-SNAPSHOT') { + transitive = false + } // CoreProtect compileOnly ('net.coreprotect:coreprotect:2.18.2') { - exclude group: 'com.sk89q.worldedit', module: 'worldedit-bukkit' + transitive = false } // JetBrains Annotations - compileOnly 'org.jetbrains:annotations:16.0.2' + compileOnly 'org.jetbrains:annotations:23.0.0' // AuthLib compileOnly 'com.mojang:authlib:1.5.21' // FabledSkyblock @@ -105,10 +105,13 @@ dependencies { compileOnly 'com.bgsoftware:SuperiorSkyblockAPI:1.8.4' // VotingPlugin compileOnly ('com.bencodez:votingplugin:6.8.3') { + transitive = false exclude group: 'dev.dbassett' } // MMOItems - compileOnly 'net.Indyuce:MMOItems:6.5' + compileOnly ('net.Indyuce:MMOItems:6.5') { + transitive = false + } compileOnly 'io.lumine:MythicLib:1.1.1' // Slimefun4 compileOnly 'com.github.Slimefun:Slimefun4:RC-28' @@ -119,11 +122,7 @@ dependencies { // HikariCP implementation 'com.zaxxer:HikariCP:4.0.3' // slf4j - implementation 'org.slf4j:slf4j-simple:1.7.30' - // adventure - implementation 'net.kyori:adventure-platform-bukkit:4.1.0' - // mini message - implementation "net.kyori:adventure-text-minimessage:4.10.1" + implementation 'org.slf4j:slf4j-nop:1.7.36' compileOnly fileTree(dir: 'libs', includes: ['*.jar']) } @@ -136,6 +135,5 @@ shadowJar { relocate 'org.bstats', 'com.leonardobishop.quests.libs.bstats' relocate 'com.zaxxer.hikari', 'com.leonardobishop.quests.libs.hikaricp' relocate 'org.slf4j', 'com.leonardobishop.quests.libs.slf4j' - relocate 'net.kyori', 'com.leonardobishop.quests.libs.adventure' archiveClassifier.set('') }
\ No newline at end of file diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminItemsCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminItemsCommandHandler.java index c552a17a..1bf5a68a 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminItemsCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminItemsCommandHandler.java @@ -3,7 +3,7 @@ package com.leonardobishop.quests.bukkit.command; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.bukkit.item.ParsedQuestItem; import com.leonardobishop.quests.bukkit.item.QuestItem; -import org.apache.commons.lang.StringUtils; +import com.leonardobishop.quests.bukkit.util.StringUtils; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.command.CommandSender; 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 56a0927e..d4a7786b 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 @@ -5,6 +5,7 @@ import com.leonardobishop.quests.bukkit.hook.itemgetter.ItemGetter; import com.leonardobishop.quests.bukkit.item.*; import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStack; import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStackRegistry; +import com.leonardobishop.quests.bukkit.util.StringUtils; import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.config.ConfigProblem; import com.leonardobishop.quests.common.config.ConfigProblemDescriptions; @@ -17,7 +18,6 @@ import com.leonardobishop.quests.common.quest.Task; import com.leonardobishop.quests.common.questcontroller.QuestController; import com.leonardobishop.quests.common.tasktype.TaskType; import com.leonardobishop.quests.common.tasktype.TaskTypeManager; -import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.InvalidConfigurationException; @@ -490,11 +490,11 @@ public class BukkitQuestsLoader implements QuestsLoader { List<String> cLoreNormal = config.getStringList(path + ".lore-normal"); List<String> cLoreStarted = config.getStringList(path + ".lore-started"); - List<String> loreNormal = Chat.color(cLoreNormal); - List<String> loreStarted = Chat.color(cLoreStarted); + List<String> loreNormal = Chat.legacyColor(cLoreNormal); + List<String> loreStarted = Chat.legacyColor(cLoreStarted); String name; - name = Chat.color(cName); + name = Chat.legacyColor(cName); ItemStack is = plugin.getConfiguredItemStack(path, config, ItemGetter.Filter.DISPLAY_NAME, ItemGetter.Filter.LORE, ItemGetter.Filter.ENCHANTMENTS); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetterLatest.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetterLatest.java index 1c7331e1..a7b4e6a7 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetterLatest.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetterLatest.java @@ -95,13 +95,13 @@ public class ItemGetterLatest implements ItemGetter { // name if (!filters.contains(Filter.DISPLAY_NAME)) { if (cName != null) { - ism.setDisplayName(Chat.color(cName)); + ism.setDisplayName(Chat.legacyColor(cName)); } } // lore if (!filters.contains(Filter.LORE)) { - ism.setLore(Chat.color(cLore)); + ism.setLore(Chat.legacyColor(cLore)); } // attribute modifiers diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_1_13.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_1_13.java index 60d93a74..4d77427c 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_1_13.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_1_13.java @@ -92,13 +92,13 @@ public class ItemGetter_1_13 implements ItemGetter { // name if (!filters.contains(Filter.DISPLAY_NAME)) { if (cName != null) { - ism.setDisplayName(Chat.color(cName)); + ism.setDisplayName(Chat.legacyColor(cName)); } } // lore if (!filters.contains(Filter.LORE)) { - ism.setLore(Chat.color(cLore)); + ism.setLore(Chat.legacyColor(cLore)); } // attribute modifiers diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_Late_1_8.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_Late_1_8.java index 111415eb..fbef12d8 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_Late_1_8.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_Late_1_8.java @@ -1,9 +1,9 @@ package com.leonardobishop.quests.bukkit.hook.itemgetter; +import com.leonardobishop.quests.bukkit.util.StringUtils; import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; -import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; @@ -87,13 +87,13 @@ public class ItemGetter_Late_1_8 implements ItemGetter { // lore if (!filters.contains(Filter.LORE)) { - ism.setLore(Chat.color(cLore)); + ism.setLore(Chat.legacyColor(cLore)); } // name if (!filters.contains(Filter.DISPLAY_NAME)) { if (cName != null) { - ism.setDisplayName(Chat.color(cName)); + ism.setDisplayName(Chat.legacyColor(cName)); } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/QuestsPlaceholders.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/QuestsPlaceholders.java index 4d805f7a..b19e68d8 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/QuestsPlaceholders.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/QuestsPlaceholders.java @@ -19,7 +19,6 @@ import org.bukkit.inventory.ItemStack; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheable { @@ -70,7 +69,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl if (save) args = Arrays.copyOf(args, args.length - 1); final QPlayer qPlayer = plugin.getPlayerManager().getPlayer(p.getUniqueId()); - if (qPlayer == null) return Messages.PLACEHOLDERAPI_DATA_NOT_LOADED.getMessage(); + if (qPlayer == null) return Messages.PLACEHOLDERAPI_DATA_NOT_LOADED.getMessageLegacyColor(); String split = args[args.length - 1]; String result = "null"; @@ -109,7 +108,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl case "l": plugin.getQuestManager().getCategories().forEach(c -> { ItemStack itemStack = plugin.getQItemStackRegistry().getCategoryItemStack(c); - listCategories.add(Chat.strip(itemStack.getItemMeta().getDisplayName())); + listCategories.add(Chat.legacyStrip(itemStack.getItemMeta().getDisplayName())); }); break; case "listid": @@ -141,7 +140,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl if (qPlayer.getPlayerPreferences().getTrackedQuestId() == null || plugin.getQuestManager().getQuestById(qPlayer.getPlayerPreferences().getTrackedQuestId()) == null) { if (args.length == 1) { - return Messages.PLACEHOLDERAPI_NO_TRACKED_QUEST.getMessage(); + return Messages.PLACEHOLDERAPI_NO_TRACKED_QUEST.getMessageLegacyColor(); } else { return ""; } @@ -155,7 +154,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl switch (args[1].toLowerCase()) { case "started": case "s": - result = (qPlayer.getQuestProgressFile().getQuestProgress(quest).isStarted() ? Messages.PLACEHOLDERAPI_TRUE.getMessage() : Messages.PLACEHOLDERAPI_FALSE.getMessage()); + result = (qPlayer.getQuestProgressFile().getQuestProgress(quest).isStarted() ? Messages.PLACEHOLDERAPI_TRUE.getMessageLegacyColor() : Messages.PLACEHOLDERAPI_FALSE.getMessageLegacyColor()); break; case "starteddate": case "sd": @@ -167,11 +166,11 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl break; case "completed": case "c": - result = (qPlayer.getQuestProgressFile().getQuestProgress(quest).isCompleted() ? Messages.PLACEHOLDERAPI_TRUE.getMessage() : Messages.PLACEHOLDERAPI_FALSE.getMessage()); + result = (qPlayer.getQuestProgressFile().getQuestProgress(quest).isCompleted() ? Messages.PLACEHOLDERAPI_TRUE.getMessageLegacyColor() : Messages.PLACEHOLDERAPI_FALSE.getMessageLegacyColor()); break; case "completedbefore": case "cb": - result = (qPlayer.getQuestProgressFile().getQuestProgress(quest).isCompletedBefore() ? Messages.PLACEHOLDERAPI_TRUE.getMessage() : Messages.PLACEHOLDERAPI_FALSE.getMessage()); + result = (qPlayer.getQuestProgressFile().getQuestProgress(quest).isCompletedBefore() ? Messages.PLACEHOLDERAPI_TRUE.getMessageLegacyColor() : Messages.PLACEHOLDERAPI_FALSE.getMessageLegacyColor()); break; case "completiondate": case "cd": @@ -190,10 +189,10 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl } break; case "canaccept": - result = (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS ? Messages.PLACEHOLDERAPI_TRUE.getMessage() : Messages.PLACEHOLDERAPI_FALSE.getMessage()); + result = (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS ? Messages.PLACEHOLDERAPI_TRUE.getMessageLegacyColor() : Messages.PLACEHOLDERAPI_FALSE.getMessageLegacyColor()); break; case "meetsrequirements": - result = (qPlayer.getQuestProgressFile().hasMetRequirements(quest) ? Messages.PLACEHOLDERAPI_TRUE.getMessage() : Messages.PLACEHOLDERAPI_FALSE.getMessage()); + result = (qPlayer.getQuestProgressFile().hasMetRequirements(quest) ? Messages.PLACEHOLDERAPI_TRUE.getMessageLegacyColor() : Messages.PLACEHOLDERAPI_FALSE.getMessageLegacyColor()); break; default: if (!args[1].contains(":")) @@ -214,7 +213,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl break; case "completed": case "c": - result = String.valueOf(qPlayer.getQuestProgressFile().getQuestProgress(quest).getTaskProgress(t[1]).isCompleted() ? Messages.PLACEHOLDERAPI_TRUE.getMessage() : Messages.PLACEHOLDERAPI_FALSE.getMessage()); + result = String.valueOf(qPlayer.getQuestProgressFile().getQuestProgress(quest).getTaskProgress(t[1]).isCompleted() ? Messages.PLACEHOLDERAPI_TRUE.getMessageLegacyColor() : Messages.PLACEHOLDERAPI_FALSE.getMessageLegacyColor()); break; default: return args[0] + "_" + args[1] + "_" + args[2] + " is not a valid placeholder"; @@ -227,7 +226,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl if (placeholder == null) { return t[1] + " is not a valid placeholder within quest " + quest.getId(); } - placeholder = QItemStack.processPlaceholders(Chat.color(placeholder), qPlayer.getQuestProgressFile().getQuestProgress(quest)); + placeholder = QItemStack.processPlaceholders(Chat.legacyColor(placeholder), qPlayer.getQuestProgressFile().getQuestProgress(quest)); return placeholder; } else { return args[0] + "_" + args[1] + " is not a valid placeholder"; @@ -245,7 +244,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl if (args.length == 1) { ItemStack itemStack = plugin.getQItemStackRegistry().getCategoryItemStack(category); - result = Chat.strip(itemStack.getItemMeta().getDisplayName()); + result = Chat.legacyStrip(itemStack.getItemMeta().getDisplayName()); } else { if (args.length > 2 && split.equals(args[2])) split = ","; switch (args[1].toLowerCase()) { @@ -322,7 +321,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl private String getQuestDisplayNameStripped(Quest quest) { QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest); - if (qItemStack != null) return Chat.strip(qItemStack.getName()); + if (qItemStack != null) return Chat.legacyStrip(qItemStack.getName()); return null; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java index bdce5260..8bbd1474 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java @@ -25,7 +25,7 @@ public class PlayerJoinListener implements Listener { } if (plugin.getUpdater().isUpdateReady() && event.getPlayer().hasPermission("quests.admin")) { // delay for a bit so they actually see the message - String updateMessage = Messages.QUEST_UPDATER.getMessage() + String updateMessage = Messages.QUEST_UPDATER.getMessageLegacyColor() .replace("{newver}", plugin.getUpdater().getReturnedVersion()) .replace("{oldver}", plugin.getUpdater().getInstalledVersion()) .replace("{link}", plugin.getUpdater().getUpdateLink()); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java index ab6013bc..fb0a334a 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java @@ -40,7 +40,7 @@ public class CancelQMenu implements QMenu { } public Inventory toInventory(int page) { - String title = Chat.color(config.getString("options.guinames.quest-cancel")); + String title = Chat.legacyColor(config.getString("options.guinames.quest-cancel")); ItemStack yes = config.getItem("gui.quest-cancel-yes"); ItemStack no = config.getItem("gui.quest-cancel-no"); 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 845910b8..d43dc174 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 @@ -8,9 +8,9 @@ import com.leonardobishop.quests.bukkit.menu.element.MenuElement; import com.leonardobishop.quests.bukkit.menu.element.SpacerMenuElement; import com.leonardobishop.quests.bukkit.util.MenuUtils; import com.leonardobishop.quests.bukkit.util.Messages; +import com.leonardobishop.quests.bukkit.util.StringUtils; import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.player.QPlayer; -import org.apache.commons.lang.math.NumberUtils; import org.bukkit.Bukkit; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; @@ -45,7 +45,7 @@ public class CategoryQMenu implements QMenu { public void populate(List<QuestQMenu> menuQuests) { if (config.getConfig().isConfigurationSection("custom-elements.categories")) { for (String s : config.getConfig().getConfigurationSection("custom-elements.categories").getKeys(false)) { - if (!NumberUtils.isNumber(s)) continue; + if (!StringUtils.isNumeric(s)) continue; int slot = Integer.parseInt(s); int repeat = config.getInt("custom-elements.categories." + s + ".repeat"); MenuElement menuElement; @@ -95,7 +95,7 @@ public class CategoryQMenu implements QMenu { currentPage = page; int pageMin = pageSize * (page - 1); int pageMax = pageSize * page; - String title = Chat.color(config.getString("options.guinames.quests-category")); + String title = Chat.legacyColor(config.getString("options.guinames.quests-category")); ItemStack pageIs; ItemStack pagePrevIs; 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 d948c9ec..f2e75b9f 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 @@ -7,12 +7,12 @@ import com.leonardobishop.quests.bukkit.menu.element.MenuElement; import com.leonardobishop.quests.bukkit.menu.element.QuestMenuElement; import com.leonardobishop.quests.bukkit.menu.element.SpacerMenuElement; import com.leonardobishop.quests.bukkit.util.MenuUtils; +import com.leonardobishop.quests.bukkit.util.StringUtils; import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.enums.QuestStartResult; import com.leonardobishop.quests.common.player.QPlayer; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.common.quest.Quest; -import org.apache.commons.lang.math.NumberUtils; import org.bukkit.Bukkit; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; @@ -69,7 +69,7 @@ public class QuestQMenu implements QMenu { } if (plugin.getConfig().isConfigurationSection(path)) { for (String s : plugin.getConfig().getConfigurationSection(path).getKeys(false)) { - if (!NumberUtils.isNumber(s)) continue; + if (!StringUtils.isNumeric(s)) continue; int slot = Integer.parseInt(s); int repeat = plugin.getConfig().getInt(path + "." + s + ".repeat"); MenuElement menuElement; @@ -141,7 +141,7 @@ public class QuestQMenu implements QMenu { currentPage = page; int pageMin = pageSize * (page - 1); int pageMax = pageSize * page; - String title = Chat.color(config.getString("options.guinames.quests-menu")); + String title = Chat.legacyColor(config.getString("options.guinames.quests-menu")); ItemStack pageIs; ItemStack pagePrevIs; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java index adba43c8..2a5d9859 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java @@ -84,7 +84,7 @@ public class StartedQMenu implements QMenu { currentPage = page; int pageMin = pageSize * (page - 1); int pageMax = pageSize * page; - String title = Chat.color(config.getString("options.guinames.quests-started-menu")); + String title = Chat.legacyColor(config.getString("options.guinames.quests-started-menu")); ItemStack pageIs; ItemStack pagePrevIs; 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 6f380622..7496dc56 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 @@ -59,14 +59,14 @@ public class QuestMenuElement extends MenuElement { if (requirementQuest == null) continue; if (!owner.getQuestProgressFile().hasQuestProgress(requirementQuest) || !owner.getQuestProgressFile().getQuestProgress(requirementQuest).isCompletedBefore()) { - quests.add(Chat.strip(plugin.getQItemStackRegistry().getQuestItemStack(requirementQuest).getName())); + quests.add(Chat.legacyStrip(plugin.getQItemStackRegistry().getQuestItemStack(requirementQuest).getName())); } } Map<String, String> placeholders = new HashMap<>(); - placeholders.put("{quest}", Chat.strip(qItemStack.getName())); + placeholders.put("{quest}", Chat.legacyStrip(qItemStack.getName())); placeholders.put("{questid}", quest.getId()); 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))); + placeholders.put("{requirements}", quests.get(0) + Messages.UI_PLACEHOLDERS_TRUNCATED.getMessageLegacyColor().replace("{amount}", String.valueOf(quests.size() - 1))); } else { placeholders.put("{requirements}", String.join(", ", quests)); } @@ -79,7 +79,7 @@ public class QuestMenuElement extends MenuElement { return MenuUtils.applyPlaceholders(plugin, owner.getPlayerUUID(), display, placeholders); } else if (status == QuestStartResult.QUEST_ALREADY_COMPLETED) { Map<String, String> placeholders = new HashMap<>(); - placeholders.put("{quest}", Chat.strip(qItemStack.getName())); + placeholders.put("{quest}", Chat.legacyStrip(qItemStack.getName())); placeholders.put("{questid}", quest.getId()); ItemStack display; if (plugin.getQItemStackRegistry().hasQuestCompletedItemStack(quest)) { @@ -90,7 +90,7 @@ public class QuestMenuElement extends MenuElement { return MenuUtils.applyPlaceholders(plugin, owner.getPlayerUUID(), display, placeholders); } else if (status == QuestStartResult.QUEST_NO_PERMISSION) { Map<String, String> placeholders = new HashMap<>(); - placeholders.put("{quest}", Chat.strip(qItemStack.getName())); + placeholders.put("{quest}", Chat.legacyStrip(qItemStack.getName())); placeholders.put("{questid}", quest.getId()); ItemStack display; if (plugin.getQItemStackRegistry().hasQuestPermissionItemStack(quest)) { @@ -102,7 +102,7 @@ public class QuestMenuElement extends MenuElement { } else if (cooldown > 0) { Map<String, String> placeholders = new HashMap<>(); placeholders.put("{time}", Format.formatTime(TimeUnit.SECONDS.convert(cooldown, TimeUnit.MILLISECONDS))); - placeholders.put("{quest}", Chat.strip(qItemStack.getName())); + placeholders.put("{quest}", Chat.legacyStrip(qItemStack.getName())); placeholders.put("{questid}", quest.getId()); ItemStack display; if (plugin.getQItemStackRegistry().hasQuestCooldownItemStack(quest)) { 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 d1fdc5ec..f697523c 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 @@ -38,10 +38,10 @@ public class QItemStack { this.loreStarted = loreStarted; this.startingItemStack = startingItemStack; - this.globalLoreAppendNormal = Chat.color(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-normal")); - this.globalLoreAppendNotStarted = Chat.color(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-not-started")); - this.globalLoreAppendStarted = Chat.color(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-started")); - this.globalLoreAppendTracked = Chat.color(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-tracked")); + this.globalLoreAppendNormal = Chat.legacyColor(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-normal")); + this.globalLoreAppendNotStarted = Chat.legacyColor(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-not-started")); + this.globalLoreAppendStarted = Chat.legacyColor(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-started")); + this.globalLoreAppendTracked = Chat.legacyColor(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-tracked")); } public String getName() { @@ -147,9 +147,9 @@ public class QItemStack { if (parts[1].equals("complete")) { String str; if (questProgress.getTaskProgress(parts[0]).isCompleted()) { - str = Chat.color(Messages.UI_PLACEHOLDERS_TRUE.getMessage()); + str = Chat.legacyColor(Messages.UI_PLACEHOLDERS_TRUE.getMessageLegacyColor()); } else { - str = Chat.color(Messages.UI_PLACEHOLDERS_FALSE.getMessage()); + str = Chat.legacyColor(Messages.UI_PLACEHOLDERS_FALSE.getMessageLegacyColor()); } 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 c37a6c63..71e0af67 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 @@ -103,7 +103,7 @@ public class NormalQuestController implements QuestController { questProgress.setCompleted(false); if (player != null) { QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest); - String displayName = Chat.strip(qItemStack.getName()); + String displayName = Chat.legacyStrip(qItemStack.getName()); String questStartMessage = Messages.QUEST_START.getMessage().replace("{quest}", displayName); // PlayerStartQuestEvent -- start PlayerStartQuestEvent questStartEvent = new PlayerStartQuestEvent(player, qPlayer, questProgress, questStartMessage); @@ -111,8 +111,8 @@ public class NormalQuestController implements QuestController { // PlayerStartQuestEvent -- end Messages.send(questStartEvent.getQuestStartMessage(), player); if (config.getBoolean("options.titles-enabled")) { - plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_START_TITLE.getMessage().replace("{quest}", displayName), - Messages.TITLE_QUEST_START_SUBTITLE.getMessage().replace("{quest}", displayName)); + plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_START_TITLE.getMessageLegacyColor().replace("{quest}", displayName), + Messages.TITLE_QUEST_START_SUBTITLE.getMessageLegacyColor().replace("{quest}", displayName)); } for (String s : quest.getStartCommands()) { s = s.replace("{player}", player.getName()); @@ -126,7 +126,7 @@ public class NormalQuestController implements QuestController { if (plugin.getConfig().getBoolean("options.quests-use-placeholderapi")) { s = plugin.getPlaceholderAPIProcessor().apply(player, s); } - player.sendMessage(Chat.color(s)); + Chat.send(player, s, true); } SoundUtils.playSoundForPlayer(player, plugin.getQuestsConfig().getString("options.sounds.quest-start")); } @@ -213,7 +213,7 @@ public class NormalQuestController implements QuestController { Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID()); if (player != null) { QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest); - String displayName = Chat.strip(qItemStack.getName()); + String displayName = Chat.legacyStrip(qItemStack.getName()); String questFinishMessage = Messages.QUEST_COMPLETE.getMessage().replace("{quest}", displayName); // PlayerFinishQuestEvent -- start PlayerFinishQuestEvent questFinishEvent = new PlayerFinishQuestEvent(player, qPlayer, questProgress, questFinishMessage); @@ -231,14 +231,14 @@ public class NormalQuestController implements QuestController { }); Messages.send(questFinishEvent.getQuestFinishMessage(), player); if (config.getBoolean("options.titles-enabled")) { - plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_COMPLETE_TITLE.getMessage().replace("{quest}", displayName), - Messages.TITLE_QUEST_COMPLETE_SUBTITLE.getMessage().replace("{quest}", displayName)); + plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_COMPLETE_TITLE.getMessageLegacyColor().replace("{quest}", displayName), + Messages.TITLE_QUEST_COMPLETE_SUBTITLE.getMessageLegacyColor().replace("{quest}", displayName)); } for (String s : quest.getRewardString()) { if (plugin.getConfig().getBoolean("options.quests-use-placeholderapi")) { s = plugin.getPlaceholderAPIProcessor().apply(player, s); } - player.sendMessage(Chat.color(s)); + player.sendMessage(Chat.legacyColor(s)); } SoundUtils.playSoundForPlayer(player, plugin.getQuestsConfig().getString("options.sounds.quest-complete")); } @@ -284,7 +284,7 @@ public class NormalQuestController implements QuestController { resetQuest(questProgress); if (player != null) { QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest); - String displayName = Chat.strip(qItemStack.getName()); + String displayName = Chat.legacyStrip(qItemStack.getName()); String questCancelMessage = Messages.QUEST_CANCEL.getMessage().replace("{quest}", displayName); // PlayerCancelQuestEvent -- start PlayerCancelQuestEvent questCancelEvent = new PlayerCancelQuestEvent(player, qPlayer, questProgress, questCancelMessage); @@ -311,7 +311,7 @@ public class NormalQuestController implements QuestController { resetQuest(questProgress); if (player != null) { QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest); - String displayName = Chat.strip(qItemStack.getName()); + String displayName = Chat.legacyStrip(qItemStack.getName()); String questExpireMessage = Messages.QUEST_EXPIRE.getMessage().replace("{quest}", displayName); // PlayerCancelQuestEvent -- start PlayerExpireQuestEvent questCancelEvent = new PlayerExpireQuestEvent(player, qPlayer, questProgress, questExpireMessage); @@ -339,13 +339,13 @@ public class NormalQuestController implements QuestController { Quest currentTrackedQuest; if (currentTrackedQuestId != null && (currentTrackedQuest = plugin.getQuestManager().getQuestById(currentTrackedQuestId)) != null) { QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(currentTrackedQuest); - String displayName = Chat.strip(qItemStack.getName()); + String displayName = Chat.legacyStrip(qItemStack.getName()); Messages.QUEST_TRACK_STOP.send(player, "{quest}", displayName); } } } else if (qPlayer.hasStartedQuest(quest)) { QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest); - String displayName = Chat.strip(qItemStack.getName()); + String displayName = Chat.legacyStrip(qItemStack.getName()); qPlayer.getPlayerPreferences().setTrackedQuestId(quest.getId()); if (player != null) { Bukkit.getPluginManager().callEvent(new PlayerStartTrackQuestEvent(player, qPlayer)); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingCertainTaskType.java index c68af762..631d88d7 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingCertainTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingCertainTaskType.java @@ -11,7 +11,6 @@ import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.quest.Task; -import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -135,7 +134,7 @@ public final class MobkillingCertainTaskType extends BukkitTaskType { boolean validName = false; for (String name : configNames) { - name = Chat.color(name); + name = Chat.legacyColor(name); if (mob.getCustomName() != null && !mob.getCustomName().equals(name)) { validName = true; break; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensDeliverTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensDeliverTaskType.java index da4df740..b51b1265 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensDeliverTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensDeliverTaskType.java @@ -82,8 +82,8 @@ public final class CitizensDeliverTaskType extends BukkitTaskType { for (Task task : quest.getTasksOfType(super.getType())) { if (task.getConfigValue("npc-name") != null) { - if (!Chat.strip(Chat.color(String.valueOf(task.getConfigValue("npc-name")))) - .equals(Chat.strip(Chat.color(npc.getName())))) { + if (!Chat.legacyStrip(Chat.legacyColor(String.valueOf(task.getConfigValue("npc-name")))) + .equals(Chat.legacyStrip(Chat.legacyColor(npc.getName())))) { continue; } } else if (!task.getConfigValue("npc-id").equals(npc.getId())) { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensInteractTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensInteractTaskType.java index 794701d9..31f9af67 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensInteractTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensInteractTaskType.java @@ -54,8 +54,8 @@ public final class CitizensInteractTaskType extends BukkitTaskType { if (!TaskUtils.validateWorld(event.getClicker(), task)) continue; if (task.getConfigValue("npc-name") != null) { - if (!Chat.strip(Chat.color(String.valueOf(task.getConfigValue("npc-name")))) - .equals(Chat.strip(Chat.color(event.getNPC().getName())))) { + if (!Chat.legacyStrip(Chat.legacyColor(String.valueOf(task.getConfigValue("npc-name")))) + .equals(Chat.legacyStrip(Chat.legacyColor(event.getNPC().getName())))) { continue; } } else if (!task.getConfigValue("npc-id").equals(event.getNPC().getId())) { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/CommandUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/CommandUtils.java index 89c5418c..ddf3db4f 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/CommandUtils.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/CommandUtils.java @@ -5,7 +5,6 @@ import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.config.ConfigProblem; import com.leonardobishop.quests.common.player.QPlayer; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile; -import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; @@ -50,26 +49,32 @@ public class CommandUtils { for (ConfigProblem.ConfigProblemType type : ConfigProblem.ConfigProblemType.values()) { if (sortedProblems.containsKey(type)) { for (ConfigProblem problem : sortedProblems.get(type)) { - String color = Chat.matchConfigProblemToColorName(problem.getType()); - String extendedDescription = String.format("<%s>%s</%s><br><gray>Problem location: </gray><white>%s</white><br><br><grey>%s</grey>", - color, - problem.getDescription(), - color, - problem.getLocation(), - problem.getExtendedDescription() - ); - extendedDescription = extendedDescription.replace("'", "\\'"); + if (Chat.isModernChatAvailable()) { + String color = Chat.matchConfigProblemToColorName(problem.getType()); + String extendedDescription = String.format("<%s>%s</%s><br><gray>Problem location: </gray><white>%s</white><br><br><grey>%s</grey>", + color, + problem.getDescription(), + color, + problem.getLocation(), + problem.getExtendedDescription() + ); + extendedDescription = extendedDescription.replace("'", "\\'"); - String message = String.format( - "<dark_gray> | - </dark_gray><%s>%s</%s><dark_gray>:</dark_gray> <hover:show_text:'%s'><gray>%s</gray></hover><dark_gray> :%s</dark_gray>", - color, - problem.getType().getShortened(), - color, - extendedDescription, - problem.getDescription(), - problem.getLocation() - ); - Chat.send(sender, message); + String message = String.format( + "<dark_gray> | - </dark_gray><%s>%s</%s><dark_gray>:</dark_gray> <hover:show_text:'%s'><gray>%s</gray></hover><dark_gray> :%s</dark_gray>", + color, + problem.getType().getShortened(), + color, + extendedDescription, + problem.getDescription(), + problem.getLocation() + ); + Chat.send(sender, message); + } else { + sender.sendMessage(ChatColor.DARK_GRAY + " | - " + Chat.matchConfigProblemToColor(problem.getType()) + + problem.getType().getShortened() + ChatColor.DARK_GRAY + ": " + + ChatColor.GRAY + problem.getDescription() + ChatColor.DARK_GRAY + " :" + problem.getLocation()); + } count++; } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Format.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Format.java index afa0ea74..91a6b265 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Format.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Format.java @@ -7,7 +7,7 @@ public class Format { long minutes = (sec % 3600) / 60; long seconds = ((sec % 3600) % 60) % 60; - return Messages.TIME_FORMAT.getMessage() + return Messages.TIME_FORMAT.getMessageLegacyColor() .replace("{hours}", String.format("%02d", hours)) .replace("{minutes}", String.format("%02d", minutes)) .replace("{seconds}", String.format("%02d", seconds)); 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 87dd1087..c6d3525e 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 @@ -1,6 +1,5 @@ package com.leonardobishop.quests.bukkit.util; -import com.google.common.base.Preconditions; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.bukkit.util.chat.Chat; import org.bukkit.command.CommandSender; @@ -95,11 +94,15 @@ public enum Messages { this.def = def; } + public String getMessageLegacyColor() { + return Chat.legacyColor(getMessage()); + } + public String getMessage() { String message = plugin.getQuestsConfig().getString(path); if (message.equals(path)) message = def; - return Chat.color(message); + return message; } public boolean send(CommandSender target, String... substitutions) { @@ -107,20 +110,7 @@ public enum Messages { } public static boolean send(String message, CommandSender target, String... substitutions) { - if (substitutions.length % 2 != 0) { - throw new IllegalArgumentException("uneven substitutions passed"); - } - - if (message == null || message.isEmpty()) { - return false; - } - - String substitutedMessage = message; - for (int i = 0; i < substitutions.length ; i += 2) { - substitutedMessage = substitutedMessage.replace(substitutions[i], substitutions[i+1]); - } - - target.sendMessage(substitutedMessage); + Chat.send(target, message, true, substitutions); return true; } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/StringUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/StringUtils.java new file mode 100644 index 00000000..c6c2aa04 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/StringUtils.java @@ -0,0 +1,39 @@ +package com.leonardobishop.quests.bukkit.util; + +/* + * From Apache Commons Lang + * https://github.com/apache/commons-lang/blob/master/LICENSE.txt + */ +public class StringUtils { + + public static boolean isEmpty(final CharSequence cs) { + return cs == null || cs.length() == 0; + } + + public static boolean isAlphanumeric(final CharSequence cs) { + if (isEmpty(cs)) { + return false; + } + final int sz = cs.length(); + for (int i = 0; i < sz; i++) { + if (!Character.isLetterOrDigit(cs.charAt(i))) { + return false; + } + } + return true; + } + + public static boolean isNumeric(final CharSequence cs) { + if (isEmpty(cs)) { + return false; + } + final int sz = cs.length(); + for (int i = 0; i < sz; i++) { + if (!Character.isDigit(cs.charAt(i))) { + return false; + } + } + return true; + } + +} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/Chat.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/Chat.java index 64c2fdc8..a8453944 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/Chat.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/Chat.java @@ -1,21 +1,23 @@ package com.leonardobishop.quests.bukkit.util.chat; -import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.common.config.ConfigProblem; +import com.leonardobishop.quests.common.plugin.Quests; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Entity; +import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; +import java.util.regex.Pattern; public class Chat { private static final ColorAdapter legacyColorAdapter; - private static final MiniMessageParser miniMessageParser; + private static final Pattern legacyPattern; + private static MiniMessageParser miniMessageParser; static { String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];; @@ -26,18 +28,27 @@ public class Chat { } else { legacyColorAdapter = new HexColorAdapter(); } - miniMessageParser = new MiniMessageParser(Bukkit.getPluginManager().getPlugin("Quests")); + Quests questsPlugin = (Quests) Bukkit.getPluginManager().getPlugin("Quests"); + try { + Class.forName("net.kyori.adventure.Adventure", false, Bukkit.class.getClassLoader()); + miniMessageParser = new MiniMessageParser(); + questsPlugin.getQuestsLogger().debug("Modern chat is available."); + } catch (Throwable e) { + questsPlugin.getQuestsLogger().debug("Modern chat is not available, resorting to legacy chat."); + miniMessageParser = null; + } + legacyPattern = Pattern.compile("&(?:\\d|#|[a-f]|[k-o]|r)"); } @Contract("null -> null") @Deprecated // use send instead - public static String color(@Nullable String s) { + public static String legacyColor(@Nullable String s) { return legacyColorAdapter.color(s); } @Contract("null -> null") @Deprecated // use send instead - public static List<String> color(@Nullable List<String> s) { + public static List<String> legacyColor(@Nullable List<String> s) { if (s == null || s.size() == 0) return s; List<String> colored = new ArrayList<>(); @@ -48,10 +59,18 @@ public class Chat { } @Contract("null -> null") - public static String strip(@Nullable String s) { + public static String legacyStrip(@Nullable String s) { return legacyColorAdapter.strip(s); } + public static boolean usesLegacy(String s) { + return legacyPattern.matcher(s).find(); + } + + public static boolean isModernChatAvailable() { + return miniMessageParser != null; + } + public static ChatColor matchConfigProblemToColor(ConfigProblem.ConfigProblemType configProblem) { switch (configProblem) { case ERROR: @@ -76,14 +95,43 @@ public class Chat { /** * Send a message to a given command sender. The given message will be parsed for legacy - * colours and minimessage formatting. + * colour, or minimessage formatting. + * + * @param who the player to send to + * @param message the message to send + * @param allowLegacy whether legacy colour codes should be tested and allowed + * @param substitutions pairs of substitutions + */ + public static void send(CommandSender who, String message, boolean allowLegacy, String... substitutions) { + if (substitutions.length % 2 != 0) { + throw new IllegalArgumentException("uneven substitutions passed"); + } + + if (message == null || message.isEmpty()) { + return; + } + + String substitutedMessage = message; + for (int i = 0; i < substitutions.length ; i += 2) { + substitutedMessage = substitutedMessage.replace(substitutions[i], substitutions[i+1]); + } + + if (miniMessageParser == null || (allowLegacy && usesLegacy(message))) { + who.sendMessage(legacyColor(substitutedMessage)); + } else { + miniMessageParser.send(who, substitutedMessage); + } + } + + /** + * Send a mini-message formatted message to a given command sender. * * @param who the player to send to * @param message the message to send + * @param substitutions pairs of substitutions */ - public static void send(CommandSender who, String message) { -// String colouredMessage = legacyColorAdapter.color(message); - miniMessageParser.send(who, message); + public static void send(CommandSender who, String message, String... substitutions) { + send(who, message, false, substitutions); } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/MiniMessageParser.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/MiniMessageParser.java index c27df430..09a2cc3c 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/MiniMessageParser.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/MiniMessageParser.java @@ -1,26 +1,20 @@ package com.leonardobishop.quests.bukkit.util.chat; -import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.command.CommandSender; -import org.bukkit.plugin.Plugin; public class MiniMessageParser { - private final BukkitAudiences adventure; private final MiniMessage miniMessage; - public MiniMessageParser(Plugin plugin) { - adventure = BukkitAudiences.create(plugin); + public MiniMessageParser() { miniMessage = MiniMessage.miniMessage(); } public void send(CommandSender who, String message) { - Audience audience = adventure.sender(who); Component component = miniMessage.deserialize(message); - audience.sendMessage(component); + who.sendMessage(component); } } |
