From 837eac46b720250fa169c7697135ece95bbcbb82 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 7 Apr 2023 19:15:40 +0200 Subject: [PATCH] Minor improvements Makes /editsign convert formatting codes for non-placeholder text Makes /editsign able to clear a line on a sign --- .../placeholdersigns/PlaceholderSigns.java | 21 ++---------- .../command/EditSignCommand.java | 12 +++++-- .../listener/SignClickListener.java | 3 +- .../placeholdersigns/util/ColorHelper.java | 33 +++++++++++++++++++ src/main/resources/plugin.yml | 4 +-- 5 files changed, 49 insertions(+), 24 deletions(-) create mode 100644 src/main/java/net/knarcraft/placeholdersigns/util/ColorHelper.java diff --git a/src/main/java/net/knarcraft/placeholdersigns/PlaceholderSigns.java b/src/main/java/net/knarcraft/placeholdersigns/PlaceholderSigns.java index 5ad9f59..81aada3 100644 --- a/src/main/java/net/knarcraft/placeholdersigns/PlaceholderSigns.java +++ b/src/main/java/net/knarcraft/placeholdersigns/PlaceholderSigns.java @@ -8,7 +8,7 @@ import net.knarcraft.placeholdersigns.handler.PlaceholderSignHandler; import net.knarcraft.placeholdersigns.listener.SignBreakListener; import net.knarcraft.placeholdersigns.listener.SignClickListener; import net.knarcraft.placeholdersigns.listener.SignTextListener; -import net.md_5.bungee.api.ChatColor; +import net.knarcraft.placeholdersigns.util.ColorHelper; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Sign; @@ -22,8 +22,6 @@ import org.jetbrains.annotations.Nullable; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** * This plugin's main class @@ -146,7 +144,7 @@ public final class PlaceholderSigns extends JavaPlugin { } // Convert color codes - newText = translateAllColorCodes(newText); + newText = ColorHelper.translateAllColorCodes(newText); // Only change the line if the text has changed if (!newText.equals(oldText)) { @@ -162,20 +160,5 @@ public final class PlaceholderSigns extends JavaPlugin { } } - /** - * Translates all found color codes to formatting in a string - * - * @param message

The string to search for color codes

- * @return

The message with color codes translated

- */ - private static String translateAllColorCodes(String message) { - message = ChatColor.translateAlternateColorCodes('&', message); - Pattern pattern = Pattern.compile("&?(#[a-fA-F0-9]{6})"); - Matcher matcher = pattern.matcher(message); - while (matcher.find()) { - message = message.replace(matcher.group(), "" + ChatColor.of(matcher.group(1))); - } - return message; - } } diff --git a/src/main/java/net/knarcraft/placeholdersigns/command/EditSignCommand.java b/src/main/java/net/knarcraft/placeholdersigns/command/EditSignCommand.java index 405ae4d..127aaa0 100644 --- a/src/main/java/net/knarcraft/placeholdersigns/command/EditSignCommand.java +++ b/src/main/java/net/knarcraft/placeholdersigns/command/EditSignCommand.java @@ -29,7 +29,7 @@ public class EditSignCommand implements TabExecutor { @Override public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { - if (args.length < 2 || !(commandSender instanceof Player player)) { + if (args.length < 1 || !(commandSender instanceof Player player)) { return false; } @@ -44,8 +44,16 @@ public class EditSignCommand implements TabExecutor { return false; } + // Make sure no argument is treated as an empty string + String start; + if (args.length > 1) { + start = args[1]; + } else { + start = ""; + } + // Get all arguments as a space-separated string - StringBuilder builder = new StringBuilder(args[1]); + StringBuilder builder = new StringBuilder(start); for (int i = 2; i < args.length; i++) { builder.append(" ").append(args[i]); } diff --git a/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java b/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java index 262f4dd..33e757c 100644 --- a/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java +++ b/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java @@ -2,6 +2,7 @@ package net.knarcraft.placeholdersigns.listener; import net.knarcraft.placeholdersigns.PlaceholderSigns; import net.knarcraft.placeholdersigns.container.LineChangeRequest; +import net.knarcraft.placeholdersigns.util.ColorHelper; import org.bukkit.Bukkit; import org.bukkit.block.Sign; import org.bukkit.event.EventHandler; @@ -43,7 +44,7 @@ public class SignClickListener implements Listener { // Update the sign with the new text String[] finalLines = changeEvent.getLines(); for (int i = 0; i < finalLines.length; i++) { - sign.setLine(i, finalLines[i]); + sign.setLine(i, ColorHelper.translateAllColorCodes(finalLines[i])); } sign.update(); diff --git a/src/main/java/net/knarcraft/placeholdersigns/util/ColorHelper.java b/src/main/java/net/knarcraft/placeholdersigns/util/ColorHelper.java new file mode 100644 index 0000000..a68107e --- /dev/null +++ b/src/main/java/net/knarcraft/placeholdersigns/util/ColorHelper.java @@ -0,0 +1,33 @@ +package net.knarcraft.placeholdersigns.util; + +import net.md_5.bungee.api.ChatColor; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * A helper class for dealing with colors and formatting codes + */ +public final class ColorHelper { + + private ColorHelper() { + + } + + /** + * Translates all found color codes to formatting in a string + * + * @param message

The string to search for color codes

+ * @return

The message with color codes translated

+ */ + public static String translateAllColorCodes(String message) { + message = ChatColor.translateAlternateColorCodes('&', message); + Pattern pattern = Pattern.compile("&?(#[a-fA-F0-9]{6})"); + Matcher matcher = pattern.matcher(message); + while (matcher.find()) { + message = message.replace(matcher.group(), "" + ChatColor.of(matcher.group(1))); + } + return message; + } + +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e19e7d5..5d4c110 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -7,9 +7,9 @@ depend: commands: editSign: - usage: / [text] ... + usage: / [text] [text] ... permission: placeholdersigns.edit - description: Changes the line of a sign without a text limit + description: Changes the line of a sign, without a text limit, and with color conversion permissions: placeholdersigns.*: