Skip to content

Commit 15c9ab8

Browse files
committed
Rewrite Work, implemented Event for private message
1 parent 2240ffa commit 15c9ab8

File tree

16 files changed

+298
-161
lines changed

16 files changed

+298
-161
lines changed

src/main/java/adhdmc/simplepms/SimplePMs.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@
77
import adhdmc.simplepms.listeners.LoginListener;
88
import adhdmc.simplepms.utils.Message;
99
import net.kyori.adventure.text.minimessage.MiniMessage;
10+
import org.bukkit.entity.Player;
1011
import org.bukkit.plugin.Plugin;
1112
import org.bukkit.plugin.java.JavaPlugin;
1213

14+
import java.util.HashSet;
15+
1316
public final class SimplePMs extends JavaPlugin {
1417
//todo: Add placeholderAPI support
1518
//todo: Add message event
@@ -40,11 +43,21 @@ public static Plugin getInstance() {
4043
return instance;
4144
}
4245

46+
public boolean isPapiEnabled() {
47+
return papiEnabled;
48+
}
49+
4350
private void registerCommands() {
4451
this.getCommand("msg").setExecutor(new PrivateMessage());
4552
this.getCommand("reply").setExecutor(new ReplyCommand());
4653
this.getCommand("socialspy").setExecutor(new SocialSpyCommand());
4754
this.getCommand("spmreload").setExecutor(new ReloadCommand());
4855
}
4956

57+
private static final HashSet<Player> spyingPlayers = new HashSet<>();
58+
59+
public static HashSet<Player> getSpyingPlayers() {
60+
return spyingPlayers;
61+
}
62+
5063
}

src/main/java/adhdmc/simplepms/commands/BlockCommand.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/main/java/adhdmc/simplepms/commands/PrivateMessage.java

Lines changed: 79 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package adhdmc.simplepms.commands;
22

33
import adhdmc.simplepms.SimplePMs;
4-
import adhdmc.simplepms.utils.SPMKey;
5-
import adhdmc.simplepms.utils.Message;
6-
import adhdmc.simplepms.utils.SPMPerm;
7-
import adhdmc.simplepms.utils.Util;
4+
import adhdmc.simplepms.events.PrivateMessageEvent;
5+
import adhdmc.simplepms.utils.*;
86
import net.kyori.adventure.text.Component;
97
import net.kyori.adventure.text.minimessage.MiniMessage;
108
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
@@ -26,73 +24,105 @@
2624
import java.util.stream.Collectors;
2725

2826
public class PrivateMessage implements CommandExecutor, TabCompleter {
29-
private final HashSet<Player> spyingPlayers = Util.getSpyingPlayers();
30-
private final NamespacedKey lastMessaged = SPMKey.LAST_MESSAGED.getKey();
31-
private final String console = Util.console;
27+
private static PrivateMessage instance;
28+
29+
public static PrivateMessage getInstance() {
30+
return instance;
31+
}
32+
33+
HashSet<Player> spyingPlayers = SimplePMs.getSpyingPlayers();
34+
NamespacedKey lastMessaged = SPMKey.LAST_MESSAGED.getKey();
3235

3336
MiniMessage miniMessage = SimplePMs.getMiniMessage();
3437
@Override
3538
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
3639
if (args.length == 0) {
37-
sender.sendMessage(miniMessage.deserialize(Message.ERROR_NO_RECIPIENT_PROVIDED.getMessage(),
38-
Placeholder.parsed("plugin_prefix", Message.PLUGIN_PREFIX.getMessage())));
40+
sender.sendMessage(Resolvers.getInstance().parsePluginPrefix(Message.ERROR_NO_RECIPIENT_PROVIDED.getMessage()));
3941
return true;
4042
}
4143
if (args.length == 1) {
42-
sender.sendMessage(miniMessage.deserialize(Message.ERROR_BLANK_MESSAGE.getMessage(),
43-
Placeholder.parsed("plugin_prefix", Message.PLUGIN_PREFIX.getMessage())));
44+
sender.sendMessage(Resolvers.getInstance().parsePluginPrefix(Message.ERROR_BLANK_MESSAGE.getMessage()));
4445
return true;
4546
}
46-
if (!sender.hasPermission(SPMPerm.SEND_MESSAGE.getPerm())) {
47-
sender.sendMessage(miniMessage.deserialize(Message.ERROR_NO_PERMISSION.getMessage(),
48-
Placeholder.parsed("plugin_prefix", Message.PLUGIN_PREFIX.getMessage())));
47+
if (!sender.hasPermission(Perms.SEND_MESSAGE.getPerm())) {
48+
sender.sendMessage(Resolvers.getInstance().parsePluginPrefix(Message.ERROR_NO_PERMISSION.getMessage()));
4949
return false;
5050
}
51-
Player recipient = Bukkit.getPlayer(args[0]);
52-
if (recipient == null) {
53-
sender.sendMessage(miniMessage.deserialize(Message.ERROR_RECIPIENT_OFFLINE.getMessage(),
54-
Placeholder.parsed("plugin_prefix", Message.PLUGIN_PREFIX.getMessage()),
55-
Placeholder.parsed("receiver", args[0])));
51+
if (args[0].equalsIgnoreCase(Message.PDC_CONSOLE.getMessage())) {
52+
consoleReciever(sender);
5653
return true;
5754
}
58-
// TODO: Implement ignore-list checker.
59-
if (false) {
60-
sender.sendMessage(miniMessage.deserialize(Message.ERROR_RECIPIENT_BLOCKED.getMessage(),
61-
Placeholder.parsed("plugin_prefix", Message.PLUGIN_PREFIX.getMessage())));
62-
return true;
55+
Player recipient = Bukkit.getPlayer(args[0]);
56+
if (recipient == null) {
57+
sender.sendMessage(Resolvers.getInstance().parsePluginPrefixAndString(Message.ERROR_RECIPIENT_OFFLINE.getMessage(), "receiver", args[0]));
58+
return false;
6359
}
64-
Component senderName;
65-
Component senderSpyName;
66-
Component recieverSpyName = miniMessage.deserialize("<gray>" + recipient.getName());
60+
String message = String.join(" ", Arrays.stream(args).skip(1).collect(Collectors.joining(" ")));
6761
if (sender instanceof Player player){
68-
player.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, recipient.getName());
69-
recipient.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, player.getName());
70-
senderName = player.displayName();
71-
senderSpyName = miniMessage.deserialize("<gray>" + player.getName());
62+
playerSender(player, recipient, message);
7263
} else {
73-
recipient.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, console);
74-
senderName = miniMessage.deserialize(Message.CONSOLE_FORMAT.getMessage());
75-
senderSpyName = miniMessage.deserialize(Message.CONSOLE_FORMAT_SPY.getMessage());
64+
consoleSender(sender, recipient, message);
7665
}
77-
String message = String.join(" ", Arrays.stream(args).skip(1).collect(Collectors.joining(" ")));
7866
// TODO: Implement message event in place of this.
79-
for (Player spy : spyingPlayers) {
80-
if (!spy.isOnline()) continue;
81-
if (spy.equals(sender) || spy.equals(recipient)) continue;
82-
spy.sendMessage(miniMessage.deserialize(Message.SPY_FORMAT.getMessage(),
83-
Placeholder.component("sender", senderSpyName),
84-
Placeholder.component("receiver", recieverSpyName),
85-
Placeholder.unparsed("message", message)));
86-
}
87-
sender.sendMessage(miniMessage.deserialize(Message.SENDING_FORMAT.getMessage(),
88-
Placeholder.component("receiver", recipient.displayName()),
89-
Placeholder.unparsed("message", message)));
90-
recipient.sendMessage(miniMessage.deserialize(Message.RECEIVING_FORMAT.getMessage(),
91-
Placeholder.component("sender", senderName),
92-
Placeholder.unparsed("message", message)));
9367
return true;
9468
}
9569

70+
public void playerSender(Player initiator, Player recipient, String messageContent) {
71+
// Calls private message event so other plugins can interact with this
72+
PrivateMessageEvent event = new PrivateMessageEvent(initiator, recipient, messageContent, spyingPlayers);
73+
Bukkit.getServer().getPluginManager().callEvent(event);
74+
initiator.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, recipient.getName());
75+
recipient.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, initiator.getName());
76+
if (Toggle.DISPLAYNAME.isEnabled()) {
77+
initiator.sendMessage(Resolvers.getInstance().parseMessagePlayerDisplayName(Message.SENDING_FORMAT.getMessage(), initiator, recipient, messageContent));
78+
recipient.sendMessage(Resolvers.getInstance().parseMessagePlayerDisplayName(Message.RECEIVING_FORMAT.getMessage(), initiator, recipient, messageContent));
79+
for (Player spy : spyingPlayers) {
80+
if (!spy.isOnline()) continue;
81+
if (spy.equals(initiator) || spy.equals(recipient)) continue;
82+
spy.sendMessage(Resolvers.getInstance().parseMessagePlayerDisplayName(Message.SPY_FORMAT.getMessage(), initiator, recipient, messageContent));
83+
}
84+
} else {
85+
initiator.sendMessage(Resolvers.getInstance().parseMessagePlayerUsername(Message.SENDING_FORMAT.getMessage(), initiator, recipient, messageContent));
86+
recipient.sendMessage(Resolvers.getInstance().parseMessagePlayerUsername(Message.RECEIVING_FORMAT.getMessage(), initiator, recipient, messageContent));
87+
for (Player spy : spyingPlayers) {
88+
if (!spy.isOnline()) continue;
89+
if (spy.equals(initiator) || spy.equals(recipient)) continue;
90+
spy.sendMessage(Resolvers.getInstance().parseMessagePlayerUsername(Message.SPY_FORMAT.getMessage(), initiator, recipient, messageContent));
91+
}
92+
}
93+
}
94+
95+
public void consoleSender(CommandSender initiator, Player recipient, String messageContent) {
96+
PrivateMessageEvent event = new PrivateMessageEvent(initiator, recipient, messageContent, spyingPlayers);
97+
Bukkit.getServer().getPluginManager().callEvent(event);
98+
Component initiatorComponent = miniMessage.deserialize(Message.CONSOLE_FORMAT.getMessage());
99+
recipient.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, Message.PDC_CONSOLE.getMessage());
100+
if (Toggle.DISPLAYNAME.isEnabled()){
101+
recipient.sendMessage(Resolvers.getInstance().parseMessageConsolePlayerDisplayName(Message.RECEIVING_FORMAT.getMessage(), initiatorComponent, recipient, messageContent));
102+
initiator.sendMessage(Resolvers.getInstance().parseMessageConsolePlayerDisplayName(Message.SENDING_FORMAT.getMessage(), initiatorComponent, recipient, messageContent));
103+
for (Player spy : spyingPlayers) {
104+
if (!spy.isOnline()) continue;
105+
if (spy.equals(initiator) || spy.equals(recipient)) continue;
106+
if (!spy.hasPermission(Perms.CONSOLE_MESSAGE_SPY.getPerm())) continue;
107+
spy.sendMessage(Resolvers.getInstance().parseMessageConsolePlayerDisplayName(Message.SPY_FORMAT.getMessage(), initiatorComponent, recipient, messageContent));
108+
}
109+
} else {
110+
recipient.sendMessage(Resolvers.getInstance().parseMessageConsolePlayerUsername(Message.RECEIVING_FORMAT.getMessage(), initiatorComponent, recipient, messageContent));
111+
initiator.sendMessage(Resolvers.getInstance().parseMessageConsolePlayerUsername(Message.SENDING_FORMAT.getMessage(), initiatorComponent, recipient, messageContent));
112+
for (Player spy : spyingPlayers) {
113+
if (!spy.isOnline()) continue;
114+
if (spy.equals(initiator) || spy.equals(recipient)) continue;
115+
if (!spy.hasPermission(Perms.CONSOLE_MESSAGE_SPY.getPerm())) continue;
116+
spy.sendMessage(Resolvers.getInstance().parseMessageConsolePlayerUsername(Message.SPY_FORMAT.getMessage(), initiatorComponent, recipient, messageContent));
117+
}
118+
}
119+
}
120+
121+
122+
public void consoleReciever(CommandSender initiator) {
123+
124+
}
125+
96126
@Override
97127
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
98128
if (args.length > 1) return new ArrayList<>();

src/main/java/adhdmc/simplepms/commands/ReloadCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import adhdmc.simplepms.SimplePMs;
44
import adhdmc.simplepms.utils.Message;
5-
import adhdmc.simplepms.utils.SPMPerm;
5+
import adhdmc.simplepms.utils.Perms;
66
import net.kyori.adventure.text.minimessage.MiniMessage;
77
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
88
import org.bukkit.command.Command;
@@ -19,7 +19,7 @@ public class ReloadCommand implements CommandExecutor, TabCompleter {
1919

2020
@Override
2121
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
22-
if (!sender.hasPermission(SPMPerm.RELOAD_CONFIG.getPerm())) {
22+
if (!sender.hasPermission(Perms.RELOAD_CONFIG.getPerm())) {
2323
sender.sendMessage(miniMessage.deserialize(Message.ERROR_NO_PERMISSION.getMessage(),
2424
Placeholder.parsed("plugin_prefix", Message.PLUGIN_PREFIX.getMessage())));
2525
return false;

src/main/java/adhdmc/simplepms/commands/ReplyCommand.java

Lines changed: 17 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@
33
import adhdmc.simplepms.SimplePMs;
44
import adhdmc.simplepms.utils.SPMKey;
55
import adhdmc.simplepms.utils.Message;
6-
import adhdmc.simplepms.utils.Util;
6+
import adhdmc.simplepms.utils.Resolvers;
77
import net.kyori.adventure.audience.Audience;
88
import net.kyori.adventure.text.Component;
99
import net.kyori.adventure.text.minimessage.MiniMessage;
1010
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
11+
import org.bukkit.Bukkit;
1112
import org.bukkit.NamespacedKey;
1213
import org.bukkit.Server;
13-
import org.bukkit.command.Command;
14-
import org.bukkit.command.CommandExecutor;
15-
import org.bukkit.command.CommandSender;
16-
import org.bukkit.command.TabCompleter;
14+
import org.bukkit.command.*;
1715
import org.bukkit.entity.Player;
1816
import org.bukkit.persistence.PersistentDataContainer;
1917
import org.bukkit.persistence.PersistentDataType;
@@ -26,69 +24,34 @@
2624
import java.util.List;
2725
import java.util.stream.Collectors;
2826

29-
public class ReplyCommand implements CommandExecutor, TabCompleter {
30-
private final HashSet<Player> spyingPlayers = Util.getSpyingPlayers();
27+
public class ReplyCommand implements TabExecutor {
28+
private final HashSet<Player> spyingPlayers = SimplePMs.getSpyingPlayers();
3129
private final NamespacedKey lastMessaged = SPMKey.LAST_MESSAGED.getKey();
32-
private final String console = Util.console;
3330
private final Server server = SimplePMs.getInstance().getServer();
3431
private final MiniMessage miniMessage = SimplePMs.getMiniMessage();
3532
@Override
3633
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
3734
if (!(sender instanceof Player player)) {
38-
sender.sendMessage(miniMessage.deserialize(Message.ERROR_PLAYER_COMMAND.getMessage(),
39-
Placeholder.parsed("plugin_prefix", Message.PLUGIN_PREFIX.getMessage())));
40-
return true;
41-
}
42-
PersistentDataContainer playerPDC = player.getPersistentDataContainer();
43-
String lastUserMessaged = playerPDC.get(lastMessaged, PersistentDataType.STRING);
44-
if (lastUserMessaged == null) {
45-
player.sendRichMessage(Message.NO_USER_TO_REPLY.getMessage());
35+
sender.sendMessage(Resolvers.getInstance().parsePluginPrefix(Message.ERROR_PLAYER_COMMAND.getMessage()));
4636
return false;
4737
}
48-
Player recipient = server.getPlayer(lastUserMessaged);
49-
if ((recipient == null) && !lastUserMessaged.equals(console)) {
50-
player.sendRichMessage(Message.NO_USER_TO_REPLY.getMessage());
51-
return false;
52-
}
53-
Component recipientName;
54-
Component senderSpyName;
55-
Component recieverSpyName = miniMessage.deserialize("<gray>" + recipient.getName());
56-
if (lastUserMessaged.equals(console)){
57-
recipientName = miniMessage.deserialize(Message.CONSOLE_FORMAT.getMessage());
58-
playerPDC.set(lastMessaged, PersistentDataType.STRING, console);
59-
senderSpyName = miniMessage.deserialize(Message.CONSOLE_FORMAT_SPY.getMessage());
60-
} else {
61-
recipientName = recipient.displayName();
62-
playerPDC.set(lastMessaged, PersistentDataType.STRING, recipient.getName());
63-
recipient.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, player.getName());
64-
senderSpyName = miniMessage.deserialize("<gray>" + player.getName());
65-
}
66-
String message = String.join(" ", Arrays.stream(args).skip(0).collect(Collectors.joining(" ")));
67-
// TODO: Implement message event in place of this.
68-
for (Player spy : spyingPlayers) {
69-
if (!spy.isOnline()) continue;
70-
if (spy.equals(sender) || spy.equals(recipient)) continue;
71-
spy.sendMessage(miniMessage.deserialize(Message.SPY_FORMAT.getMessage(),
72-
Placeholder.component("sender", senderSpyName),
73-
Placeholder.component("receiver", recieverSpyName),
74-
Placeholder.unparsed("message", message)));
38+
String message = String.join(" ", Arrays.stream(args).skip(1).collect(Collectors.joining(" ")));
39+
PersistentDataContainer playerPDC = player.getPersistentDataContainer();
40+
String lastMessagedPlayer = playerPDC.getOrDefault(lastMessaged, PersistentDataType.STRING, "");
41+
if (lastMessagedPlayer.equalsIgnoreCase(Message.PDC_CONSOLE.getMessage())) {
42+
7543
}
76-
sender.sendMessage(miniMessage.deserialize(Message.SENDING_FORMAT.getMessage(),
77-
Placeholder.component("receiver", recipientName),
78-
Placeholder.parsed("message", message)));
44+
Player recipient = Bukkit.getServer().getPlayer(lastMessagedPlayer);
7945
if (recipient == null) {
80-
Audience console = server.getConsoleSender();
81-
console.sendMessage(miniMessage.deserialize(Message.RECEIVING_FORMAT.getMessage(),
82-
Placeholder.component("sender", player.displayName()),
83-
Placeholder.unparsed("message", message)));
84-
return true;
46+
player.sendMessage(Resolvers.getInstance().parsePluginPrefixAndString(Message.ERROR_RECIPIENT_OFFLINE.getMessage(), "receiver", lastMessagedPlayer));
47+
return false;
8548
}
86-
recipient.sendMessage(miniMessage.deserialize(Message.RECEIVING_FORMAT.getMessage(),
87-
Placeholder.component("sender", player.displayName()),
88-
Placeholder.unparsed("message", message)));
49+
8950
return true;
51+
9052
}
9153

54+
9255
@Override
9356
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
9457
return new ArrayList<>();

src/main/java/adhdmc/simplepms/commands/SocialSpyCommand.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import adhdmc.simplepms.SimplePMs;
44
import adhdmc.simplepms.utils.SPMKey;
55
import adhdmc.simplepms.utils.Message;
6-
import adhdmc.simplepms.utils.SPMPerm;
7-
import adhdmc.simplepms.utils.Util;
6+
import adhdmc.simplepms.utils.Perms;
7+
import adhdmc.simplepms.utils.Resolvers;
88
import net.kyori.adventure.text.minimessage.MiniMessage;
99
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
1010
import org.bukkit.NamespacedKey;
@@ -23,15 +23,15 @@
2323

2424
public class SocialSpyCommand implements CommandExecutor, TabCompleter {
2525

26-
private final HashSet<Player> spyingPlayers = Util.getSpyingPlayers();
26+
private final HashSet<Player> spyingPlayers = SimplePMs.getSpyingPlayers();
2727
private final NamespacedKey spyToggle = SPMKey.SPY_TOGGLE.getKey();
2828
private final MiniMessage miniMessage = SimplePMs.getMiniMessage();
2929

3030

3131
@Override
3232
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
3333
//Check permissions
34-
if (!sender.hasPermission(SPMPerm.SOCIAL_SPY_TOGGLE.getPerm())) {
34+
if (!sender.hasPermission(Perms.SOCIAL_SPY_TOGGLE.getPerm())) {
3535
sender.sendMessage(miniMessage.deserialize(Message.ERROR_NO_PERMISSION.getMessage(),
3636
Placeholder.parsed("plugin_prefix", Message.PLUGIN_PREFIX.getMessage())));
3737
return false;

0 commit comments

Comments
 (0)