66import adhdmc .simplenicks .util .SimpleNickPermission ;
77import net .kyori .adventure .text .Component ;
88import net .kyori .adventure .text .minimessage .MiniMessage ;
9+ import net .kyori .adventure .text .minimessage .tag .Tag ;
910import net .kyori .adventure .text .minimessage .tag .resolver .Placeholder ;
1011import net .kyori .adventure .text .minimessage .tag .resolver .TagResolver ;
12+ import net .kyori .adventure .text .minimessage .tag .standard .StandardTags ;
1113import org .bukkit .NamespacedKey ;
1214import org .bukkit .command .CommandSender ;
1315import org .bukkit .entity .Player ;
1719import java .util .List ;
1820
1921public class Set extends SubCommand {
20-
22+ MiniMessage miniMessage = SimpleNicks . getMiniMessage ();
2123 public static final NamespacedKey nickNameSave = new NamespacedKey (SimpleNicks .getInstance (), "nickname" );
2224
2325
@@ -27,39 +29,41 @@ public Set() {
2729
2830 @ Override
2931 public void execute (CommandSender sender , String [] args ) {
30- MiniMessage miniMessage = SimpleNicks .getMiniMessage ();
3132 int MAX_NICKNAME_LENGTH = SimpleNicks .getInstance ().getConfig ().getInt ("max-nickname-length" );
3233 String NICKNAME_REGEX = SimpleNicks .getInstance ().getConfig ().getString ("nickname-regex" );
3334 if (NICKNAME_REGEX == null || NICKNAME_REGEX .isEmpty ()) {
3435 SimpleNicks .getSimpleNicksLogger ().severe (Message .BAD_REGEX .getMessage ());
3536 NICKNAME_REGEX = "[A-Za-z0-9_]+" ;
3637 }
37-
38-
3938 // Player Check
4039 if (!(sender instanceof Player sendingPlayer )) {
4140 sender .sendMessage (miniMessage .deserialize (Message .CONSOLE_CANNOT_RUN .getMessage ())); // Invalid Usage (Not a Player)
4241 return ;
4342 }
44-
4543 // Arguments Check
4644 if (args .length == 0 ) {
47- sender .sendMessage (miniMessage .deserialize (Message .NO_ARGUMENTS .getMessage ())); // Invalid Arguments
45+ sender .sendMessage (miniMessage .deserialize (Message .NO_ARGUMENTS .getMessage (),
46+ Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ()))); // Invalid Arguments
4847 return ;
4948 }
5049 if (args .length > 2 ) {
51- sender .sendMessage (miniMessage .deserialize (Message .TOO_MANY_ARGUMENTS .getMessage ())); // Too Many Arguments
50+ sender .sendMessage (miniMessage .deserialize (Message .TOO_MANY_ARGUMENTS .getMessage (),
51+ Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ()))); // Too Many Arguments
5252 return ;
5353 }
54- if (args .length == 2 && !sender .hasPermission (SimpleNickPermission .NICK_ADMIN .getPermission ())) {
55- sender .sendMessage (miniMessage .deserialize (Message .NO_PERMISSION .getMessage ())); // No Permission
54+ if (args .length == 2 &&
55+ !(sender .hasPermission (SimpleNickPermission .NICK_OTHERS_FULL .getPermission ()) ||
56+ sender .hasPermission (SimpleNickPermission .NICK_OTHERS_BASIC .getPermission ()) ||
57+ sender .hasPermission (SimpleNickPermission .NICK_OTHERS_RESTRICTIVE .getPermission ()))) {
58+ sender .sendMessage (miniMessage .deserialize (Message .NO_PERMISSION .getMessage (),
59+ Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ()))); // No Permission
5660 return ;
5761 }
5862 if (!sender .hasPermission (SimpleNickPermission .NICK_COMMAND .getPermission ())) {
59- sender .sendMessage (miniMessage .deserialize (Message .NO_PERMISSION .getMessage ())); // No Permission to set own
63+ sender .sendMessage (miniMessage .deserialize (Message .NO_PERMISSION .getMessage (),
64+ Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ()))); // No Permission to set own
6065 return ;
6166 }
62-
6367 // Nickname Validity Check
6468 String nicknameStripped = miniMessage .stripTags (args [0 ]);
6569 if (!nicknameStripped .matches (NICKNAME_REGEX )) {
@@ -77,41 +81,58 @@ public void execute(CommandSender sender, String[] args) {
7781 // Valid Player Check
7882 Player player = (args .length == 1 ) ? (Player ) sender : SimpleNicks .getInstance ().getServer ().getPlayer (args [1 ]);
7983 if (player == null ) {
80- sender .sendMessage (miniMessage .deserialize (Message .INVALID_PLAYER .getMessage (), Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ()))); // Invalid Player
84+ sender .sendMessage (miniMessage .deserialize (Message .INVALID_PLAYER .getMessage (),
85+ Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ()))); // Invalid Player
8186 return ;
8287 }
8388 // Check against cached usernames
8489 if (!player .hasPermission (SimpleNickPermission .NICK_USERNAME_BYPASS .getPermission ()) && (SimpleNicks .getInstance ().getServer ().getOfflinePlayerIfCached (nicknameStripped ) != null ) && !(nicknameStripped .equals (player .getName ()))){
85- sender .sendMessage (miniMessage .deserialize (Message .CANNOT_NICK_USERNAME .getMessage (), Placeholder .parsed ("name" , nicknameStripped ), Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ())));
90+ sender .sendMessage (miniMessage .deserialize (Message .CANNOT_NICK_USERNAME .getMessage (),
91+ Placeholder .parsed ("name" , nicknameStripped ),
92+ Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ())));
8693 return ;
8794 }
88-
8995 // Set Nickname
9096 // Saves to PDC
91- //temporary saving option
97+ //temporary saving option until we can get SQLite
9298 String nickToSave = args [0 ];
9399 Component nickname = null ;
94- if (sender .hasPermission (SimpleNickPermission .NICK_ADMIN .getPermission ())) {
100+ //The checks process to go through if someone is nicknaming another player
101+ if (args .length == 2 ) {
95102 if (sendingPlayer .hasPermission (SimpleNickPermission .NICK_OTHERS_FULL .getPermission ())){
103+ //Full parse, no regards for the formatting permissions of either player
96104 nickname = miniMessage .deserialize (args [0 ]);
97105 } else if (sendingPlayer .hasPermission (SimpleNickPermission .NICK_OTHERS_BASIC .getPermission ())) {
106+ //Basic parse, parses based on the Admin's permissions
107+ if (parseMessageContent (sendingPlayer , args [0 ]) == null ) {
108+ sendingPlayer .sendMessage (miniMessage .deserialize (Message .INVALID_TAGS .getMessage (),
109+ Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ())));
110+ return ;
111+ }
98112 nickname = parseMessageContent (sendingPlayer , args [0 ]);
99113 } else if (sendingPlayer .hasPermission (SimpleNickPermission .NICK_OTHERS_RESTRICTIVE .getPermission ())) {
114+ //Restrictive parse, parses based on the player's permissions
115+ if (parseMessageContent (player , args [0 ]) == null ) {
116+ sendingPlayer .sendMessage (miniMessage .deserialize (Message .INVALID_TAGS .getMessage (),
117+ Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ())));
118+ return ;
119+ }
100120 nickname = parseMessageContent (player , args [0 ]);
101121 }
102122 } else {
103- Component fullyParsed = miniMessage .deserialize (args [0 ]);
104- Component permissionParsed = parseMessageContent (player , args [0 ]);
105- if (fullyParsed .equals (permissionParsed )){
106- nickname = permissionParsed ;
107- } else {
108- sender .sendMessage (miniMessage .deserialize (Message .INVALID_TAGS .getMessage (), Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ())));
123+ //Player nicknaming themselves, based on their own permissions
124+ if (parseMessageContent (player , args [0 ]) == null ){
125+ sendingPlayer .sendMessage (miniMessage .deserialize (Message .INVALID_TAGS .getMessage (),
126+ Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ())));
109127 return ;
128+ } else {
129+ nickname = parseMessageContent (player , args [0 ]);
110130 }
111131 }
112132 //idk it says this might be null, I hope it's not but just in case lol
113133 if (nickname == null ) {
114- sender .sendMessage (miniMessage .deserialize (Message .NICK_NULL .getMessage ()));
134+ sender .sendMessage (miniMessage .deserialize (Message .NICK_NULL .getMessage (),
135+ Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ())));
115136 return ;
116137 }
117138 player .getPersistentDataContainer ().set (nickNameSave , PersistentDataType .STRING , nickToSave );
@@ -120,11 +141,12 @@ public void execute(CommandSender sender, String[] args) {
120141 //Send feedback if an admin is setting someone's name, both to the admin and player
121142 if (sendingPlayer != player ) {
122143 sendingPlayer .sendMessage (miniMessage .deserialize (Message .NICK_CHANGE_OTHER .getMessage (),
123- Placeholder .parsed ("player " , player .getName ()),
144+ Placeholder .parsed ("username " , player .getName ()),
124145 Placeholder .component ("nickname" , nickname ),
125146 Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ())));
126147 player .sendMessage (miniMessage .deserialize (Message .NICK_CHANGED_BY_OTHER .getMessage (),
127- Placeholder .component ("player" , sendingPlayer .displayName ()),
148+ Placeholder .parsed ("prefix" , Message .PREFIX .getMessage ()),
149+ Placeholder .component ("username" , sendingPlayer .displayName ()),
128150 Placeholder .component ("nickname" , nickname )));
129151 } else {
130152 //If a player sets their own name
@@ -137,7 +159,9 @@ public void execute(CommandSender sender, String[] args) {
137159 @ Override
138160 public List <String > getSubcommandArguments (CommandSender sender , String [] args ) {
139161 ArrayList <String > tabComplete = new ArrayList <>();
140- if (args .length == 2 && sender .hasPermission (SimpleNickPermission .NICK_ADMIN .getPermission ())) {
162+ if (args .length == 2 && (sender .hasPermission (SimpleNickPermission .NICK_OTHERS_FULL .getPermission ()) ||
163+ sender .hasPermission (SimpleNickPermission .NICK_OTHERS_BASIC .getPermission ()) ||
164+ sender .hasPermission (SimpleNickPermission .NICK_OTHERS_RESTRICTIVE .getPermission ()))) {
141165 return null ;
142166 }
143167 if (args .length == 1 ) {
@@ -163,14 +187,22 @@ private void addValidTabOption(CommandSender sender, String arg, String option,
163187 //Stolen from https://github.com/YouHaveTrouble/JustChat/blob/master/src/main/java/me/youhavetrouble/justchat/JustChatListener.java#L78
164188 private Component parseMessageContent (Player player , String rawMessage ) {
165189 TagResolver .Builder tagResolver = TagResolver .builder ();
166-
190+ //This is stupid but yk whatever
191+ int tempCheckSolution = 0 ;
167192 for (SimpleNickPermission perm : SimpleNickPermission .values ()) {
168193 if (player .hasPermission (perm .getPermission ()) && perm .getTagResolver () != null ) {
169194 tagResolver .resolver (perm .getTagResolver ());
195+ tempCheckSolution = tempCheckSolution + 1 ;
170196 }
171197 }
172198 MiniMessage nameParser = MiniMessage .builder ().tags (tagResolver .build ()).build ();
173- return nameParser .deserialize (rawMessage );
199+ Component fullParsedName = miniMessage .deserialize (rawMessage );
200+ Component permParsedName = nameParser .deserialize (rawMessage );
201+ if (tempCheckSolution == 0 ) {
202+ String strippedMsg = miniMessage .stripTags (rawMessage );
203+ return miniMessage .deserialize (strippedMsg );
204+ }
205+ if (fullParsedName .equals (permParsedName )) return permParsedName ;
206+ return null ;
174207 }
175-
176208}
0 commit comments