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 86088656..93e3aaed 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 @@ -8,7 +8,6 @@ import net.md_5.bungee.protocol.packet.ClearTitles; import net.md_5.bungee.protocol.packet.ClientChat; import net.md_5.bungee.protocol.packet.ClientCommand; import net.md_5.bungee.protocol.packet.ClientSettings; -import net.md_5.bungee.protocol.packet.ClientStatus; import net.md_5.bungee.protocol.packet.Commands; import net.md_5.bungee.protocol.packet.CookieRequest; import net.md_5.bungee.protocol.packet.CookieResponse; @@ -128,10 +127,6 @@ public abstract class AbstractPacketHandler { } - public void handle(ClientStatus clientStatus) throws Exception - { - } - public void handle(PlayerListItem playerListItem) 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 6c4e6735..dd49fb1a 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 @@ -131,7 +131,8 @@ public enum Protocol map( ProtocolConstants.MINECRAFT_1_21_2, 0x2C ), map( ProtocolConstants.MINECRAFT_1_21_5, 0x2B ) ); - TO_CLIENT.registerPacket( Chat.class, + TO_CLIENT.registerPacket( + Chat.class, Chat::new, map( ProtocolConstants.MINECRAFT_1_8, 0x02 ), map( ProtocolConstants.MINECRAFT_1_9, 0x0F ), @@ -337,6 +338,7 @@ public enum Protocol TO_CLIENT.registerPacket( Title.class, Title::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_8, 0x45 ), map( ProtocolConstants.MINECRAFT_1_12, 0x47 ), map( ProtocolConstants.MINECRAFT_1_12_1, 0x48 ), @@ -358,6 +360,7 @@ public enum Protocol TO_CLIENT.registerPacket( ClearTitles.class, ClearTitles::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_17, 0x10 ), map( ProtocolConstants.MINECRAFT_1_19, 0x0D ), map( ProtocolConstants.MINECRAFT_1_19_3, 0x0C ), @@ -368,6 +371,7 @@ public enum Protocol TO_CLIENT.registerPacket( Subtitle.class, Subtitle::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_17, 0x57 ), map( ProtocolConstants.MINECRAFT_1_18, 0x58 ), map( ProtocolConstants.MINECRAFT_1_19_1, 0x5B ), @@ -382,6 +386,7 @@ public enum Protocol TO_CLIENT.registerPacket( TitleTimes.class, TitleTimes::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_17, 0x5A ), map( ProtocolConstants.MINECRAFT_1_18, 0x5B ), map( ProtocolConstants.MINECRAFT_1_19_1, 0x5E ), @@ -396,6 +401,7 @@ public enum Protocol TO_CLIENT.registerPacket( SystemChat.class, SystemChat::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_19, 0x5F ), map( ProtocolConstants.MINECRAFT_1_19_1, 0x62 ), map( ProtocolConstants.MINECRAFT_1_19_3, 0x60 ), @@ -409,6 +415,7 @@ public enum Protocol TO_CLIENT.registerPacket( PlayerListHeaderFooter.class, PlayerListHeaderFooter::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_8, 0x47 ), map( ProtocolConstants.MINECRAFT_1_9, 0x48 ), map( ProtocolConstants.MINECRAFT_1_9_4, 0x47 ), @@ -433,6 +440,7 @@ public enum Protocol TO_CLIENT.registerPacket( EntityStatus.class, EntityStatus::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_8, 0x1A ), map( ProtocolConstants.MINECRAFT_1_9, 0x1B ), map( ProtocolConstants.MINECRAFT_1_13, 0x1C ), @@ -466,6 +474,7 @@ public enum Protocol TO_CLIENT.registerPacket( GameState.class, GameState::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_15, 0x1F ), map( ProtocolConstants.MINECRAFT_1_16, 0x1E ), map( ProtocolConstants.MINECRAFT_1_16_2, 0x1D ), @@ -482,6 +491,7 @@ public enum Protocol TO_CLIENT.registerPacket( ViewDistance.class, ViewDistance::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_14, 0x41 ), map( ProtocolConstants.MINECRAFT_1_15, 0x42 ), map( ProtocolConstants.MINECRAFT_1_16, 0x41 ), @@ -547,6 +557,7 @@ public enum Protocol TO_CLIENT.registerPacket( StoreCookie.class, StoreCookie::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_20_5, 0x6B ), map( ProtocolConstants.MINECRAFT_1_21_2, 0x72 ), map( ProtocolConstants.MINECRAFT_1_21_5, 0x71 ) @@ -554,29 +565,34 @@ public enum Protocol TO_CLIENT.registerPacket( Transfer.class, Transfer::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_20_5, 0x73 ), map( ProtocolConstants.MINECRAFT_1_21_2, 0x7A ) ); TO_CLIENT.registerPacket( DisconnectReportDetails.class, DisconnectReportDetails::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_21, 0x7A ), map( ProtocolConstants.MINECRAFT_1_21_2, 0x81 ) ); TO_CLIENT.registerPacket( ServerLinks.class, ServerLinks::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_21, 0x7B ), map( ProtocolConstants.MINECRAFT_1_21_2, 0x82 ) ); TO_CLIENT.registerPacket( ClearDialog.class, ClearDialog::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_21_6, 0x84 ) ); TO_CLIENT.registerPacket( ShowDialog.class, ShowDialog::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_21_6, 0x85 ) ); @@ -841,31 +857,37 @@ public enum Protocol TO_CLIENT.registerPacket( StoreCookie.class, StoreCookie::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_20_5, 0x0A ) ); TO_CLIENT.registerPacket( Transfer.class, Transfer::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_20_5, 0x0B ) ); TO_CLIENT.registerPacket( DisconnectReportDetails.class, DisconnectReportDetails::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_21, 0x0F ) ); TO_CLIENT.registerPacket( ServerLinks.class, ServerLinks::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_21, 0x10 ) ); TO_CLIENT.registerPacket( ClearDialog.class, ClearDialog::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_21_6, 0x11 ) ); TO_CLIENT.registerPacket( ShowDialogDirect.class, ShowDialogDirect::new, + RegisterType.ENCODE, map( ProtocolConstants.MINECRAFT_1_21_6, 0x12 ) ); @@ -957,6 +979,26 @@ public enum Protocol private final int packetID; } + private enum RegisterType + { + // packet is registered to be encoded (only sent, never handled) + ENCODE, + // packet is registered to be decoded (only handled never modified) + DECODE, + // packet is registered to be both, encoded and decoded + BOTH; + + public boolean encode() + { + return this == BOTH || this == ENCODE; + } + + public boolean decode() + { + return this == BOTH || this == DECODE; + } + } + // Helper method private static ProtocolMapping map(int protocol, int id) { @@ -1010,6 +1052,11 @@ public enum Protocol } private void registerPacket(Class packetClass, Supplier constructor, ProtocolMapping... mappings) + { + registerPacket( packetClass, constructor, RegisterType.BOTH, mappings ); + } + + private void registerPacket(Class packetClass, Supplier constructor, RegisterType registerType, ProtocolMapping... mappings) { int mappingIndex = 0; ProtocolMapping mapping = mappings[mappingIndex]; @@ -1042,9 +1089,16 @@ public enum Protocol ProtocolData data = protocols.get( protocol ); Preconditions.checkState( data.packetConstructors[mapping.packetID] == null, "Duplicate packet mapping (%s)", mapping.packetID ); + Preconditions.checkState( !data.packetMap.containsKey( packetClass ), "Duplicate packet mapping (%s)", mapping.packetID ); - data.packetMap.put( packetClass, mapping.packetID ); - data.packetConstructors[mapping.packetID] = constructor; + if ( registerType.encode() ) + { + data.packetMap.put( packetClass, mapping.packetID ); + } + if ( registerType.decode() ) + { + data.packetConstructors[mapping.packetID] = constructor; + } } } diff --git a/protocol/src/main/java/net/md_5/bungee/protocol/packet/ClientStatus.java b/protocol/src/main/java/net/md_5/bungee/protocol/packet/ClientStatus.java deleted file mode 100644 index 369902ad..00000000 --- a/protocol/src/main/java/net/md_5/bungee/protocol/packet/ClientStatus.java +++ /dev/null @@ -1,37 +0,0 @@ -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; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@EqualsAndHashCode(callSuper = false) -public class ClientStatus extends DefinedPacket -{ - - private byte payload; - - @Override - public void read(ByteBuf buf) - { - payload = buf.readByte(); - } - - @Override - public void write(ByteBuf buf) - { - buf.writeByte( payload ); - } - - @Override - public void handle(AbstractPacketHandler handler) throws Exception - { - handler.handle( this ); - } -}