diff --git a/pom.xml b/pom.xml
index 9791867..3347cf6 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 0000000..5e75674
--- /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 a0b693e..aa4fe53 100644
--- a/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java
+++ b/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java
@@ -203,7 +203,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
}
}
}
- 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 3b7ec26..7181338 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 @@ package mineverse.Aust1n46.chat.json;
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 class JsonAttribute {
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 1ab0032..12a0af6 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 java.util.List;
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 f9d4b6a..dfd2070 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.Matcher;
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.events.PacketContainer;
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 @@ public class Format {
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 1974c4a..a53e57a 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