diff --git a/pom.xml b/pom.xml
index a5f29eb..55efbe9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
simplexity
SimplePMs
- 2.4.3
+ 2.5.4-SNAPSHOT
jar
SimplePMs
diff --git a/src/main/java/adhdmc/simplepms/SimplePMs.java b/src/main/java/adhdmc/simplepms/SimplePMs.java
new file mode 100644
index 0000000..563ae86
--- /dev/null
+++ b/src/main/java/adhdmc/simplepms/SimplePMs.java
@@ -0,0 +1,66 @@
+package adhdmc.simplepms;
+
+import adhdmc.simplepms.commands.PrivateMessage;
+import adhdmc.simplepms.commands.ReloadCommand;
+import adhdmc.simplepms.commands.ReplyCommand;
+import adhdmc.simplepms.commands.SocialSpyCommand;
+import adhdmc.simplepms.config.LocaleConfig;
+import adhdmc.simplepms.listeners.LoginListener;
+import adhdmc.simplepms.listeners.MessageRegexListener;
+import adhdmc.simplepms.listeners.QuitListener;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.util.HashSet;
+import java.util.Objects;
+
+public final class SimplePMs extends JavaPlugin {
+
+ private static Plugin instance;
+ private static final MiniMessage miniMessage = MiniMessage.miniMessage();
+ private static boolean papiEnabled = false;
+
+ @Override
+ public void onEnable() {
+ instance = this;
+ registerCommands();
+ this.getServer().getPluginManager().registerEvents(new LoginListener(), this);
+ this.getServer().getPluginManager().registerEvents(new QuitListener(), this);
+ this.getServer().getPluginManager().registerEvents(new MessageRegexListener(), this);
+ if (this.getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
+ papiEnabled = true;
+ } else {
+ this.getLogger().info("You do not have PlaceholderAPI loaded on your server. Any PlaceholderAPI placeholders used in this plugin's messages, will not work.");
+ }
+ LocaleConfig.getInstance().reloadLocale();
+ }
+
+ public static MiniMessage getMiniMessage() {
+ return miniMessage;
+ }
+
+ public static Plugin getInstance() {
+ return instance;
+ }
+
+ public static boolean isPapiEnabled() {
+ return papiEnabled;
+ }
+
+ private void registerCommands() {
+ Objects.requireNonNull(this.getCommand("msg")).setExecutor(new PrivateMessage());
+ Objects.requireNonNull(this.getCommand("reply")).setExecutor(new ReplyCommand());
+ Objects.requireNonNull(this.getCommand("socialspy")).setExecutor(new SocialSpyCommand());
+ Objects.requireNonNull(this.getCommand("spmreload")).setExecutor(new ReloadCommand());
+ }
+
+
+ private static final HashSet spyingPlayers = new HashSet<>();
+
+ public static HashSet getSpyingPlayers() {
+ return spyingPlayers;
+ }
+
+}
diff --git a/src/main/java/adhdmc/simplepms/handling/MessageHandling.java b/src/main/java/adhdmc/simplepms/handling/MessageHandling.java
new file mode 100644
index 0000000..2c9efe7
--- /dev/null
+++ b/src/main/java/adhdmc/simplepms/handling/MessageHandling.java
@@ -0,0 +1,118 @@
+package adhdmc.simplepms.handling;
+
+import adhdmc.simplepms.SimplePMs;
+import adhdmc.simplepms.events.PrivateMessageEvent;
+import adhdmc.simplepms.utils.Message;
+import adhdmc.simplepms.utils.Perm;
+import adhdmc.simplepms.utils.SPMKey;
+import net.kyori.adventure.text.Component;
+import org.bukkit.Bukkit;
+import org.bukkit.NamespacedKey;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.persistence.PersistentDataType;
+
+import java.util.HashSet;
+
+public class MessageHandling {
+ private static MessageHandling instance;
+ private MessageHandling(){}
+
+ public static MessageHandling getInstance() {
+ if (instance == null) instance = new MessageHandling();
+ return instance;
+ }
+ HashSet spyingPlayers = SimplePMs.getSpyingPlayers();
+ NamespacedKey lastMessaged = SPMKey.LAST_MESSAGED.getKey();
+ Component consoleChatComponent = SimplePMs.getMiniMessage().deserialize(Message.CONSOLE_FORMAT.getMessage());
+ Component consoleSpyComponent = SimplePMs.getMiniMessage().deserialize(Message.CONSOLE_FORMAT_SPY.getMessage());
+
+ /**
+ * Calls the message event and handles socialspy for a message between 2 players.
+ *
Sends messageContent to Resolvers.
+ *
Uses Message keys:
+ * - RECEIVING_FORMAT
+ *
- SENDING_FORMAT
+ *
- SPY_FORMAT
+ * @param initiator Player
+ * @param recipient Player
+ * @param messageContent String
+ */
+ public void playerSenderAndReceiver(Player initiator, Player recipient, String messageContent) {
+ // Calls private message event so other plugins can interact with this
+ PrivateMessageEvent event = new PrivateMessageEvent(initiator, recipient, messageContent, spyingPlayers);
+ Bukkit.getServer().getPluginManager().callEvent(event);
+ if (event.isCancelled()) return;
+ initiator.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, recipient.getName());
+ recipient.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, initiator.getName());
+ initiator.sendMessage(Resolvers.getInstance().parseMessagePlayerToPlayer(Message.SENDING_FORMAT.getMessage(), initiator, recipient, event.getMessageContent()));
+ recipient.sendMessage(Resolvers.getInstance().parseMessagePlayerToPlayer(Message.RECEIVING_FORMAT.getMessage(), initiator, recipient, event.getMessageContent()));
+ for (Player spy : spyingPlayers) {
+ if (!spy.isOnline()) continue;
+ if (spy.equals(initiator) || spy.equals(recipient)) continue;
+ spy.sendMessage(Resolvers.getInstance().parseMessagePlayerToPlayer(Message.SPY_FORMAT.getMessage(), initiator, recipient, event.getMessageContent()));
+ }
+ }
+
+ /**
+ * Calls the message event and handles socialspy for a message sent by the console, and received by a player
+ *
Sends messageContent to Resolvers.
+ *
Uses Message keys:
+ * - RECEIVING_FORMAT
+ *
- SENDING_FORMAT
+ *
- CONSOLE_FORMAT
+ *
- SPY_FORMAT
+ *
- CONSOLE_FORMAT_SPY
+ * @param initiator CommandSender
+ * @param recipient Player
+ * @param messageContent String
+ */
+ public void consoleSenderPlayerReceiver(CommandSender initiator, Player recipient, String messageContent) {
+ // Call Event
+ PrivateMessageEvent event = new PrivateMessageEvent(initiator, recipient, messageContent, spyingPlayers);
+ Bukkit.getServer().getPluginManager().callEvent(event);
+ if (event.isCancelled()) return;
+ recipient.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, Message.PDC_CONSOLE.getMessage());
+ recipient.sendMessage(Resolvers.getInstance().parseMessageConsoleToPlayer(Message.RECEIVING_FORMAT.getMessage(), consoleChatComponent, recipient, event.getMessageContent()));
+ initiator.sendMessage(Resolvers.getInstance().parseMessageConsoleToPlayer(Message.SENDING_FORMAT.getMessage(), consoleChatComponent, recipient, event.getMessageContent()));
+ for (Player spy : spyingPlayers) {
+ if (!spy.isOnline()) continue;
+ if (spy.equals(initiator) || spy.equals(recipient)) continue;
+ if (!spy.hasPermission(Perm.CONSOLE_MESSAGE_SPY.getPerm())) continue;
+ spy.sendMessage(Resolvers.getInstance().parseMessageConsoleToPlayer(Message.SPY_FORMAT.getMessage(), consoleSpyComponent, recipient, event.getMessageContent()));
+ }
+ }
+
+
+ /**
+ * Calls the message event and handles socialspy for a message sent by a player to the console.
+ *
Sends messageContent to Resolvers.
+ *
Uses Message keys:
+ * - ERROR_PLAYER_COMMAND
+ *
- SENDING_FORMAT
+ *
- CONSOLE_FORMAT
+ *
- SPY_FORMAT
+ *
- CONSOLE_FORMAT_SPY
+ * @param initiator CommandSender
+ * @param messageContent String
+ */
+
+ public void playerSenderConsoleReceiver(CommandSender initiator, String messageContent) {
+ if (!(initiator instanceof Player initiatingPlayer)){
+ initiator.sendMessage(Resolvers.getInstance().parsePluginPrefix(Message.ERROR_PLAYER_COMMAND.getMessage()));
+ return;
+ }
+ // Call Event
+ PrivateMessageEvent event = new PrivateMessageEvent(initiator, Bukkit.getConsoleSender(), messageContent, spyingPlayers);
+ Bukkit.getServer().getPluginManager().callEvent(event);
+ if (event.isCancelled()) return;
+ initiatingPlayer.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, Message.PDC_CONSOLE.getMessage());
+ initiatingPlayer.sendMessage(Resolvers.getInstance().parseMessagePlayerToConsole(Message.SENDING_FORMAT.getMessage(), initiatingPlayer, consoleChatComponent, event.getMessageContent()));
+ for (Player spy : spyingPlayers) {
+ if (!spy.isOnline()) continue;
+ if (spy.equals(initiator)) continue;
+ if (!spy.hasPermission(Perm.CONSOLE_MESSAGE_SPY.getPerm())) continue;
+ spy.sendMessage(Resolvers.getInstance().parseMessagePlayerToConsole(Message.SPY_FORMAT.getMessage(),initiatingPlayer, consoleSpyComponent, event.getMessageContent()));
+ }
+ }
+}
diff --git a/src/main/java/adhdmc/simplepms/listeners/MessageRegexListener.java b/src/main/java/adhdmc/simplepms/listeners/MessageRegexListener.java
new file mode 100644
index 0000000..771dea5
--- /dev/null
+++ b/src/main/java/adhdmc/simplepms/listeners/MessageRegexListener.java
@@ -0,0 +1,28 @@
+package adhdmc.simplepms.listeners;
+
+import adhdmc.simplepms.events.PrivateMessageEvent;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MessageRegexListener implements Listener {
+
+ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+ public void onSimplePM(PrivateMessageEvent event) {
+ // TODO: Make Configurable, add bypass permission.
+ Map sampleRegexes = new HashMap<>();
+ sampleRegexes.put("averysimpleregex", "Censored 1");
+ sampleRegexes.put("averysimpleregex2", "Censored 2");
+ sampleRegexes.put("averysimpleregex3", "Censored 3");
+
+ String message = event.getMessageContent();
+ for (Map.Entry entry : sampleRegexes.entrySet()) {
+ message = message.replace(entry.getKey(), entry.getValue());
+ }
+ event.setMessageContent(message);
+ }
+
+}
diff --git a/src/main/java/simplexity/simplepms/events/PrivateMessageEvent.java b/src/main/java/simplexity/simplepms/events/PrivateMessageEvent.java
index 498a913..6c82f4a 100644
--- a/src/main/java/simplexity/simplepms/events/PrivateMessageEvent.java
+++ b/src/main/java/simplexity/simplepms/events/PrivateMessageEvent.java
@@ -15,11 +15,10 @@
*/
@SuppressWarnings("unused")
public class PrivateMessageEvent extends Event implements Cancellable {
-
- private CommandSender initiator;
- private CommandSender recipient;
- private String messageContent;
- private final Set spyingPlayers;
+ private final CommandSender initiator;
+ private final CommandSender recipient;
+ private final String messageContent;
+ private final HashSet spyingPlayers;
private boolean cancelled;
private static final HandlerList handlers = new HandlerList();
@@ -81,17 +80,6 @@ public String getMessageContent() {
return messageContent;
}
- /**
- * Sets the message that will be sent from this event.
- * Note that this only affects the actual message content and not the way the message is formatted
- *
- * @param messageContent String
- */
-
- public void setMessageContent(String messageContent) {
- this.messageContent = messageContent;
- }
-
/**
* Gets the list of players who currently have SocialSpy toggled on
*