44import net .kyori .adventure .text .minimessage .MiniMessage ;
55import net .kyori .adventure .text .minimessage .tag .resolver .TagResolver ;
66import net .kyori .adventure .text .serializer .plain .PlainTextComponentSerializer ;
7+ import org .bukkit .OfflinePlayer ;
78import org .bukkit .command .CommandSender ;
89import org .bukkit .entity .Player ;
910import org .bukkit .permissions .Permission ;
11+ import simplexity .simplenicks .SimpleNicks ;
12+ import simplexity .simplenicks .config .ConfigHandler ;
1013import simplexity .simplenicks .config .LocaleHandler ;
1114import simplexity .simplenicks .util .Constants ;
1215import simplexity .simplenicks .util .NickHandler ;
1316import simplexity .simplenicks .util .TagPermission ;
1417
1518import java .util .ArrayList ;
1619import java .util .List ;
20+ import java .util .regex .Pattern ;
1721
1822public class Set extends SubCommand {
1923 MiniMessage serializer = MiniMessage .builder ().tags (TagResolver .empty ()).build ();
@@ -33,9 +37,12 @@ public void executeOnOther(CommandSender sender, Player player, String[] args) {
3337 nickComponent = miniMessage .deserialize (nickname );
3438 } else if (sender .hasPermission (Constants .NICK_OTHERS_BASIC )) {
3539 nickComponent = getNickComponent (sender , nickname );
36- } else if (sender .hasPermission (Constants .NICK_OTHERS_RESTRICTIVE )){
40+ } else if (sender .hasPermission (Constants .NICK_OTHERS_RESTRICTIVE )) {
3741 nickComponent = getNickComponent (player , nickname );
3842 }
43+ if (!passesChecks (sender , nickname , player )) {
44+ return ;
45+ }
3946 if (setPlayerNick (player , nickComponent )) {
4047 sender .sendMessage (parsedMessage (sender , player , LocaleHandler .getInstance ().getChangedOther (), nickname ));
4148 player .sendMessage (parsedMessage (sender , player , LocaleHandler .getInstance ().getChangedByOther (), nickname ));
@@ -48,6 +55,9 @@ public void executeOnOther(CommandSender sender, Player player, String[] args) {
4855 public void executeOnSelf (CommandSender sender , Player player , String [] args ) {
4956 if (!validateArgsLength (sender , player , args , 2 )) return ;
5057 String nickname = args [1 ];
58+ if (!passesChecks (sender , nickname , player )) {
59+ return ;
60+ }
5161 Component nickComponent = getNickComponent (sender , nickname );
5262 if (setPlayerNick (player , nickComponent )) {
5363 player .sendMessage (parsedMessage (sender , player , LocaleHandler .getInstance ().getChangedSelf (), nickname ));
@@ -106,4 +116,34 @@ private Component getNickComponent(CommandSender user, String nick) {
106116 return finalNick ;
107117 }
108118
119+ private boolean passesChecks (CommandSender sender , String nickname , Player player ) {
120+ String strippedMessage = miniMessage .stripTags (nickname );
121+ Pattern regexPattern = ConfigHandler .getInstance ().getRegex ();
122+ if (strippedMessage .length () > ConfigHandler .getInstance ().getMaxLength () && !sender .hasPermission (Constants .NICK_LENGTH_BYPASS )) {
123+ sender .sendMessage (parsedMessage (sender , null , LocaleHandler .getInstance ().getInvalidNickLength (), "" ));
124+ return false ;
125+ }
126+ if (!regexPattern .matcher (strippedMessage ).matches () && !sender .hasPermission (Constants .NICK_REGEX_BYPASS )) {
127+ sender .sendMessage (parsedMessage (sender , null , LocaleHandler .getInstance ().getInvalidNick (), ConfigHandler .getInstance ().getRegexString ()));
128+ return false ;
129+ }
130+ OfflinePlayer playerToCheck = SimpleNicks .getInstance ().getServer ().getOfflinePlayer (strippedMessage );
131+ if (!playerToCheck .hasPlayedBefore ()) {
132+ return true ;
133+ }
134+ if (playerToCheck .getPlayer () == player ) {
135+ return true ;
136+ }
137+ if (!sender .hasPermission (Constants .NICK_USERNAME_BYPASS )) {
138+ long lastSeen = playerToCheck .getLastSeen ();
139+ long now = System .currentTimeMillis ();
140+ long diff = now - lastSeen ;
141+ if (diff < ConfigHandler .getInstance ().getUsernameProtectionTime ()) {
142+ sender .sendMessage (parsedMessage (sender , null , LocaleHandler .getInstance ().getOtherPlayersUsername (), nickname ));
143+ return false ;
144+ }
145+ }
146+ return true ;
147+ }
148+
109149}
0 commit comments