Skip to content

Commit e3e247d

Browse files
MowstylJRoy
andauthored
Add discord module support for Paper's chat events (#5908)
Co-authored-by: JRoy <[email protected]>
1 parent 5a839c4 commit e3e247d

File tree

3 files changed

+81
-23
lines changed

3 files changed

+81
-23
lines changed

EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@
3737
import net.essentialsx.discord.interactions.commands.ExecuteCommand;
3838
import net.essentialsx.discord.interactions.commands.ListCommand;
3939
import net.essentialsx.discord.interactions.commands.MessageCommand;
40+
import net.essentialsx.discord.listeners.BukkitChatListener;
4041
import net.essentialsx.discord.listeners.BukkitListener;
4142
import net.essentialsx.discord.listeners.DiscordCommandDispatcher;
4243
import net.essentialsx.discord.listeners.DiscordListener;
4344
import net.essentialsx.discord.listeners.EssentialsChatListener;
44-
import net.essentialsx.discord.listeners.BukkitChatListener;
45+
import net.essentialsx.discord.listeners.PaperChatListener;
4546
import net.essentialsx.discord.util.ConsoleInjector;
4647
import net.essentialsx.discord.util.DiscordUtil;
4748
import net.essentialsx.discord.util.MessageUtil;
@@ -350,9 +351,13 @@ public void updateListener() {
350351
chatListener = null;
351352
}
352353

353-
chatListener = getSettings().isUseEssentialsEvents() && plugin.isEssentialsChat()
354-
? new EssentialsChatListener(this)
355-
: new BukkitChatListener(this);
354+
if (getSettings().isUseEssentialsEvents() && plugin.isEssentialsChat()) {
355+
chatListener = new EssentialsChatListener(this);
356+
} else if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_16_5_R01) && VersionUtil.isPaper() && plugin.getEss().getSettings().isUsePaperChatEvent()) {
357+
chatListener = new PaperChatListener(this);
358+
} else {
359+
chatListener = new BukkitChatListener(this);
360+
}
356361

357362
Bukkit.getPluginManager().registerEvents(chatListener, plugin);
358363
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package net.essentialsx.discord.listeners;
2+
3+
import net.ess3.provider.AbstractChatEvent;
4+
import net.ess3.provider.providers.PaperChatListenerProvider;
5+
import net.essentialsx.api.v2.ChatType;
6+
import net.essentialsx.api.v2.events.discord.DiscordChatMessageEvent;
7+
import net.essentialsx.discord.JDADiscordService;
8+
import org.bukkit.Bukkit;
9+
import org.bukkit.entity.Player;
10+
11+
public class PaperChatListener extends PaperChatListenerProvider {
12+
private final JDADiscordService jda;
13+
14+
public PaperChatListener(JDADiscordService jda) {
15+
this.jda = jda;
16+
}
17+
18+
@Override
19+
public void onChatMonitor(AbstractChatEvent event) {
20+
if (event.isCancelled()) {
21+
return;
22+
}
23+
24+
final Player player = event.getPlayer();
25+
Bukkit.getScheduler().runTask(jda.getPlugin(), () -> {
26+
final DiscordChatMessageEvent chatEvent = new DiscordChatMessageEvent(event.getPlayer(), event.getMessage(), ChatType.UNKNOWN);
27+
chatEvent.setCancelled(!jda.getSettings().isShowAllChat() && !event.recipients().containsAll(Bukkit.getOnlinePlayers()));
28+
Bukkit.getPluginManager().callEvent(chatEvent);
29+
if (chatEvent.isCancelled()) {
30+
return;
31+
}
32+
33+
jda.sendChatMessage(player, chatEvent.getMessage());
34+
});
35+
}
36+
}

providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperChatListenerProvider.java

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,42 +23,59 @@ public PaperChatListenerProvider() {
2323
.useUnusualXRepeatedCharacterHexFormat().build();
2424
}
2525

26-
public abstract void onChatLowest(final AbstractChatEvent event);
26+
public void onChatLowest(final AbstractChatEvent event) {
2727

28-
public abstract void onChatNormal(final AbstractChatEvent event);
28+
}
29+
30+
public void onChatNormal(final AbstractChatEvent event) {
31+
32+
}
33+
34+
public void onChatHighest(final AbstractChatEvent event) {
35+
36+
}
37+
38+
public void onChatMonitor(final AbstractChatEvent event) {
2939

30-
public abstract void onChatHighest(final AbstractChatEvent event);
40+
}
3141

3242
@EventHandler(priority = EventPriority.LOWEST)
33-
public void onLowest(final AsyncChatEvent event) {
43+
public final void onLowest(final AsyncChatEvent event) {
3444
onChatLowest(wrap(event));
3545
}
3646

3747
@EventHandler(priority = EventPriority.NORMAL)
38-
public void onNormal(final AsyncChatEvent event) {
48+
public final void onNormal(final AsyncChatEvent event) {
3949
onChatNormal(wrap(event));
4050
}
4151

4252
@EventHandler(priority = EventPriority.HIGHEST)
43-
public void onHighest(final AsyncChatEvent event) {
53+
public final void onHighest(final AsyncChatEvent event) {
4454
final PaperChatEvent paperChatEvent = wrap(event);
4555
onChatHighest(paperChatEvent);
4656

47-
if (!event.isCancelled()) {
48-
final TextComponent format = serializer.deserialize(paperChatEvent.getFormat());
49-
final TextComponent eventMessage = serializer.deserialize(paperChatEvent.getMessage());
50-
51-
event.renderer(ChatRenderer.viewerUnaware((player, displayName, message) ->
52-
format.replaceText(builder -> builder
53-
.match("%(\\d)\\$s").replacement((index, match) -> {
54-
if (index.group(1).equals("1")) {
55-
return displayName;
56-
}
57-
return eventMessage;
58-
})
59-
)));
57+
if (event.isCancelled()) {
58+
return;
6059
}
6160

61+
final TextComponent format = serializer.deserialize(paperChatEvent.getFormat());
62+
final TextComponent eventMessage = serializer.deserialize(paperChatEvent.getMessage());
63+
64+
event.renderer(ChatRenderer.viewerUnaware((player, displayName, message) ->
65+
format.replaceText(builder -> builder
66+
.match("%(\\d)\\$s").replacement((index, match) -> {
67+
if (index.group(1).equals("1")) {
68+
return displayName;
69+
}
70+
return eventMessage;
71+
})
72+
)));
73+
}
74+
75+
@EventHandler(priority = EventPriority.MONITOR)
76+
public final void onMonitor(final AsyncChatEvent event) {
77+
onChatMonitor(wrap(event));
78+
6279
eventMap.remove(event);
6380
}
6481

0 commit comments

Comments
 (0)