diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/BackendPlaySessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/BackendPlaySessionHandler.java index 128d5c37..98b1b3e6 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/BackendPlaySessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/BackendPlaySessionHandler.java @@ -34,6 +34,8 @@ import com.velocitypowered.api.event.player.ServerResourcePackSendEvent; import com.velocitypowered.api.event.proxy.ProxyPingEvent; 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.api.proxy.player.ResourcePackInfo; import com.velocitypowered.proxy.VelocityServer; import com.velocitypowered.proxy.command.CommandGraphInjector; @@ -288,31 +290,14 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler { return true; } - // Register and unregister packets are simply forwarded to the server as-is. - if (PluginMessageUtil.isRegister(packet) || PluginMessageUtil.isUnregister(packet)) { - return false; - } - - if (PluginMessageUtil.isMcBrand(packet)) { - PluginMessagePacket rewritten = PluginMessageUtil - .rewriteMinecraftBrand(packet, - server.getVersion(), playerConnection.getProtocolVersion()); - playerConnection.write(rewritten); - return true; - } - if (serverConn.getPhase().handle(serverConn, serverConn.getPlayer(), packet)) { // Handled. return true; } - ChannelIdentifier id = server.getChannelRegistrar().getFromId(packet.getChannel()); - if (id == null) { - return false; - } - byte[] copy = ByteBufUtil.getBytes(packet.content()); - PluginMessageEvent event = new PluginMessageEvent(serverConn, serverConn.getPlayer(), id, copy); + String channel = packet.getChannel(); + PluginMessageEvent event = new PluginMessageEvent(serverConn, serverConn.getPlayer(), channel.indexOf(':') == -1 ? new LegacyChannelIdentifier(channel) : MinecraftChannelIdentifier.from(channel), copy); server.getEventManager().fire(event).thenAcceptAsync(pme -> { if (pme.getResult().isAllowed() && !playerConnection.isClosed()) { PluginMessagePacket copied = new PluginMessagePacket( 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 fed61693..3b3f7d42 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 @@ -340,43 +340,25 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler { } if (!player.getPhase().handle(player, packet, serverConn)) { - ChannelIdentifier id = server.getChannelRegistrar().getFromId(packet.getChannel()); - if (id == null) { - // We don't have any plugins listening on this channel, process the packet now. - if (!player.getPhase().consideredComplete() || !serverConn.getPhase() - .consideredComplete()) { - // The client is trying to send messages too early. This is primarily caused by mods, - // but further aggravated by Velocity. To work around these issues, we will queue any - // non-FML handshake messages to be sent once the FML handshake has completed or the - // JoinGame packet has been received by the proxy, whichever comes first. - // - // We also need to make sure to retain these packets, so they can be flushed - // appropriately. - loginPluginMessages.add(packet.retain()); - } else { - // The connection is ready, send the packet now. - backendConn.write(packet.retain()); - } - } else { - byte[] copy = ByteBufUtil.getBytes(packet.content()); - PluginMessageEvent event = new PluginMessageEvent(player, serverConn, id, copy); - server.getEventManager().fire(event).thenAcceptAsync(pme -> { - if (pme.getResult().isAllowed()) { - PluginMessagePacket message = new PluginMessagePacket(packet.getChannel(), - Unpooled.wrappedBuffer(copy)); - if (!player.getPhase().consideredComplete() || !serverConn.getPhase() - .consideredComplete()) { - // We're still processing the connection (see above), enqueue the packet for now. - loginPluginMessages.add(message.retain()); - } else { - backendConn.write(message); - } + byte[] copy = ByteBufUtil.getBytes(packet.content()); + String channel = packet.getChannel(); + PluginMessageEvent event = new PluginMessageEvent(player, serverConn, channel.indexOf(':') == -1 ? new LegacyChannelIdentifier(channel) : MinecraftChannelIdentifier.from(channel), copy); + server.getEventManager().fire(event).thenAcceptAsync(pme -> { + if (pme.getResult().isAllowed()) { + PluginMessagePacket message = new PluginMessagePacket(packet.getChannel(), + Unpooled.wrappedBuffer(copy)); + if (!player.getPhase().consideredComplete() || !serverConn.getPhase() + .consideredComplete()) { + // We're still processing the connection (see above), enqueue the packet for now. + loginPluginMessages.add(message.retain()); + } else { + backendConn.write(message); } - }, backendConn.eventLoop()).exceptionally((ex) -> { - logger.error("Exception while handling plugin message packet for {}", player, ex); - return null; - }); - } + } + }, backendConn.eventLoop()).exceptionally((ex) -> { + logger.error("Exception while handling plugin message packet for {}", player, ex); + return null; + }); } } }