Skip to content

Component#replaceText() does not match across component boundaries #1133

@kangarko

Description

@kangarko

Code:

// MiniMessage NOT required to reproduce but used for readability
final Component component = MiniMessage.miniMessage().deserialize("<gradient:red:blue>This is a test, {player}").replaceText(b -> b.matchLiteral("{player}").replacement("Demo"));

System.out.println("Demo: " + PlainTextComponentSerializer.plainText().serialize(component));

The way this is implemented (by the way, MiniMessage is NOT required to reproduce, simply chain letters with different colors to do so) the Component turns into {"extra":[{"color":"red","text":"T"},{"color":"#F8555C","text":"h"},{"color":"#F05564","text":"i"},{"color":"#E9556B","text":"s"},{"color":"#E15573","text":" "},{"color":"#DA557A","text":"i"},{"color":"#D35581","text":"s"},{"color":"#CB5589","text":" "},{"color":"#C45590","text":"a"},{"color":"#BC5598","text":" "},{"color":"#B5559F","text":"t"},{"color":"#AE55A6","text":"e"},{"color":"#A655AE","text":"s"},{"color":"#9F55B5","text":"t"},{"color":"#9855BC","text":","},{"color":"#9055C4","text":" "},{"color":"#8955CB","text":"{"},{"color":"#8155D3","text":"p"},{"color":"#7A55DA","text":"l"},{"color":"#7355E1","text":"a"},{"color":"#6B55E9","text":"y"},{"color":"#6455F0","text":"e"},{"color":"#5C55F8","text":"r"},{"color":"blue","text":"}"}],"text":""} and the replaceText() method is unable to find the letters.

The only way we "fixed" it so far is to replace variables on the raw message before parsing it.

Thanks
Matej

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions