Make 1.10->1.11 fishing hook position desync slightly less bad

This commit is contained in:
Nassim Jahnke 2024-06-25 15:17:29 +02:00
parent 1f221ea828
commit 1ff3035bc0
No known key found for this signature in database
GPG Key ID: EF6771C01F6EF02F
2 changed files with 30 additions and 1 deletions

View File

@ -20,6 +20,7 @@ package com.viaversion.viaversion.protocols.v1_10to1_11.rewriter;
import com.viaversion.nbt.tag.CompoundTag; import com.viaversion.nbt.tag.CompoundTag;
import com.viaversion.nbt.tag.StringTag; import com.viaversion.nbt.tag.StringTag;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_10;
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_11; import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_11;
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_11.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_11.EntityType;
import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.DataItem;
@ -53,8 +54,20 @@ public class EntityPacketRewriter1_11 extends EntityRewriter<ClientboundPackets1
map(Types.VAR_INT); // 0 - Entity id map(Types.VAR_INT); // 0 - Entity id
map(Types.UUID); // 1 - UUID map(Types.UUID); // 1 - UUID
map(Types.BYTE); // 2 - Type map(Types.BYTE); // 2 - Type
map(Types.DOUBLE); // 3 - X
map(Types.DOUBLE); // 4 - Y
map(Types.DOUBLE); // 5 - Z
map(Types.BYTE); // 6 - Pitch
map(Types.BYTE); // 7 - Yaw
map(Types.INT); // 8 - Data
// Track Entity // Track Entity
handler(wrapper -> {
byte type = wrapper.get(Types.BYTE, 0);
if (type == EntityTypes1_10.ObjectType.FISHIHNG_HOOK.getId()) {
tryFixFishingHookVelocity(wrapper);
}
});
handler(objectTrackerHandler()); handler(objectTrackerHandler());
} }
}); });
@ -132,6 +145,11 @@ public class EntityPacketRewriter1_11 extends EntityRewriter<ClientboundPackets1
} }
}); });
protocol.registerClientbound(ClientboundPackets1_9_3.SET_ENTITY_MOTION, wrapper -> {
wrapper.passthrough(Types.VAR_INT); // Entity id
tryFixFishingHookVelocity(wrapper);
});
registerRemoveEntities(ClientboundPackets1_9_3.REMOVE_ENTITIES); registerRemoveEntities(ClientboundPackets1_9_3.REMOVE_ENTITIES);
protocol.registerClientbound(ClientboundPackets1_9_3.BLOCK_ENTITY_DATA, new PacketHandlers() { protocol.registerClientbound(ClientboundPackets1_9_3.BLOCK_ENTITY_DATA, new PacketHandlers() {
@ -243,6 +261,17 @@ public class EntityPacketRewriter1_11 extends EntityRewriter<ClientboundPackets1
}); });
} }
private void tryFixFishingHookVelocity(final PacketWrapper wrapper) {
// TODO Fix properly
// Velocity handling of this changed on the client, this code still isn't entirely correct
final short x = wrapper.read(Types.SHORT);
final short y = wrapper.read(Types.SHORT);
final short z = wrapper.read(Types.SHORT);
wrapper.write(Types.SHORT, (short) (x * 1.33));
wrapper.write(Types.SHORT, (short) (y * 1.2));
wrapper.write(Types.SHORT, (short) (z * 1.33));
}
@Override @Override
public com.viaversion.viaversion.api.minecraft.entities.EntityType typeFromId(int type) { public com.viaversion.viaversion.api.minecraft.entities.EntityType typeFromId(int type) {
return EntityTypes1_11.getTypeFromId(type, false); return EntityTypes1_11.getTypeFromId(type, false);

View File

@ -105,7 +105,7 @@ public class EntityPacketRewriter1_14 extends EntityRewriter<ClientboundPackets1
wrapper.set(Types.INT, 0, data - 1); wrapper.set(Types.INT, 0, data - 1);
} }
// send velocity in separate packet, 1.14 is now ignoring the velocity // send velocity in separate packet, 1.14 is now ignoring the velocity
PacketWrapper velocity = wrapper.create(0x45); PacketWrapper velocity = wrapper.create(ClientboundPackets1_14.SET_ENTITY_MOTION);
velocity.write(Types.VAR_INT, entityId); velocity.write(Types.VAR_INT, entityId);
velocity.write(Types.SHORT, wrapper.get(Types.SHORT, 0)); velocity.write(Types.SHORT, wrapper.get(Types.SHORT, 0));
velocity.write(Types.SHORT, wrapper.get(Types.SHORT, 1)); velocity.write(Types.SHORT, wrapper.get(Types.SHORT, 1));