Skip to content

Commit 6a2482f

Browse files
authored
Fix ADD_ENTITY velocity for non-living entities on 1.21.6+ servers (#1066)
1 parent 8075d49 commit 6a2482f

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/rewriter/EntityPacketRewriter1_21_6.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@
2727
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
2828
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_6;
2929
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_21_5;
30+
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
3031
import com.viaversion.viaversion.api.type.Types;
3132
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
3233
import com.viaversion.viaversion.libs.fastutil.objects.Object2ObjectArrayMap;
3334
import com.viaversion.viaversion.libs.fastutil.objects.Object2ObjectMap;
35+
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ClientboundPackets1_21_5;
3436
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ServerboundPackets1_21_5;
3537
import com.viaversion.viaversion.protocols.v1_21_5to1_21_6.packet.ClientboundConfigurationPackets1_21_6;
3638
import 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

Comments
 (0)