22
33import com .earth2me .essentials .I18n ;
44import com .earth2me .essentials .User ;
5- import dev .plex .command .PlexCommand ;
6- import dev .plex .command .annotation .CommandParameters ;
7- import dev .plex .command .annotation .CommandPermissions ;
5+ import dev .plex .command .SimplePlexCommand ;
86import dev .plex .command .source .RequiredCommandSource ;
97import dev .plex .module .nickmm .NickMiniMessageModule ;
10- import dev .plex .util .minimessage .SafeMiniMessage ;
118
9+ import java .util .Arrays ;
1210import java .util .Collections ;
1311import java .util .List ;
1412
1513import net .kyori .adventure .text .Component ;
1614import net .kyori .adventure .text .format .NamedTextColor ;
15+ import net .kyori .adventure .text .minimessage .Context ;
16+ import net .kyori .adventure .text .minimessage .MiniMessage ;
17+ import net .kyori .adventure .text .minimessage .ParsingException ;
18+ import net .kyori .adventure .text .minimessage .tag .Tag ;
19+ import net .kyori .adventure .text .minimessage .tag .resolver .ArgumentQueue ;
20+ import net .kyori .adventure .text .minimessage .tag .resolver .TagResolver ;
1721import net .kyori .adventure .text .serializer .legacy .LegacyComponentSerializer ;
1822import net .kyori .adventure .text .serializer .plain .PlainTextComponentSerializer ;
1923import org .bukkit .Bukkit ;
2226import org .jetbrains .annotations .NotNull ;
2327import org .jetbrains .annotations .Nullable ;
2428
25- @ CommandParameters (name = "nickmm" , description = "Change your nickname using MiniMessage formatting!" , usage = "/<command> <nick>" , aliases = "nickminimessage" )
26- @ CommandPermissions (permission = "plex.nickmm" , source = RequiredCommandSource .IN_GAME )
27- public class NickMMCommand extends PlexCommand
29+ public class NickMMCommand extends SimplePlexCommand
2830{
2931 private final PlainTextComponentSerializer plainText = PlainTextComponentSerializer .plainText ();
3032 private final LegacyComponentSerializer legacyComponent = LegacyComponentSerializer .legacySection ();
33+ private final MiniMessage miniMessage = MiniMessage .builder ().tags (new NicknameTagResolver ()).build ();
34+
35+ public NickMMCommand ()
36+ {
37+ super (command ("nickmm" )
38+ .description ("Change your nickname using MiniMessage formatting!" )
39+ .usage ("/<command> <nick>" )
40+ .aliases ("nickminimessage" )
41+ .permission ("plex.nickmm" )
42+ .source (RequiredCommandSource .IN_GAME )
43+ .build ());
44+ }
3145
3246 @ Override
3347 protected Component execute (@ NotNull CommandSender commandSender , @ Nullable Player player , @ NotNull String [] args )
@@ -42,7 +56,7 @@ protected Component execute(@NotNull CommandSender commandSender, @Nullable Play
4256 return usage ();
4357 }
4458
45- final Component nick = SafeMiniMessage . mmDeserializeWithoutEvents (args [0 ]);
59+ final Component nick = miniMessage . deserialize (args [0 ]). clickEvent ( null ). hoverEvent ( null );
4660 final String plain = plainText .serialize (nick );
4761
4862 if (plain .length () > NickMiniMessageModule .getEssentials ().getSettings ().getMaxNickLength ()
@@ -65,14 +79,45 @@ protected Component execute(@NotNull CommandSender commandSender, @Nullable Play
6579 }
6680
6781 final String legacy = legacyComponent .serialize (nick );
68- NickMiniMessageModule .getEssentials ().getUser (player ).setNickname (legacy );
82+ User essentialsUser = NickMiniMessageModule .getEssentials ().getUser (player );
83+ essentialsUser .setNickname (legacy );
84+ essentialsUser .setDisplayNick ();
6985
7086 return mmString (I18n .tlLiteral ("nickSet" , legacy ));
7187 }
7288
7389 @ Override
74- public @ NotNull List <String > smartTabComplete (@ NotNull CommandSender sender , @ NotNull String alias , @ NotNull String [] args ) throws IllegalArgumentException
90+ protected @ NotNull List <String > suggestions (@ NotNull CommandSender sender , @ NotNull String alias , @ NotNull String [] args )
7591 {
7692 return Collections .emptyList ();
7793 }
94+
95+ private static class NicknameTagResolver implements TagResolver
96+ {
97+ private static final TagResolver STANDARD_RESOLVER = TagResolver .standard ();
98+ private static final List <String > IGNORED_TAGS = Arrays .asList (
99+ "click" ,
100+ "hover" ,
101+ "insertion" ,
102+ "insert" ,
103+ "obfuscated" ,
104+ "obf" ,
105+ "br" ,
106+ "newline" ,
107+ "lang" ,
108+ "key" ,
109+ "translate" );
110+
111+ @ Override
112+ public @ Nullable Tag resolve (@ NotNull String name , @ NotNull ArgumentQueue arguments , @ NotNull Context ctx ) throws ParsingException
113+ {
114+ return IGNORED_TAGS .contains (name .toLowerCase ()) ? null : STANDARD_RESOLVER .resolve (name , arguments , ctx );
115+ }
116+
117+ @ Override
118+ public boolean has (@ NotNull String name )
119+ {
120+ return STANDARD_RESOLVER .has (name );
121+ }
122+ }
78123}
0 commit comments