diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/PaperModule.java b/paper/src/main/java/com/denizenscript/denizen/paper/PaperModule.java index 0104fbeeb0..77e97a0cd2 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/PaperModule.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/PaperModule.java @@ -132,7 +132,13 @@ public static Component parseFormattedText(String text, ChatColor baseColor) { if (text == null) { return null; } - return jsonToComponent(FormattedTextHelper.componentToJson(FormattedTextHelper.parse(text, baseColor))); + try { + return jsonToComponent(FormattedTextHelper.componentToJson(FormattedTextHelper.parse(text, baseColor))); + } + catch (Exception ex) { + Debug.verboseLog("Failed to parse formatted text: " + text.replace(ChatColor.COLOR_CHAR, '&')); + throw ex; + } } public static String stringifyComponent(Component component) { @@ -146,7 +152,13 @@ public static Component jsonToComponent(String json) { if (json == null) { return null; } - return GsonComponentSerializer.gson().deserialize(json); + try { + return GsonComponentSerializer.gson().deserialize(json); + } + catch (Exception ex) { + Debug.verboseLog("Failed to parse json to component: " + json); + throw ex; + } } public static String componentToJson(Component component) { diff --git a/plugin/src/main/java/com/denizenscript/denizen/utilities/FormattedTextHelper.java b/plugin/src/main/java/com/denizenscript/denizen/utilities/FormattedTextHelper.java index 6bf8cddc26..7b0f7482c6 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/utilities/FormattedTextHelper.java +++ b/plugin/src/main/java/com/denizenscript/denizen/utilities/FormattedTextHelper.java @@ -446,11 +446,10 @@ public static BaseComponent[] parse(String str, ChatColor baseColor, boolean cle return new BaseComponent[]{new TextComponent(str)}; } - private static TranslatableComponent parseTranslatable(String str, ChatColor baseColor, boolean optimize) { - TranslatableComponent component = new TranslatableComponent(); + private static BaseComponent parseTranslatable(String str, ChatColor baseColor, boolean optimize) { if (!str.startsWith("map@")) { List innardParts = CoreUtilities.split(str, ';'); - component.setTranslate(unescape(innardParts.get(0))); + TranslatableComponent component = new TranslatableComponent(unescape(innardParts.get(0))); for (int i = 1; i < innardParts.size(); i++) { for (BaseComponent subComponent : parseInternal(unescape(innardParts.get(i)), baseColor, false, optimize)) { component.addWith(subComponent); @@ -460,13 +459,13 @@ private static TranslatableComponent parseTranslatable(String str, ChatColor bas } MapTag map = MapTag.valueOf(unescape(str), CoreUtilities.noDebugContext); if (map == null) { - return component; + return new TextComponent(str); } ElementTag translationKey = map.getElement("key"); if (translationKey == null) { - return component; + return new TextComponent(str); } - component.setTranslate(translationKey.asString()); + TranslatableComponent component = new TranslatableComponent(translationKey.asString()); ElementTag fallback = map.getElement("fallback"); if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_20) && fallback != null) { component.setFallback(fallback.asString()); @@ -506,7 +505,7 @@ public static BaseComponent[] parseInternal(String str, ChatColor baseColor, boo } if (str.length() > 3 && str.startsWith((ChatColor.COLOR_CHAR + "")) && hexMatcher.isMatch(str.charAt(1)) && str.startsWith(ChatColor.COLOR_CHAR + "[translate=", 2) && str.indexOf(']') == str.length() - 1) { // eg "&6&[translate=block.minecraft.ominous_banner]" - TranslatableComponent component = parseTranslatable(str.substring("&[translate=".length() + 2, str.length() - 1), baseColor, optimize); + BaseComponent component = parseTranslatable(str.substring("&[translate=".length() + 2, str.length() - 1), baseColor, optimize); component.setColor(ChatColor.getByChar(str.charAt(1))); return new BaseComponent[] {component}; }