From d47b339908c546c52e5c08576e27322a48404bc0 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Tue, 9 Feb 2021 13:51:43 -0500 Subject: [PATCH] Add PlayerPluginMessageRegisterEvent --- .../PlayerPluginMessageRegisterEvent.java | 37 +++++++++++++++++++ .../client/ClientPlaySessionHandler.java | 6 ++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 api/src/main/java/com/velocitypowered/api/event/player/PlayerPluginMessageRegisterEvent.java diff --git a/api/src/main/java/com/velocitypowered/api/event/player/PlayerPluginMessageRegisterEvent.java b/api/src/main/java/com/velocitypowered/api/event/player/PlayerPluginMessageRegisterEvent.java new file mode 100644 index 000000000..0683661f3 --- /dev/null +++ b/api/src/main/java/com/velocitypowered/api/event/player/PlayerPluginMessageRegisterEvent.java @@ -0,0 +1,37 @@ +package com.velocitypowered.api.event.player; + +import com.google.common.base.Preconditions; +import com.velocitypowered.api.proxy.Player; + +import java.util.List; + +/** + * This event is fired when a client ({@link Player}) sends a plugin message through the + * register channel. + */ +public final class PlayerPluginMessageRegisterEvent { + + private final Player player; + private final List channels; + + public PlayerPluginMessageRegisterEvent(Player player, List channels) { + this.player = Preconditions.checkNotNull(player, "player"); + this.channels = Preconditions.checkNotNull(channels, "channels"); + } + + public Player getPlayer() { + return player; + } + + public List getChannels() { + return channels; + } + + @Override + public String toString() { + return "PlayerPluginMessageRegisterEvent{" + + "player=" + player + + ", channels=" + channels + + '}'; + } +} diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java index 414e2520b..0df9b7594 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ClientPlaySessionHandler.java @@ -8,6 +8,7 @@ import static com.velocitypowered.proxy.protocol.util.PluginMessageUtil.construc import com.velocitypowered.api.event.command.CommandExecuteEvent.CommandResult; import com.velocitypowered.api.event.connection.PluginMessageEvent; import com.velocitypowered.api.event.player.PlayerChatEvent; +import com.velocitypowered.api.event.player.PlayerPluginMessageRegisterEvent; import com.velocitypowered.api.event.player.PlayerResourcePackStatusEvent; import com.velocitypowered.api.event.player.TabCompleteEvent; import com.velocitypowered.api.network.ProtocolVersion; @@ -190,7 +191,10 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler { logger.warn("A plugin message was received while the backend server was not " + "ready. Channel: {}. Packet discarded.", packet.getChannel()); } else if (PluginMessageUtil.isRegister(packet)) { - player.getKnownChannels().addAll(PluginMessageUtil.getChannels(packet)); + List channels = PluginMessageUtil.getChannels(packet); + player.getKnownChannels().addAll(channels); + server.getEventManager().fireAndForget(new PlayerPluginMessageRegisterEvent(player, + channels)); backendConn.write(packet.retain()); } else if (PluginMessageUtil.isUnregister(packet)) { player.getKnownChannels().removeAll(PluginMessageUtil.getChannels(packet));