1717import ac .grim .grimac .utils .anticheat .update .PredictionComplete ;
1818import ac .grim .grimac .utils .collisions .datatypes .SimpleCollisionBox ;
1919import ac .grim .grimac .utils .data .VectorData ;
20+ import ac .grim .grimac .utils .data .packetentity .PacketEntity ;
2021import ac .grim .grimac .utils .data .packetentity .PacketEntityHorse ;
2122import ac .grim .grimac .utils .data .packetentity .PacketEntityRideable ;
2223import ac .grim .grimac .utils .data .packetentity .PacketEntityTrackXRot ;
@@ -55,19 +56,14 @@ public void processAndCheckMovementPacket(PositionUpdate data) {
5556 // This teleport wasn't valid as the player STILL hasn't loaded this damn chunk.
5657 // Keep re-teleporting until they load the chunk!
5758 if (player .getSetbackTeleportUtil ().insideUnloadedChunk ()) {
58- player .lastOnGround = player .clientClaimsLastOnGround ; // Stop a false on join
59-
6059 // The player doesn't control this vehicle, we don't care
61- if ( player .compensatedEntities .getSelf ().inVehicle () &&
60+ final boolean invalidVehicle = player .compensatedEntities .getSelf ().inVehicle () &&
6261 (PacketEvents .getAPI ().getServerManager ().getVersion ().isOlderThan (ServerVersion .V_1_9 ) ||
63- player .getClientVersion ().isOlderThan (ClientVersion .V_1_9 ))) {
64- return ;
65- }
62+ player .getClientVersion ().isOlderThan (ClientVersion .V_1_9 ));
6663
67- if (!data .isTeleport ()) {
64+ if (!invalidVehicle && ! data .isTeleport ()) {
6865 // Teleport the player back to avoid players being able to simply ignore transactions
6966 player .getSetbackTeleportUtil ().executeForceResync ();
70- return ;
7167 }
7268 }
7369
@@ -180,19 +176,20 @@ private void check(PositionUpdate update) {
180176 player .clientVelocity .multiply (0.98 ); // This is vanilla, do not touch
181177 }
182178
179+ final PacketEntity riding = player .compensatedEntities .getSelf ().getRiding ();
183180 if (player .vehicleData .wasVehicleSwitch || player .vehicleData .lastDummy ) {
184181 update .setTeleport (true );
185182
186183 player .vehicleData .lastDummy = false ;
187184 player .vehicleData .wasVehicleSwitch = false ;
188185
189- if (player . compensatedEntities . getSelf (). getRiding () != null ) {
186+ if (riding != null ) {
190187 Vector pos = new Vector (player .x , player .y , player .z );
191- SimpleCollisionBox interTruePositions = player . compensatedEntities . getSelf (). getRiding () .getPossibleCollisionBoxes ();
188+ SimpleCollisionBox interTruePositions = riding .getPossibleCollisionBoxes ();
192189
193190 // We shrink the expanded bounding box to what the packet positions can be, for a smaller box
194- float width = BoundingBoxSize .getWidth (player , player . compensatedEntities . getSelf (). getRiding ()) ;
195- float height = BoundingBoxSize .getHeight (player , player . compensatedEntities . getSelf (). getRiding ()) ;
191+ float width = BoundingBoxSize .getWidth (player , riding ) * riding . scale ;
192+ float height = BoundingBoxSize .getHeight (player , riding ) * riding . scale ;
196193 interTruePositions .expand (-width , 0 , -width );
197194 interTruePositions .expandMax (0 , -height , 0 );
198195
@@ -258,25 +255,25 @@ private void check(PositionUpdate update) {
258255 player .checkManager .getExplosionHandler ().forceExempt ();
259256
260257 // When in control of the entity, the player sets the entity position to their current position
261- player . compensatedEntities . getSelf (). getRiding (). setPositionRaw (GetBoundingBox .getPacketEntityBoundingBox (player , player .x , player .y , player .z , player . compensatedEntities . getSelf (). getRiding () ));
258+ riding . setPositionRaw (GetBoundingBox .getPacketEntityBoundingBox (player , player .x , player .y , player .z , riding ));
262259
263- if (player . compensatedEntities . getSelf (). getRiding () instanceof PacketEntityTrackXRot ) {
264- PacketEntityTrackXRot boat = (PacketEntityTrackXRot ) player . compensatedEntities . getSelf (). getRiding () ;
260+ if (riding instanceof PacketEntityTrackXRot ) {
261+ PacketEntityTrackXRot boat = (PacketEntityTrackXRot ) riding ;
265262 boat .packetYaw = player .xRot ;
266263 boat .interpYaw = player .xRot ;
267264 boat .steps = 0 ;
268265 }
269266
270- if (player .hasGravity != player . compensatedEntities . getSelf (). getRiding () .hasGravity ) {
267+ if (player .hasGravity != riding .hasGravity ) {
271268 player .pointThreeEstimator .updatePlayerGravity ();
272269 }
273- player .hasGravity = player . compensatedEntities . getSelf (). getRiding () .hasGravity ;
270+ player .hasGravity = riding .hasGravity ;
274271
275272 // For whatever reason the vehicle move packet occurs AFTER the player changes slots...
276- if (player . compensatedEntities . getSelf (). getRiding () instanceof PacketEntityRideable ) {
273+ if (riding instanceof PacketEntityRideable ) {
277274 EntityControl control = player .checkManager .getPostPredictionCheck (EntityControl .class );
278275
279- ItemType requiredItem = player . compensatedEntities . getSelf (). getRiding () .getType () == EntityTypes .PIG ? ItemTypes .CARROT_ON_A_STICK : ItemTypes .WARPED_FUNGUS_ON_A_STICK ;
276+ ItemType requiredItem = riding .getType () == EntityTypes .PIG ? ItemTypes .CARROT_ON_A_STICK : ItemTypes .WARPED_FUNGUS_ON_A_STICK ;
280277 ItemStack mainHand = player .getInventory ().getHeldItem ();
281278 ItemStack offHand = player .getInventory ().getOffHand ();
282279
@@ -323,7 +320,7 @@ private void check(PositionUpdate update) {
323320 player .isSprinting = false ;
324321 player .isSneaking = false ;
325322
326- if (player . compensatedEntities . getSelf (). getRiding (). getType () != EntityTypes .PIG && player . compensatedEntities . getSelf (). getRiding () .getType () != EntityTypes .STRIDER ) {
323+ if (riding . getType () != EntityTypes .PIG && riding .getType () != EntityTypes .STRIDER ) {
327324 player .isClimbing = false ;
328325 }
329326 }
@@ -427,7 +424,7 @@ private void check(PositionUpdate update) {
427424 boolean wasChecked = false ;
428425
429426 // Exempt if the player is dead or is riding a dead entity
430- if (player .compensatedEntities .getSelf ().isDead || (player . compensatedEntities . getSelf (). getRiding () != null && player . compensatedEntities . getSelf (). getRiding () .isDead )) {
427+ if (player .compensatedEntities .getSelf ().isDead || (riding != null && riding .isDead )) {
431428 // Dead players can't cheat, if you find a way how they could, open an issue
432429 player .predictedVelocity = new VectorData (new Vector (), VectorData .VectorType .Dead );
433430 player .clientVelocity = new Vector ();
@@ -441,7 +438,7 @@ private void check(PositionUpdate update) {
441438 player .gravity = 0 ;
442439 player .friction = 0.91f ;
443440 PredictionEngineNormal .staticVectorEndOfTick (player , player .clientVelocity );
444- } else if (player . compensatedEntities . getSelf (). getRiding () == null ) {
441+ } else if (riding == null ) {
445442 wasChecked = true ;
446443
447444 // Depth strider was added in 1.8
@@ -495,17 +492,17 @@ private void check(PositionUpdate update) {
495492 // The player and server are both on a version with client controlled entities
496493 // If either or both of the client server version has server controlled entities
497494 // The player can't use entities (or the server just checks the entities)
498- if (EntityTypes .isTypeInstanceOf (player . compensatedEntities . getSelf (). getRiding () .getType (), EntityTypes .BOAT )) {
495+ if (EntityTypes .isTypeInstanceOf (riding .getType (), EntityTypes .BOAT )) {
499496 new PlayerBaseTick (player ).doBaseTick ();
500497 // Speed doesn't affect anything with boat movement
501498 new BoatPredictionEngine (player ).guessBestMovement (0.1f , player );
502- } else if (player . compensatedEntities . getSelf (). getRiding () instanceof PacketEntityHorse ) {
499+ } else if (riding instanceof PacketEntityHorse ) {
503500 new PlayerBaseTick (player ).doBaseTick ();
504501 new MovementTickerHorse (player ).livingEntityAIStep ();
505- } else if (player . compensatedEntities . getSelf (). getRiding () .getType () == EntityTypes .PIG ) {
502+ } else if (riding .getType () == EntityTypes .PIG ) {
506503 new PlayerBaseTick (player ).doBaseTick ();
507504 new MovementTickerPig (player ).livingEntityAIStep ();
508- } else if (player . compensatedEntities . getSelf (). getRiding () .getType () == EntityTypes .STRIDER ) {
505+ } else if (riding .getType () == EntityTypes .STRIDER ) {
509506 new PlayerBaseTick (player ).doBaseTick ();
510507 new MovementTickerStrider (player ).livingEntityAIStep ();
511508 MovementTickerStrider .floatStrider (player );
0 commit comments