From 61b5c90aa7ef8acc88dec4b467eb535cee48c943 Mon Sep 17 00:00:00 2001 From: creeper123123321 Date: Sat, 27 Apr 2019 17:21:01 -0300 Subject: [PATCH] Recalculate pose when using or leaving bed --- .../protocol1_14to1_13_2/MetadataRewriter.java | 2 +- .../protocol1_14to1_13_2/packets/EntityPackets.java | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/MetadataRewriter.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/MetadataRewriter.java index a2d37e355..a66cc1ab4 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/MetadataRewriter.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/MetadataRewriter.java @@ -194,7 +194,7 @@ public class MetadataRewriter { return (entityFlags & 0x80) != 0; } - private static int recalculatePlayerPose(int entityId, EntityTracker tracker) { + public static int recalculatePlayerPose(int entityId, EntityTracker tracker) { byte flags = tracker.getEntityFlags(entityId); // Mojang overrides the client-side pose updater, see OtherPlayerEntity#updateSize int pose = 0; // standing diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java index a63eb8b21..b47710a93 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java @@ -196,11 +196,13 @@ public class EntityPackets { short animation = wrapper.passthrough(Type.UNSIGNED_BYTE); if (animation == 2) { //Leave bed EntityTracker tracker = wrapper.user().get(EntityTracker.class); - tracker.setSleeping(wrapper.get(Type.VAR_INT, 0), false); + int entityId = wrapper.get(Type.VAR_INT, 0); + tracker.setSleeping(entityId, false); PacketWrapper metadataPacket = wrapper.create(0x43); - metadataPacket.write(Type.VAR_INT, wrapper.get(Type.VAR_INT, 0)); + metadataPacket.write(Type.VAR_INT, entityId); List metadataList = new LinkedList<>(); + metadataList.add(new Metadata(6, MetaType1_14.Pose, MetadataRewriter.recalculatePlayerPose(entityId, tracker))); metadataList.add(new Metadata(12, MetaType1_14.OptPosition, null)); metadataPacket.write(Types1_14.METADATA_LIST, metadataList); metadataPacket.send(Protocol1_14To1_13_2.class); @@ -219,11 +221,13 @@ public class EntityPackets { @Override public void handle(PacketWrapper wrapper) throws Exception { EntityTracker tracker = wrapper.user().get(EntityTracker.class); - tracker.setSleeping(wrapper.get(Type.VAR_INT, 0), true); + int entityId = wrapper.get(Type.VAR_INT, 0); + tracker.setSleeping(entityId, true); Position position = wrapper.read(Type.POSITION); List metadataList = new LinkedList<>(); metadataList.add(new Metadata(12, MetaType1_14.OptPosition, position)); + metadataList.add(new Metadata(6, MetaType1_14.Pose, MetadataRewriter.recalculatePlayerPose(entityId, tracker))); wrapper.write(Types1_14.METADATA_LIST, metadataList); } });