Skip to content

Commit 20cd009

Browse files
authored
Merge pull request #5 from Simplexity-Development/brigadier
Brigadier
2 parents 9e823e1 + 6928823 commit 20cd009

42 files changed

Lines changed: 1836 additions & 954 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pom.xml

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

77
<groupId>simplexity</groupId>
88
<artifactId>SimplePMs</artifactId>
9-
<version>2.3.1</version>
9+
<version>2.4.0</version>
1010
<packaging>jar</packaging>
1111

1212
<name>SimplePMs</name>
@@ -90,5 +90,10 @@
9090
<version>2.11.6</version>
9191
<scope>provided</scope>
9292
</dependency>
93+
<dependency>
94+
<groupId>com.zaxxer</groupId>
95+
<artifactId>HikariCP</artifactId>
96+
<version>6.3.0</version>
97+
</dependency>
9398
</dependencies>
9499
</project>
Lines changed: 59 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package simplexity.simplepms;
22

3+
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
34
import net.kyori.adventure.text.minimessage.MiniMessage;
45
import org.bukkit.command.ConsoleCommandSender;
5-
import org.bukkit.entity.Player;
66
import org.bukkit.plugin.Plugin;
77
import org.bukkit.plugin.java.JavaPlugin;
88
import simplexity.simplepms.commands.Block;
@@ -14,50 +14,85 @@
1414
import simplexity.simplepms.commands.SocialSpy;
1515
import simplexity.simplepms.commands.Unblock;
1616
import simplexity.simplepms.config.ConfigHandler;
17-
import simplexity.simplepms.listeners.LoginListener;
17+
import simplexity.simplepms.listeners.JoinListener;
1818
import simplexity.simplepms.listeners.PreCommandListener;
1919
import simplexity.simplepms.listeners.QuitListener;
20+
import simplexity.simplepms.logic.Constants;
21+
import simplexity.simplepms.saving.SqlHandler;
2022

21-
import java.util.HashSet;
22-
import java.util.Objects;
23-
import java.util.Set;
24-
23+
@SuppressWarnings("UnstableApiUsage")
2524
public final class SimplePMs extends JavaPlugin {
2625

2726
private static Plugin instance;
2827
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
2928
private static boolean papiEnabled = false;
30-
private static final HashSet<Player> players = new HashSet<>();
31-
private static final HashSet<Player> spyingPlayers = new HashSet<>();
3229
private static ConsoleCommandSender consoleSender;
3330

34-
public static HashSet<Player> getPlayers() {
35-
return players;
36-
}
37-
38-
public static Set<Player> getSpyingPlayers() {
39-
return spyingPlayers;
40-
}
4131

4232
@Override
4333
public void onEnable() {
4434
instance = this;
45-
registerCommands();
46-
this.getServer().getPluginManager().registerEvents(new LoginListener(), this);
47-
this.getServer().getPluginManager().registerEvents(new QuitListener(), this);
48-
this.getServer().getPluginManager().registerEvents(new PreCommandListener(), this);
49-
if (this.getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
35+
consoleSender = getServer().getConsoleSender();
36+
if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
5037
papiEnabled = true;
51-
} else {
52-
this.getLogger().info("You do not have PlaceholderAPI loaded on your server. Any PlaceholderAPI placeholders used in this plugin's messages, will not work.");
5338
}
54-
consoleSender = this.getServer().getConsoleSender();
55-
this.saveDefaultConfig();
39+
SqlHandler.getInstance().init();
40+
loadConfigStuff();
41+
registerListeners();
42+
registerCommands();
43+
registerPermissions();
44+
}
45+
46+
private void registerListeners() {
47+
getServer().getPluginManager().registerEvents(new QuitListener(), this);
48+
getServer().getPluginManager().registerEvents(new PreCommandListener(), this);
49+
getServer().getPluginManager().registerEvents(new JoinListener(), this);
50+
}
51+
52+
private void loadConfigStuff() {
53+
saveDefaultConfig();
5654
getConfig().options().copyDefaults(true);
5755
saveConfig();
5856
ConfigHandler.getInstance().loadConfigValues();
5957
}
6058

59+
private void registerCommands() {
60+
getLifecycleManager().registerEventHandler(LifecycleEvents.COMMANDS, commands -> {
61+
commands.registrar().register(PrivateMessage.createCommand());
62+
commands.registrar().register(PrivateMessage.createTellAlias());
63+
commands.registrar().register(PrivateMessage.createWhisperAlias());
64+
commands.registrar().register(Reply.createCommand());
65+
commands.registrar().register(Reply.createAlias());
66+
commands.registrar().register(Block.createCommand());
67+
commands.registrar().register(Unblock.createCommand());
68+
commands.registrar().register(MessageToggle.createCommand());
69+
commands.registrar().register(SocialSpy.createCommand());
70+
commands.registrar().register(SocialSpy.createAlias());
71+
commands.registrar().register(Reload.createCommand());
72+
commands.registrar().register(Blocklist.createCommand());
73+
});
74+
}
75+
76+
private void registerPermissions() {
77+
getServer().getPluginManager().addPermission(Constants.MESSAGE_BASIC);
78+
getServer().getPluginManager().addPermission(Constants.MESSAGE_ADMIN);
79+
getServer().getPluginManager().addPermission(Constants.MESSAGE_SEND);
80+
getServer().getPluginManager().addPermission(Constants.MESSAGE_RECEIVE);
81+
getServer().getPluginManager().addPermission(Constants.MESSAGE_TOGGLE);
82+
getServer().getPluginManager().addPermission(Constants.MESSAGE_BLOCK);
83+
getServer().getPluginManager().addPermission(Constants.PLUGIN_RELOAD);
84+
getServer().getPluginManager().addPermission(Constants.ADMIN_OVERRIDE);
85+
getServer().getPluginManager().addPermission(Constants.ADMIN_SOCIAL_SPY);
86+
getServer().getPluginManager().addPermission(Constants.ADMIN_CONSOLE_SPY);
87+
getServer().getPluginManager().addPermission(Constants.BYPASS_SOCIAL_SPY);
88+
getServer().getPluginManager().addPermission(Constants.BYPASS_COMMAND_SPY);
89+
}
90+
91+
@Override
92+
public void onDisable() {
93+
SqlHandler.getInstance().shutdownConnection();
94+
}
95+
6196
public static MiniMessage getMiniMessage() {
6297
return miniMessage;
6398
}
@@ -74,15 +109,4 @@ public static ConsoleCommandSender getPMConsoleSender() {
74109
return consoleSender;
75110
}
76111

77-
private void registerCommands() {
78-
Objects.requireNonNull(this.getCommand("msg")).setExecutor(new PrivateMessage());
79-
Objects.requireNonNull(this.getCommand("reply")).setExecutor(new Reply());
80-
Objects.requireNonNull(this.getCommand("socialspy")).setExecutor(new SocialSpy());
81-
Objects.requireNonNull(this.getCommand("spmreload")).setExecutor(new Reload());
82-
Objects.requireNonNull(this.getCommand("block")).setExecutor(new Block());
83-
Objects.requireNonNull(this.getCommand("unblock")).setExecutor(new Unblock());
84-
Objects.requireNonNull(this.getCommand("blocklist")).setExecutor(new Blocklist());
85-
Objects.requireNonNull(this.getCommand("msgtoggle")).setExecutor(new MessageToggle());
86-
}
87-
88112
}
Lines changed: 62 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,70 @@
11
package simplexity.simplepms.commands;
22

3+
import com.mojang.brigadier.Command;
4+
import com.mojang.brigadier.arguments.StringArgumentType;
5+
import com.mojang.brigadier.context.CommandContext;
6+
import com.mojang.brigadier.exceptions.CommandSyntaxException;
7+
import com.mojang.brigadier.tree.LiteralCommandNode;
8+
import io.papermc.paper.command.brigadier.CommandSourceStack;
9+
import io.papermc.paper.command.brigadier.Commands;
310
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
4-
import org.bukkit.command.Command;
5-
import org.bukkit.command.CommandExecutor;
11+
import org.bukkit.OfflinePlayer;
612
import org.bukkit.command.CommandSender;
713
import org.bukkit.entity.Player;
814
import org.jetbrains.annotations.NotNull;
9-
import simplexity.simplepms.config.Message;
10-
import simplexity.simplepms.logic.Util;
11-
import simplexity.simplepms.objects.PlayerBlock;
12-
import simplexity.simplepms.saving.Cache;
13-
14-
import java.util.Arrays;
15-
16-
public class Block implements CommandExecutor {
17-
@Override
18-
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) {
19-
if (!(sender instanceof Player player)) {
20-
sender.sendRichMessage(Message.ONLY_PLAYER.getMessage());
21-
return false;
22-
}
23-
if (args.length == 0) {
24-
player.sendRichMessage(Message.NO_USER_PROVIDED.getMessage());
25-
return false;
26-
}
27-
String playerToBlockString = args[0];
28-
Player playerToBlock = Util.getInstance().getPlayer(playerToBlockString);
29-
if (playerToBlock == null) {
30-
sender.sendRichMessage(Message.RECIPIENT_NOT_EXIST.getMessage(),
31-
Placeholder.parsed("name", playerToBlockString));
32-
return false;
33-
}
34-
String blockReason = String.join(" ", Arrays.copyOfRange(args, 1, args.length));
35-
PlayerBlock playerBlock = new PlayerBlock(
36-
player.getUniqueId(),
37-
playerToBlock.getName(),
38-
playerToBlock.getUniqueId(),
39-
blockReason);
40-
Cache.addBlockedUser(player.getUniqueId(), playerBlock);
41-
player.sendRichMessage(Message.BLOCKED_PLAYER.getMessage(),
42-
Placeholder.parsed("name", playerToBlockString));
43-
return true;
15+
import simplexity.simplepms.commands.arguments.OfflinePlayerArgument;
16+
import simplexity.simplepms.commands.util.Exceptions;
17+
import simplexity.simplepms.config.LocaleMessage;
18+
import simplexity.simplepms.logic.BlockHandler;
19+
import simplexity.simplepms.logic.Constants;
20+
21+
@SuppressWarnings("UnstableApiUsage")
22+
public class Block {
23+
24+
public static LiteralCommandNode<CommandSourceStack> createCommand() {
25+
OfflinePlayerArgument offlinePlayerArg = new OfflinePlayerArgument();
26+
27+
return Commands.literal("block")
28+
.requires(Block::canExecute)
29+
.then(Commands.argument("target", offlinePlayerArg)
30+
.suggests(offlinePlayerArg::suggestOnlinePlayers)
31+
.executes(Block::execute)
32+
.then(Commands.argument("reason", StringArgumentType.greedyString())
33+
.executes(Block::executeWithReason))).build();
34+
4435
}
36+
37+
private static boolean canExecute(CommandSourceStack css) {
38+
if (!(css.getSender() instanceof Player)) return false;
39+
return css.getSender().hasPermission(Constants.MESSAGE_BLOCK);
40+
}
41+
42+
private static int execute(CommandContext<CommandSourceStack> ctx) throws CommandSyntaxException {
43+
CommandSender sender = ctx.getSource().getSender();
44+
if (!(sender instanceof Player playerSender)) throw Exceptions.ERROR_MUST_BE_PLAYER.create();
45+
OfflinePlayer target = ctx.getArgument("target", OfflinePlayer.class);
46+
BlockHandler.addBlockedPlayer(playerSender, target, null);
47+
sendSuccessMessage(playerSender, target);
48+
return Command.SINGLE_SUCCESS;
49+
}
50+
51+
private static int executeWithReason(CommandContext<CommandSourceStack> ctx) throws CommandSyntaxException {
52+
CommandSender sender = ctx.getSource().getSender();
53+
if (!(sender instanceof Player playerSender)) throw Exceptions.ERROR_MUST_BE_PLAYER.create();
54+
OfflinePlayer target = ctx.getArgument("target", OfflinePlayer.class);
55+
String reason = ctx.getArgument("reason", String.class);
56+
BlockHandler.addBlockedPlayer(playerSender, target, reason);
57+
sendSuccessMessage(playerSender, target);
58+
return Command.SINGLE_SUCCESS;
59+
}
60+
61+
private static void sendSuccessMessage(@NotNull Player sender, @NotNull OfflinePlayer blockedPlayer) {
62+
String blockedPlayerName = blockedPlayer.getName();
63+
if (blockedPlayerName == null) blockedPlayerName = "[NO NAME FOUND]"; // Attempting to make intellij shut up
64+
sender.sendRichMessage(
65+
LocaleMessage.BLOCKED_PLAYER.getMessage(),
66+
Placeholder.parsed("name", blockedPlayerName)
67+
);
68+
}
69+
4570
}
Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,56 @@
11
package simplexity.simplepms.commands;
22

3+
import com.mojang.brigadier.Command;
4+
import com.mojang.brigadier.tree.LiteralCommandNode;
5+
import io.papermc.paper.command.brigadier.CommandSourceStack;
6+
import io.papermc.paper.command.brigadier.Commands;
37
import net.kyori.adventure.text.Component;
48
import net.kyori.adventure.text.minimessage.MiniMessage;
59
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
6-
import org.bukkit.command.Command;
7-
import org.bukkit.command.CommandExecutor;
8-
import org.bukkit.command.CommandSender;
910
import org.bukkit.entity.Player;
10-
import org.jetbrains.annotations.NotNull;
1111
import simplexity.simplepms.SimplePMs;
12-
import simplexity.simplepms.config.Message;
13-
import simplexity.simplepms.objects.PlayerBlock;
12+
import simplexity.simplepms.config.LocaleMessage;
13+
import simplexity.simplepms.logic.Constants;
1414
import simplexity.simplepms.saving.Cache;
15+
import simplexity.simplepms.saving.objects.PlayerBlock;
1516

1617
import java.util.List;
1718
import java.util.UUID;
1819

19-
public class Blocklist implements CommandExecutor {
20+
@SuppressWarnings("UnstableApiUsage")
21+
public class Blocklist {
2022

21-
private final MiniMessage miniMessage = SimplePMs.getMiniMessage();
23+
private static final MiniMessage miniMessage = SimplePMs.getMiniMessage();
2224

23-
@Override
24-
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, @NotNull String[] args) {
25-
if (!(sender instanceof Player player)) {
26-
sender.sendMessage(Message.ONLY_PLAYER.getMessage());
27-
return false;
28-
}
29-
UUID uuid = player.getUniqueId();
30-
List<PlayerBlock> blockList = Cache.getBlockList(uuid);
31-
if (blockList == null || blockList.isEmpty()) {
32-
player.sendRichMessage(Message.BLOCKLIST_EMPTY.getMessage());
33-
return true;
34-
}
35-
Component message = miniMessage.deserialize(Message.BLOCKLIST_HEADER.getMessage());
36-
for (PlayerBlock block : blockList) {
37-
message = message.appendNewline();
38-
message = message.append(miniMessage.deserialize(
39-
Message.BLOCKLIST_NAME.getMessage(),
40-
Placeholder.parsed("name", block.blockedPlayerName())
41-
));
42-
if (block.blockReason() == null || block.blockReason().isEmpty()) continue;
43-
message = message.append(miniMessage.deserialize(Message.BLOCKLIST_REASON.getMessage(),
44-
Placeholder.parsed("reason", block.blockReason())));
45-
}
46-
sender.sendMessage(message);
47-
return true;
25+
public static LiteralCommandNode<CommandSourceStack> createCommand() {
26+
return Commands.literal("blocklist")
27+
.requires(Blocklist::canExecute)
28+
.executes(ctx -> {
29+
Player player = (Player) ctx.getSource().getSender();
30+
UUID uuid = player.getUniqueId();
31+
List<PlayerBlock> blockList = Cache.getBlockList(uuid);
32+
if (blockList == null || blockList.isEmpty()) {
33+
player.sendRichMessage(LocaleMessage.BLOCKLIST_EMPTY.getMessage());
34+
return Command.SINGLE_SUCCESS;
35+
}
36+
Component message = miniMessage.deserialize(LocaleMessage.BLOCKLIST_HEADER.getMessage());
37+
for (PlayerBlock block : blockList) {
38+
message = message.appendNewline();
39+
message = message.append(miniMessage.deserialize(
40+
LocaleMessage.BLOCKLIST_NAME.getMessage(),
41+
Placeholder.parsed("name", block.getBlockedPlayerName())
42+
));
43+
if (block.getBlockReason() == null || block.getBlockReason().isEmpty()) continue;
44+
message = message.append(miniMessage.deserialize(LocaleMessage.BLOCKLIST_REASON.getMessage(),
45+
Placeholder.parsed("reason", block.getBlockReason())));
46+
}
47+
player.sendMessage(message);
48+
return Command.SINGLE_SUCCESS;
49+
}).build();
50+
}
51+
52+
private static boolean canExecute(CommandSourceStack css) {
53+
if (!(css.getSender() instanceof Player)) return false;
54+
return css.getSender().hasPermission(Constants.MESSAGE_BLOCK);
4855
}
4956
}

0 commit comments

Comments
 (0)