Skip to content

Commit c77f63d

Browse files
committed
committing again
1 parent aeee71c commit c77f63d

File tree

4 files changed

+65
-5
lines changed

4 files changed

+65
-5
lines changed

src/main/java/simplexity/simplenicks/commands/Set.java

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,20 @@
44
import net.kyori.adventure.text.minimessage.MiniMessage;
55
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
66
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
7+
import org.bukkit.OfflinePlayer;
78
import org.bukkit.command.CommandSender;
89
import org.bukkit.entity.Player;
910
import org.bukkit.permissions.Permission;
11+
import simplexity.simplenicks.SimpleNicks;
12+
import simplexity.simplenicks.config.ConfigHandler;
1013
import simplexity.simplenicks.config.LocaleHandler;
1114
import simplexity.simplenicks.util.Constants;
1215
import simplexity.simplenicks.util.NickHandler;
1316
import simplexity.simplenicks.util.TagPermission;
1417

1518
import java.util.ArrayList;
1619
import java.util.List;
20+
import java.util.regex.Pattern;
1721

1822
public 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
}

src/main/java/simplexity/simplenicks/config/ConfigHandler.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
public class ConfigHandler {
1010

11+
public String getRegexString() {
12+
return regexString;
13+
}
14+
1115
public enum SAVING_TYPE {PDC, FILE}
1216

1317
private static ConfigHandler instance;
@@ -17,6 +21,8 @@ public enum SAVING_TYPE {PDC, FILE}
1721
private int maxLength = 25;
1822
private int maxSaves = 5;
1923
private boolean tablistNick = false;
24+
private String regexString = "[A-Za-z0-9_]+";
25+
private long usernameProtectionTime = 0;
2026

2127
private ConfigHandler() {
2228
}
@@ -33,6 +39,7 @@ public void reloadConfig() {
3339
// Check the validity of the regex.
3440
try {
3541
String regexSetting = SimpleNicks.getInstance().getConfig().getString("nickname-regex");
42+
regexString = regexSetting;
3643
assert regexSetting != null;
3744
assert !regexSetting.isBlank();
3845
regex = Pattern.compile(regexSetting);
@@ -50,6 +57,7 @@ public void reloadConfig() {
5057
maxLength = SimpleNicks.getInstance().getConfig().getInt("max-nickname-length");
5158
maxSaves = SimpleNicks.getInstance().getConfig().getInt("max-saves");
5259
tablistNick = SimpleNicks.getInstance().getConfig().getBoolean("tablist-nick");
60+
usernameProtectionTime = SimpleNicks.getInstance().getConfig().getLong("username-protection-time") * 86400000;
5361
}
5462

5563
public void setConfigDefaults() {
@@ -59,6 +67,7 @@ public void setConfigDefaults() {
5967
config.addDefault("max-saves", 5);
6068
config.addDefault("nickname-regex", "[A-Za-z0-9_]+");
6169
config.addDefault("tablist-nick", false);
70+
config.addDefault("username-protection-time", 30);
6271
}
6372

6473
public Pattern getRegex() {
@@ -80,4 +89,8 @@ public int getMaxSaves() {
8089
public boolean shouldNickTablist() {
8190
return tablistNick;
8291
}
92+
93+
public long getUsernameProtectionTime() {
94+
return usernameProtectionTime;
95+
}
8396
}

src/main/java/simplexity/simplenicks/util/Constants.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ public class Constants {
99
public static Permission NICK_OTHERS_FULL = new Permission("simplenick.admin.full");
1010
public static Permission NICK_RESET_OTHERS = new Permission("simplenick.admin.reset");
1111
public static Permission NICK_RESET = new Permission("simplenick.nick.reset");
12-
public static Permission NICK_SAVE = new Permission("simplenick.save");
12+
public static Permission NICK_SAVE = new Permission("simplenick.nick.save");
1313
public static Permission NICK_OTHERS_SAVE = new Permission("simplenick.admin.save");
14-
public static Permission NICK_DELETE = new Permission("simplenick.delete");
14+
public static Permission NICK_DELETE = new Permission("simplenick.nick.delete");
1515
public static Permission NICK_RELOAD = new Permission("simplenick.reload");
16-
public static Permission NICK_USERNAME_BYPASS = new Permission("simplenick.usernamebypass");
16+
public static Permission NICK_USERNAME_BYPASS = new Permission("simplenick.bypass.username");
17+
public static Permission NICK_LENGTH_BYPASS = new Permission("simplenick.bypass.length");
18+
public static Permission NICK_REGEX_BYPASS = new Permission("simplenick.bypass.regex");
1719
}

src/main/resources/config.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,9 @@ max-saves: 5
1717

1818
# Should names be changed in tablist?
1919
# (Keep this false if you use any other tablist plugin, there are placeholder API placeholders to use on those)
20-
tablist-nick: false
20+
tablist-nick: false
21+
22+
# How long should people be offline before their username is available to use as a nickname?
23+
# In days, -1 to disable username protection altogether
24+
25+
username-protection: 30

0 commit comments

Comments
 (0)