Skip to content

Commit 7bd6a84

Browse files
Fix SOUND_ENTITY remap not working for the player in 1.14->1.13.2 (#1086)
1 parent 473b4af commit 7bd6a84

File tree

3 files changed

+50
-33
lines changed

3 files changed

+50
-33
lines changed

common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityPositionHandler.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ public void cacheEntityPosition(PacketWrapper wrapper, boolean create, boolean r
4747
}
4848

4949
public void cacheEntityPosition(PacketWrapper wrapper, double x, double y, double z, boolean create, boolean relative) {
50-
int entityId = wrapper.get(Types.VAR_INT, 0);
50+
cacheEntityPosition(wrapper, wrapper.get(Types.VAR_INT, 0), x, y, z, create, relative);
51+
}
52+
53+
public void cacheEntityPosition(PacketWrapper wrapper, int entityId, double x, double y, double z, boolean create, boolean relative) {
5154
StoredEntityData storedEntity = entityRewriter.tracker(wrapper.user()).entityData(entityId);
5255
if (storedEntity == null) {
5356
if (Via.getManager().isDebug()) { // There is too many plugins violating this out there, and reading seems to be hard! :>

common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacyEntityRewriter.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public void register() {
8686
clientWorld.setEnvironment(wrapper.get(Types.INT, 1));
8787

8888
final int entityId = wrapper.get(Types.INT, 0);
89-
addTrackedEntity(wrapper, entityId, playerType);
89+
tracker(wrapper.user()).addEntity(entityId, playerType);
9090
tracker(wrapper.user()).setClientEntityId(entityId);
9191
});
9292
}
@@ -131,13 +131,13 @@ protected PacketHandler getObjectTrackerHandler() {
131131
return;
132132
}
133133

134-
addTrackedEntity(wrapper, wrapper.get(Types.VAR_INT, 0), type);
134+
tracker(wrapper.user()).addEntity(wrapper.get(Types.VAR_INT, 0), type);
135135
};
136136
}
137137

138138
protected PacketHandler getTrackerAndDataHandler(Type<List<EntityData>> dataType, EntityType entityType) {
139139
return wrapper -> {
140-
addTrackedEntity(wrapper, wrapper.get(Types.VAR_INT, 0), entityType);
140+
tracker(wrapper.user()).addEntity(wrapper.get(Types.VAR_INT, 0), entityType);
141141
List<EntityData> entityDataList = wrapper.get(dataType, 0);
142142
handleEntityData(wrapper.get(Types.VAR_INT, 0), entityDataList, wrapper.user());
143143
};
@@ -162,11 +162,6 @@ protected PacketHandler getObjectRewriter(ObjectTypeGetter objectGetter) {
162162
};
163163
}
164164

165-
@Deprecated
166-
protected void addTrackedEntity(PacketWrapper wrapper, int entityId, EntityType type) {
167-
tracker(wrapper.user()).addEntity(entityId, type);
168-
}
169-
170165
@FunctionalInterface
171166
protected interface IdSetter {
172167

common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/EntityPacketRewriter1_14.java

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.storage.DifficultyStorage;
2626
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.storage.EntityPositionStorage1_14;
2727
import com.viaversion.viaversion.api.data.entity.EntityTracker;
28+
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
2829
import com.viaversion.viaversion.api.minecraft.BlockPosition;
2930
import com.viaversion.viaversion.api.minecraft.ClientWorld;
3031
import com.viaversion.viaversion.api.minecraft.Particle;
@@ -34,11 +35,13 @@
3435
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_14;
3536
import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
3637
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
38+
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
3739
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
3840
import com.viaversion.viaversion.api.type.Types;
3941
import com.viaversion.viaversion.api.type.types.version.Types1_13_2;
4042
import com.viaversion.viaversion.api.type.types.version.Types1_14;
4143
import com.viaversion.viaversion.protocols.v1_12_2to1_13.packet.ClientboundPackets1_13;
44+
import com.viaversion.viaversion.protocols.v1_12_2to1_13.packet.ServerboundPackets1_13;
4245
import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ClientboundPackets1_14;
4346
import com.viaversion.viaversion.rewriter.entitydata.EntityDataHandler;
4447

@@ -50,20 +53,6 @@ public EntityPacketRewriter1_14(Protocol1_14To1_13_2 protocol) {
5053
super(protocol, Types1_13_2.ENTITY_DATA_TYPES.optionalComponentType, Types1_13_2.ENTITY_DATA_TYPES.booleanType);
5154
}
5255

53-
//TODO work the method into this class alone
54-
@Override
55-
protected void addTrackedEntity(PacketWrapper wrapper, int entityId, EntityType type) {
56-
super.addTrackedEntity(wrapper, entityId, type);
57-
58-
// Cache the position for every newly tracked entity
59-
if (type == EntityTypes1_14.PAINTING) {
60-
final BlockPosition position = wrapper.get(Types.BLOCK_POSITION1_8, 0);
61-
positionHandler.cacheEntityPosition(wrapper, position.x(), position.y(), position.z(), true, false);
62-
} else if (wrapper.getId() != ClientboundPackets1_14.LOGIN.getId()) { // ignore join game
63-
positionHandler.cacheEntityPosition(wrapper, true, false);
64-
}
65-
}
66-
6756
@Override
6857
protected void registerPackets() {
6958
positionHandler = new EntityPositionHandler(this, EntityPositionStorage1_14.class, EntityPositionStorage1_14::new);
@@ -133,7 +122,17 @@ public void register() {
133122
map(Types.SHORT); // 10 - Velocity Y
134123
map(Types.SHORT); // 11 - Velocity Z
135124

136-
handler(getObjectTrackerHandler());
125+
handler(wrapper -> {
126+
final int type = wrapper.get(Types.BYTE, 0);
127+
final int data = wrapper.get(Types.INT, 0);
128+
129+
final EntityType entityType = objectTypeFromId(type, data);
130+
if (entityType == null) {
131+
return;
132+
}
133+
134+
trackAndCacheEntityPosition(wrapper, entityType);
135+
});
137136

138137
handler(wrapper -> {
139138
int id = wrapper.get(Types.BYTE, 0);
@@ -224,7 +223,7 @@ public void register() {
224223
handler(wrapper -> {
225224
int type = wrapper.get(Types.VAR_INT, 1);
226225
EntityType entityType = EntityTypes1_14.getTypeFromId(type);
227-
addTrackedEntity(wrapper, wrapper.get(Types.VAR_INT, 0), entityType);
226+
trackAndCacheEntityPosition(wrapper, entityType);
228227

229228
int oldId = newEntityId(type);
230229
if (oldId == -1) {
@@ -252,7 +251,7 @@ public void register() {
252251
map(Types.DOUBLE); // Needs to be mapped for the position cache
253252
map(Types.DOUBLE);
254253
map(Types.DOUBLE);
255-
handler(wrapper -> addTrackedEntity(wrapper, wrapper.get(Types.VAR_INT, 0), EntityTypes1_14.EXPERIENCE_ORB));
254+
handler(wrapper -> trackAndCacheEntityPosition(wrapper, EntityTypes1_14.EXPERIENCE_ORB));
256255
}
257256
});
258257

@@ -264,7 +263,7 @@ public void register() {
264263
map(Types.DOUBLE); // Needs to be mapped for the position cache
265264
map(Types.DOUBLE);
266265
map(Types.DOUBLE);
267-
handler(wrapper -> addTrackedEntity(wrapper, wrapper.get(Types.VAR_INT, 0), EntityTypes1_14.LIGHTNING_BOLT));
266+
handler(wrapper -> trackAndCacheEntityPosition(wrapper, EntityTypes1_14.LIGHTNING_BOLT));
268267
}
269268
});
270269

@@ -278,7 +277,7 @@ public void register() {
278277
map(Types.BYTE);
279278

280279
// Track entity
281-
handler(wrapper -> addTrackedEntity(wrapper, wrapper.get(Types.VAR_INT, 0), EntityTypes1_14.PAINTING));
280+
handler(wrapper -> trackAndCacheEntityPosition(wrapper, EntityTypes1_14.PAINTING));
282281
}
283282
});
284283

@@ -319,11 +318,10 @@ public void register() {
319318
wrapper.passthrough(Types.STRING); // Level Type
320319
wrapper.read(Types.VAR_INT); // Read View Distance
321320

322-
//TODO Track client position
323-
// Manually add position storage
324-
/*int entitiyId = wrapper.get(Type.INT, 0);
325-
StoredEntityData storedEntity = protocol.getEntityRewriter().tracker(wrapper.user()).entityData(entitiyId);
326-
storedEntity.put(new EntityPositionStorage1_14());*/
321+
final int entityId = wrapper.get(Types.INT, 0);
322+
323+
final StoredEntityData storedEntity = tracker(wrapper.user()).entityData(entityId);
324+
storedEntity.put(new EntityPositionStorage1_14());
327325
});
328326
}
329327
});
@@ -347,6 +345,27 @@ public void register() {
347345
});
348346
}
349347
});
348+
349+
PacketHandler absoluteMoveHandler = wrapper -> {
350+
final double x = wrapper.passthrough(Types.DOUBLE);
351+
final double y = wrapper.passthrough(Types.DOUBLE);
352+
final double z = wrapper.passthrough(Types.DOUBLE);
353+
positionHandler.cacheEntityPosition(wrapper, tracker(wrapper.user()).clientEntityId(), x, y, z, false, false);
354+
};
355+
protocol.registerServerbound(ServerboundPackets1_13.MOVE_PLAYER_POS, absoluteMoveHandler);
356+
protocol.registerServerbound(ServerboundPackets1_13.MOVE_PLAYER_POS_ROT, absoluteMoveHandler);
357+
}
358+
359+
private void trackAndCacheEntityPosition(PacketWrapper wrapper, EntityType type) {
360+
// Tracks the entity + cache the position for the entity
361+
tracker(wrapper.user()).addEntity(wrapper.get(Types.VAR_INT, 0), type);
362+
363+
if (type == EntityTypes1_14.PAINTING) {
364+
final BlockPosition position = wrapper.get(Types.BLOCK_POSITION1_8, 0);
365+
positionHandler.cacheEntityPosition(wrapper, position.x(), position.y(), position.z(), true, false);
366+
} else {
367+
positionHandler.cacheEntityPosition(wrapper, true, false);
368+
}
350369
}
351370

352371
@Override

0 commit comments

Comments
 (0)