|
1 | 1 | package adhdmc.simplepms.commands; |
2 | 2 |
|
3 | 3 | 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.*; |
8 | 6 | import net.kyori.adventure.text.Component; |
9 | 7 | import net.kyori.adventure.text.minimessage.MiniMessage; |
10 | 8 | import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; |
|
26 | 24 | import java.util.stream.Collectors; |
27 | 25 |
|
28 | 26 | 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(); |
32 | 35 |
|
33 | 36 | MiniMessage miniMessage = SimplePMs.getMiniMessage(); |
34 | 37 | @Override |
35 | 38 | public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { |
36 | 39 | 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())); |
39 | 41 | return true; |
40 | 42 | } |
41 | 43 | 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())); |
44 | 45 | return true; |
45 | 46 | } |
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())); |
49 | 49 | return false; |
50 | 50 | } |
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); |
56 | 53 | return true; |
57 | 54 | } |
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; |
63 | 59 | } |
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(" "))); |
67 | 61 | 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); |
72 | 63 | } 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); |
76 | 65 | } |
77 | | - String message = String.join(" ", Arrays.stream(args).skip(1).collect(Collectors.joining(" "))); |
78 | 66 | // 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))); |
93 | 67 | return true; |
94 | 68 | } |
95 | 69 |
|
| 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 | + |
96 | 126 | @Override |
97 | 127 | public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { |
98 | 128 | if (args.length > 1) return new ArrayList<>(); |
|
0 commit comments