Skip to content

Commit 43f7437

Browse files
committed
Huzzah, more work
1 parent 1e70d9c commit 43f7437

10 files changed

Lines changed: 121 additions & 57 deletions

File tree

README.md

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,45 @@ Mini-Message comes prepackaged with Paper and all forks of Paper support Mini-Me
2525

2626
- Reloads the configuration and locale.
2727

28-
`/nick help` (TODO)
28+
`/nick help`
2929

3030
- Provides help text.
3131

3232
### Admin Permissions
3333

34-
`simplenick.admin`
35-
36-
- Allows the player to change other player's nicknames.
37-
3834
`simplenick.usernamebypass`
3935

4036
- Allows the player to use the username of another player on the server, as their own nickname
4137

42-
`simplenicks.reload`
38+
`simplenick.reload`
4339

4440
- Allows the player to reload the plugin configuration and locale.
4541

42+
`simplenick.admin.reset`
43+
44+
- Allows the player to reset another player's nickname
45+
46+
`simplenick.admin.restrictive`
47+
48+
- Allows the player to set another player's nickname, within the other player's formatting permissions
49+
- Does not override the other player's formatting permissions
50+
- Does override the other player's nickname permissions
51+
- (if the other player cannot nickname themselves, they can still be admin nick'd with this permission)
52+
53+
`simplenick.admin.basic`
54+
55+
- Allows the player to set another player's nickname, within their own formatting permissions
56+
- Overrides the other player's formatting permissions
57+
- Only allows permissions that the admin has
58+
59+
`simplenick.admin.full`
60+
61+
- Allows the player to set another player's nickname, regardless of both of their formatting permissions.
62+
> NOTE:
63+
> <br>This permission allows for all minimessage formatting types, not just the ones that are set in permissions here
64+
> <br>These types of formatting can include things like click action, hover text, and similar.
65+
> <br>These formats can do really cool stuff, but be careful who you give it to lol
66+
4667
### Player Permissions
4768

4869
`simplenicks.nick.set`
@@ -61,11 +82,12 @@ Mini-Message comes prepackaged with Paper and all forks of Paper support Mini-Me
6182
`simplenick.nick.format.<tag>`
6283

6384
- Allows for the use of those formatting tags.
64-
- Valid Tags are: `underline`, `italic`, `strikethrough`, `bold`, and `obsfucated`.
85+
- Valid Tags are: `reset`, `underline`, `italic`, `strikethrough`, `bold`, and `obsfucated`.
6586

6687
## TODO
6788

6889
- Provide Config Option for TabList Changing and implement logic for TabList Update.
6990
- Create a `/nick whois` or similar command to determine "who is the player(s) with this nickname".
70-
- Add the option to change the regex check for display names (with a "potentially unsafe" warning).
71-
- Add the option to change the character limit on the fully parsed name.
91+
- Make the code less of a mess
92+
- Allow for nicknames to be set by non-players
93+
- Make a placeholderAPI extension

src/main/java/adhdmc/simplenicks/SimpleNicks.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ public static Logger getSimpleNicksLogger(){
5858
return instance.getLogger();
5959
}
6060

61-
62-
6361
private void registerSubCommands() {
6462
subCommands.put("reset", new Reset());
6563
subCommands.put("help", new Help());

src/main/java/adhdmc/simplenicks/commands/CommandHandler.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@ public class CommandHandler implements CommandExecutor, TabCompleter {
1414
@Override
1515
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String label, String[] args) {
1616
MiniMessage miniMessage = SimpleNicks.getMiniMessage();
17-
1817
// Arguments Check
1918
if (args.length == 0) {
2019
sender.sendMessage(miniMessage.deserialize(Message.INVALID_COMMAND.getMessage())); // Invalid Arguments
2120
return true;
2221
}
23-
2422
// Execute Command
2523
SubCommand subCommand = SimpleNicks.getSubCommands().getOrDefault(args[0].toLowerCase(Locale.ENGLISH), null);
2624
if (subCommand == null) {
@@ -31,7 +29,6 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @N
3129
return true;
3230
}
3331

34-
3532
@Override
3633
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
3734
ArrayList<String> tabComplete = new ArrayList<>();

src/main/java/adhdmc/simplenicks/commands/subcommands/Reset.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,32 @@ public void execute(CommandSender sender, String[] args) {
2323

2424
// Player Check
2525
if (!(sender instanceof Player)) {
26-
sender.sendMessage(miniMessage.deserialize(Message.CONSOLE_CANNOT_RUN.getMessage(), Placeholder.parsed("prefix", Message.PREFIX.getMessage()))); // Invalid Usage (Not a Player)
26+
sender.sendMessage(miniMessage.deserialize(Message.CONSOLE_CANNOT_RUN.getMessage(),
27+
Placeholder.parsed("prefix", Message.PREFIX.getMessage()))); // Invalid Usage (Not a Player)
2728
return;
2829
}
2930
// Arguments Check
3031
if (args.length > 1) {
31-
sender.sendMessage(miniMessage.deserialize(Message.TOO_MANY_ARGUMENTS.getMessage(), Placeholder.parsed("prefix", Message.PREFIX.getMessage()))); // Too Many Arguments
32+
sender.sendMessage(miniMessage.deserialize(Message.TOO_MANY_ARGUMENTS.getMessage(),
33+
Placeholder.parsed("prefix", Message.PREFIX.getMessage()))); // Too Many Arguments
3234
return;
3335
}
3436
// Admin Check
3537
if (args.length == 1 && !sender.hasPermission(SimpleNickPermission.NICK_RESET_OTHERS.getPermission())) {
36-
sender.sendMessage(miniMessage.deserialize(Message.NO_PERMISSION.getMessage(), Placeholder.parsed("prefix", Message.PREFIX.getMessage()))); // No Permission
38+
sender.sendMessage(miniMessage.deserialize(Message.NO_PERMISSION.getMessage(),
39+
Placeholder.parsed("prefix", Message.PREFIX.getMessage()))); // No Permission
3740
return;
3841
}
3942
// Valid Player Check
4043
Player player = (args.length == 0) ? (Player) sender : SimpleNicks.getInstance().getServer().getPlayer(args[0]);
4144
if (player == null) {
42-
sender.sendMessage(miniMessage.deserialize(Message.INVALID_PLAYER.getMessage(), Placeholder.parsed("prefix", Message.PREFIX.getMessage()))); // Invalid Player
45+
sender.sendMessage(miniMessage.deserialize(Message.INVALID_PLAYER.getMessage(),
46+
Placeholder.parsed("prefix", Message.PREFIX.getMessage()))); // Invalid Player
4347
return;
4448
}
4549
if (sender == player && !sender.hasPermission(SimpleNickPermission.NICK_RESET.getPermission())) {
46-
sender.sendMessage(miniMessage.deserialize(Message.TOO_MANY_ARGUMENTS.getMessage(), Placeholder.parsed("prefix", Message.PREFIX.getMessage()))); // No Permission
50+
sender.sendMessage(miniMessage.deserialize(Message.TOO_MANY_ARGUMENTS.getMessage(),
51+
Placeholder.parsed("prefix", Message.PREFIX.getMessage()))); // No Permission
4752
return;
4853
}
4954
// Set Nickname
@@ -52,7 +57,17 @@ public void execute(CommandSender sender, String[] args) {
5257
if (playerPDCString != null)
5358
player.getPersistentDataContainer().remove(Set.nickNameSave); //held name for temp saving option
5459
player.displayName(miniMessage.deserialize(player.getName()));
55-
player.sendMessage(miniMessage.deserialize(Message.NICK_RESET_SELF.getMessage(), Placeholder.parsed("prefix", Message.PREFIX.getMessage())));
60+
if (player != sender) {
61+
sender.sendMessage(miniMessage.deserialize(Message.NICK_RESET_OTHER.getMessage(),
62+
Placeholder.parsed("prefix", Message.PREFIX.getMessage()),
63+
Placeholder.parsed("username", player.getName())));
64+
player.sendMessage(miniMessage.deserialize(Message.NICK_RESET_BY_OTHER.getMessage(),
65+
Placeholder.parsed("prefix", Message.PREFIX.getMessage()),
66+
Placeholder.component("username", ((Player) sender).displayName())));
67+
} else {
68+
player.sendMessage(miniMessage.deserialize(Message.NICK_RESET_SELF.getMessage(),
69+
Placeholder.parsed("prefix", Message.PREFIX.getMessage())));
70+
}
5671
}
5772

5873
@Override

src/main/java/adhdmc/simplenicks/commands/subcommands/Set.java

Lines changed: 61 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
import adhdmc.simplenicks.util.SimpleNickPermission;
77
import net.kyori.adventure.text.Component;
88
import net.kyori.adventure.text.minimessage.MiniMessage;
9+
import net.kyori.adventure.text.minimessage.tag.Tag;
910
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
1011
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
12+
import net.kyori.adventure.text.minimessage.tag.standard.StandardTags;
1113
import org.bukkit.NamespacedKey;
1214
import org.bukkit.command.CommandSender;
1315
import org.bukkit.entity.Player;
@@ -17,7 +19,7 @@
1719
import java.util.List;
1820

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

src/main/java/adhdmc/simplenicks/config/Defaults.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
public class Defaults {
1111

12-
1312
public static void setConfigDefaults() {
1413
FileConfiguration config = SimpleNicks.getInstance().getConfig();
1514
config.addDefault("max-nickname-length", 30);

0 commit comments

Comments
 (0)