From ada1b95ffc3b26eb6cd9d0ad768897cf139833d4 Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 12 May 2021 07:59:50 +1000 Subject: [PATCH] Remove redundant entity rewriting code on > 1.16.2 --- .../java/net/md_5/bungee/UserConnection.java | 5 +- .../net/md_5/bungee/entitymap/EntityMap.java | 2 +- .../bungee/entitymap/EntityMap_1_16_2.java | 159 +++--------------- 3 files changed, 27 insertions(+), 139 deletions(-) diff --git a/proxy/src/main/java/net/md_5/bungee/UserConnection.java b/proxy/src/main/java/net/md_5/bungee/UserConnection.java index 90bfc8cb..7b5ec49b 100644 --- a/proxy/src/main/java/net/md_5/bungee/UserConnection.java +++ b/proxy/src/main/java/net/md_5/bungee/UserConnection.java @@ -148,7 +148,10 @@ public final class UserConnection implements ProxiedPlayer public void init() { - this.entityRewrite = EntityMap.getEntityMap( getPendingConnection().getVersion() ); + if ( getPendingConnection().getVersion() < ProtocolConstants.MINECRAFT_1_16_2 || !bungee.getConfig().isIpForward() ) + { + this.entityRewrite = EntityMap.getEntityMap( getPendingConnection().getVersion() ); + } this.displayName = name; diff --git a/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap.java b/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap.java index 53911d1c..1c5e8df5 100644 --- a/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap.java +++ b/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap.java @@ -67,7 +67,7 @@ public abstract class EntityMap case ProtocolConstants.MINECRAFT_1_16_2: case ProtocolConstants.MINECRAFT_1_16_3: case ProtocolConstants.MINECRAFT_1_16_4: - return EntityMap_1_16_2.INSTANCE; + return EntityMap_1_16_2.INSTANCE_1_16_2; } throw new RuntimeException( "Version " + version + " has no entity map" ); } diff --git a/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap_1_16_2.java b/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap_1_16_2.java index 88dd3f43..015d06db 100644 --- a/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap_1_16_2.java +++ b/proxy/src/main/java/net/md_5/bungee/entitymap/EntityMap_1_16_2.java @@ -3,159 +3,45 @@ package net.md_5.bungee.entitymap; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import io.netty.buffer.ByteBuf; import java.util.UUID; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; import net.md_5.bungee.BungeeCord; import net.md_5.bungee.UserConnection; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.protocol.DefinedPacket; -import net.md_5.bungee.protocol.ProtocolConstants; +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) class EntityMap_1_16_2 extends EntityMap { - static final EntityMap_1_16_2 INSTANCE = new EntityMap_1_16_2(); - - EntityMap_1_16_2() - { - addRewrite( 0x00, ProtocolConstants.Direction.TO_CLIENT, true ); // Spawn Object : PacketPlayOutSpawnEntity - addRewrite( 0x01, ProtocolConstants.Direction.TO_CLIENT, true ); // Spawn Experience Orb : PacketPlayOutSpawnEntityExperienceOrb - addRewrite( 0x02, ProtocolConstants.Direction.TO_CLIENT, true ); // Spawn Mob : PacketPlayOutSpawnEntityLiving - addRewrite( 0x03, ProtocolConstants.Direction.TO_CLIENT, true ); // Spawn Painting : PacketPlayOutSpawnEntityPainting - addRewrite( 0x04, ProtocolConstants.Direction.TO_CLIENT, true ); // Spawn Player : PacketPlayOutNamedEntitySpawn - addRewrite( 0x05, ProtocolConstants.Direction.TO_CLIENT, true ); // Animation : PacketPlayOutAnimation - addRewrite( 0x08, ProtocolConstants.Direction.TO_CLIENT, true ); // Block Break Animation : PacketPlayOutBlockBreakAnimation - addRewrite( 0x1A, ProtocolConstants.Direction.TO_CLIENT, false ); // Entity Status : PacketPlayOutEntityStatus - addRewrite( 0x27, ProtocolConstants.Direction.TO_CLIENT, true ); // Entity Relative Move : PacketPlayOutRelEntityMove - addRewrite( 0x28, ProtocolConstants.Direction.TO_CLIENT, true ); // Entity Look and Relative Move : PacketPlayOutRelEntityMoveLook - addRewrite( 0x29, ProtocolConstants.Direction.TO_CLIENT, true ); // Entity Look : PacketPlayOutEntityLook - addRewrite( 0x2A, ProtocolConstants.Direction.TO_CLIENT, true ); // Entity : PacketPlayOutEntity - addRewrite( 0x37, ProtocolConstants.Direction.TO_CLIENT, true ); // Remove Entity Effect : PacketPlayOutRemoveEntityEffect - addRewrite( 0x3A, ProtocolConstants.Direction.TO_CLIENT, true ); // Entity Head Look : PacketPlayOutEntityHeadRotation - addRewrite( 0x3E, ProtocolConstants.Direction.TO_CLIENT, true ); // Camera : PacketPlayOutCamera - addRewrite( 0x44, ProtocolConstants.Direction.TO_CLIENT, true ); // Entity Metadata : PacketPlayOutEntityMetadata - addRewrite( 0x45, ProtocolConstants.Direction.TO_CLIENT, false ); // Attach Entity : PacketPlayOutAttachEntity - addRewrite( 0x46, ProtocolConstants.Direction.TO_CLIENT, true ); // Entity Velocity : PacketPlayOutEntityVelocity - addRewrite( 0x47, ProtocolConstants.Direction.TO_CLIENT, true ); // Entity Equipment : PacketPlayOutEntityEquipment - addRewrite( 0x4B, ProtocolConstants.Direction.TO_CLIENT, true ); // Set Passengers : PacketPlayOutMount - addRewrite( 0x55, ProtocolConstants.Direction.TO_CLIENT, true ); // Collect Item : PacketPlayOutCollect - addRewrite( 0x56, ProtocolConstants.Direction.TO_CLIENT, true ); // Entity Teleport : PacketPlayOutEntityTeleport - addRewrite( 0x58, ProtocolConstants.Direction.TO_CLIENT, true ); // Entity Properties : PacketPlayOutUpdateAttributes - addRewrite( 0x59, ProtocolConstants.Direction.TO_CLIENT, true ); // Entity Effect : PacketPlayOutEntityEffect - - addRewrite( 0x0E, ProtocolConstants.Direction.TO_SERVER, true ); // Use Entity : PacketPlayInUseEntity - addRewrite( 0x1C, ProtocolConstants.Direction.TO_SERVER, true ); // Entity Action : PacketPlayInEntityAction - } + static final EntityMap_1_16_2 INSTANCE_1_16_2 = new EntityMap_1_16_2( 0x04, 0x2D ); + // + private final int spawnPlayerId; + private final int spectateId; @Override @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE") public void rewriteClientbound(ByteBuf packet, int oldId, int newId, int protocolVersion) { - super.rewriteClientbound( packet, oldId, newId ); - // Special cases int readerIndex = packet.readerIndex(); int packetId = DefinedPacket.readVarInt( packet ); int packetIdLength = packet.readerIndex() - readerIndex; - int jumpIndex = packet.readerIndex(); - switch ( packetId ) + + if ( packetId == spawnPlayerId ) { - case 0x45 /* Attach Entity : PacketPlayOutAttachEntity */: - rewriteInt( packet, oldId, newId, readerIndex + packetIdLength + 4 ); - break; - case 0x55 /* Collect Item : PacketPlayOutCollect */: - DefinedPacket.readVarInt( packet ); - rewriteVarInt( packet, oldId, newId, packet.readerIndex() ); - break; - case 0x4B /* Set Passengers : PacketPlayOutMount */: - DefinedPacket.readVarInt( packet ); - jumpIndex = packet.readerIndex(); - // Fall through on purpose to int array of IDs - case 0x36 /* Destroy Entities : PacketPlayOutEntityDestroy */: - int count = DefinedPacket.readVarInt( packet ); - int[] ids = new int[ count ]; - for ( int i = 0; i < count; i++ ) - { - ids[i] = DefinedPacket.readVarInt( packet ); - } - packet.readerIndex( jumpIndex ); - packet.writerIndex( jumpIndex ); - DefinedPacket.writeVarInt( count, packet ); - for ( int id : ids ) - { - if ( id == oldId ) - { - id = newId; - } else if ( id == newId ) - { - id = oldId; - } - DefinedPacket.writeVarInt( id, packet ); - } - break; - case 0x00 /* Spawn Object : PacketPlayOutSpawnEntity */: - DefinedPacket.readVarInt( packet ); - DefinedPacket.readUUID( packet ); - int type = DefinedPacket.readVarInt( packet ); - - if ( type == 2 || type == 102 || type == 72 ) // arrow, fishing_bobber or spectral_arrow - { - if ( type == 2 || type == 72 ) // arrow or spectral_arrow - { - oldId = oldId + 1; - newId = newId + 1; - } - - packet.skipBytes( 26 ); // double, double, double, byte, byte - int position = packet.readerIndex(); - int readId = packet.readInt(); - if ( readId == oldId ) - { - packet.setInt( position, newId ); - } else if ( readId == newId ) - { - packet.setInt( position, oldId ); - } - } - break; - case 0x04 /* Spawn Player : PacketPlayOutNamedEntitySpawn */: - DefinedPacket.readVarInt( packet ); // Entity ID - int idLength = packet.readerIndex() - readerIndex - packetIdLength; - UUID uuid = DefinedPacket.readUUID( packet ); - ProxiedPlayer player; - if ( ( player = BungeeCord.getInstance().getPlayerByOfflineUUID( uuid ) ) != null ) - { - int previous = packet.writerIndex(); - packet.readerIndex( readerIndex ); - packet.writerIndex( readerIndex + packetIdLength + idLength ); - DefinedPacket.writeUUID( player.getUniqueId(), packet ); - packet.writerIndex( previous ); - } - break; - case 0x31 /* Combat Event : PacketPlayOutCombatEvent */: - int event = packet.readUnsignedByte(); - if ( event == 1 /* End Combat*/ ) - { - DefinedPacket.readVarInt( packet ); - rewriteInt( packet, oldId, newId, packet.readerIndex() ); - } else if ( event == 2 /* Entity Dead */ ) - { - int position = packet.readerIndex(); - rewriteVarInt( packet, oldId, newId, packet.readerIndex() ); - packet.readerIndex( position ); - DefinedPacket.readVarInt( packet ); - rewriteInt( packet, oldId, newId, packet.readerIndex() ); - } - break; - case 0x44 /* EntityMetadata : PacketPlayOutEntityMetadata */: - DefinedPacket.readVarInt( packet ); // Entity ID - rewriteMetaVarInt( packet, oldId + 1, newId + 1, 7, protocolVersion ); // fishing hook - rewriteMetaVarInt( packet, oldId, newId, 8, protocolVersion ); // fireworks (et al) - rewriteMetaVarInt( packet, oldId, newId, 16, protocolVersion ); // guardian beam - break; - case 0x50 /* Entity Sound Effect : PacketPlayOutEntitySound */: - DefinedPacket.readVarInt( packet ); - DefinedPacket.readVarInt( packet ); - rewriteVarInt( packet, oldId, newId, packet.readerIndex() ); - break; + DefinedPacket.readVarInt( packet ); // Entity ID + int idLength = packet.readerIndex() - readerIndex - packetIdLength; + UUID uuid = DefinedPacket.readUUID( packet ); + ProxiedPlayer player; + if ( ( player = BungeeCord.getInstance().getPlayerByOfflineUUID( uuid ) ) != null ) + { + int previous = packet.writerIndex(); + packet.readerIndex( readerIndex ); + packet.writerIndex( readerIndex + packetIdLength + idLength ); + DefinedPacket.writeUUID( player.getUniqueId(), packet ); + packet.writerIndex( previous ); + } } packet.readerIndex( readerIndex ); } @@ -163,13 +49,12 @@ class EntityMap_1_16_2 extends EntityMap @Override public void rewriteServerbound(ByteBuf packet, int oldId, int newId) { - super.rewriteServerbound( packet, oldId, newId ); // Special cases int readerIndex = packet.readerIndex(); int packetId = DefinedPacket.readVarInt( packet ); int packetIdLength = packet.readerIndex() - readerIndex; - if ( packetId == 0x2D /* Spectate : PacketPlayInSpectate */ && !BungeeCord.getInstance().getConfig().isIpForward() ) + if ( packetId == spectateId ) { UUID uuid = DefinedPacket.readUUID( packet ); ProxiedPlayer player;