diff --git a/pom.xml b/pom.xml index 97918678..3347cf6f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 mineverse.Aust1n46.chat VentureChat - 3.4.3 + 3.4.4 https://bitbucket.org/Aust1n46/venturechat/src/master https://bitbucket.org/Aust1n46/venturechat/src/master diff --git a/src/main/java/mineverse/Aust1n46/chat/ClickAction.java b/src/main/java/mineverse/Aust1n46/chat/ClickAction.java new file mode 100644 index 00000000..5e75674c --- /dev/null +++ b/src/main/java/mineverse/Aust1n46/chat/ClickAction.java @@ -0,0 +1,16 @@ +package mineverse.Aust1n46.chat; + +public enum ClickAction { + SUGGEST_COMMAND, RUN_COMMAND, OPEN_URL, NONE; + + private final String jsonValue; + + ClickAction() { + jsonValue = name().toLowerCase(); + } + + @Override + public String toString() { + return jsonValue; + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java b/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java index a0b693e4..aa4fe535 100644 --- a/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java @@ -203,7 +203,7 @@ public void run() { } } } - if (getConfig().getString("loglevel", "info").equals("debug")) { + if (getConfig().getString("loglevel", "info").equals("trace")) { Bukkit.getConsoleSender() .sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Updating Player Mutes")); } diff --git a/src/main/java/mineverse/Aust1n46/chat/json/JsonAttribute.java b/src/main/java/mineverse/Aust1n46/chat/json/JsonAttribute.java index 3b7ec264..7181338e 100644 --- a/src/main/java/mineverse/Aust1n46/chat/json/JsonAttribute.java +++ b/src/main/java/mineverse/Aust1n46/chat/json/JsonAttribute.java @@ -2,13 +2,15 @@ import java.util.List; +import mineverse.Aust1n46.chat.ClickAction; + public class JsonAttribute { private String name; private List hoverText; - private String clickAction; + private ClickAction clickAction; private String clickText; - public JsonAttribute(String name, List hoverText, String clickAction, String clickText) { + public JsonAttribute(String name, List hoverText, ClickAction clickAction, String clickText) { this.name = name; this.hoverText = hoverText; this.clickAction = clickAction; @@ -23,7 +25,7 @@ public List getHoverText() { return hoverText; } - public String getClickAction() { + public ClickAction getClickAction() { return clickAction; } diff --git a/src/main/java/mineverse/Aust1n46/chat/json/JsonFormat.java b/src/main/java/mineverse/Aust1n46/chat/json/JsonFormat.java index 1ab0032e..12a0af6e 100644 --- a/src/main/java/mineverse/Aust1n46/chat/json/JsonFormat.java +++ b/src/main/java/mineverse/Aust1n46/chat/json/JsonFormat.java @@ -7,58 +7,66 @@ import org.bukkit.configuration.ConfigurationSection; +import mineverse.Aust1n46.chat.ClickAction; import mineverse.Aust1n46.chat.MineverseChat; +import mineverse.Aust1n46.chat.utilities.Format; public class JsonFormat { - private static MineverseChat plugin = MineverseChat.getInstance(); - private static HashMap jsonFormats; + private static MineverseChat plugin = MineverseChat.getInstance(); + private static HashMap jsonFormats; - private List jsonAttributes; - private int priority; - private String name; + private List jsonAttributes; + private int priority; + private String name; - public JsonFormat(String name, int priority, List jsonAttributes) { - this.name = name; - this.priority = priority; - this.jsonAttributes = jsonAttributes; - } + public JsonFormat(String name, int priority, List jsonAttributes) { + this.name = name; + this.priority = priority; + this.jsonAttributes = jsonAttributes; + } - public static void initialize() { - jsonFormats = new HashMap(); - ConfigurationSection jsonFormatSection = plugin.getConfig().getConfigurationSection("jsonformatting"); - for (String jsonFormat : jsonFormatSection.getKeys(false)) { - int priority = jsonFormatSection.getInt(jsonFormat + ".priority", 0); - List jsonAttributes = new ArrayList<>(); - ConfigurationSection jsonAttributeSection = jsonFormatSection.getConfigurationSection(jsonFormat + ".json_attributes"); - if (jsonAttributeSection != null) { - for (String attribute : jsonAttributeSection.getKeys(false)) { - List hoverText = jsonAttributeSection.getStringList(attribute + ".hover_text"); - String clickAction = jsonAttributeSection.getString(attribute + ".click_action", ""); - String clickText = jsonAttributeSection.getString(attribute + ".click_text", ""); - jsonAttributes.add(new JsonAttribute(attribute, hoverText, clickAction, clickText)); - } - } - jsonFormats.put(jsonFormat.toLowerCase(), new JsonFormat(jsonFormat, priority, jsonAttributes)); - } - } + public static void initialize() { + jsonFormats = new HashMap(); + ConfigurationSection jsonFormatSection = plugin.getConfig().getConfigurationSection("jsonformatting"); + for (String jsonFormat : jsonFormatSection.getKeys(false)) { + int priority = jsonFormatSection.getInt(jsonFormat + ".priority", 0); + List jsonAttributes = new ArrayList<>(); + ConfigurationSection jsonAttributeSection = jsonFormatSection.getConfigurationSection(jsonFormat + ".json_attributes"); + if (jsonAttributeSection != null) { + for (String attribute : jsonAttributeSection.getKeys(false)) { + List hoverText = jsonAttributeSection.getStringList(attribute + ".hover_text"); + String clickActionText = jsonAttributeSection.getString(attribute + ".click_action", "none"); + try { + ClickAction clickAction = ClickAction.valueOf(clickActionText.toUpperCase()); + String clickText = jsonAttributeSection.getString(attribute + ".click_text", ""); + jsonAttributes.add(new JsonAttribute(attribute, hoverText, clickAction, clickText)); + } catch (IllegalArgumentException | NullPointerException exception) { + plugin.getServer().getConsoleSender() + .sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Illegal click_action: " + clickActionText + " in jsonFormat: " + jsonFormat)); + } + } + } + jsonFormats.put(jsonFormat.toLowerCase(), new JsonFormat(jsonFormat, priority, jsonAttributes)); + } + } - public static Collection getJsonFormats() { - return jsonFormats.values(); - } + public static Collection getJsonFormats() { + return jsonFormats.values(); + } - public static JsonFormat getJsonFormat(String name) { - return jsonFormats.get(name.toLowerCase()); - } + public static JsonFormat getJsonFormat(String name) { + return jsonFormats.get(name.toLowerCase()); + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public int getPriority() { - return priority; - } - - public List getJsonAttributes() { - return jsonAttributes; - } + public int getPriority() { + return priority; + } + + public List getJsonAttributes() { + return jsonAttributes; + } } diff --git a/src/main/java/mineverse/Aust1n46/chat/utilities/Format.java b/src/main/java/mineverse/Aust1n46/chat/utilities/Format.java index f9d4b6a8..dfd20701 100644 --- a/src/main/java/mineverse/Aust1n46/chat/utilities/Format.java +++ b/src/main/java/mineverse/Aust1n46/chat/utilities/Format.java @@ -10,6 +10,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; +import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Sound; @@ -22,6 +23,7 @@ import com.comphenix.protocol.wrappers.WrappedChatComponent; import me.clip.placeholderapi.PlaceholderAPI; +import mineverse.Aust1n46.chat.ClickAction; import mineverse.Aust1n46.chat.api.MineverseChatAPI; import mineverse.Aust1n46.chat.api.MineverseChatPlayer; import mineverse.Aust1n46.chat.json.JsonAttribute; @@ -112,28 +114,45 @@ private static String convertPlaceholders(String s, JsonFormat format, Mineverse formattedPlaceholder = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), placeholder)); temp += convertToJsonColors(lastCode + remaining.substring(0, indexStart)) + ","; lastCode = getLastCode(lastCode + remaining.substring(0, indexStart)); - String action = ""; - String text = ""; - String hover = ""; + boolean placeholderHasJsonAttribute = false; for (JsonAttribute jsonAttribute : format.getJsonAttributes()) { if (placeholder.contains(jsonAttribute.getName().replace("{", "").replace("}", ""))) { - action = jsonAttribute.getClickAction(); - text = Format.FormatStringAll( - PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), jsonAttribute.getClickText())); + final StringBuilder hover = new StringBuilder(); for (String st : jsonAttribute.getHoverText()) { - hover += Format.FormatStringAll(st) + "\n"; + hover.append(Format.FormatStringAll(st) + "\n"); } + final String hoverText; + if(!hover.isEmpty()) { + hoverText = Format.FormatStringAll( + PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), hover.substring(0, hover.length() - 1))); + } else { + hoverText = StringUtils.EMPTY; + } + final ClickAction clickAction = jsonAttribute.getClickAction(); + final String actionJson; + if (clickAction == ClickAction.NONE) { + actionJson = StringUtils.EMPTY; + } else { + final String clickText = Format.FormatStringAll( + PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), jsonAttribute.getClickText())); + actionJson = ",\"clickEvent\":{\"action\":\"" + jsonAttribute.getClickAction().toString() + "\",\"value\":\"" + clickText + + "\"}"; + } + final String hoverJson; + if (hoverText.isEmpty()) { + hoverJson = StringUtils.EMPTY; + } else { + hoverJson = ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + + convertToJsonColors(hoverText) + "]}}"; + } + temp += convertToJsonColors(lastCode + formattedPlaceholder, actionJson + hoverJson) + ","; + placeholderHasJsonAttribute = true; + break; } } - if(!hover.isEmpty()) { - hover = Format.FormatStringAll( - PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), hover.substring(0, hover.length() - 1))); + if (!placeholderHasJsonAttribute) { + temp += convertToJsonColors(lastCode + formattedPlaceholder) + ","; } - temp += convertToJsonColors(lastCode + formattedPlaceholder, - ",\"clickEvent\":{\"action\":\"" + action + "\",\"value\":\"" + text - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" - + convertToJsonColors(hover) + "]}}") - + ","; lastCode = getLastCode(lastCode + formattedPlaceholder); remaining = remaining.substring(indexEnd); } else { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 1974c4a7..a53e57ac 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -136,7 +136,7 @@ messageremovertext: '&c&o' # The name of the group is the permissions node for the format # Example: venturechat.json.Owner is the node for the group Owner # A lower priority overrides a higher priority if a player has more than 1 group -# Possible options for click_name and click_prefix are suggest_command, run_command, and open_url +# Possible options for click_action are suggest_command, run_command, open_url, and none jsonformatting: Default: # This default format is required! Do not delete or rename it! priority: 2147483647 # Integer.MAX_VALUE