Add optional 1.17 (21w19a) snapshot protocol support
Accessible via the net.md_5.bungee.protocol.snapshot JVM property.
This commit is contained in:
		| @@ -2,6 +2,7 @@ package net.md_5.bungee.protocol; | ||||
|  | ||||
| import net.md_5.bungee.protocol.packet.BossBar; | ||||
| import net.md_5.bungee.protocol.packet.Chat; | ||||
| import net.md_5.bungee.protocol.packet.ClearTitles; | ||||
| import net.md_5.bungee.protocol.packet.ClientSettings; | ||||
| import net.md_5.bungee.protocol.packet.ClientStatus; | ||||
| import net.md_5.bungee.protocol.packet.Commands; | ||||
| @@ -30,10 +31,12 @@ import net.md_5.bungee.protocol.packet.ScoreboardScore; | ||||
| import net.md_5.bungee.protocol.packet.SetCompression; | ||||
| import net.md_5.bungee.protocol.packet.StatusRequest; | ||||
| import net.md_5.bungee.protocol.packet.StatusResponse; | ||||
| import net.md_5.bungee.protocol.packet.Subtitle; | ||||
| import net.md_5.bungee.protocol.packet.TabCompleteRequest; | ||||
| import net.md_5.bungee.protocol.packet.TabCompleteResponse; | ||||
| import net.md_5.bungee.protocol.packet.Team; | ||||
| import net.md_5.bungee.protocol.packet.Title; | ||||
| import net.md_5.bungee.protocol.packet.TitleTimes; | ||||
| import net.md_5.bungee.protocol.packet.ViewDistance; | ||||
|  | ||||
| public abstract class AbstractPacketHandler | ||||
| @@ -127,6 +130,18 @@ public abstract class AbstractPacketHandler | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public void handle(Subtitle title) throws Exception | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public void handle(TitleTimes title) throws Exception | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public void handle(ClearTitles title) throws Exception | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public void handle(PluginMessage pluginMessage) throws Exception | ||||
|     { | ||||
|     } | ||||
|   | ||||
| @@ -11,6 +11,7 @@ import lombok.Data; | ||||
| import lombok.Getter; | ||||
| import net.md_5.bungee.protocol.packet.BossBar; | ||||
| import net.md_5.bungee.protocol.packet.Chat; | ||||
| import net.md_5.bungee.protocol.packet.ClearTitles; | ||||
| import net.md_5.bungee.protocol.packet.ClientSettings; | ||||
| import net.md_5.bungee.protocol.packet.Commands; | ||||
| import net.md_5.bungee.protocol.packet.EncryptionRequest; | ||||
| @@ -36,10 +37,12 @@ import net.md_5.bungee.protocol.packet.ScoreboardScore; | ||||
| import net.md_5.bungee.protocol.packet.SetCompression; | ||||
| import net.md_5.bungee.protocol.packet.StatusRequest; | ||||
| import net.md_5.bungee.protocol.packet.StatusResponse; | ||||
| import net.md_5.bungee.protocol.packet.Subtitle; | ||||
| import net.md_5.bungee.protocol.packet.TabCompleteRequest; | ||||
| import net.md_5.bungee.protocol.packet.TabCompleteResponse; | ||||
| import net.md_5.bungee.protocol.packet.Team; | ||||
| import net.md_5.bungee.protocol.packet.Title; | ||||
| import net.md_5.bungee.protocol.packet.TitleTimes; | ||||
| import net.md_5.bungee.protocol.packet.ViewDistance; | ||||
|  | ||||
| public enum Protocol | ||||
| @@ -69,7 +72,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x20 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x21 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x20 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x1F ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x1F ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x21 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     Login.class, | ||||
| @@ -78,7 +82,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x25 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x26 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x25 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x24 ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x24 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x26 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     Chat.class, | ||||
| @@ -86,7 +91,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_9, 0x0F ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x0E ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x0F ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x0E ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x0E ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x0F ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     Respawn.class, | ||||
| @@ -98,13 +104,15 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x3A ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x3B ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x3A ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x39 ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x39 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x3D ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     BossBar.class, | ||||
|                     map( ProtocolConstants.MINECRAFT_1_9, 0x0C ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x0D ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x0C ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x0C ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x0D ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     PlayerListItem.class, // PlayerInfo | ||||
| @@ -115,7 +123,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x33 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x34 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x33 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x32 ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x32 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x36 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     TabCompleteResponse.class, | ||||
| @@ -124,7 +133,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x10 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x11 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x10 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x0F ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x0F ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x11 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     ScoreboardObjective.class, | ||||
| @@ -134,7 +144,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_12_1, 0x42 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x45 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x49 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x4A ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x4A ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x53 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     ScoreboardScore.class, | ||||
| @@ -144,7 +155,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_12_1, 0x45 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x48 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x4C ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x4D ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x4D ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x56 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     ScoreboardDisplay.class, | ||||
| @@ -154,7 +166,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_12_1, 0x3B ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x3E ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x42 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x43 ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x43 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x4C ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     Team.class, | ||||
| @@ -164,7 +177,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_12_1, 0x44 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x47 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x4B ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x4C ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x4C ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x55 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     PluginMessage.class, | ||||
| @@ -174,7 +188,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x18 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x19 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x18 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x17 ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x17 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x18 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     Kick.class, | ||||
| @@ -184,7 +199,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x1A ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x1B ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x1A ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x19 ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x19 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x1A ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     Title.class, | ||||
| @@ -194,7 +210,18 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x4B ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x4F ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x50 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x4F ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x4F ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x59 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( ClearTitles.class, | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x10 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     Subtitle.class, | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x57 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( TitleTimes.class, | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x5A ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     PlayerListHeaderFooter.class, | ||||
| @@ -206,7 +233,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x4E ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x53 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x54 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x53 ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x53 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x5E ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     EntityStatus.class, | ||||
| @@ -216,26 +244,30 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x1B ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x1C ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x1B ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x1A ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x1A ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x1B ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     Commands.class, | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x11 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x12 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x11 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x10 ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x10 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x12 ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     GameState.class, | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x1F ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x1E ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x1D ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16_2, 0x1D ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x1E ) | ||||
|             ); | ||||
|             TO_CLIENT.registerPacket( | ||||
|                     ViewDistance.class, | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x41 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_15, 0x42 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x41 ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x41 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x4A ) | ||||
|             ); | ||||
|  | ||||
|             TO_SERVER.registerPacket( | ||||
| @@ -246,7 +278,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_12_1, 0x0B ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x0E ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x0F ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x10 ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_16, 0x10 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x0F ) | ||||
|             ); | ||||
|             TO_SERVER.registerPacket( | ||||
|                     Chat.class, | ||||
| @@ -280,7 +313,8 @@ public enum Protocol | ||||
|                     map( ProtocolConstants.MINECRAFT_1_12, 0x0A ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_12_1, 0x09 ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_13, 0x0A ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x0B ) | ||||
|                     map( ProtocolConstants.MINECRAFT_1_14, 0x0B ), | ||||
|                     map( ProtocolConstants.MINECRAFT_1_17, 0x0A ) | ||||
|             ); | ||||
|         } | ||||
|     }, | ||||
|   | ||||
| @@ -1,11 +1,12 @@ | ||||
| package net.md_5.bungee.protocol; | ||||
|  | ||||
| import java.util.Arrays; | ||||
| import com.google.common.collect.ImmutableList; | ||||
| import java.util.List; | ||||
|  | ||||
| public class ProtocolConstants | ||||
| { | ||||
|  | ||||
|     private static final boolean SNAPSHOT_SUPPORT = Boolean.getBoolean( "net.md_5.bungee.protocol.snapshot" ); | ||||
|     public static final int MINECRAFT_1_8 = 47; | ||||
|     public static final int MINECRAFT_1_9 = 107; | ||||
|     public static final int MINECRAFT_1_9_1 = 108; | ||||
| @@ -33,7 +34,13 @@ public class ProtocolConstants | ||||
|     public static final int MINECRAFT_1_16_2 = 751; | ||||
|     public static final int MINECRAFT_1_16_3 = 753; | ||||
|     public static final int MINECRAFT_1_16_4 = 754; | ||||
|     public static final List<String> SUPPORTED_VERSIONS = Arrays.asList( | ||||
|     public static final int MINECRAFT_1_17 = 1073741851; | ||||
|     public static final List<String> SUPPORTED_VERSIONS; | ||||
|     public static final List<Integer> SUPPORTED_VERSION_IDS; | ||||
|  | ||||
|     static | ||||
|     { | ||||
|         ImmutableList.Builder<String> supportedVersions = ImmutableList.<String>builder().add( | ||||
|                 "1.8.x", | ||||
|                 "1.9.x", | ||||
|                 "1.10.x", | ||||
| @@ -44,7 +51,7 @@ public class ProtocolConstants | ||||
|                 "1.15.x", | ||||
|                 "1.16.x" | ||||
|         ); | ||||
|     public static final List<Integer> SUPPORTED_VERSION_IDS = Arrays.asList( | ||||
|         ImmutableList.Builder<Integer> supportedVersionIds = ImmutableList.<Integer>builder().add( | ||||
|                 ProtocolConstants.MINECRAFT_1_8, | ||||
|                 ProtocolConstants.MINECRAFT_1_9, | ||||
|                 ProtocolConstants.MINECRAFT_1_9_1, | ||||
| @@ -74,6 +81,16 @@ public class ProtocolConstants | ||||
|                 ProtocolConstants.MINECRAFT_1_16_4 | ||||
|         ); | ||||
|  | ||||
|         if ( SNAPSHOT_SUPPORT ) | ||||
|         { | ||||
|             supportedVersions.add( "1.17.x" ); | ||||
|             supportedVersionIds.add( ProtocolConstants.MINECRAFT_1_17 ); | ||||
|         } | ||||
|  | ||||
|         SUPPORTED_VERSIONS = supportedVersions.build(); | ||||
|         SUPPORTED_VERSION_IDS = supportedVersionIds.build(); | ||||
|     } | ||||
|  | ||||
|     public enum Direction | ||||
|     { | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,38 @@ | ||||
| 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 ClearTitles extends DefinedPacket | ||||
| { | ||||
|  | ||||
|     private boolean reset; | ||||
|  | ||||
|     @Override | ||||
|     public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) | ||||
|     { | ||||
|         reset = buf.readBoolean(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) | ||||
|     { | ||||
|         buf.writeBoolean( reset ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void handle(AbstractPacketHandler handler) throws Exception | ||||
|     { | ||||
|         handler.handle( this ); | ||||
|     } | ||||
| } | ||||
| @@ -23,6 +23,7 @@ public class ClientSettings extends DefinedPacket | ||||
|     private byte difficulty; | ||||
|     private byte skinParts; | ||||
|     private int mainHand; | ||||
|     private boolean disableTextFiltering; | ||||
|  | ||||
|     @Override | ||||
|     public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) | ||||
| @@ -36,6 +37,10 @@ public class ClientSettings extends DefinedPacket | ||||
|         { | ||||
|             mainHand = DefinedPacket.readVarInt( buf ); | ||||
|         } | ||||
|         if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_17 ) | ||||
|         { | ||||
|             disableTextFiltering = buf.readBoolean(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -56,6 +61,10 @@ public class ClientSettings extends DefinedPacket | ||||
|         { | ||||
|             DefinedPacket.writeVarInt( mainHand, buf ); | ||||
|         } | ||||
|         if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_17 ) | ||||
|         { | ||||
|             buf.writeBoolean( disableTextFiltering ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -0,0 +1,36 @@ | ||||
| package net.md_5.bungee.protocol.packet; | ||||
|  | ||||
| import io.netty.buffer.ByteBuf; | ||||
| 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 | ||||
| @EqualsAndHashCode(callSuper = false) | ||||
| public class Subtitle extends DefinedPacket | ||||
| { | ||||
|  | ||||
|     private String text; | ||||
|  | ||||
|     @Override | ||||
|     public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) | ||||
|     { | ||||
|         text = readString( buf ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) | ||||
|     { | ||||
|         writeString( text, buf ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void handle(AbstractPacketHandler handler) throws Exception | ||||
|     { | ||||
|         handler.handle( this ); | ||||
|     } | ||||
| } | ||||
| @@ -24,9 +24,20 @@ public class Title extends DefinedPacket | ||||
|     private int stay; | ||||
|     private int fadeOut; | ||||
|  | ||||
|     public Title(Action action) | ||||
|     { | ||||
|         this.action = action; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) | ||||
|     { | ||||
|         if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_17 ) | ||||
|         { | ||||
|             text = readString( buf ); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         int index = readVarInt( buf ); | ||||
|  | ||||
|         // If we're working on 1.10 or lower, increment the value of the index so we pull out the correct value. | ||||
| @@ -54,6 +65,12 @@ public class Title extends DefinedPacket | ||||
|     @Override | ||||
|     public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) | ||||
|     { | ||||
|         if ( protocolVersion >= ProtocolConstants.MINECRAFT_1_17 ) | ||||
|         { | ||||
|             writeString( text, buf ); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         int index = action.ordinal(); | ||||
|  | ||||
|         // If we're working on 1.10 or lower, increment the value of the index so we pull out the correct value. | ||||
|   | ||||
| @@ -0,0 +1,42 @@ | ||||
| package net.md_5.bungee.protocol.packet; | ||||
|  | ||||
| import io.netty.buffer.ByteBuf; | ||||
| 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 | ||||
| @EqualsAndHashCode(callSuper = false) | ||||
| public class TitleTimes extends DefinedPacket | ||||
| { | ||||
|  | ||||
|     private int fadeIn; | ||||
|     private int stay; | ||||
|     private int fadeOut; | ||||
|  | ||||
|     @Override | ||||
|     public void read(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) | ||||
|     { | ||||
|         fadeIn = buf.readInt(); | ||||
|         stay = buf.readInt(); | ||||
|         fadeOut = buf.readInt(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void write(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) | ||||
|     { | ||||
|         buf.writeInt( fadeIn ); | ||||
|         buf.writeInt( stay ); | ||||
|         buf.writeInt( fadeOut ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void handle(AbstractPacketHandler handler) throws Exception | ||||
|     { | ||||
|         handler.handle( this ); | ||||
|     } | ||||
| } | ||||
| @@ -1,29 +1,46 @@ | ||||
| package net.md_5.bungee; | ||||
|  | ||||
| import lombok.Data; | ||||
| import net.md_5.bungee.api.Title; | ||||
| import net.md_5.bungee.api.chat.BaseComponent; | ||||
| import net.md_5.bungee.api.connection.ProxiedPlayer; | ||||
| import net.md_5.bungee.chat.ComponentSerializer; | ||||
| import net.md_5.bungee.protocol.DefinedPacket; | ||||
| import net.md_5.bungee.protocol.ProtocolConstants; | ||||
| import net.md_5.bungee.protocol.packet.ClearTitles; | ||||
| import net.md_5.bungee.protocol.packet.Subtitle; | ||||
| import net.md_5.bungee.protocol.packet.Title.Action; | ||||
| import net.md_5.bungee.protocol.packet.TitleTimes; | ||||
|  | ||||
| public class BungeeTitle implements Title | ||||
| { | ||||
|  | ||||
|     private net.md_5.bungee.protocol.packet.Title title, subtitle, times, clear, reset; | ||||
|     private TitlePacketHolder<net.md_5.bungee.protocol.packet.Title> title; | ||||
|     private TitlePacketHolder<Subtitle> subtitle; | ||||
|     private TitlePacketHolder<TitleTimes> times; | ||||
|     private TitlePacketHolder<ClearTitles> clear; | ||||
|     private TitlePacketHolder<ClearTitles> reset; | ||||
|  | ||||
|     private static net.md_5.bungee.protocol.packet.Title createPacket(Action action) | ||||
|     @Data | ||||
|     private static class TitlePacketHolder<T extends DefinedPacket> | ||||
|     { | ||||
|         net.md_5.bungee.protocol.packet.Title title = new net.md_5.bungee.protocol.packet.Title(); | ||||
|         title.setAction( action ); | ||||
|  | ||||
|         if ( action == Action.TIMES ) | ||||
|         { | ||||
|             // Set packet to default values first | ||||
|             title.setFadeIn( 20 ); | ||||
|             title.setStay( 60 ); | ||||
|             title.setFadeOut( 20 ); | ||||
|         private final net.md_5.bungee.protocol.packet.Title oldPacket; | ||||
|         private final T newPacket; | ||||
|     } | ||||
|  | ||||
|     private static TitlePacketHolder<TitleTimes> createAnimationPacket() | ||||
|     { | ||||
|         TitlePacketHolder<TitleTimes> title = new TitlePacketHolder<>( new net.md_5.bungee.protocol.packet.Title( Action.TIMES ), new TitleTimes() ); | ||||
|  | ||||
|         title.oldPacket.setFadeIn( 20 ); | ||||
|         title.oldPacket.setStay( 60 ); | ||||
|         title.oldPacket.setFadeOut( 20 ); | ||||
|  | ||||
|         title.newPacket.setFadeIn( 20 ); | ||||
|         title.newPacket.setStay( 60 ); | ||||
|         title.newPacket.setFadeOut( 20 ); | ||||
|  | ||||
|         return title; | ||||
|     } | ||||
|  | ||||
| @@ -32,10 +49,11 @@ public class BungeeTitle implements Title | ||||
|     { | ||||
|         if ( title == null ) | ||||
|         { | ||||
|             title = createPacket( Action.TITLE ); | ||||
|             net.md_5.bungee.protocol.packet.Title packet = new net.md_5.bungee.protocol.packet.Title( Action.TITLE ); | ||||
|             title = new TitlePacketHolder<>( packet, packet ); | ||||
|         } | ||||
|  | ||||
|         title.setText( ComponentSerializer.toString( text ) ); | ||||
|         title.oldPacket.setText( ComponentSerializer.toString( text ) ); // = newPacket | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
| @@ -44,10 +62,11 @@ public class BungeeTitle implements Title | ||||
|     { | ||||
|         if ( title == null ) | ||||
|         { | ||||
|             title = createPacket( Action.TITLE ); | ||||
|             net.md_5.bungee.protocol.packet.Title packet = new net.md_5.bungee.protocol.packet.Title( Action.TITLE ); | ||||
|             title = new TitlePacketHolder<>( packet, packet ); | ||||
|         } | ||||
|  | ||||
|         title.setText( ComponentSerializer.toString( text ) ); | ||||
|         title.oldPacket.setText( ComponentSerializer.toString( text ) ); // = newPacket | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
| @@ -56,10 +75,12 @@ public class BungeeTitle implements Title | ||||
|     { | ||||
|         if ( subtitle == null ) | ||||
|         { | ||||
|             subtitle = createPacket( Action.SUBTITLE ); | ||||
|             subtitle = new TitlePacketHolder<>( new net.md_5.bungee.protocol.packet.Title( Action.SUBTITLE ), new Subtitle() ); | ||||
|         } | ||||
|  | ||||
|         subtitle.setText( ComponentSerializer.toString( text ) ); | ||||
|         String serialized = ComponentSerializer.toString( text ); | ||||
|         subtitle.oldPacket.setText( serialized ); | ||||
|         subtitle.newPacket.setText( serialized ); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
| @@ -68,10 +89,12 @@ public class BungeeTitle implements Title | ||||
|     { | ||||
|         if ( subtitle == null ) | ||||
|         { | ||||
|             subtitle = createPacket( Action.SUBTITLE ); | ||||
|             subtitle = new TitlePacketHolder<>( new net.md_5.bungee.protocol.packet.Title( Action.SUBTITLE ), new Subtitle() ); | ||||
|         } | ||||
|  | ||||
|         subtitle.setText( ComponentSerializer.toString( text ) ); | ||||
|         String serialized = ComponentSerializer.toString( text ); | ||||
|         subtitle.oldPacket.setText( serialized ); | ||||
|         subtitle.newPacket.setText( serialized ); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
| @@ -80,10 +103,11 @@ public class BungeeTitle implements Title | ||||
|     { | ||||
|         if ( times == null ) | ||||
|         { | ||||
|             times = createPacket( Action.TIMES ); | ||||
|             times = createAnimationPacket(); | ||||
|         } | ||||
|  | ||||
|         times.setFadeIn( ticks ); | ||||
|         times.oldPacket.setFadeIn( ticks ); | ||||
|         times.newPacket.setFadeIn( ticks ); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
| @@ -92,10 +116,11 @@ public class BungeeTitle implements Title | ||||
|     { | ||||
|         if ( times == null ) | ||||
|         { | ||||
|             times = createPacket( Action.TIMES ); | ||||
|             times = createAnimationPacket(); | ||||
|         } | ||||
|  | ||||
|         times.setStay( ticks ); | ||||
|         times.oldPacket.setStay( ticks ); | ||||
|         times.newPacket.setStay( ticks ); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
| @@ -104,10 +129,11 @@ public class BungeeTitle implements Title | ||||
|     { | ||||
|         if ( times == null ) | ||||
|         { | ||||
|             times = createPacket( Action.TIMES ); | ||||
|             times = createAnimationPacket(); | ||||
|         } | ||||
|  | ||||
|         times.setFadeOut( ticks ); | ||||
|         times.oldPacket.setFadeOut( ticks ); | ||||
|         times.newPacket.setFadeOut( ticks ); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
| @@ -116,7 +142,7 @@ public class BungeeTitle implements Title | ||||
|     { | ||||
|         if ( clear == null ) | ||||
|         { | ||||
|             clear = createPacket( Action.CLEAR ); | ||||
|             clear = new TitlePacketHolder<>( new net.md_5.bungee.protocol.packet.Title( Action.CLEAR ), new ClearTitles() ); | ||||
|         } | ||||
|  | ||||
|         title = null; // No need to send title if we clear it after that again | ||||
| @@ -129,7 +155,7 @@ public class BungeeTitle implements Title | ||||
|     { | ||||
|         if ( reset == null ) | ||||
|         { | ||||
|             reset = createPacket( Action.RESET ); | ||||
|             reset = new TitlePacketHolder<>( new net.md_5.bungee.protocol.packet.Title( Action.RESET ), new ClearTitles( true ) ); | ||||
|         } | ||||
|  | ||||
|         // No need to send these packets if we reset them later | ||||
| @@ -140,11 +166,17 @@ public class BungeeTitle implements Title | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     private static void sendPacket(ProxiedPlayer player, DefinedPacket packet) | ||||
|     private static void sendPacket(ProxiedPlayer player, TitlePacketHolder packet) | ||||
|     { | ||||
|         if ( packet != null ) | ||||
|         { | ||||
|             player.unsafe().sendPacket( packet ); | ||||
|             if ( player.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_17 ) | ||||
|             { | ||||
|                 player.unsafe().sendPacket( packet.newPacket ); | ||||
|             } else | ||||
|             { | ||||
|                 player.unsafe().sendPacket( packet.oldPacket ); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -68,6 +68,8 @@ public abstract class EntityMap | ||||
|             case ProtocolConstants.MINECRAFT_1_16_3: | ||||
|             case ProtocolConstants.MINECRAFT_1_16_4: | ||||
|                 return EntityMap_1_16_2.INSTANCE_1_16_2; | ||||
|             case ProtocolConstants.MINECRAFT_1_17: | ||||
|                 return EntityMap_1_16_2.INSTANCE_1_17; | ||||
|         } | ||||
|         throw new RuntimeException( "Version " + version + " has no entity map" ); | ||||
|     } | ||||
|   | ||||
| @@ -15,6 +15,7 @@ class EntityMap_1_16_2 extends EntityMap | ||||
| { | ||||
|  | ||||
|     static final EntityMap_1_16_2 INSTANCE_1_16_2 = new EntityMap_1_16_2( 0x04, 0x2D ); | ||||
|     static final EntityMap_1_16_2 INSTANCE_1_17 = new EntityMap_1_16_2( 0x04, 0x2D ); | ||||
|     // | ||||
|     private final int spawnPlayerId; | ||||
|     private final int spectateId; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 md_5
					md_5