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() {