KyoriPowered / adventure

A user-interface library, formerly known as text, for Minecraft: Java Edition
https://docs.advntr.dev/
MIT License
702 stars 107 forks source link

MiniMessage: Fail silently on unsupported tags #1110

Closed kangarko closed 40 minutes ago

kangarko commented 2 hours ago

I have a command usage "<info/log>" which is a literal helping people use a command properly. I need to colorize this literal, such as "<info/log>".

I understand you can use backslash to prepend the command \< but it is unfeasible when using a locale file plus clutters the IDE excessively.

Is there or can there be an option for the tag resolver to silently ignore invalid tags and just move on?

Thanks.

kezz commented 2 hours ago

What do you mean by "fail silently"? MiniMessage doesn't do anything with invalid tags. Do you have a stack trace or error?

kangarko commented 43 minutes ago

Solved!

Thanks for a swift response!

I investigated and found out that it throws no error on 1.21.1 where Adventure is shipped, whereas when I use libby to sideload Adventure (latest version) on 1.8.8 I get this:

[17:55:41 INFO]: net.kyori.adventure.text.minimessage.internal.parser.ParsingExceptionImpl: Invalid tag name info/log
    <red>Usage: <info/log>
                ^~~~~~~~~^
[17:55:41 INFO]: java.lang.IllegalArgumentException: Tag name must match pattern [!?#]?[a-z0-9_-]*, was info/log
[17:55:41 INFO]:    at net.kyori.adventure.text.minimessage.internal.TagInternals.checkTagName(TagInternals.java:53)
[17:55:41 INFO]:    at net.kyori.adventure.text.minimessage.internal.TagInternals.sanitizeAndCheckTagName(TagInternals.java:66)
[17:55:41 INFO]:    at net.kyori.adventure.text.minimessage.internal.parser.node.TagNode.<init>(TagNode.java:71)
[17:55:41 INFO]:    at net.kyori.adventure.text.minimessage.internal.parser.TokenParser.buildTree(TokenParser.java:378)
[17:55:41 INFO]:    at net.kyori.adventure.text.minimessage.internal.parser.TokenParser.parse(TokenParser.java:91)
[17:55:41 INFO]:    at net.kyori.adventure.text.minimessage.MiniMessageParser.parseToTree(MiniMessageParser.java:189)
[17:55:41 INFO]:    at net.kyori.adventure.text.minimessage.MiniMessageParser.parseFormat(MiniMessageParser.java:200)
[17:55:41 INFO]:    at net.kyori.adventure.text.minimessage.MiniMessageImpl.deserialize(MiniMessageImpl.java:76)
[17:55:41 INFO]:    at net.kyori.adventure.text.minimessage.MiniMessageImpl.deserialize(MiniMessageImpl.java:45)
[17:55:41 INFO]:    at org.mineacademy.chatcontrol.command.CommandTell.execute(CommandTell.java:44)
[17:55:41 INFO]:    at org.mineacademy.chatcontrol.command.ChatControlCommands$ChatControlCommand.onCommand(ChatControlCommands.java:147)
[17:55:41 INFO]:    at org.mineacademy.fo.command.SimpleCommandCore.delegateExecute(SimpleCommandCore.java:354)
[17:55:41 INFO]:    at org.mineacademy.fo.command.BukkitCommandImpl.execute(BukkitCommandImpl.java:36)
[17:55:41 INFO]:    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:147)
[17:55:41 INFO]:    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[17:55:41 INFO]:    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

Code:

System.out.println("Test: " + MiniMessage.miniMessage().deserialize("<red>Usage: <info/log>"));

Solution:

Turned out I was using minimessage 4.10.0 not 4.17.0, after updating the issue is gone! Looks like the previous versions of the library throw this whereas the current just ignores invalid tags.

Thanks again for a swift response and apologizes for the oversight. Closing.