KnockbackPredictionSystems class

Пакет: com.hypixel.hytale.server.core.modules.entity.player

Файл: com/hypixel/hytale/server/core/modules/entity/player/KnockbackPredictionSystems.java

Поля (93)

МодификаторыТипИмя
private static final ComponentType<EntityStore, BoundingBox> BOUNDING_BOX_COMPONENT_TYPE
static boolean DEBUG_KNOCKBACK_POSITION
private static final Set<Dependency<EntityStore>> DEPENDENCIES
private static final Set<Dependency<EntityStore>> DEPENDENCIES
private static final ComponentType<EntityStore, KnockbackSimulation> KNOCKBACK_SIMULATION_COMPONENT_TYPE
private static final ComponentType<EntityStore, KnockbackSimulation> KNOCKBACK_SIMULATION_COMPONENT_TYPE
private static final Query<EntityStore> QUERY
private static final Query<EntityStore> QUERY
private static final Query<EntityStore> QUERY
private static final ComponentType<EntityStore, Teleport> TELEPORT_COMPONENT_TYPE
X, Y, Z
break
break
break
break
break
return
return
return
Vector3d var10
float var10
float var10
var10
boolean var10
Vector3d var11
Vector3d var11
boolean var11
boolean var12
var12
SpatialResource var12
boolean var12
int var13
List var13
Color var14
Vector3d var15
MovementStatesComponent var16
MovementStates var17
MovementManager var18
MovementSettings var19
MovementStates var20
BoundingBox var20
Box var21
int var22
double var23
float var24
double var25
Vector3d var27
MovementStates var29
Vector3d var30
Vector3d var31
Vector3d var32
float var33
PlayerRef var34
Vector3d var35
Ref var36
Vector3d var37
MovementStates var4
var4
float var4
var4
TransformComponent var5
Player var5
Vector3d var5
float var5
var5
float var5
KnockbackSimulation var6
MovementStatesComponent var6
Vector3d var6
KnockbackSimulation var6
float var6
Vector3d var6
int var6
Vector3d var6
PlayerInput var7
MovementStatesComponent var7
TransformComponent var7
float var7
var7
float var7
Vector3d var7
Vector3d var7
List var8
Player var8
float var8
var8
Vector3d var8
Vector3d var8
Vector3d var9
World var9
float var9
var9
CollisionResult var9

Методы (55)

МодификаторыВозвратСигнатура
public CaptureKnockbackInputpublic CaptureKnockbackInput()
public ClearOnRemovepublic ClearOnRemove()
public ClearOnTeleportpublic ClearOnTeleport()
CollisionAxis CollisionAxis()
public InitKnockbackpublic InitKnockback()
public SimulateKnockbackpublic SimulateKnockback()
public void applyMovementOffsetpublic void applyMovementOffset(@Nonnull World var1, @Nonnull Box var2, @Nonnull KnockbackSimulation var3, @Nonnull MovementStates var4, @Nonnull Vector3d var5)
private boolean checkCollisionprivate boolean checkCollision(@Nonnull KnockbackSimulation var1, @Nonnull World var2, @Nonnull Box var3, @Nonnull Vector3d var4, Vector3d var5, KnockbackPredictionSystems.CollisionAxis var6, @Nonnull CollisionResult var7)
public ComponentType<EntityStore, Teleport> componentTypepublic ComponentType<EntityStore, Teleport> componentType()
public ComponentType<EntityStore, KnockbackSimulation> componentTypepublic ComponentType<EntityStore, KnockbackSimulation> componentType()
private float computeMoveForceprivate float computeMoveForce(@Nonnull KnockbackSimulation var1, @Nonnull MovementStates var2, @Nonnull MovementSettings var3)
private static float convertToNewRangeprivate static float convertToNewRange(float var0, float var1, float var2, float var3, float var4)
private float convertWishMovementprivate float convertWishMovement(@Nonnull KnockbackSimulation var1, @Nonnull MovementStates var2, @Nonnull MovementSettings var3)
private void doMoveCycleprivate void doMoveCycle(@Nonnull World var1, @Nonnull Box var2, @Nonnull KnockbackSimulation var3, @Nonnull MovementStates var4, @Nonnull Vector3d var5)
for for(int var8 = 0; var8 < var6; var8++)
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var20.jumping)
if if(!var12)
if if(KnockbackPredictionSystems.DEBUG_KNOCKBACK_POSITION)
if if(var29.flying)
if if(var29.climbing && !var29.onGround)
if if(var29.swimming)
if if(var15.y < var23 && var25 > 0.0)
if if(var17.onGround)
if if(var17.falling)
if if(var10 < 0.2F)
if if(var4 == null)
if if(!var2.flying && !var2.climbing)
if if(!var4.flying && !var4.climbing)
if if(!var2.flying && !var2.climbing)
if if(var3 != var4 && var1 != var2)
if if(var4.onGround)
if if(var4.onGround && var5.y < 0.0)
if if(!var10)
if if(var5.y <= 0.0)
if if(var5.x != 0.0)
if if(var11)
if if(var5.z != 0.0)
if if(var12)
public void onComponentAddedpublic void onComponentAdded(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onComponentAddedpublic void onComponentAdded(@Nonnull Ref<EntityStore> var1, @Nonnull KnockbackSimulation var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onComponentRemovedpublic void onComponentRemoved(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onComponentRemovedpublic void onComponentRemoved(@Nonnull Ref<EntityStore> var1, @Nonnull KnockbackSimulation var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onComponentSetpublic void onComponentSet(@Nonnull Ref<EntityStore> var1, Teleport var2, @Nonnull Teleport var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void onComponentSetpublic void onComponentSet(@Nonnull Ref<EntityStore> var1, KnockbackSimulation var2, @Nonnull KnockbackSimulation var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entity.player;

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.component.system.RefChangeSystem;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.protocol.Color;
class="kw">import com.hypixel.hytale.protocol.MovementSettings;
class="kw">import com.hypixel.hytale.protocol.MovementStates;
class="kw">import com.hypixel.hytale.protocol.packets.entities.ApplyKnockback;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.movement.MovementManager;
class="kw">import com.hypixel.hytale.server.core.entity.movement.MovementStatesComponent;
class="kw">import com.hypixel.hytale.server.core.modules.collision.CollisionModule;
class="kw">import com.hypixel.hytale.server.core.modules.collision.CollisionResult;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.modules.physics.util.PhysicsMath;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.ParticleUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.PositionUtil;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class KnockbackPredictionSystems {
   class="kw">public class="kw">static boolean DEBUG_KNOCKBACK_POSITION = false;
   class="kw">public class="kw">static class="kw">final float DEFAULT_BLOCK_DRAG = 0.82F;
   class="kw">public class="kw">static class="kw">final float AIR_DENSITY = 0.001225F;
   class="kw">public class="kw">static class="kw">final float COLLISION_PADDING = 1.0E-4F;
   class="kw">public class="kw">static class="kw">final float MAX_CYCLE_MOVEMENT = 0.25F;
   class="kw">public class="kw">static class="kw">final float TIME_STEP = 0.016666668F;
   class="kw">public class="kw">static class="kw">final int MAX_JUMP_COMBOS = 3;

   class="kw">public KnockbackPredictionSystems() {
   }

   class="kw">public class="kw">static class CaptureKnockbackInput class="kw">extends EntityTickingSystem<EntityStore> {
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(PlayerInput.getComponentType(), KnockbackSimulation.getComponentType());
      class="kw">private class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(new SystemDependency<>(Order.BEFORE, PlayerSystems.ProcessPlayerInput.class));

      class="kw">public CaptureKnockbackInput() {
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return QUERY;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return DEPENDENCIES;
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         KnockbackSimulation var6 = var3.getComponent(var2, KnockbackSimulation.getComponentType());
         assert var6 != null;
         PlayerInput var7 = var3.getComponent(var2, PlayerInput.getComponentType());
         assert var7 != null;
         List var8 = var7.getMovementUpdateQueue();
         Vector3d var9 = var6.getClientPosition();
         Vector3d var10 = var6.getClientLastPosition();
         Vector3d var11 = var6.getRelativeMovement();
         var10.set(var9);
         boolean var12 = false;
         if (!var8.isEmpty()) {
            int var13 = 0;

            while (var13 < var8.size()) {
               class="kw">switch ((PlayerInput.InputUpdate)var8.get(var13)) {
                  case PlayerInput.AbsoluteMovement var16:
                     var9.set(var16.getX(), var16.getY(), var16.getZ());
                     var8.remove(var13);
                     break;
                  case PlayerInput.RelativeMovement var17:
                     var9.add(var17.getX(), var17.getY(), var17.getZ());
                     var8.remove(var13);
                     break;
                  case PlayerInput.WishMovement var18:
                     var12 = true;
                     var11.set(var18.getX(), var18.getY(), var18.getZ());
                     var8.remove(var13);
                     break;
                  case PlayerInput.SetMovementStates var19:
                     MovementStates var20 = var19.movementStates();
                     if (var20.jumping) {
                        var6.setWasJumping(true);
                     }

                     var6.setClientMovementStates(var20);
                     var8.remove(var13);
                     break;
                  case null:
                  class="kw">default:
                     var13++;
               }
            }

            if (!var12) {
               var11.set(var9).sub(var10);
               if (var6.hadWishMovement()) {
                  var6.setClientFinished(true);
               }
            } else {
               var6.setHadWishMovement(true);
            }
         }
      }
   }

   class="kw">public class="kw">static class ClearOnRemove class="kw">extends RefSystem<EntityStore> {
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, KnockbackSimulation> KNOCKBACK_SIMULATION_COMPONENT_TYPE = KnockbackSimulation.getComponentType();

      class="kw">public ClearOnRemove() {
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return KNOCKBACK_SIMULATION_COMPONENT_TYPE;
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         var3.removeComponent(var1, KNOCKBACK_SIMULATION_COMPONENT_TYPE);
      }
   }

   class="kw">public class="kw">static class ClearOnTeleport class="kw">extends RefChangeSystem<EntityStore, Teleport> {
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, Teleport> TELEPORT_COMPONENT_TYPE = Teleport.getComponentType();
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, KnockbackSimulation> KNOCKBACK_SIMULATION_COMPONENT_TYPE = KnockbackSimulation.getComponentType();

      class="kw">public ClearOnTeleport() {
      }

      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return KNOCKBACK_SIMULATION_COMPONENT_TYPE;
      }

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, Teleport> componentType() {
         class="kw">return TELEPORT_COMPONENT_TYPE;
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         var4.removeComponent(var1, KNOCKBACK_SIMULATION_COMPONENT_TYPE);
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1, Teleport var2, @Nonnull Teleport var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }
   }

   class="kw">private enum CollisionAxis {
      X,
      Y,
      Z;

      CollisionAxis() {
      }
   }

   class="kw">public class="kw">static class InitKnockback class="kw">extends RefChangeSystem<EntityStore, KnockbackSimulation> {
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
         Player.getComponentType(), TransformComponent.getComponentType(), KnockbackSimulation.getComponentType(), MovementStatesComponent.getComponentType()
      );

      class="kw">public InitKnockback() {
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return QUERY;
      }

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, KnockbackSimulation> componentType() {
         class="kw">return KnockbackSimulation.getComponentType();
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull KnockbackSimulation var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         TransformComponent var5 = var4.getComponent(var1, TransformComponent.getComponentType());
         assert var5 != null;
         var2.getClientPosition().set(var5.getPosition());
         var2.getSimPosition().set(var5.getPosition());
         MovementStatesComponent var6 = var4.getComponent(var1, MovementStatesComponent.getComponentType());
         assert var6 != null;
         var2.setClientMovementStates(new MovementStates(var6.getMovementStates()));
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1,
         KnockbackSimulation var2,
         @Nonnull KnockbackSimulation var3,
         @Nonnull Store<EntityStore> var4,
         @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<EntityStore> var1, @Nonnull KnockbackSimulation var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         Player var5 = var4.getComponent(var1, Player.getComponentType());
         assert var5 != null;
         Vector3d var6 = var2.getClientPosition();
         var5.moveTo(var1, var6.x, var6.y, var6.z, var4);
         MovementStatesComponent var7 = var4.getComponent(var1, MovementStatesComponent.getComponentType());
         assert var7 != null;
         var7.setMovementStates(var2.getClientMovementStates());
      }
   }

   @Deprecated
   class="kw">public class="kw">static class SimulateKnockback class="kw">extends EntityTickingSystem<EntityStore> {
      class="kw">private class="kw">static class="kw">final ComponentType<EntityStore, BoundingBox> BOUNDING_BOX_COMPONENT_TYPE = BoundingBox.getComponentType();
      class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
         Player.getComponentType(),
         TransformComponent.getComponentType(),
         KnockbackSimulation.getComponentType(),
         BOUNDING_BOX_COMPONENT_TYPE,
         MovementStatesComponent.getComponentType(),
         MovementManager.getComponentType(),
         PlayerRef.getComponentType()
      );
      class="kw">private class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(new SystemDependency<>(Order.AFTER, PlayerSystems.ProcessPlayerInput.class));

      class="kw">public SimulateKnockback() {
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return QUERY;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return DEPENDENCIES;
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         KnockbackSimulation var6 = var3.getComponent(var2, KnockbackSimulation.getComponentType());
         assert var6 != null;
         TransformComponent var7 = var3.getComponent(var2, TransformComponent.getComponentType());
         assert var7 != null;
         Player var8 = var3.getComponent(var2, Player.getComponentType());
         assert var8 != null;
         World var9 = var4.getExternalData().getWorld();
         float var10 = var6.getRemainingTime();
         var10 -= var1;
         var6.setRemainingTime(var10);
         if (!(var10 < 0.0F) && !var3.getArchetype().contains(DeathComponent.getComponentType())) {
            if (KnockbackPredictionSystems.DEBUG_KNOCKBACK_POSITION) {
               Vector3d var11 = var6.getClientPosition();
               SpatialResource var12 = var4.getResource(EntityModule.get().getPlayerSpatialResourceType());
               List var13 = SpatialResource.getThreadLocalReferenceList();
               var12.getSpatialStructure().collect(var11, 75.0, var13);
               Color var14 = var6.hadWishMovement() ? new Color((byte)-1, (byte)0, (byte)0) : new Color((byte)0, (byte)0, (byte)-1);
               ParticleUtil.spawnParticleEffect("Example_Simple", var11, 0.0F, 0.0F, 0.0F, 1.0F, var14, var13, var5);
            }

            var6.setTickBuffer(var6.getTickBuffer() + var1);
            MovementStates var29 = var6.getClientMovementStates();

            while (var6.getTickBuffer() >= 0.016666668F) {
               var6.setTickBuffer(var6.getTickBuffer() - 0.016666668F);
               Vector3d var30 = var6.getRelativeMovement();
               Vector3d var31 = var6.getRequestedVelocity();
               Vector3d var32 = var6.getSimPosition();
               Vector3d var15 = var6.getSimVelocity();
               MovementStatesComponent var16 = var3.getComponent(var2, MovementStatesComponent.getComponentType());
               assert var16 != null;
               MovementStates var17 = var16.getMovementStates();
               MovementManager var18 = var3.getComponent(var2, MovementManager.getComponentType());
               assert var18 != null;
               MovementSettings var19 = var18.getSettings();
               BoundingBox var20 = var3.getComponent(var2, BOUNDING_BOX_COMPONENT_TYPE);
               assert var20 != null;
               Box var21 = var20.getBoundingBox();
               if (var29.flying) {
                  var6.setRemainingTime(0.0F);
                  class="kw">return;
               }

               if (var29.climbing && !var29.onGround) {
                  var6.setRemainingTime(0.0F);
                  class="kw">return;
               }

               if (var29.swimming) {
                  var6.setRemainingTime(0.0F);
                  class="kw">return;
               }

               int var22 = var19.invertedGravity ? 1 : -1;
               double var23 = var22 * PhysicsMath.getTerminalVelocity(var19.mass, 0.001225F, Math.abs(var21.width() * var21.depth()), var19.dragCoefficient);
               double var25 = PhysicsMath.getAcceleration(var15.y, var23) * 0.016666668F;
               if (var15.y < var23 && var25 > 0.0) {
                  var15.y = Math.min(var15.y + var25, var23);
               } else if (var15.y > var23 && var25 < 0.0) {
                  var15.y = Math.max(var15.y + var25, var23);
               }

               if (var17.onGround) {
                  var17.falling = false;
                  if (var6.wasOnGround() && var6.consumeWasJumping()) {
                     var15.y = var19.jumpForce;
                     var17.onGround = false;
                     var6.setJumpCombo(Math.min(var6.getJumpCombo() + 1, 3));
                  }
               } else {
                  Vector3d var27 = new Vector3d(var32);
                  var27.y += 0.1F;
                  var17.falling = var15.y < 0.0 && CollisionModule.get().validatePosition(var9, var21, var27, new CollisionResult()) != 0;
                  if (var17.falling) {
                     var17.jumping = false;
                     var17.swimJumping = false;
                  }
               }

               if (var6.getJumpCombo() != 0 && (var17.onGround && var6.wasOnGround() || var15.x == 0.0 || var15.z == 0.0)) {
                  var6.setJumpCombo(0);
               }

               float var33 = this.computeMoveForce(var6, var17, var19);
               if (!var17.flying && var6.getRequestedVelocityChangeType() != null) {
                  class="kw">switch (var6.getRequestedVelocityChangeType()) {
                     case Add:
                        var15.add(var31.x * 0.18F * var19.velocityResistance, var31.y, var31.z * 0.18F * var19.velocityResistance);
                        break;
                     case Set:
                        var15.set(var31);
                  }

                  PlayerRef var34 = var3.getComponent(var2, PlayerRef.getComponentType());
                  assert var34 != null;
                  var34.getPacketHandler()
                     .write(
                        new ApplyKnockback(
                           PositionUtil.toPositionPacket(var7.getPosition()),
                           (float)var31.x,
                           (float)var31.y,
                           (float)var31.z,
                           var6.getRequestedVelocityChangeType()
                        )
                     );
               }

               var31.zero();
               var6.setRequestedVelocityChangeType(null);
               Vector3d var35 = var6.getMovementOffset();
               var35.zero();
               if (var6.hadWishMovement()) {
                  float var24 = this.convertWishMovement(var6, var17, var19);
                  var15.fma(var24, var30);
               } else {
                  var35.fma(var33, var30);
                  var30.zero();
               }

               var35.fma(0.016666668F, var15);
               this.applyMovementOffset(var9, var21, var6, var17, var35);
               Ref var36 = var3.getReferenceTo(var2);
               if (var10 < 0.2F) {
                  Vector3d var37 = var6.getClientPosition().lerp(var32, var10 / 0.2F, new Vector3d());
                  var8.moveTo(var36, var37.x, var37.y, var37.z, var5);
               } else {
                  var8.moveTo(var36, var32.x, var32.y, var32.z, var5);
               }
            }
         } else {
            var5.removeComponent(var3.getReferenceTo(var2), KnockbackSimulation.getComponentType());
         }
      }

      class="kw">private float convertWishMovement(@Nonnull KnockbackSimulation var1, @Nonnull MovementStates var2, @Nonnull MovementSettings var3) {
         MovementStates var4 = var1.getClientMovementStates();
         if (var4 == null) {
            var4 = var2;
         }

         Vector3d var5 = var1.getSimVelocity();
         float var6 = (float)Math.sqrt(var5.x * var5.x + var5.z * var5.z);
         float var7 = 0.0F;
         float var8 = 1.0F;
         if (!var2.flying && !var2.climbing) {
            var7 = !var2.onGround && !var2.swimming
               ? convertToNewRange(var6, var3.airDragMinSpeed, var3.airDragMaxSpeed, var3.airDragMin, var3.airDragMax)
               : 0.82F;
            var8 = !var2.onGround && !var2.swimming
               ? convertToNewRange(var6, var3.airFrictionMinSpeed, var3.airFrictionMaxSpeed, var3.airFrictionMax, var3.airFrictionMin)
               : 1.0F - var7;
         }

         float var9 = 0.0F;
         float var10 = 1.0F;
         if (!var4.flying && !var4.climbing) {
            var9 = !var4.onGround && !var4.swimming
               ? convertToNewRange(var6, var3.airDragMinSpeed, var3.airDragMaxSpeed, var3.airDragMin, var3.airDragMax)
               : 0.82F;
            var10 = !var4.onGround && !var4.swimming
               ? convertToNewRange(var6, var3.airFrictionMinSpeed, var3.airFrictionMaxSpeed, var3.airFrictionMax, var3.airFrictionMin)
               : 1.0F - var9;
         }

         class="kw">return var8 / var10;
      }

      class="kw">private float computeMoveForce(@Nonnull KnockbackSimulation var1, @Nonnull MovementStates var2, @Nonnull MovementSettings var3) {
         float var4 = 0.0F;
         float var5 = 1.0F;
         Vector3d var6 = var1.getSimVelocity();
         float var7 = (float)Math.sqrt(var6.x * var6.x + var6.z * var6.z);
         if (!var2.flying && !var2.climbing) {
            var4 = !var2.onGround && !var2.swimming
               ? convertToNewRange(var7, var3.airDragMinSpeed, var3.airDragMaxSpeed, var3.airDragMin, var3.airDragMax)
               : 0.82F;
            var5 = !var2.onGround && !var2.swimming
               ? convertToNewRange(var7, var3.airFrictionMinSpeed, var3.airFrictionMaxSpeed, var3.airFrictionMax, var3.airFrictionMin) / (1.0F - var4)
               : 1.0F;
         }

         var6.x *= var4;
         var6.z *= var4;
         class="kw">return var5;
      }

      class="kw">private class="kw">static float convertToNewRange(float var0, float var1, float var2, float var3, float var4) {
         if (var3 != var4 && var1 != var2) {
            float var5 = (var0 - var1) * (var4 - var3) / (var2 - var1) + var3;
            class="kw">return MathUtil.clamp(var5, Math.min(var3, var4), Math.max(var3, var4));
         } else {
            class="kw">return var3;
         }
      }

      class="kw">public void applyMovementOffset(
         @Nonnull World var1, @Nonnull Box var2, @Nonnull KnockbackSimulation var3, @Nonnull MovementStates var4, @Nonnull Vector3d var5
      ) {
         int var6 = (int)Math.ceil(var5.length() / 0.25);
         Vector3d var7 = var6 == 1 ? var5 : new Vector3d(var5).mul(1.0F / var6);
         var3.setWasOnGround(var4.onGround);

         for (int var8 = 0; var8 < var6; var8++) {
            this.doMoveCycle(var1, var2, var3, var4, var7);
         }

         if (var4.onGround) {
            var3.getSimVelocity().y = 0.0;
         }
      }

      class="kw">private void doMoveCycle(@Nonnull World var1, @Nonnull Box var2, @Nonnull KnockbackSimulation var3, @Nonnull MovementStates var4, @Nonnull Vector3d var5) {
         Vector3d var6 = var3.getSimPosition();
         Vector3d var7 = var3.getSimVelocity();
         Vector3d var8 = var3.getCheckPosition();
         var8.set(var6);
         CollisionResult var9 = var3.getCollisionResult();
         var9.reset();
         var8.y = var8.y + var5.y;
         boolean var10 = this.checkCollision(var3, var1, var2, var8, var5, KnockbackPredictionSystems.CollisionAxis.Y, var9);
         if (var4.onGround && var5.y < 0.0) {
            if (!var10) {
               var4.onGround = false;
            } else {
               var8.y = var8.y - var5.y;
            }
         } else if (var10) {
            if (var5.y <= 0.0) {
               var4.onGround = true;
               var8.y = var8.y - var5.y;
            } else {
               var4.onGround = false;
               var8.y = var8.y - var5.y;
            }

            var7.y = 0.0;
         } else {
            var4.onGround = false;
         }

         if (var5.x != 0.0) {
            var8.x = var8.x + var5.x;
            var9.reset();
            boolean var11 = this.checkCollision(var3, var1, var2, var8, var5, KnockbackPredictionSystems.CollisionAxis.Y, var9);
            if (var11) {
               var8.x = var8.x - var5.x;
            }
         }

         if (var5.z != 0.0) {
            var8.z = var8.z + var5.z;
            var9.reset();
            boolean var12 = this.checkCollision(var3, var1, var2, var8, var5, KnockbackPredictionSystems.CollisionAxis.Y, var9);
            if (var12) {
               var8.z = var8.z - var5.z;
            }
         }

         var6.set(var8);
      }

      class="kw">private boolean checkCollision(
         @Nonnull KnockbackSimulation var1,
         @Nonnull World var2,
         @Nonnull Box var3,
         @Nonnull Vector3d var4,
         Vector3d var5,
         KnockbackPredictionSystems.CollisionAxis var6,
         @Nonnull CollisionResult var7
      ) {
         Vector3d var8 = var1.getTempPosition();
         var8.set(var4);
         var8.add(0.0, 1.0E-4F, 0.0);
         class="kw">return CollisionModule.get().validatePosition(var2, var3, var8, var7) != 0;
      }
   }
}