From eb429dfaed9572beebba201a351e3725c5cedc5c Mon Sep 17 00:00:00 2001 From: BlueFox Date: Tue, 21 May 2024 12:49:39 +0200 Subject: [PATCH] Removed all legacy color codes and replaced it with Components :); some code refactoring for better readability --- pom.xml | 2 +- .../chatbeautifier/ChatBeautifier.java | 15 ++- .../chatbeautifier/JoinQuitListener.java | 27 +++++- .../displaynamecolor/ChatColorCommand.java | 86 +++++++----------- target/ChatBeautifier-0.2.3.jar | Bin 0 -> 16154 bytes target/original-ChatBeautifier-0.2.3.jar | Bin 0 -> 16110 bytes 6 files changed, 68 insertions(+), 62 deletions(-) create mode 100644 target/ChatBeautifier-0.2.3.jar create mode 100644 target/original-ChatBeautifier-0.2.3.jar diff --git a/pom.xml b/pom.xml index b2e2bfd..920e9ab 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.privacynerd ChatBeautifier - 0.2.2 + 0.2.3 jar ChatBeautifier diff --git a/src/main/java/de/privacynerd/chatbeautifier/ChatBeautifier.java b/src/main/java/de/privacynerd/chatbeautifier/ChatBeautifier.java index ed92353..ed4c325 100644 --- a/src/main/java/de/privacynerd/chatbeautifier/ChatBeautifier.java +++ b/src/main/java/de/privacynerd/chatbeautifier/ChatBeautifier.java @@ -2,21 +2,28 @@ package de.privacynerd.chatbeautifier; import de.privacynerd.chatbeautifier.displaynamecolor.ChatColorCommand; import de.privacynerd.chatbeautifier.displaynamecolor.ChooseChatColorListener; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; public final class ChatBeautifier extends JavaPlugin { - public static String PREFIX = "§a[ChatBeautifier] §7§o"; + public static Component PREFIX = Component.text("[ChatBeautifier] ", NamedTextColor.DARK_AQUA); public static ChatBeautifier INSTANCE; public ChatBeautifier() { INSTANCE = this; } - public void log(String text) { - Bukkit.getConsoleSender().sendMessage(PREFIX + text); - } + + // some log functions + public void log(String message) { Bukkit.getConsoleSender().sendMessage(PREFIX.append(Component.text(message, NamedTextColor.GRAY))); } + public void log(@NotNull Component message) { Bukkit.getConsoleSender().sendMessage(PREFIX.append(message.color(NamedTextColor.GRAY))); } + public void tellPlayer(String message, @NotNull Player player) { player.sendMessage(PREFIX.append(Component.text(message, NamedTextColor.GRAY))); } + public void tellPlayer(@NotNull Component message, @NotNull Player player) { player.sendMessage(PREFIX.append(message.color(NamedTextColor.GRAY))); } @Override diff --git a/src/main/java/de/privacynerd/chatbeautifier/JoinQuitListener.java b/src/main/java/de/privacynerd/chatbeautifier/JoinQuitListener.java index 16a204c..3d434eb 100644 --- a/src/main/java/de/privacynerd/chatbeautifier/JoinQuitListener.java +++ b/src/main/java/de/privacynerd/chatbeautifier/JoinQuitListener.java @@ -2,6 +2,7 @@ package de.privacynerd.chatbeautifier; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -18,16 +19,28 @@ public class JoinQuitListener implements Listener { Component newName; if(player.isOp()) { - newName = Component.text("[OP] "+player.getName(), NamedTextColor.RED); + newName = Component.text("[OP] ") + .color(NamedTextColor.RED) + .decoration(TextDecoration.BOLD, true) + .append(Component.text(player.getName()) + .color(NamedTextColor.GRAY) + .decoration(TextDecoration.BOLD, false) + ); player.displayName(newName); player.playerListName(newName); } else { - newName = Component.text(player.getName(), NamedTextColor.GRAY); - player.displayName(Component.text(player.getName())); + newName = Component.text(player.getName()) + .color(NamedTextColor.GRAY) + .decoration(TextDecoration.BOLD, false); + player.displayName(newName); player.playerListName(newName); } - event.joinMessage(Component.text(">> ", NamedTextColor.GREEN).append(player.displayName())); + event.joinMessage(Component.text(">> ") + .color(NamedTextColor.GREEN) + .decoration(TextDecoration.BOLD, true) + .append(player.displayName() + )); player.playSound(player.getLocation(), Sound.AMBIENT_CRIMSON_FOREST_MOOD, 0.5f, 0.4f); } @@ -35,7 +48,11 @@ public class JoinQuitListener implements Listener { @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); + Component displayName = player.displayName(); - event.quitMessage(Component.text("<< ", NamedTextColor.RED).append(player.displayName())); + event.quitMessage(Component.text("<< ") + .color(NamedTextColor.RED) + .decoration(TextDecoration.BOLD, true) + .append(displayName)); } } diff --git a/src/main/java/de/privacynerd/chatbeautifier/displaynamecolor/ChatColorCommand.java b/src/main/java/de/privacynerd/chatbeautifier/displaynamecolor/ChatColorCommand.java index a7b7c22..dda96d6 100644 --- a/src/main/java/de/privacynerd/chatbeautifier/displaynamecolor/ChatColorCommand.java +++ b/src/main/java/de/privacynerd/chatbeautifier/displaynamecolor/ChatColorCommand.java @@ -3,6 +3,7 @@ package de.privacynerd.chatbeautifier.displaynamecolor; import de.privacynerd.chatbeautifier.ChatBeautifier; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -23,113 +24,88 @@ public class ChatColorCommand implements CommandExecutor { Player player = (Player) commandSender; String validArgument = ""; Component newDisplayName; + int colorCodesListIndex; // stores the index of the color code which was requested (0 for black color code, ...) // check for the right args if(args.length == 1) { switch (args[0]) { case "black": validArgument = "black"; - newDisplayName = Component.text("", ChatColorUtils.getChooseColorCodes().get(1)).append(player.displayName()); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 0; break; case "gray": validArgument = "gray"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(1)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 1; break; case "light-gray": validArgument = "light-gray"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(2)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 2; break; case "white": validArgument = "white"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(3)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 3; break; case "brown": validArgument = "brown"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(4)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 4; break; case "red": validArgument = "red"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(5)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 5; break; case "orange": validArgument = "orange"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(6)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 6; break; case "yellow": validArgument = "yellow"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(7)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 7; break; case "light-green": validArgument = "light-green"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(8)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 8; break; case "dark-green": validArgument = "dark-green"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(9)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 9; break; case "cyan": validArgument = "cyan"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(10)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 10; break; case "blue": validArgument = "blue"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(11)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 11; break; case "purple": validArgument = "purple"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(12)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 12; break; case "magenta": validArgument = "magenta"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(13)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 13; break; case "pink": validArgument = "pink"; - newDisplayName = player.displayName().color(ChatColorUtils.getChooseColorCodes().get(14)); - player.displayName(newDisplayName); - player.playerListName(newDisplayName); + colorCodesListIndex = 14; break; case "list": ChatBeautifier.INSTANCE.log("Got valid argument 'list', printing list of valid colors..."); ArrayList colorNames = ChatColorUtils.getChooseColorStrings(); // now compose the message containing all possible color args - StringBuilder message = new StringBuilder(ChatBeautifier.PREFIX + "§r§lMögliche Farben: §r§o"); - message.append(colorNames.get(0).toLowerCase().replace(" ", "-")).append(", "); + Component message = Component.text("Mögliche Farben: ").decoration(TextDecoration.BOLD, true); + + String newMessageItem = colorNames.get(0).toLowerCase().replace(" ", "-") + ", "; + message = message.append(Component.text(newMessageItem, NamedTextColor.GRAY).decoration(TextDecoration.BOLD, true)); + for (int i=1; i, list, gui]"); + ChatBeautifier.INSTANCE.tellPlayer("Verwendung: /" + alias + " [, list, gui]", player); return true; } + + newDisplayName = player.displayName() + .color(ChatColorUtils.getChooseColorCodes().get(colorCodesListIndex)); + player.displayName(newDisplayName); + player.playerListName(newDisplayName); + ChatBeautifier.INSTANCE.log("Got valid color " + validArgument); - player.sendMessage(ChatBeautifier.PREFIX + "Name temporär " + validArgument + " gefärbt. Dieses Feature ist aktuell noch in der Mache, dauerhaft coming soon."); + ChatBeautifier.INSTANCE.tellPlayer("Name temporär " + validArgument + " gefärbt. Dieses Feature ist aktuell noch in der Mache, dauerhaft coming soon.", player); return true; } else if (args.length > 1) { // print a help string if more than one argument is given - player.sendMessage(ChatBeautifier.PREFIX + "Verwendung: /" + alias + " [, list, gui]"); + ChatBeautifier.INSTANCE.tellPlayer("Verwendung: /" + alias + " [, list, gui]", player); return true; } else { player.openInventory(new ChooseChatColorGUI().getGUI(player)); diff --git a/target/ChatBeautifier-0.2.3.jar b/target/ChatBeautifier-0.2.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..887a1d0ab927278bdea1d19dc82ced3c882e963f GIT binary patch literal 16154 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 EA94>6;Q#;t literal 0 HcmV?d00001