2525import com .viaversion .viabackwards .protocol .v1_14to1_13_2 .storage .DifficultyStorage ;
2626import com .viaversion .viabackwards .protocol .v1_14to1_13_2 .storage .EntityPositionStorage1_14 ;
2727import com .viaversion .viaversion .api .data .entity .EntityTracker ;
28+ import com .viaversion .viaversion .api .data .entity .StoredEntityData ;
2829import com .viaversion .viaversion .api .minecraft .BlockPosition ;
2930import com .viaversion .viaversion .api .minecraft .ClientWorld ;
3031import com .viaversion .viaversion .api .minecraft .Particle ;
3435import com .viaversion .viaversion .api .minecraft .entities .EntityTypes1_14 ;
3536import com .viaversion .viaversion .api .minecraft .entitydata .EntityData ;
3637import com .viaversion .viaversion .api .protocol .packet .PacketWrapper ;
38+ import com .viaversion .viaversion .api .protocol .remapper .PacketHandler ;
3739import com .viaversion .viaversion .api .protocol .remapper .PacketHandlers ;
3840import com .viaversion .viaversion .api .type .Types ;
3941import com .viaversion .viaversion .api .type .types .version .Types1_13_2 ;
4042import com .viaversion .viaversion .api .type .types .version .Types1_14 ;
4143import com .viaversion .viaversion .protocols .v1_12_2to1_13 .packet .ClientboundPackets1_13 ;
44+ import com .viaversion .viaversion .protocols .v1_12_2to1_13 .packet .ServerboundPackets1_13 ;
4245import com .viaversion .viaversion .protocols .v1_13_2to1_14 .packet .ClientboundPackets1_14 ;
4346import 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