From 1be3c47d9c32262aef733b2fac3a6a788487fd3a Mon Sep 17 00:00:00 2001 From: AlexDev_ Date: Mon, 16 Oct 2023 15:55:17 +0200 Subject: [PATCH] first test --- .../velocitab/config/Formatter.java | 24 ++++++++++++++++++- .../velocitab/hook/MiniPlaceholdersHook.java | 3 ++- .../velocitab/packet/UpdateTeamsPacket.java | 8 +++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/william278/velocitab/config/Formatter.java b/src/main/java/net/william278/velocitab/config/Formatter.java index 54d3a00..0252a14 100644 --- a/src/main/java/net/william278/velocitab/config/Formatter.java +++ b/src/main/java/net/william278/velocitab/config/Formatter.java @@ -43,7 +43,7 @@ public enum Formatter { MINIMESSAGE( (text, player, plugin) -> plugin.getMiniPlaceholdersHook() .map(hook -> hook.format(text, player.getPlayer())) - .orElse(MiniMessage.miniMessage().deserialize(text)), + .orElse(MiniMessage.miniMessage().deserialize(parseSections(text))), (text) -> MiniMessage.miniMessage().escapeTags(text), "MiniMessage" ), @@ -94,4 +94,26 @@ public enum Formatter { return name; } + private static String replaceAmpersandCodesWithSection(String text) { + char[] b = text.toCharArray(); + for (int i = 0; i < b.length - 1; i++) { + if (b[i] == '&' && "0123456789AaBbCcDdEeFfKkLlMmNnOoRrXx#".indexOf(b[i + 1]) > -1) { + b[i] = 'ยง'; + b[i + 1] = Character.toLowerCase(b[i + 1]); + } + } + return new String(b); + } + + public static String parseSections(String text) { + String value = MiniMessage.miniMessage().serialize( + LegacyComponentSerializer.legacySection().deserialize( + replaceAmpersandCodesWithSection(text))) + .replace("\\<", "<"); + return MiniMessage.miniMessage().serialize( + LegacyComponentSerializer.legacySection().deserialize( + replaceAmpersandCodesWithSection(text))) + .replace("\\<", "<"); + } + } diff --git a/src/main/java/net/william278/velocitab/hook/MiniPlaceholdersHook.java b/src/main/java/net/william278/velocitab/hook/MiniPlaceholdersHook.java index 66106ce..33e1234 100644 --- a/src/main/java/net/william278/velocitab/hook/MiniPlaceholdersHook.java +++ b/src/main/java/net/william278/velocitab/hook/MiniPlaceholdersHook.java @@ -24,6 +24,7 @@ import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.william278.velocitab.Velocitab; +import net.william278.velocitab.config.Formatter; import org.jetbrains.annotations.NotNull; public class MiniPlaceholdersHook extends Hook { @@ -34,7 +35,7 @@ public class MiniPlaceholdersHook extends Hook { @NotNull public Component format(@NotNull String text, @NotNull Audience player) { - return MiniMessage.miniMessage().deserialize(text, MiniPlaceholders.getAudienceGlobalPlaceholders(player)); + return MiniMessage.miniMessage().deserialize(Formatter.parseSections(text), MiniPlaceholders.getAudienceGlobalPlaceholders(player)); } } diff --git a/src/main/java/net/william278/velocitab/packet/UpdateTeamsPacket.java b/src/main/java/net/william278/velocitab/packet/UpdateTeamsPacket.java index 1097dda..fe42990 100644 --- a/src/main/java/net/william278/velocitab/packet/UpdateTeamsPacket.java +++ b/src/main/java/net/william278/velocitab/packet/UpdateTeamsPacket.java @@ -69,7 +69,7 @@ public class UpdateTeamsPacket implements MinecraftPacket { .mode(UpdateMode.CREATE_TEAM) .displayName(displayName) .friendlyFlags(List.of(FriendlyFlag.CAN_HURT_FRIENDLY)) - .nameTagVisibility(NameTagVisibility.ALWAYS) + .nameTagVisibility(isNametagPresent(prefix, suffix) ? NameTagVisibility.ALWAYS : NameTagVisibility.NEVER) .collisionRule(CollisionRule.ALWAYS) .color(getLastColor(prefix)) .prefix(prefix == null ? "" : prefix) @@ -77,6 +77,10 @@ public class UpdateTeamsPacket implements MinecraftPacket { .entities(Arrays.asList(teamMembers)); } + private static boolean isNametagPresent(@Nullable String prefix, @Nullable String suffix) { + return prefix != null && !prefix.isEmpty() || suffix != null && !suffix.isEmpty(); + } + @NotNull protected static UpdateTeamsPacket changeNameTag(@NotNull Velocitab plugin, @NotNull String teamName, @Nullable String prefix, @Nullable String suffix) { @@ -85,7 +89,7 @@ public class UpdateTeamsPacket implements MinecraftPacket { .mode(UpdateMode.UPDATE_INFO) .displayName(teamName) .friendlyFlags(List.of(FriendlyFlag.CAN_HURT_FRIENDLY)) - .nameTagVisibility(NameTagVisibility.ALWAYS) + .nameTagVisibility(isNametagPresent(prefix, suffix) ? NameTagVisibility.ALWAYS : NameTagVisibility.NEVER) .collisionRule(CollisionRule.ALWAYS) .color(getLastColor(prefix)) .prefix(prefix == null ? "" : prefix)