Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>simplexity</groupId>
<artifactId>SimplePMs</artifactId>
<version>2.4.3</version>
<version>2.5.4-SNAPSHOT</version>
<packaging>jar</packaging>

<name>SimplePMs</name>
Expand Down
66 changes: 66 additions & 0 deletions src/main/java/adhdmc/simplepms/SimplePMs.java
Original file line number Diff line number Diff line change
@@ -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<Player> spyingPlayers = new HashSet<>();

public static HashSet<Player> getSpyingPlayers() {
return spyingPlayers;
}

}
118 changes: 118 additions & 0 deletions src/main/java/adhdmc/simplepms/handling/MessageHandling.java
Original file line number Diff line number Diff line change
@@ -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<Player> 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.
* <br>Sends messageContent to Resolvers.
* <br>Uses Message keys:
* <ul><li>RECEIVING_FORMAT
* <li>SENDING_FORMAT
* <li>SPY_FORMAT</ul>
* @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
* <br>Sends messageContent to Resolvers.
* <br>Uses Message keys:
* <ul><li>RECEIVING_FORMAT
* <li>SENDING_FORMAT
* <li>CONSOLE_FORMAT
* <li>SPY_FORMAT
* <li>CONSOLE_FORMAT_SPY</ul>
* @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.
* <br>Sends messageContent to Resolvers.
* <br>Uses Message keys:
* <ul><li>ERROR_PLAYER_COMMAND
* <li>SENDING_FORMAT
* <li>CONSOLE_FORMAT
* <li>SPY_FORMAT
* <li>CONSOLE_FORMAT_SPY</ul>
* @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()));
}
}
}
28 changes: 28 additions & 0 deletions src/main/java/adhdmc/simplepms/listeners/MessageRegexListener.java
Original file line number Diff line number Diff line change
@@ -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<String, String> 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<String, String> entry : sampleRegexes.entrySet()) {
message = message.replace(entry.getKey(), entry.getValue());
}
event.setMessageContent(message);
}

}
20 changes: 4 additions & 16 deletions src/main/java/simplexity/simplepms/events/PrivateMessageEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Player> spyingPlayers;
private final CommandSender initiator;
private final CommandSender recipient;
private final String messageContent;
private final HashSet<Player> spyingPlayers;
private boolean cancelled;
private static final HandlerList handlers = new HandlerList();

Expand Down Expand Up @@ -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
*
Expand Down
Loading