Skip to content

Commit ec2fd0b

Browse files
committed
That's what we call a memory leak, pt2
Changed MessageHandling to use event's message content. Registered MessageRegexListener and QuitListener event listeners. This has been purosefully borked
1 parent 2139d60 commit ec2fd0b

File tree

2 files changed

+184
-0
lines changed

2 files changed

+184
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package adhdmc.simplepms;
2+
3+
import adhdmc.simplepms.commands.PrivateMessage;
4+
import adhdmc.simplepms.commands.ReloadCommand;
5+
import adhdmc.simplepms.commands.ReplyCommand;
6+
import adhdmc.simplepms.commands.SocialSpyCommand;
7+
import adhdmc.simplepms.config.LocaleConfig;
8+
import adhdmc.simplepms.listeners.LoginListener;
9+
import adhdmc.simplepms.listeners.MessageRegexListener;
10+
import adhdmc.simplepms.listeners.QuitListener;
11+
import net.kyori.adventure.text.minimessage.MiniMessage;
12+
import org.bukkit.entity.Player;
13+
import org.bukkit.plugin.Plugin;
14+
import org.bukkit.plugin.java.JavaPlugin;
15+
16+
import java.util.HashSet;
17+
import java.util.Objects;
18+
19+
public final class SimplePMs extends JavaPlugin {
20+
21+
private static Plugin instance;
22+
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
23+
private static boolean papiEnabled = false;
24+
25+
@Override
26+
public void onEnable() {
27+
instance = this;
28+
registerCommands();
29+
this.getServer().getPluginManager().registerEvents(new LoginListener(), this);
30+
this.getServer().getPluginManager().registerEvents(new QuitListener(), this);
31+
this.getServer().getPluginManager().registerEvents(new MessageRegexListener(), this);
32+
if (this.getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
33+
papiEnabled = true;
34+
} else {
35+
this.getLogger().info("You do not have PlaceholderAPI loaded on your server. Any PlaceholderAPI placeholders used in this plugin's messages, will not work.");
36+
}
37+
LocaleConfig.getInstance().reloadLocale();
38+
}
39+
40+
public static MiniMessage getMiniMessage() {
41+
return miniMessage;
42+
}
43+
44+
public static Plugin getInstance() {
45+
return instance;
46+
}
47+
48+
public static boolean isPapiEnabled() {
49+
return papiEnabled;
50+
}
51+
52+
private void registerCommands() {
53+
Objects.requireNonNull(this.getCommand("msg")).setExecutor(new PrivateMessage());
54+
Objects.requireNonNull(this.getCommand("reply")).setExecutor(new ReplyCommand());
55+
Objects.requireNonNull(this.getCommand("socialspy")).setExecutor(new SocialSpyCommand());
56+
Objects.requireNonNull(this.getCommand("spmreload")).setExecutor(new ReloadCommand());
57+
}
58+
59+
60+
private static final HashSet<Player> spyingPlayers = new HashSet<>();
61+
62+
public static HashSet<Player> getSpyingPlayers() {
63+
return spyingPlayers;
64+
}
65+
66+
}
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package adhdmc.simplepms.handling;
2+
3+
import adhdmc.simplepms.SimplePMs;
4+
import adhdmc.simplepms.events.PrivateMessageEvent;
5+
import adhdmc.simplepms.utils.Message;
6+
import adhdmc.simplepms.utils.Perm;
7+
import adhdmc.simplepms.utils.SPMKey;
8+
import net.kyori.adventure.text.Component;
9+
import org.bukkit.Bukkit;
10+
import org.bukkit.NamespacedKey;
11+
import org.bukkit.command.CommandSender;
12+
import org.bukkit.entity.Player;
13+
import org.bukkit.persistence.PersistentDataType;
14+
15+
import java.util.HashSet;
16+
17+
public class MessageHandling {
18+
private static MessageHandling instance;
19+
private MessageHandling(){}
20+
21+
public static MessageHandling getInstance() {
22+
if (instance == null) instance = new MessageHandling();
23+
return instance;
24+
}
25+
HashSet<Player> spyingPlayers = SimplePMs.getSpyingPlayers();
26+
NamespacedKey lastMessaged = SPMKey.LAST_MESSAGED.getKey();
27+
Component consoleChatComponent = SimplePMs.getMiniMessage().deserialize(Message.CONSOLE_FORMAT.getMessage());
28+
Component consoleSpyComponent = SimplePMs.getMiniMessage().deserialize(Message.CONSOLE_FORMAT_SPY.getMessage());
29+
30+
/**
31+
* Calls the message event and handles socialspy for a message between 2 players.
32+
* <br>Sends messageContent to Resolvers.
33+
* <br>Uses Message keys:
34+
* <ul><li>RECEIVING_FORMAT
35+
* <li>SENDING_FORMAT
36+
* <li>SPY_FORMAT</ul>
37+
* @param initiator Player
38+
* @param recipient Player
39+
* @param messageContent String
40+
*/
41+
public void playerSenderAndReceiver(Player initiator, Player recipient, String messageContent) {
42+
// Calls private message event so other plugins can interact with this
43+
PrivateMessageEvent event = new PrivateMessageEvent(initiator, recipient, messageContent, spyingPlayers);
44+
Bukkit.getServer().getPluginManager().callEvent(event);
45+
if (event.isCancelled()) return;
46+
initiator.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, recipient.getName());
47+
recipient.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, initiator.getName());
48+
initiator.sendMessage(Resolvers.getInstance().parseMessagePlayerToPlayer(Message.SENDING_FORMAT.getMessage(), initiator, recipient, event.getMessageContent()));
49+
recipient.sendMessage(Resolvers.getInstance().parseMessagePlayerToPlayer(Message.RECEIVING_FORMAT.getMessage(), initiator, recipient, event.getMessageContent()));
50+
for (Player spy : spyingPlayers) {
51+
if (!spy.isOnline()) continue;
52+
if (spy.equals(initiator) || spy.equals(recipient)) continue;
53+
spy.sendMessage(Resolvers.getInstance().parseMessagePlayerToPlayer(Message.SPY_FORMAT.getMessage(), initiator, recipient, event.getMessageContent()));
54+
}
55+
}
56+
57+
/**
58+
* Calls the message event and handles socialspy for a message sent by the console, and received by a player
59+
* <br>Sends messageContent to Resolvers.
60+
* <br>Uses Message keys:
61+
* <ul><li>RECEIVING_FORMAT
62+
* <li>SENDING_FORMAT
63+
* <li>CONSOLE_FORMAT
64+
* <li>SPY_FORMAT
65+
* <li>CONSOLE_FORMAT_SPY</ul>
66+
* @param initiator CommandSender
67+
* @param recipient Player
68+
* @param messageContent String
69+
*/
70+
public void consoleSenderPlayerReceiver(CommandSender initiator, Player recipient, String messageContent) {
71+
// Call Event
72+
PrivateMessageEvent event = new PrivateMessageEvent(initiator, recipient, messageContent, spyingPlayers);
73+
Bukkit.getServer().getPluginManager().callEvent(event);
74+
if (event.isCancelled()) return;
75+
recipient.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, Message.PDC_CONSOLE.getMessage());
76+
recipient.sendMessage(Resolvers.getInstance().parseMessageConsoleToPlayer(Message.RECEIVING_FORMAT.getMessage(), consoleChatComponent, recipient, event.getMessageContent()));
77+
initiator.sendMessage(Resolvers.getInstance().parseMessageConsoleToPlayer(Message.SENDING_FORMAT.getMessage(), consoleChatComponent, recipient, event.getMessageContent()));
78+
for (Player spy : spyingPlayers) {
79+
if (!spy.isOnline()) continue;
80+
if (spy.equals(initiator) || spy.equals(recipient)) continue;
81+
if (!spy.hasPermission(Perm.CONSOLE_MESSAGE_SPY.getPerm())) continue;
82+
spy.sendMessage(Resolvers.getInstance().parseMessageConsoleToPlayer(Message.SPY_FORMAT.getMessage(), consoleSpyComponent, recipient, event.getMessageContent()));
83+
}
84+
}
85+
86+
87+
/**
88+
* Calls the message event and handles socialspy for a message sent by a player to the console.
89+
* <br>Sends messageContent to Resolvers.
90+
* <br>Uses Message keys:
91+
* <ul><li>ERROR_PLAYER_COMMAND
92+
* <li>SENDING_FORMAT
93+
* <li>CONSOLE_FORMAT
94+
* <li>SPY_FORMAT
95+
* <li>CONSOLE_FORMAT_SPY</ul>
96+
* @param initiator CommandSender
97+
* @param messageContent String
98+
*/
99+
100+
public void playerSenderConsoleReceiver(CommandSender initiator, String messageContent) {
101+
if (!(initiator instanceof Player initiatingPlayer)){
102+
initiator.sendMessage(Resolvers.getInstance().parsePluginPrefix(Message.ERROR_PLAYER_COMMAND.getMessage()));
103+
return;
104+
}
105+
// Call Event
106+
PrivateMessageEvent event = new PrivateMessageEvent(initiator, Bukkit.getConsoleSender(), messageContent, spyingPlayers);
107+
Bukkit.getServer().getPluginManager().callEvent(event);
108+
if (event.isCancelled()) return;
109+
initiatingPlayer.getPersistentDataContainer().set(lastMessaged, PersistentDataType.STRING, Message.PDC_CONSOLE.getMessage());
110+
initiatingPlayer.sendMessage(Resolvers.getInstance().parseMessagePlayerToConsole(Message.SENDING_FORMAT.getMessage(), initiatingPlayer, consoleChatComponent, event.getMessageContent()));
111+
for (Player spy : spyingPlayers) {
112+
if (!spy.isOnline()) continue;
113+
if (spy.equals(initiator)) continue;
114+
if (!spy.hasPermission(Perm.CONSOLE_MESSAGE_SPY.getPerm())) continue;
115+
spy.sendMessage(Resolvers.getInstance().parseMessagePlayerToConsole(Message.SPY_FORMAT.getMessage(),initiatingPlayer, consoleSpyComponent, event.getMessageContent()));
116+
}
117+
}
118+
}

0 commit comments

Comments
 (0)