2727import com .viaversion .viaversion .api .minecraft .entities .EntityType ;
2828import com .viaversion .viaversion .api .minecraft .entities .EntityTypes1_21_6 ;
2929import com .viaversion .viaversion .api .minecraft .entitydata .types .EntityDataTypes1_21_5 ;
30+ import com .viaversion .viaversion .api .protocol .packet .PacketWrapper ;
3031import com .viaversion .viaversion .api .type .Types ;
3132import com .viaversion .viaversion .api .type .types .version .VersionedTypes ;
3233import com .viaversion .viaversion .libs .fastutil .objects .Object2ObjectArrayMap ;
3334import com .viaversion .viaversion .libs .fastutil .objects .Object2ObjectMap ;
35+ import com .viaversion .viaversion .protocols .v1_21_4to1_21_5 .packet .ClientboundPackets1_21_5 ;
3436import com .viaversion .viaversion .protocols .v1_21_4to1_21_5 .packet .ServerboundPackets1_21_5 ;
3537import com .viaversion .viaversion .protocols .v1_21_5to1_21_6 .packet .ClientboundConfigurationPackets1_21_6 ;
3638import com .viaversion .viaversion .protocols .v1_21_5to1_21_6 .packet .ClientboundPacket1_21_6 ;
@@ -47,14 +49,43 @@ public EntityPacketRewriter1_21_6(final Protocol1_21_6To1_21_5 protocol) {
4749
4850 @ Override
4951 public void registerPackets () {
50- registerTrackerWithData1_19 (ClientboundPackets1_21_6 .ADD_ENTITY , EntityTypes1_21_6 .FALLING_BLOCK );
5152 registerSetEntityData (ClientboundPackets1_21_6 .SET_ENTITY_DATA );
5253 registerRemoveEntities (ClientboundPackets1_21_6 .REMOVE_ENTITIES );
5354 registerPlayerAbilities (ClientboundPackets1_21_6 .PLAYER_ABILITIES );
5455 registerGameEvent (ClientboundPackets1_21_6 .GAME_EVENT );
5556 registerLogin1_20_5 (ClientboundPackets1_21_6 .LOGIN );
5657 registerRespawn1_20_5 (ClientboundPackets1_21_6 .RESPAWN );
5758
59+ protocol .appendClientbound (ClientboundPackets1_21_6 .ADD_ENTITY , wrapper -> {
60+ final int entityId = wrapper .passthrough (Types .VAR_INT );
61+ wrapper .passthrough (Types .UUID ); // Entity UUID
62+ final int entityType = wrapper .passthrough (Types .VAR_INT );
63+ wrapper .passthrough (Types .DOUBLE ); // X
64+ wrapper .passthrough (Types .DOUBLE ); // Y
65+ wrapper .passthrough (Types .DOUBLE ); // Z
66+ wrapper .passthrough (Types .BYTE ); // Pitch
67+ wrapper .passthrough (Types .BYTE ); // Yaw
68+ wrapper .passthrough (Types .BYTE ); // Head yaw
69+ wrapper .passthrough (Types .VAR_INT ); // Data
70+ final short velocityX = wrapper .passthrough (Types .SHORT );
71+ final short velocityY = wrapper .passthrough (Types .SHORT );
72+ final short velocityZ = wrapper .passthrough (Types .SHORT );
73+ getSpawnTrackerWithDataHandler1_19 (EntityTypes1_21_6 .FALLING_BLOCK ).handle (wrapper );
74+ if (velocityX != 0 || velocityY != 0 || velocityZ != 0 ) {
75+ if (!typeFromId (entityType ).isOrHasParent (EntityTypes1_21_6 .LIVING_ENTITY )) {
76+ // Send movement separately
77+ final PacketWrapper motionPacket = wrapper .create (ClientboundPackets1_21_5 .SET_ENTITY_MOTION );
78+ motionPacket .write (Types .VAR_INT , entityId );
79+ motionPacket .write (Types .SHORT , velocityX );
80+ motionPacket .write (Types .SHORT , velocityY );
81+ motionPacket .write (Types .SHORT , velocityZ );
82+ wrapper .send (Protocol1_21_6To1_21_5 .class );
83+ motionPacket .send (Protocol1_21_6To1_21_5 .class );
84+ wrapper .cancel ();
85+ }
86+ }
87+ });
88+
5889 final RegistryDataRewriter registryDataRewriter = new BackwardsRegistryRewriter (protocol ) {
5990 @ Override
6091 public RegistryEntry [] handle (final UserConnection connection , final String key , final RegistryEntry [] entries ) {
0 commit comments