From 38e76787bc80e1bf889669fd9dfbead3d65407b4 Mon Sep 17 00:00:00 2001 From: Mowstyl Date: Fri, 16 Aug 2024 19:17:27 +0200 Subject: [PATCH 1/7] Discord plugin can use paper event --- .../discord/JDADiscordService.java | 30 +++++++++---- .../discord/listeners/PaperChatListener.java | 35 +++++++++++++++ .../ess3/provider/AbstractAsyncChatEvent.java | 44 ++++++++++++++++++ .../PaperAsyncChatListenerProvider.java | 45 +++++++++++++++++++ 4 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/PaperChatListener.java create mode 100644 providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java create mode 100644 providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 2843e55af2b..ba62ef57aa1 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -22,6 +22,7 @@ import net.ess3.nms.refl.providers.AchievementListenerProvider; import net.ess3.nms.refl.providers.AdvancementListenerProvider; import net.ess3.provider.providers.PaperAdvancementListenerProvider; +import net.ess3.provider.providers.PaperAsyncChatListenerProvider; import net.essentialsx.api.v2.ChatType; import net.essentialsx.api.v2.events.discord.DiscordMessageEvent; import net.essentialsx.api.v2.services.discord.DiscordService; @@ -37,11 +38,7 @@ import net.essentialsx.discord.interactions.commands.ExecuteCommand; import net.essentialsx.discord.interactions.commands.ListCommand; import net.essentialsx.discord.interactions.commands.MessageCommand; -import net.essentialsx.discord.listeners.BukkitListener; -import net.essentialsx.discord.listeners.DiscordCommandDispatcher; -import net.essentialsx.discord.listeners.DiscordListener; -import net.essentialsx.discord.listeners.EssentialsChatListener; -import net.essentialsx.discord.listeners.BukkitChatListener; +import net.essentialsx.discord.listeners.*; import net.essentialsx.discord.util.ConsoleInjector; import net.essentialsx.discord.util.DiscordUtil; import net.essentialsx.discord.util.MessageUtil; @@ -88,6 +85,7 @@ public class JDADiscordService implements DiscordService, IEssentialsModule { private DiscordCommandDispatcher commandDispatcher; private InteractionControllerImpl interactionController; private Listener chatListener; + private Listener paperChatListener; private boolean invalidStartup = false; public JDADiscordService(EssentialsDiscord plugin) { @@ -349,12 +347,28 @@ public void updateListener() { HandlerList.unregisterAll(chatListener); chatListener = null; } + if (paperChatListener != null) { + HandlerList.unregisterAll(paperChatListener); + paperChatListener = null; + } - chatListener = getSettings().isUseEssentialsEvents() && plugin.isEssentialsChat() - ? new EssentialsChatListener(this) - : new BukkitChatListener(this); + if (getSettings().isUseEssentialsEvents() && plugin.isEssentialsChat()) { + chatListener = new EssentialsChatListener(this); + } + else { + try { + Class.forName("io.papermc.paper.event.player.AsyncChatEvent"); + chatListener = new PaperChatListener(this); + paperChatListener = new PaperAsyncChatListenerProvider(); + } catch (ClassNotFoundException ignored) { + chatListener = new BukkitChatListener(this); + } + } Bukkit.getPluginManager().registerEvents(chatListener, plugin); + if (paperChatListener != null) { + Bukkit.getPluginManager().registerEvents(paperChatListener, plugin); + } } public void updatePresence() { diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/PaperChatListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/PaperChatListener.java new file mode 100644 index 00000000000..5acb2dee0f3 --- /dev/null +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/PaperChatListener.java @@ -0,0 +1,35 @@ +package net.essentialsx.discord.listeners; + +import net.ess3.provider.AbstractAsyncChatEvent; +import net.essentialsx.api.v2.ChatType; +import net.essentialsx.api.v2.events.discord.DiscordChatMessageEvent; +import net.essentialsx.discord.JDADiscordService; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +public class PaperChatListener implements Listener { + private final JDADiscordService jda; + + public PaperChatListener(JDADiscordService jda) { + this.jda = jda; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onChat(AbstractAsyncChatEvent event) { + final Player player = event.getPlayer(); + + Bukkit.getScheduler().runTask(jda.getPlugin(), () -> { + final DiscordChatMessageEvent chatEvent = new DiscordChatMessageEvent(event.getPlayer(), event.getMessage(), ChatType.UNKNOWN); + chatEvent.setCancelled(!jda.getSettings().isShowAllChat() && !event.getRecipients().containsAll(Bukkit.getOnlinePlayers())); + Bukkit.getPluginManager().callEvent(chatEvent); + if (chatEvent.isCancelled()) { + return; + } + + jda.sendChatMessage(player, chatEvent.getMessage()); + }); + } +} diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java b/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java new file mode 100644 index 00000000000..271faaf5581 --- /dev/null +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java @@ -0,0 +1,44 @@ +package net.ess3.provider; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; + +public class AbstractAsyncChatEvent extends Event { + private static final HandlerList handlers = new HandlerList(); + + private final Player player; + private final String legacyMessage; + private final Set playerRecipients; + + public AbstractAsyncChatEvent(Player player, String message, Set recipients) { + super(true); + this.player = player; + this.legacyMessage = message; + this.playerRecipients = recipients; + } + + public Player getPlayer() { + return player; + } + + public String getMessage() { + return legacyMessage; + } + + public Set getRecipients() { + return playerRecipients; + }; + + @Override + public @NotNull HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java new file mode 100644 index 00000000000..44f4227e0f5 --- /dev/null +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java @@ -0,0 +1,45 @@ +package net.ess3.provider.providers; + +import io.papermc.paper.event.player.AsyncChatEvent; +import io.papermc.paper.text.PaperComponents; +import net.ess3.provider.AbstractAsyncChatEvent; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.serializer.ComponentSerializer; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import java.util.function.Consumer; +import java.util.stream.Collectors; + +public class PaperAsyncChatListenerProvider implements Listener { + private final ComponentSerializer serializer; + + public PaperAsyncChatListenerProvider() { + ComponentSerializer yeOldSerializer; + try { + // This method is only available in Paper 1.18.1+ and replaces the old deprecated method below. + yeOldSerializer = PaperComponents.plainTextSerializer(); + } catch (NoSuchMethodError e) { + //noinspection deprecation + yeOldSerializer = PaperComponents.plainSerializer(); + } + this.serializer = yeOldSerializer; + } + + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onAsyncChatEvent(final AsyncChatEvent event) { + Bukkit.getPluginManager().callEvent(new AbstractAsyncChatEvent( + event.getPlayer(), + serializer.serialize(event.message()), + event.viewers().stream() + .filter(v -> v instanceof Player) + .map(v -> (Player) v) + .collect(Collectors.toSet()))); + } +} From 360046ceabd7596fce64b37fc59266836f076270 Mon Sep 17 00:00:00 2001 From: Mowstyl Date: Fri, 16 Aug 2024 19:56:31 +0200 Subject: [PATCH 2/7] Removed unused imports --- .../ess3/provider/providers/PaperAsyncChatListenerProvider.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java index 44f4227e0f5..0f6c9532588 100644 --- a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java @@ -8,12 +8,10 @@ import net.kyori.adventure.text.serializer.ComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import java.util.function.Consumer; import java.util.stream.Collectors; public class PaperAsyncChatListenerProvider implements Listener { From db87f11e37ac63048ea169da5ff94d7115cece75 Mon Sep 17 00:00:00 2001 From: Mowstyl Date: Sat, 17 Aug 2024 12:00:31 +0200 Subject: [PATCH 3/7] Now the event is always fired async --- .../discord/JDADiscordService.java | 2 +- .../PaperAsyncChatListenerProvider.java | 24 ++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index ba62ef57aa1..3a493f38ff1 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -359,7 +359,7 @@ public void updateListener() { try { Class.forName("io.papermc.paper.event.player.AsyncChatEvent"); chatListener = new PaperChatListener(this); - paperChatListener = new PaperAsyncChatListenerProvider(); + paperChatListener = new PaperAsyncChatListenerProvider(plugin); } catch (ClassNotFoundException ignored) { chatListener = new BukkitChatListener(this); } diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java index 0f6c9532588..936edce5e8c 100644 --- a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java @@ -11,13 +11,16 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.plugin.java.JavaPlugin; import java.util.stream.Collectors; public class PaperAsyncChatListenerProvider implements Listener { private final ComponentSerializer serializer; + private final JavaPlugin plugin; - public PaperAsyncChatListenerProvider() { + public PaperAsyncChatListenerProvider(JavaPlugin plugin) { + this.plugin = plugin; ComponentSerializer yeOldSerializer; try { // This method is only available in Paper 1.18.1+ and replaces the old deprecated method below. @@ -32,12 +35,17 @@ public PaperAsyncChatListenerProvider() { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onAsyncChatEvent(final AsyncChatEvent event) { - Bukkit.getPluginManager().callEvent(new AbstractAsyncChatEvent( - event.getPlayer(), - serializer.serialize(event.message()), - event.viewers().stream() - .filter(v -> v instanceof Player) - .map(v -> (Player) v) - .collect(Collectors.toSet()))); + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> + Bukkit.getPluginManager().callEvent( + new AbstractAsyncChatEvent( + event.getPlayer(), + serializer.serialize(event.message()), + event.viewers().stream() + .filter(v -> v instanceof Player) + .map(v -> (Player) v) + .collect(Collectors.toSet()) + ) + ) + ); } } From 2292da79dfde0f29d410ec429812acbaa2516290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hern=C3=A1n=20Ind=C3=ADbil=20de=20la=20Cruz=20Calvo?= Date: Tue, 20 Aug 2024 23:40:38 +0200 Subject: [PATCH 4/7] Removed runTaskAsynchronously --- .../ess3/provider/AbstractAsyncChatEvent.java | 14 ++++---------- .../PaperAsyncChatListenerProvider.java | 19 +++++++++---------- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java b/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java index 271faaf5581..97acaa62643 100644 --- a/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java @@ -1,30 +1,24 @@ package net.ess3.provider; import org.bukkit.entity.Player; -import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; import java.util.Set; -public class AbstractAsyncChatEvent extends Event { +public class AbstractAsyncChatEvent extends PlayerEvent { private static final HandlerList handlers = new HandlerList(); - private final Player player; private final String legacyMessage; private final Set playerRecipients; - public AbstractAsyncChatEvent(Player player, String message, Set recipients) { - super(true); - this.player = player; + public AbstractAsyncChatEvent(boolean async, Player sender, String message, Set recipients) { + super(sender, async); this.legacyMessage = message; this.playerRecipients = recipients; } - public Player getPlayer() { - return player; - } - public String getMessage() { return legacyMessage; } diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java index 936edce5e8c..7bf837c6644 100644 --- a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java @@ -35,16 +35,15 @@ public PaperAsyncChatListenerProvider(JavaPlugin plugin) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onAsyncChatEvent(final AsyncChatEvent event) { - Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> - Bukkit.getPluginManager().callEvent( - new AbstractAsyncChatEvent( - event.getPlayer(), - serializer.serialize(event.message()), - event.viewers().stream() - .filter(v -> v instanceof Player) - .map(v -> (Player) v) - .collect(Collectors.toSet()) - ) + Bukkit.getPluginManager().callEvent( + new AbstractAsyncChatEvent( + event.isAsynchronous(), + event.getPlayer(), + serializer.serialize(event.message()), + event.viewers().stream() + .filter(v -> v instanceof Player) + .map(v -> (Player) v) + .collect(Collectors.toSet()) ) ); } From 900c0173f1ad8108f5d5dc28e4bb6c9f96cf32c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hern=C3=A1n=20Ind=C3=ADbil=20de=20la=20Cruz=20Calvo?= Date: Sun, 1 Sep 2024 22:29:31 +0200 Subject: [PATCH 5/7] Style fixes --- .../net/essentialsx/discord/JDADiscordService.java | 10 +++++++--- .../java/net/ess3/provider/AbstractAsyncChatEvent.java | 2 +- .../providers/PaperAsyncChatListenerProvider.java | 1 - 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index 3a493f38ff1..a5e6fccec22 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -38,7 +38,12 @@ import net.essentialsx.discord.interactions.commands.ExecuteCommand; import net.essentialsx.discord.interactions.commands.ListCommand; import net.essentialsx.discord.interactions.commands.MessageCommand; -import net.essentialsx.discord.listeners.*; +import net.essentialsx.discord.listeners.BukkitChatListener; +import net.essentialsx.discord.listeners.BukkitListener; +import net.essentialsx.discord.listeners.DiscordCommandDispatcher; +import net.essentialsx.discord.listeners.DiscordListener; +import net.essentialsx.discord.listeners.EssentialsChatListener; +import net.essentialsx.discord.listeners.PaperChatListener; import net.essentialsx.discord.util.ConsoleInjector; import net.essentialsx.discord.util.DiscordUtil; import net.essentialsx.discord.util.MessageUtil; @@ -354,8 +359,7 @@ public void updateListener() { if (getSettings().isUseEssentialsEvents() && plugin.isEssentialsChat()) { chatListener = new EssentialsChatListener(this); - } - else { + } else { try { Class.forName("io.papermc.paper.event.player.AsyncChatEvent"); chatListener = new PaperChatListener(this); diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java b/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java index 97acaa62643..7c6d9343309 100644 --- a/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java @@ -25,7 +25,7 @@ public String getMessage() { public Set getRecipients() { return playerRecipients; - }; + } @Override public @NotNull HandlerList getHandlers() { diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java index 7bf837c6644..502bf5f33f3 100644 --- a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java @@ -32,7 +32,6 @@ public PaperAsyncChatListenerProvider(JavaPlugin plugin) { this.serializer = yeOldSerializer; } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onAsyncChatEvent(final AsyncChatEvent event) { Bukkit.getPluginManager().callEvent( From b742fb19ef6f409e61d6a9fb91c4a2e1f48f3c59 Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Fri, 21 Feb 2025 20:47:27 -0500 Subject: [PATCH 6/7] reuse new chat provider --- .../discord/JDADiscordService.java | 11 +--- .../discord/listeners/PaperChatListener.java | 19 ++++--- .../ess3/provider/AbstractAsyncChatEvent.java | 38 ------------- .../PaperAsyncChatListenerProvider.java | 49 ----------------- .../providers/PaperChatListenerProvider.java | 55 ++++++++++++------- 5 files changed, 49 insertions(+), 123 deletions(-) delete mode 100644 providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java delete mode 100644 providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index a5e6fccec22..b3014723a0d 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -22,7 +22,6 @@ import net.ess3.nms.refl.providers.AchievementListenerProvider; import net.ess3.nms.refl.providers.AdvancementListenerProvider; import net.ess3.provider.providers.PaperAdvancementListenerProvider; -import net.ess3.provider.providers.PaperAsyncChatListenerProvider; import net.essentialsx.api.v2.ChatType; import net.essentialsx.api.v2.events.discord.DiscordMessageEvent; import net.essentialsx.api.v2.services.discord.DiscordService; @@ -359,14 +358,10 @@ public void updateListener() { if (getSettings().isUseEssentialsEvents() && plugin.isEssentialsChat()) { chatListener = new EssentialsChatListener(this); + } else if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_16_5_R01) && VersionUtil.isPaper() && plugin.getEss().getSettings().isUsePaperChatEvent()) { + chatListener = new PaperChatListener(this); } else { - try { - Class.forName("io.papermc.paper.event.player.AsyncChatEvent"); - chatListener = new PaperChatListener(this); - paperChatListener = new PaperAsyncChatListenerProvider(plugin); - } catch (ClassNotFoundException ignored) { - chatListener = new BukkitChatListener(this); - } + chatListener = new BukkitChatListener(this); } Bukkit.getPluginManager().registerEvents(chatListener, plugin); diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/PaperChatListener.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/PaperChatListener.java index 5acb2dee0f3..6f5588fe450 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/PaperChatListener.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/PaperChatListener.java @@ -1,29 +1,30 @@ package net.essentialsx.discord.listeners; -import net.ess3.provider.AbstractAsyncChatEvent; +import net.ess3.provider.AbstractChatEvent; +import net.ess3.provider.providers.PaperChatListenerProvider; import net.essentialsx.api.v2.ChatType; import net.essentialsx.api.v2.events.discord.DiscordChatMessageEvent; import net.essentialsx.discord.JDADiscordService; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -public class PaperChatListener implements Listener { +public class PaperChatListener extends PaperChatListenerProvider { private final JDADiscordService jda; public PaperChatListener(JDADiscordService jda) { this.jda = jda; } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onChat(AbstractAsyncChatEvent event) { - final Player player = event.getPlayer(); + @Override + public void onChatMonitor(AbstractChatEvent event) { + if (event.isCancelled()) { + return; + } + final Player player = event.getPlayer(); Bukkit.getScheduler().runTask(jda.getPlugin(), () -> { final DiscordChatMessageEvent chatEvent = new DiscordChatMessageEvent(event.getPlayer(), event.getMessage(), ChatType.UNKNOWN); - chatEvent.setCancelled(!jda.getSettings().isShowAllChat() && !event.getRecipients().containsAll(Bukkit.getOnlinePlayers())); + chatEvent.setCancelled(!jda.getSettings().isShowAllChat() && !event.recipients().containsAll(Bukkit.getOnlinePlayers())); Bukkit.getPluginManager().callEvent(chatEvent); if (chatEvent.isCancelled()) { return; diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java b/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java deleted file mode 100644 index 7c6d9343309..00000000000 --- a/providers/PaperProvider/src/main/java/net/ess3/provider/AbstractAsyncChatEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.ess3.provider; - -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.event.player.PlayerEvent; -import org.jetbrains.annotations.NotNull; - -import java.util.Set; - -public class AbstractAsyncChatEvent extends PlayerEvent { - private static final HandlerList handlers = new HandlerList(); - - private final String legacyMessage; - private final Set playerRecipients; - - public AbstractAsyncChatEvent(boolean async, Player sender, String message, Set recipients) { - super(sender, async); - this.legacyMessage = message; - this.playerRecipients = recipients; - } - - public String getMessage() { - return legacyMessage; - } - - public Set getRecipients() { - return playerRecipients; - } - - @Override - public @NotNull HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java deleted file mode 100644 index 502bf5f33f3..00000000000 --- a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperAsyncChatListenerProvider.java +++ /dev/null @@ -1,49 +0,0 @@ -package net.ess3.provider.providers; - -import io.papermc.paper.event.player.AsyncChatEvent; -import io.papermc.paper.text.PaperComponents; -import net.ess3.provider.AbstractAsyncChatEvent; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.TextComponent; -import net.kyori.adventure.text.serializer.ComponentSerializer; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.plugin.java.JavaPlugin; - -import java.util.stream.Collectors; - -public class PaperAsyncChatListenerProvider implements Listener { - private final ComponentSerializer serializer; - private final JavaPlugin plugin; - - public PaperAsyncChatListenerProvider(JavaPlugin plugin) { - this.plugin = plugin; - ComponentSerializer yeOldSerializer; - try { - // This method is only available in Paper 1.18.1+ and replaces the old deprecated method below. - yeOldSerializer = PaperComponents.plainTextSerializer(); - } catch (NoSuchMethodError e) { - //noinspection deprecation - yeOldSerializer = PaperComponents.plainSerializer(); - } - this.serializer = yeOldSerializer; - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onAsyncChatEvent(final AsyncChatEvent event) { - Bukkit.getPluginManager().callEvent( - new AbstractAsyncChatEvent( - event.isAsynchronous(), - event.getPlayer(), - serializer.serialize(event.message()), - event.viewers().stream() - .filter(v -> v instanceof Player) - .map(v -> (Player) v) - .collect(Collectors.toSet()) - ) - ); - } -} diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperChatListenerProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperChatListenerProvider.java index 5337559855e..24a7273e71f 100644 --- a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperChatListenerProvider.java +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperChatListenerProvider.java @@ -23,42 +23,59 @@ public PaperChatListenerProvider() { .useUnusualXRepeatedCharacterHexFormat().build(); } - public abstract void onChatLowest(final AbstractChatEvent event); + public void onChatLowest(final AbstractChatEvent event) { - public abstract void onChatNormal(final AbstractChatEvent event); + } + + public void onChatNormal(final AbstractChatEvent event) { + + } + + public void onChatHighest(final AbstractChatEvent event) { + + } + + public void onChatMonitor(final AbstractChatEvent event) { - public abstract void onChatHighest(final AbstractChatEvent event); + } @EventHandler(priority = EventPriority.LOWEST) - public void onLowest(final AsyncChatEvent event) { + public final void onLowest(final AsyncChatEvent event) { onChatLowest(wrap(event)); } @EventHandler(priority = EventPriority.NORMAL) - public void onNormal(final AsyncChatEvent event) { + public final void onNormal(final AsyncChatEvent event) { onChatNormal(wrap(event)); } @EventHandler(priority = EventPriority.HIGHEST) - public void onHighest(final AsyncChatEvent event) { + public final void onHighest(final AsyncChatEvent event) { final PaperChatEvent paperChatEvent = wrap(event); onChatHighest(paperChatEvent); - if (!event.isCancelled()) { - final TextComponent format = serializer.deserialize(paperChatEvent.getFormat()); - final TextComponent eventMessage = serializer.deserialize(paperChatEvent.getMessage()); - - event.renderer(ChatRenderer.viewerUnaware((player, displayName, message) -> - format.replaceText(builder -> builder - .match("%(\\d)\\$s").replacement((index, match) -> { - if (index.group(1).equals("1")) { - return displayName; - } - return eventMessage; - }) - ))); + if (event.isCancelled()) { + return; } + final TextComponent format = serializer.deserialize(paperChatEvent.getFormat()); + final TextComponent eventMessage = serializer.deserialize(paperChatEvent.getMessage()); + + event.renderer(ChatRenderer.viewerUnaware((player, displayName, message) -> + format.replaceText(builder -> builder + .match("%(\\d)\\$s").replacement((index, match) -> { + if (index.group(1).equals("1")) { + return displayName; + } + return eventMessage; + }) + ))); + } + + @EventHandler(priority = EventPriority.MONITOR) + public final void onMonitor(final AsyncChatEvent event) { + onChatMonitor(wrap(event)); + eventMap.remove(event); } From 06fdcdc8c7040949a980a73e9393ef2046195f34 Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Fri, 21 Feb 2025 20:50:06 -0500 Subject: [PATCH 7/7] remove old instance method --- .../java/net/essentialsx/discord/JDADiscordService.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index b3014723a0d..96a8300a9a0 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -89,7 +89,6 @@ public class JDADiscordService implements DiscordService, IEssentialsModule { private DiscordCommandDispatcher commandDispatcher; private InteractionControllerImpl interactionController; private Listener chatListener; - private Listener paperChatListener; private boolean invalidStartup = false; public JDADiscordService(EssentialsDiscord plugin) { @@ -351,10 +350,6 @@ public void updateListener() { HandlerList.unregisterAll(chatListener); chatListener = null; } - if (paperChatListener != null) { - HandlerList.unregisterAll(paperChatListener); - paperChatListener = null; - } if (getSettings().isUseEssentialsEvents() && plugin.isEssentialsChat()) { chatListener = new EssentialsChatListener(this); @@ -365,9 +360,6 @@ public void updateListener() { } Bukkit.getPluginManager().registerEvents(chatListener, plugin); - if (paperChatListener != null) { - Bukkit.getPluginManager().registerEvents(paperChatListener, plugin); - } } public void updatePresence() {