diff --git a/build.gradle b/build.gradle index 8488fe2..33288f2 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '2.1.1' +version = '2.1.2' repositories { mavenCentral() diff --git a/src/main/java/net/momirealms/customnameplates/commands/subcmd/ForcePreviewCommand.java b/src/main/java/net/momirealms/customnameplates/commands/subcmd/ForcePreviewCommand.java index 880db60..166e306 100644 --- a/src/main/java/net/momirealms/customnameplates/commands/subcmd/ForcePreviewCommand.java +++ b/src/main/java/net/momirealms/customnameplates/commands/subcmd/ForcePreviewCommand.java @@ -64,8 +64,8 @@ public class ForcePreviewCommand extends AbstractSubCommand { AdventureUtil.sendMessage(sender, MessageManager.prefix + MessageManager.np_not_exist); return true; } - String playerPrefix = NameplateManager.hidePrefix ? "" : CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, NameplateManager.player_prefix); - String playerSuffix = NameplateManager.hideSuffix ? "" : CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, NameplateManager.player_suffix); + String playerPrefix = NameplateManager.hidePrefix ? "" : AdventureUtil.replaceLegacy(CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, NameplateManager.player_prefix)); + String playerSuffix = NameplateManager.hideSuffix ? "" : AdventureUtil.replaceLegacy(CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(player, NameplateManager.player_suffix)); Component prefix = Component.text(CustomNameplates.plugin.getNameplateManager().makeCustomNameplate(MiniMessage.miniMessage().stripTags(playerPrefix), args.get(0), MiniMessage.miniMessage().stripTags(playerSuffix), nameplateConfig)).font(ConfigManager.key).append(MiniMessage.miniMessage().deserialize(playerPrefix)); Component suffix = MiniMessage.miniMessage().deserialize(playerSuffix).append(Component.text(CustomNameplates.plugin.getNameplateManager().getSuffixChar(MiniMessage.miniMessage().stripTags(playerPrefix) + args.get(0) + MiniMessage.miniMessage().stripTags(playerSuffix))).font(ConfigManager.key)); Component full = prefix.append(Component.text(player.getName()).color(TextColor.color(color2decimal(nameplateConfig.color()))).font(Key.key("default")).append(suffix)); diff --git a/src/main/java/net/momirealms/customnameplates/manager/ChatBubblesManager.java b/src/main/java/net/momirealms/customnameplates/manager/ChatBubblesManager.java index 666726d..d39d403 100644 --- a/src/main/java/net/momirealms/customnameplates/manager/ChatBubblesManager.java +++ b/src/main/java/net/momirealms/customnameplates/manager/ChatBubblesManager.java @@ -35,6 +35,7 @@ import net.momirealms.customnameplates.objects.nameplates.BubbleConfig; import net.momirealms.customnameplates.objects.nameplates.FakeArmorStand; import net.momirealms.customnameplates.objects.nameplates.mode.EntityTag; import net.momirealms.customnameplates.objects.nameplates.mode.bubbles.BBPacketsHandle; +import net.momirealms.customnameplates.utils.AdventureUtil; import net.momirealms.customnameplates.utils.ConfigUtil; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -173,6 +174,8 @@ public class ChatBubblesManager extends EntityTag { return; } + text = AdventureUtil.replaceLegacy(text); + BubbleConfig bubbleConfig = ResourceManager.BUBBLES.get(bubblesEvent.getBubble()); WrappedChatComponent wrappedChatComponent; diff --git a/src/main/java/net/momirealms/customnameplates/objects/actionbar/ActionBarTask.java b/src/main/java/net/momirealms/customnameplates/objects/actionbar/ActionBarTask.java index 4573eab..da2ddb4 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/actionbar/ActionBarTask.java +++ b/src/main/java/net/momirealms/customnameplates/objects/actionbar/ActionBarTask.java @@ -79,7 +79,7 @@ public class ActionBarTask { } } - AdventureUtil.playerActionbar(player, PlaceholderAPI.setPlaceholders(player, text)); + AdventureUtil.playerActionbar(player, AdventureUtil.replaceLegacy(PlaceholderAPI.setPlaceholders(player, text))); } } } diff --git a/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarSender.java b/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarSender.java index a5866f5..88de186 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarSender.java +++ b/src/main/java/net/momirealms/customnameplates/objects/bossbar/BossBarSender.java @@ -115,7 +115,7 @@ public class BossBarSender { PacketContainer packet = new PacketContainer(PacketType.Play.Server.BOSS); packet.getModifier().write(0, uuid); InternalStructure internalStructure = packet.getStructures().read(1); - internalStructure.getChatComponents().write(0, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(text.getLatestValue())))); + internalStructure.getChatComponents().write(0, WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(AdventureUtil.replaceLegacy(text.getLatestValue()))))); internalStructure.getFloat().write(0,1F); internalStructure.getEnumModifier(BarColor.class, 2).write(0, config.getColor()); internalStructure.getEnumModifier(Overlay.class, 3).write(0, config.getOverlay()); diff --git a/src/main/java/net/momirealms/customnameplates/objects/nameplates/FakeArmorStand.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/FakeArmorStand.java index 69c24e5..9fea3c5 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/nameplates/FakeArmorStand.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/FakeArmorStand.java @@ -27,6 +27,7 @@ import net.momirealms.customnameplates.CustomNameplates; import net.momirealms.customnameplates.manager.ChatBubblesManager; import net.momirealms.customnameplates.manager.NameplateManager; import net.momirealms.customnameplates.objects.TextCache; +import net.momirealms.customnameplates.utils.AdventureUtil; import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -258,7 +259,7 @@ public class FakeArmorStand implements ArmorStand { WrappedDataWatcher.Serializer serializer2 = WrappedDataWatcher.Registry.get(Byte.class); //设置名称 if (dynamic) { - wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(2, WrappedDataWatcher.Registry.getChatComponentSerializer(true)), Optional.of(WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(text))).getHandle())); + wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(2, WrappedDataWatcher.Registry.getChatComponentSerializer(true)), Optional.of(WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(AdventureUtil.replaceLegacy(text)))).getHandle())); } else { wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(2, WrappedDataWatcher.Registry.getChatComponentSerializer(true)), Optional.of(wrappedChatComponent)); diff --git a/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplatesTeam.java b/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplatesTeam.java index c426b05..1a9d926 100644 --- a/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplatesTeam.java +++ b/src/main/java/net/momirealms/customnameplates/objects/nameplates/NameplatesTeam.java @@ -23,6 +23,7 @@ import net.momirealms.customnameplates.CustomNameplates; import net.momirealms.customnameplates.manager.ConfigManager; import net.momirealms.customnameplates.manager.NameplateManager; import net.momirealms.customnameplates.manager.TeamManager; +import net.momirealms.customnameplates.utils.AdventureUtil; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -66,8 +67,8 @@ public class NameplatesTeam { String nameplate = CustomNameplates.plugin.getDataManager().getPlayerData(this.player).getEquippedNameplate(); if (nameplate.equals("none")) { - this.prefix = MiniMessage.miniMessage().deserialize(CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_prefix)); - this.suffix = MiniMessage.miniMessage().deserialize(CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_suffix)); + this.prefix = MiniMessage.miniMessage().deserialize(AdventureUtil.replaceLegacy(CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_prefix))); + this.suffix = MiniMessage.miniMessage().deserialize(AdventureUtil.replaceLegacy(CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_suffix))); this.prefixText = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_prefix); this.suffixText = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_suffix); @@ -91,9 +92,9 @@ public class NameplatesTeam { String playerPrefix; String playerSuffix; - if (!NameplateManager.hidePrefix) playerPrefix = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_prefix); + if (!NameplateManager.hidePrefix) playerPrefix = AdventureUtil.replaceLegacy(CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_prefix)); else playerPrefix = ""; - if (!NameplateManager.hideSuffix) playerSuffix = CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_suffix); + if (!NameplateManager.hideSuffix) playerSuffix = AdventureUtil.replaceLegacy(CustomNameplates.plugin.getPlaceholderManager().parsePlaceholders(this.player, NameplateManager.player_suffix)); else playerSuffix = ""; this.dynamic = playerPrefix + playerSuffix; diff --git a/src/main/java/net/momirealms/customnameplates/utils/AdventureUtil.java b/src/main/java/net/momirealms/customnameplates/utils/AdventureUtil.java index 5b733b0..4a719fb 100644 --- a/src/main/java/net/momirealms/customnameplates/utils/AdventureUtil.java +++ b/src/main/java/net/momirealms/customnameplates/utils/AdventureUtil.java @@ -35,20 +35,130 @@ public class AdventureUtil { public static void consoleMessage(String s) { Audience au = CustomNameplates.adventure.sender(Bukkit.getConsoleSender()); MiniMessage mm = MiniMessage.miniMessage(); - Component parsed = mm.deserialize(s); + Component parsed = mm.deserialize(replaceLegacy(s)); au.sendMessage(parsed); } public static void playerMessage(Player player, String s){ Audience au = CustomNameplates.adventure.player(player); MiniMessage mm = MiniMessage.miniMessage(); - Component parsed = mm.deserialize(s); + Component parsed = mm.deserialize(replaceLegacy(s)); au.sendMessage(parsed); } public static void playerActionbar(Player player, String s) { Audience au = CustomNameplates.adventure.player(player); MiniMessage mm = MiniMessage.miniMessage(); - au.sendActionBar(mm.deserialize(s)); + au.sendActionBar(mm.deserialize(replaceLegacy(s))); + } + + public static String replaceLegacy(String s) { + if (!(s.contains("&") || s.contains("§"))) return s; + StringBuilder stringBuilder = new StringBuilder(); + char[] chars = s.replaceAll("&","§").toCharArray(); + for (int i = 0; i < chars.length; i++) { + if (chars[i] == '§') { + if (i + 1 < chars.length) { + switch (chars[i+1]){ + case '0' -> { + i++; + stringBuilder.append(""); + } + case '1' -> { + i++; + stringBuilder.append(""); + } + case '2' -> { + i++; + stringBuilder.append(""); + } + case '3' -> { + i++; + stringBuilder.append(""); + } + case '4' -> { + i++; + stringBuilder.append(""); + } + case '5' -> { + i++; + stringBuilder.append(""); + } + case '6' -> { + i++; + stringBuilder.append(""); + } + case '7' -> { + i++; + stringBuilder.append(""); + } + case '8' -> { + i++; + stringBuilder.append(""); + } + case '9' -> { + i++; + stringBuilder.append(""); + } + case 'a' -> { + i++; + stringBuilder.append(""); + } + case 'b' -> { + i++; + stringBuilder.append(""); + } + case 'c' -> { + i++; + stringBuilder.append(""); + } + case 'd' -> { + i++; + stringBuilder.append(""); + } + case 'e' -> { + i++; + stringBuilder.append(""); + } + case 'f' -> { + i++; + stringBuilder.append(""); + } + case 'r' -> { + i++; + stringBuilder.append(""); + } + case 'l' -> { + i++; + stringBuilder.append(""); + } + case 'm' -> { + i++; + stringBuilder.append(""); + } + case 'o' -> { + i++; + stringBuilder.append(""); + } + case 'n' -> { + i++; + stringBuilder.append(""); + } + case 'x' -> { + stringBuilder.append("<#").append(chars[i+3]).append(chars[i+5]).append(chars[i+7]).append(chars[i+9]).append(chars[i+11]).append(chars[i+13]).append(">"); + i += 13; + } + case 'k' -> { + i++; + stringBuilder.append(""); + } + } + } + } + else { + stringBuilder.append(chars[i]); + } + } + return stringBuilder.toString(); } } diff --git a/src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java b/src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java index 44fb2d8..7f8de49 100644 --- a/src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java +++ b/src/main/java/net/momirealms/customnameplates/utils/TeamManagePacketUtil.java @@ -26,6 +26,7 @@ import net.momirealms.customnameplates.manager.TeamManager; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; +import org.bukkit.event.world.WorldLoadEvent; import java.lang.reflect.InvocationTargetException; import java.util.Collections; diff --git a/src/main/resources/nameplate.yml b/src/main/resources/nameplate.yml index 808ce58..2aa4cef 100644 --- a/src/main/resources/nameplate.yml +++ b/src/main/resources/nameplate.yml @@ -39,10 +39,7 @@ nameplate: # Placeholder based prefix and suffix system. When enabled, it is recommended # to use PlaceholderAPI to be able to use this feature to the fullest extent. # keep it empty if you don't want to enable this feature. - # You should make sure the papi doesn't contain "&" (legacy color code) - # Nameplates work on the custom font system where legacy color code is not supported! # Please use MiniMessage format: https://docs.adventure.kyori.net/minimessage/format.html - # keep in mind that %nameplates_prefix/suffix% would only return the nameplate unicode without prefix and suffix prefix: 'Hello! ' suffix: ' %player_health_rounded%♥'