Skip to content

Commit c5ee1ef

Browse files
committed
Resolve kenny german approval
1 parent 504de4f commit c5ee1ef

File tree

2 files changed

+39
-26
lines changed

2 files changed

+39
-26
lines changed

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/EntityPacketRewriter1_21_9.java

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
import java.util.Map;
5353
import java.util.UUID;
5454
import java.util.concurrent.ThreadLocalRandom;
55+
56+
import com.viaversion.viaversion.util.Copyable;
5557
import org.checkerframework.checker.nullness.qual.Nullable;
5658

5759
public final class EntityPacketRewriter1_21_9 extends EntityRewriter<ClientboundPacket1_21_9, Protocol1_21_9To1_21_7> {
@@ -100,18 +102,17 @@ public void registerPackets() {
100102

101103
final float pitch = wrapper.get(Types.BYTE, 0) * 256.0F / 360.0F;
102104
final float yaw = wrapper.get(Types.BYTE, 1) * 256.0F / 360.0F;
105+
final float headYaw = wrapper.get(Types.BYTE, 2) * 256.0F / 360.0F;
103106

104107
final String name = randomHackyEmptyName();
105108
final MannequinData mannequinData = new MannequinData(uuid, name);
106109
final TrackedEntity trackedEntity = tracker(wrapper.user()).entity(entityId);
107-
if (trackedEntity == null) {
108-
return;
109-
}
110110

111111
trackedEntity.data().put(mannequinData);
112112

113113
mannequinData.setPosition(x, y, z);
114114
mannequinData.setRotation(yaw, pitch);
115+
mannequinData.setHeadYaw(headYaw);
115116

116117
wrapper.cancel();
117118
}
@@ -125,25 +126,20 @@ public void registerPackets() {
125126
final double y = wrapper.passthrough(Types.DOUBLE); // Y
126127
final double z = wrapper.passthrough(Types.DOUBLE); // Z
127128

128-
// Unused...
129-
wrapper.write(Types.DOUBLE, 0D); // Delta movement X
130-
wrapper.write(Types.DOUBLE, 0D); // Delta movement Y
131-
wrapper.write(Types.DOUBLE, 0D); // Delta movement Z
129+
wrapper.passthrough(Types.DOUBLE); // Delta movement X
130+
wrapper.passthrough(Types.DOUBLE); // Delta movement Y
131+
wrapper.passthrough(Types.DOUBLE); // Delta movement Z
132132

133133
final float yaw = wrapper.passthrough(Types.FLOAT);
134134
final float pitch = wrapper.passthrough(Types.FLOAT);
135135

136136
final EntityTracker1_21_9 tracker = tracker(wrapper.user());
137137
final TrackedEntity trackedEntity = tracker.entity(entityId);
138-
if (trackedEntity == null) {
138+
if (trackedEntity == null || !trackedEntity.hasData()) {
139139
return;
140140
}
141141

142142
final MannequinData mannequinData = trackedEntity.data().get(MannequinData.class);
143-
if (mannequinData == null) {
144-
return;
145-
}
146-
147143
mannequinData.setPosition(x, y, z);
148144
mannequinData.setRotation(yaw, pitch);
149145
});
@@ -156,7 +152,6 @@ public void registerPackets() {
156152
final double y = wrapper.passthrough(Types.DOUBLE); // Y
157153
final double z = wrapper.passthrough(Types.DOUBLE); // Z
158154

159-
// Unused...
160155
wrapper.passthrough(Types.DOUBLE); // Delta movement X
161156
wrapper.passthrough(Types.DOUBLE); // Delta movement Y
162157
wrapper.passthrough(Types.DOUBLE); // Delta movement Z
@@ -166,14 +161,15 @@ public void registerPackets() {
166161

167162
final EntityTracker1_21_9 tracker = tracker(wrapper.user());
168163
final TrackedEntity trackedEntity = tracker.entity(entityId);
169-
if (trackedEntity == null) {
164+
if (trackedEntity == null || !trackedEntity.hasData()) {
170165
return;
171166
}
172167

173168
final MannequinData mannequinData = trackedEntity.data().get(MannequinData.class);
174169
if (mannequinData == null) {
175170
return;
176171
}
172+
177173
mannequinData.setPosition(x, y, z);
178174
mannequinData.setRotation(yaw, pitch);
179175
});
@@ -190,14 +186,27 @@ public void registerPackets() {
190186

191187
final EntityTracker1_21_9 tracker = tracker(wrapper.user());
192188
final TrackedEntity trackedEntity = tracker.entity(vehicleId);
193-
if (trackedEntity != null) {
189+
if (trackedEntity != null && trackedEntity.hasData()) {
194190
MannequinData data = trackedEntity.data().get(MannequinData.class);;
195191
if (data != null) {
196192
data.setPassengers(passengerIds);
197193
}
198194
}
199195
});
200196

197+
// Track head yaw
198+
protocol.registerClientbound(ClientboundPackets1_21_9.ROTATE_HEAD, wrapper -> {
199+
final int vehicleId = wrapper.passthrough(Types.VAR_INT);
200+
final byte headRotation = wrapper.passthrough(Types.BYTE);
201+
202+
final EntityTracker1_21_9 tracker = tracker(wrapper.user());
203+
final TrackedEntity trackedEntity = tracker.entity(vehicleId);
204+
if (trackedEntity != null && trackedEntity.hasData()) {
205+
MannequinData data = trackedEntity.data().get(MannequinData.class);
206+
data.setHeadYaw(headRotation);
207+
}
208+
});
209+
201210
// Track items
202211
protocol.registerClientbound(ClientboundPackets1_21_9.SET_EQUIPMENT, wrapper -> {
203212
final int entityId = wrapper.passthrough(Types.VAR_INT);
@@ -210,8 +219,8 @@ public void registerPackets() {
210219
do {
211220
slot = wrapper.passthrough(Types.BYTE);
212221

213-
final Item item = protocol.getItemRewriter().handleItemToClient(wrapper.user(), wrapper.read(protocol.getItemRewriter().itemType()));
214-
wrapper.write(protocol.getItemRewriter().itemType(), item);
222+
final Item item = protocol.getItemRewriter().handleItemToClient(wrapper.user(), wrapper.read(protocol.getItemRewriter().mappedItemType()));
223+
wrapper.write(protocol.getItemRewriter().mappedItemType(), item);
215224
if (mannequinData != null) {
216225
mannequinData.setEquipment(slot, item);
217226
}
@@ -263,12 +272,10 @@ public void registerPackets() {
263272
private void storeMovementMannequinData(final PacketWrapper wrapper, final boolean position, final boolean rotation) {
264273
final int entityId = wrapper.passthrough(Types.VAR_INT); // Entity id
265274

266-
final EntityTracker1_21_9 tracker = tracker(wrapper.user());
267275
final TrackedEntity trackedEntity = tracker(wrapper.user()).entity(entityId);
268-
if (trackedEntity == null) {
276+
if (trackedEntity == null || !trackedEntity.hasData()) {
269277
return;
270278
}
271-
272279
final MannequinData mannequinData = trackedEntity.data().get(MannequinData.class);
273280
if (mannequinData == null) {
274281
return;
@@ -470,7 +477,7 @@ protected void registerRewrites() {
470477
spawnEntityPacket.write(Types.DOUBLE, entity.z()); // Z
471478
spawnEntityPacket.write(Types.BYTE, (byte) Math.floor(entity.pitch() * 256.0F / 360.0F)); // Pitch
472479
spawnEntityPacket.write(Types.BYTE, (byte) Math.floor(entity.yaw() * 256.0F / 360.0F)); // Yaw
473-
spawnEntityPacket.write(Types.BYTE, (byte) Math.floor(entity.yaw() * 256.0F / 360.0F)); // Head yaw
480+
spawnEntityPacket.write(Types.BYTE, (byte) Math.floor(entity.getHeadYaw() * 256.0F / 360.0F)); // Head yaw
474481
spawnEntityPacket.write(Types.VAR_INT, 0); // Data
475482
spawnEntityPacket.write(Types.SHORT, (short) 0); // Velocity X
476483
spawnEntityPacket.write(Types.SHORT, (short) 0); // Velocity Y
@@ -535,11 +542,8 @@ public void handleEntityData(final int entityId, final List<EntityData> dataList
535542
entityData.removeIf(first -> dataList.stream().anyMatch(second -> first.id() == second.id()));
536543
for (final EntityData data : dataList) {
537544
final Object value = data.value();
538-
if (value instanceof Item item) {
539-
entityData.add(new EntityData(data.id(), data.dataType(), item.copy()));
540-
} else {
541-
entityData.add(new EntityData(data.id(), data.dataType(), value));
542-
}
545+
546+
entityData.add(new EntityData(data.id(), data.dataType(), Copyable.copy(value)));
543547
}
544548
}
545549

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/storage/MannequinData.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public final class MannequinData {
3939

4040
private float yaw;
4141
private float pitch;
42+
private float headYaw;
4243

4344
private int[] passengers;
4445

@@ -125,4 +126,12 @@ public void setEquipment(byte slot, Item item) {
125126
public Map<Byte, Item> getItemMap() {
126127
return itemMap;
127128
}
129+
130+
public float getHeadYaw() {
131+
return headYaw;
132+
}
133+
134+
public void setHeadYaw(float headYaw) {
135+
this.headYaw = headYaw;
136+
}
128137
}

0 commit comments

Comments
 (0)