Skip to content

Commit

Permalink
add a bit of error checking to FormattedTextHelper
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Oct 11, 2022
1 parent c0cf152 commit 300fae9
Showing 1 changed file with 21 additions and 11 deletions.
Expand Up @@ -403,6 +403,16 @@ public static BaseComponent[] parse(String str, ChatColor baseColor, boolean cle
if (str == null) {
return null;
}
try {
return parseInternal(str, baseColor, cleanBase);
}
catch (Throwable ex) {
Debug.echoError(ex);
}
return new BaseComponent[]{new TextComponent(str)};
}

public static BaseComponent[] parseInternal(String str, ChatColor baseColor, boolean cleanBase) {
str = CoreUtilities.clearNBSPs(str);
int firstChar = str.indexOf(ChatColor.COLOR_CHAR);
if (firstChar == -1) {
Expand All @@ -427,7 +437,7 @@ public static BaseComponent[] parse(String str, ChatColor baseColor, boolean cle
List<String> innardParts = CoreUtilities.split(translatable, ';');
component.setTranslate(unescape(innardParts.get(0)));
for (int i = 1; i < innardParts.size(); i++) {
for (BaseComponent subComponent : parse(unescape(innardParts.get(i)), baseColor, false)) {
for (BaseComponent subComponent : parseInternal(unescape(innardParts.get(i)), baseColor, false)) {
component.addWith(subComponent);
}
}
Expand Down Expand Up @@ -482,7 +492,7 @@ public static BaseComponent[] parse(String str, ChatColor baseColor, boolean cle
ScoreComponent component = new ScoreComponent(unescape(innardBase.get(1)), unescape(innardParts.get(0)), unescape(innardParts.get(1)));
lastText.addExtra(component);
}
else if (innardType.equals("keybind")) {
else if (innardType.equals("keybind") && Utilities.namespaceMatcher.isOnlyMatches(innardBase.get(1))) {
KeybindComponent component = new KeybindComponent();
component.setKeybind(unescape(innardBase.get(1)));
lastText.addExtra(component);
Expand All @@ -491,11 +501,11 @@ else if (innardType.equals("selector")) {
SelectorComponent component = new SelectorComponent(unescape(innardBase.get(1)));
lastText.addExtra(component);
}
else if (innardType.equals("translate")) {
else if (innardType.equals("translate") && Utilities.namespaceMatcher.isOnlyMatches(innardBase.get(1))) {
TranslatableComponent component = new TranslatableComponent();
component.setTranslate(unescape(innardBase.get(1)));
for (String extra : innardParts) {
for (BaseComponent subComponent : parse(unescape(extra), baseColor, false)) {
for (BaseComponent subComponent : parseInternal(unescape(extra), baseColor, false)) {
component.addWith(subComponent);
}
}
Expand All @@ -509,7 +519,7 @@ else if (innardType.equals("click") && innardParts.size() == 1) {
TextComponent clickableText = new TextComponent();
ClickEvent.Action action = ElementTag.asEnum(ClickEvent.Action.class, innardBase.get(1));
clickableText.setClickEvent(new ClickEvent(action == null ? ClickEvent.Action.SUGGEST_COMMAND : action, unescape(innardParts.get(0))));
for (BaseComponent subComponent : parse(str.substring(endBracket + 1, endIndex), baseColor, false)) {
for (BaseComponent subComponent : parseInternal(str.substring(endBracket + 1, endIndex), baseColor, false)) {
clickableText.addExtra(subComponent);
}
lastText.addExtra(clickableText);
Expand All @@ -525,7 +535,7 @@ else if (innardType.equals("hover")) {
if (HoverFormatHelper.processHoverInput(action == null ? HoverEvent.Action.SHOW_TEXT : action, hoverableText, innardParts.get(0))) {
continue;
}
for (BaseComponent subComponent : parse(str.substring(endBracket + 1, endIndex), baseColor, false)) {
for (BaseComponent subComponent : parseInternal(str.substring(endBracket + 1, endIndex), baseColor, false)) {
hoverableText.addExtra(subComponent);
}
lastText.addExtra(hoverableText);
Expand All @@ -542,7 +552,7 @@ else if (innardType.equals("insertion")) {
}
TextComponent insertableText = new TextComponent();
insertableText.setInsertion(unescape(innardBase.get(1)));
for (BaseComponent subComponent : parse(str.substring(endBracket + 1, endIndex), baseColor, false)) {
for (BaseComponent subComponent : parseInternal(str.substring(endBracket + 1, endIndex), baseColor, false)) {
insertableText.addExtra(subComponent);
}
lastText.addExtra(insertableText);
Expand Down Expand Up @@ -594,7 +604,7 @@ else if (CoreConfiguration.debugVerbose) {
else {
TextComponent colorText = new TextComponent();
colorText.setColor(color);
for (BaseComponent subComponent : parse(str.substring(endBracket + 1, endIndex), color, false)) {
for (BaseComponent subComponent : parseInternal(str.substring(endBracket + 1, endIndex), color, false)) {
colorText.addExtra(subComponent);
}
lastText.addExtra(colorText);
Expand All @@ -618,21 +628,21 @@ else if (innardType.equals("gradient") && innardParts.size() == 2) {
endIndex = str.length();
}
String gradientText = BukkitElementExtensions.doGradient(str.substring(endBracket + 1, endIndex), fromColor, toColor, styleEnum);
for (BaseComponent subComponent : parse(gradientText, baseColor, false)) {
for (BaseComponent subComponent : parseInternal(gradientText, baseColor, false)) {
lastText.addExtra(subComponent);
}
endBracket = endIndex - 1;
}
}
else if (innardType.equals("font")) {
else if (innardType.equals("font") && Utilities.namespaceMatcher.isOnlyMatches(innardBase.get(1))) {
int endIndex = findEndIndexFor(str, "[font=", "[reset=font]", endBracket);
if (endIndex == -1) {
nextText.setFont(innardBase.get(1));
}
else {
TextComponent fontText = new TextComponent();
fontText.setFont(innardBase.get(1));
for (BaseComponent subComponent : parse(str.substring(endBracket + 1, endIndex), baseColor, false)) {
for (BaseComponent subComponent : parseInternal(str.substring(endBracket + 1, endIndex), baseColor, false)) {
fontText.addExtra(subComponent);
}
lastText.addExtra(fontText);
Expand Down

0 comments on commit 300fae9

Please sign in to comment.