From dd3f820040d18e6af5b35824273a2685dfa492a1 Mon Sep 17 00:00:00 2001 From: Outfluencer <48880402+Outfluencer@users.noreply.github.com> Date: Sun, 14 Aug 2022 11:32:35 +1000 Subject: [PATCH] #3363, #3369: Implement new ServerData packet to stop MOTD data from servers --- .../protocol/AbstractPacketHandler.java | 5 ++ .../net/md_5/bungee/protocol/Protocol.java | 7 ++ .../bungee/protocol/packet/ServerData.java | 78 +++++++++++++++++++ .../bungee/connection/DownstreamBridge.java | 10 +++ 4 files changed, 100 insertions(+) create mode 100644 protocol/src/main/java/net/md_5/bungee/protocol/packet/ServerData.java diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/AbstractPacketHandler.java b/protocol/src/main/java/net/md_5/bungee/protocol/AbstractPacketHandler.java index 2658e144..608769eb 100644 --- a/protocol/src/main/java/net/md_5/bungee/protocol/AbstractPacketHandler.java +++ b/protocol/src/main/java/net/md_5/bungee/protocol/AbstractPacketHandler.java @@ -30,6 +30,7 @@ import net.md_5.bungee.protocol.packet.Respawn; import net.md_5.bungee.protocol.packet.ScoreboardDisplay; import net.md_5.bungee.protocol.packet.ScoreboardObjective; import net.md_5.bungee.protocol.packet.ScoreboardScore; +import net.md_5.bungee.protocol.packet.ServerData; import net.md_5.bungee.protocol.packet.SetCompression; import net.md_5.bungee.protocol.packet.StatusRequest; import net.md_5.bungee.protocol.packet.StatusResponse; @@ -208,4 +209,8 @@ public abstract class AbstractPacketHandler public void handle(GameState gameState) throws Exception { } + + public void handle(ServerData serverData) throws Exception + { + } } diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java b/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java index 04dc178d..aa22f134 100644 --- a/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java +++ b/protocol/src/main/java/net/md_5/bungee/protocol/Protocol.java @@ -36,6 +36,7 @@ import net.md_5.bungee.protocol.packet.Respawn; import net.md_5.bungee.protocol.packet.ScoreboardDisplay; import net.md_5.bungee.protocol.packet.ScoreboardObjective; import net.md_5.bungee.protocol.packet.ScoreboardScore; +import net.md_5.bungee.protocol.packet.ServerData; import net.md_5.bungee.protocol.packet.SetCompression; import net.md_5.bungee.protocol.packet.StatusRequest; import net.md_5.bungee.protocol.packet.StatusResponse; @@ -338,6 +339,12 @@ public enum Protocol map( ProtocolConstants.MINECRAFT_1_19, 0x49 ), map( ProtocolConstants.MINECRAFT_1_19_1, 0x4C ) ); + TO_CLIENT.registerPacket( + ServerData.class, + ServerData::new, + map( ProtocolConstants.MINECRAFT_1_19, 0x3F ), + map( ProtocolConstants.MINECRAFT_1_19_1, 0x42 ) + ); TO_SERVER.registerPacket( KeepAlive.class, diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/packet/ServerData.java b/protocol/src/main/java/net/md_5/bungee/protocol/packet/ServerData.java new file mode 100644 index 00000000..69cd1f48 --- /dev/null +++ b/protocol/src/main/java/net/md_5/bungee/protocol/packet/ServerData.java @@ -0,0 +1,78 @@ +package net.md_5.bungee.protocol.packet; + +import io.netty.buffer.ByteBuf; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import net.md_5.bungee.protocol.AbstractPacketHandler; +import net.md_5.bungee.protocol.DefinedPacket; +import net.md_5.bungee.protocol.ProtocolConstants; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class ServerData extends DefinedPacket +{ + + private String motd; + private String icon; + private boolean preview; + private boolean enforceSecure; + + @Override + public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) + { + if ( buf.readBoolean() ) + { + motd = readString( buf, 262144 ); + } + if ( buf.readBoolean() ) + { + icon = readString( buf ); + } + + preview = buf.readBoolean(); + + if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_1 ) + { + enforceSecure = buf.readBoolean(); + } + } + + @Override + public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) + { + if ( motd != null ) + { + buf.writeBoolean( true ); + writeString( motd, buf ); + } else + { + buf.writeBoolean( false ); + } + + if ( icon != null ) + { + buf.writeBoolean( true ); + writeString( icon, buf ); + } else + { + buf.writeBoolean( false ); + } + + buf.writeBoolean( preview ); + + if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_19_1 ) + { + buf.writeBoolean( enforceSecure ); + } + } + + @Override + public void handle(AbstractPacketHandler handler) throws Exception + { + handler.handle( this ); + } +} diff --git a/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java b/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java index 257779bf..6f5ef07b 100644 --- a/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java +++ b/proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java @@ -59,6 +59,7 @@ import net.md_5.bungee.protocol.packet.Respawn; import net.md_5.bungee.protocol.packet.ScoreboardDisplay; import net.md_5.bungee.protocol.packet.ScoreboardObjective; import net.md_5.bungee.protocol.packet.ScoreboardScore; +import net.md_5.bungee.protocol.packet.ServerData; import net.md_5.bungee.protocol.packet.SetCompression; import net.md_5.bungee.protocol.packet.TabCompleteResponse; import net.md_5.bungee.tab.TabList; @@ -678,6 +679,15 @@ public class DownstreamBridge extends PacketHandler } } + @Override + public void handle(ServerData serverData) throws Exception + { + serverData.setMotd( null ); + serverData.setIcon( null ); + con.unsafe().sendPacket( serverData ); + throw CancelSendSignal.INSTANCE; + } + @Override public String toString() {