diff --git a/api/src/main/java/com/velocitypowered/api/event/player/PlayerPluginMessageRegisterEvent.java b/api/src/main/java/com/velocitypowered/api/event/player/PlayerChannelRegisterEvent.java similarity index 66% rename from api/src/main/java/com/velocitypowered/api/event/player/PlayerPluginMessageRegisterEvent.java rename to api/src/main/java/com/velocitypowered/api/event/player/PlayerChannelRegisterEvent.java index 0683661f3..d9c790eed 100644 --- a/api/src/main/java/com/velocitypowered/api/event/player/PlayerPluginMessageRegisterEvent.java +++ b/api/src/main/java/com/velocitypowered/api/event/player/PlayerChannelRegisterEvent.java @@ -2,6 +2,7 @@ package com.velocitypowered.api.event.player; import com.google.common.base.Preconditions; import com.velocitypowered.api.proxy.Player; +import com.velocitypowered.api.proxy.messages.ChannelIdentifier; import java.util.List; @@ -9,12 +10,12 @@ 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 { +public final class PlayerChannelRegisterEvent { private final Player player; - private final List channels; + private final List channels; - public PlayerPluginMessageRegisterEvent(Player player, List channels) { + public PlayerChannelRegisterEvent(Player player, List channels) { this.player = Preconditions.checkNotNull(player, "player"); this.channels = Preconditions.checkNotNull(channels, "channels"); } @@ -23,13 +24,13 @@ public final class PlayerPluginMessageRegisterEvent { return player; } - public List getChannels() { + public List getChannels() { return channels; } @Override public String toString() { - return "PlayerPluginMessageRegisterEvent{" + return "PlayerChannelRegisterEvent{" + "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 0df9b7594..2f0375575 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 @@ -5,14 +5,17 @@ import static com.velocitypowered.api.network.ProtocolVersion.MINECRAFT_1_16; import static com.velocitypowered.api.network.ProtocolVersion.MINECRAFT_1_8; import static com.velocitypowered.proxy.protocol.util.PluginMessageUtil.constructChannelsPacket; +import com.google.common.collect.ImmutableList; import com.velocitypowered.api.event.command.CommandExecuteEvent.CommandResult; import com.velocitypowered.api.event.connection.PluginMessageEvent; +import com.velocitypowered.api.event.player.PlayerChannelRegisterEvent; 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; import com.velocitypowered.api.proxy.messages.ChannelIdentifier; +import com.velocitypowered.api.proxy.messages.LegacyChannelIdentifier; +import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; import com.velocitypowered.proxy.VelocityServer; import com.velocitypowered.proxy.connection.ConnectionTypes; import com.velocitypowered.proxy.connection.MinecraftConnection; @@ -193,8 +196,16 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler { } else if (PluginMessageUtil.isRegister(packet)) { List channels = PluginMessageUtil.getChannels(packet); player.getKnownChannels().addAll(channels); - server.getEventManager().fireAndForget(new PlayerPluginMessageRegisterEvent(player, - channels)); + List channelIdentifiers = new ArrayList<>(); + for (String channel : channels) { + try { + channelIdentifiers.add(MinecraftChannelIdentifier.from(channel)); + } catch (IllegalArgumentException e) { + channelIdentifiers.add(new LegacyChannelIdentifier(channel)); + } + } + server.getEventManager().fireAndForget(new PlayerChannelRegisterEvent(player, + ImmutableList.copyOf(channelIdentifiers))); backendConn.write(packet.retain()); } else if (PluginMessageUtil.isUnregister(packet)) { player.getKnownChannels().removeAll(PluginMessageUtil.getChannels(packet));