diff --git a/resource/config.yml b/resource/config.yml index 2ab4807..ec090d4 100644 --- a/resource/config.yml +++ b/resource/config.yml @@ -34,6 +34,9 @@ config: error: '&cError found in config.' offline: 'Offline' offlineHeadValue: 'eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmU1Mjg2YzQ3MGY2NmZmYTFhMTgzMzFjYmZmYjlhM2MyYTQ0MjRhOGM3MjU5YzQ0MzZmZDJlMzU1ODJhNTIyIn19fQ==' +hexcodes: + start_tag: '#' + end_tag: '' updater: auto-update: true minor-updates-only: true diff --git a/resource/plugin.yml b/resource/plugin.yml index cce8741..9185e39 100644 --- a/resource/plugin.yml +++ b/resource/plugin.yml @@ -1,4 +1,4 @@ -version: 3.15.5.6 +version: 3.15.6.0 main: me.rockyhawk.commandpanels.CommandPanels name: CommandPanels author: RockyHawk diff --git a/src/me/rockyhawk/commandpanels/CommandPanels.java b/src/me/rockyhawk/commandpanels/CommandPanels.java index 60f6002..f33c852 100644 --- a/src/me/rockyhawk/commandpanels/CommandPanels.java +++ b/src/me/rockyhawk/commandpanels/CommandPanels.java @@ -9,6 +9,7 @@ import me.rockyhawk.commandpanels.classresources.ItemCreation; import me.rockyhawk.commandpanels.classresources.OpenEditorGuis; import me.rockyhawk.commandpanels.classresources.item_fall.ItemFallManager; import me.rockyhawk.commandpanels.classresources.placeholders.CreateText; +import me.rockyhawk.commandpanels.classresources.placeholders.HexColours; import me.rockyhawk.commandpanels.classresources.placeholders.Placeholders; import me.rockyhawk.commandpanels.commands.*; import me.rockyhawk.commandpanels.commandtags.CommandTags; @@ -62,8 +63,6 @@ import java.io.InputStream; import java.io.Reader; import java.util.*; import java.util.concurrent.Callable; -import java.util.regex.Matcher; -import java.util.regex.Pattern; public class CommandPanels extends JavaPlugin{ public YamlConfiguration config; @@ -84,6 +83,7 @@ public class CommandPanels extends JavaPlugin{ public Placeholders placeholders = new Placeholders(this); public DebugManager debug = new DebugManager(this); public CreateText tex = new CreateText(this); + public HexColours hex = new HexColours(this); public OpenEditorGuis editorGuis = new OpenEditorGuis(this); public ExecuteOpenVoids openVoids = new ExecuteOpenVoids(this); @@ -463,22 +463,6 @@ public class CommandPanels extends JavaPlugin{ return r.nextInt((max - min) + 1) + min; } - //used to translate hex colours into ChatColors - public String translateHexColorCodes(String message) { - final Pattern hexPattern = Pattern.compile("#" + "([A-Fa-f0-9]{6})"); - Matcher matcher = hexPattern.matcher(message); - StringBuffer buffer = new StringBuffer(message.length() + 4 * 8); - while (matcher.find()) { - String group = matcher.group(1); - matcher.appendReplacement(buffer, ChatColor.COLOR_CHAR + "x" - + ChatColor.COLOR_CHAR + group.charAt(0) + ChatColor.COLOR_CHAR + group.charAt(1) - + ChatColor.COLOR_CHAR + group.charAt(2) + ChatColor.COLOR_CHAR + group.charAt(3) - + ChatColor.COLOR_CHAR + group.charAt(4) + ChatColor.COLOR_CHAR + group.charAt(5) - ); - } - return matcher.appendTail(buffer).toString(); - } - //returns true if the item is the MMO Item public boolean isMMOItem(ItemStack itm, String type, String id){ try { diff --git a/src/me/rockyhawk/commandpanels/classresources/placeholders/CreateText.java b/src/me/rockyhawk/commandpanels/classresources/placeholders/CreateText.java index da4a5b6..3bade37 100644 --- a/src/me/rockyhawk/commandpanels/classresources/placeholders/CreateText.java +++ b/src/me/rockyhawk/commandpanels/classresources/placeholders/CreateText.java @@ -70,7 +70,7 @@ public class CreateText { //change colour for(String temp : setpapi){ try { - setpapi.set(tempInt, plugin.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', temp))); + setpapi.set(tempInt, plugin.hex.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', temp))); }catch(NullPointerException ignore){ } tempInt += 1; @@ -81,7 +81,7 @@ public class CreateText { //regular string papi, but only colours so Player doesn't need to be there public String papi(String setpapi) { try { - setpapi = plugin.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', setpapi)); + setpapi = plugin.hex.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', setpapi)); return setpapi; }catch(NullPointerException e){ return setpapi; @@ -110,7 +110,7 @@ public class CreateText { OfflinePlayer offp = plugin.getServer().getOfflinePlayer(p.getUniqueId()); setpapi = PlaceholderAPI.setPlaceholders(offp, setpapi); } - setpapi = plugin.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', setpapi)); + setpapi = plugin.hex.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', setpapi)); return setpapi; }catch(NullPointerException e){ return setpapi; diff --git a/src/me/rockyhawk/commandpanels/classresources/placeholders/HexColours.java b/src/me/rockyhawk/commandpanels/classresources/placeholders/HexColours.java new file mode 100644 index 0000000..d27f207 --- /dev/null +++ b/src/me/rockyhawk/commandpanels/classresources/placeholders/HexColours.java @@ -0,0 +1,51 @@ +package me.rockyhawk.commandpanels.classresources.placeholders; + +import me.rockyhawk.commandpanels.CommandPanels; +import org.bukkit.ChatColor; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class HexColours { + CommandPanels plugin; + public HexColours(CommandPanels pl) { + this.plugin = pl; + } + + public String translateHexColorCodes(String message) { + //add all the different HEX combinations, in order to ensure they do not cancel each other out + message = doTranslation(message,formatRegex("hexcodes.start_tag"),formatRegex("hexcodes.end_tag")); + return message; + } + + //used to translate hex colours into ChatColors + private String doTranslation(String message, String startTag, String endTag) { + //final Pattern hexPattern = Pattern.compile("#" + "([A-Fa-f0-9]{6})"); + final Pattern hexPattern = Pattern.compile(startTag + "([A-Fa-f0-9]{6})" + endTag); + Matcher matcher = hexPattern.matcher(message); + StringBuffer buffer = new StringBuffer(message.length() + 4 * 8); + while (matcher.find()) { + String group = matcher.group(1); + matcher.appendReplacement(buffer, ChatColor.COLOR_CHAR + "x" + + ChatColor.COLOR_CHAR + group.charAt(0) + ChatColor.COLOR_CHAR + group.charAt(1) + + ChatColor.COLOR_CHAR + group.charAt(2) + ChatColor.COLOR_CHAR + group.charAt(3) + + ChatColor.COLOR_CHAR + group.charAt(4) + ChatColor.COLOR_CHAR + group.charAt(5) + ); + } + return matcher.appendTail(buffer).toString(); + } + + //automatically format regex to escape special characters + public String formatRegex(String path){ + String inputString = plugin.config.getString(path); + final String[] metaCharacters = {"\\","^","$","{","}","[","]","(",")",".","*","+","?","|","<",">","-","&","%"}; + + for (String metaCharacter : metaCharacters) { + assert inputString != null; + if (inputString.contains(metaCharacter)) { + inputString = inputString.replace(metaCharacter, "\\" + metaCharacter); + } + } + return inputString; + } +}