ItemPhysicsSystem class

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

Файл: com/hypixel/hytale/server/core/modules/entity/item/ItemPhysicsSystem.java

extends: EntityTickingSystem<EntityStore>

Поля (13)

МодификаторыТипИмя
Vector3d var10
Vector3d var11
CollisionResult var12
BoundingBox var13
Box var14
BlockCollisionData var15
Vector3d var16
double var17
Vector3d var19
World var6
ItemPhysicsComponent var7
Velocity var8
TransformComponent var9

Методы (1)

МодификаторыВозвратСигнатура
if if(var15 != null)

Исходный код

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

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.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.server.core.modules.collision.BlockCollisionData;
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.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.physics.component.Velocity;
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 java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class ItemPhysicsSystem class="kw">extends EntityTickingSystem<EntityStore> {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, ItemPhysicsComponent> itemPhysicsComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, BoundingBox> boundingBoxComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, Velocity> velocityComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType;
   @Nonnull
   class="kw">private class="kw">final Query<EntityStore> query;

   class="kw">public ItemPhysicsSystem(
      @Nonnull ComponentType<EntityStore, ItemPhysicsComponent> var1,
      @Nonnull ComponentType<EntityStore, Velocity> var2,
      @Nonnull ComponentType<EntityStore, BoundingBox> var3
   ) {
      this.itemPhysicsComponentType = var1;
      this.velocityComponentType = var2;
      this.boundingBoxComponentType = var3;
      this.transformComponentType = TransformComponent.getComponentType();
      this.query = Query.and(var1, var3, var2, this.transformComponentType);
   }

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

   @Override
   class="kw">public boolean isParallel(int var1, int var2) {
      class="kw">return false;
   }

   @Override
   class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5) {
      World var6 = var4.getExternalData().getWorld();
      ItemPhysicsComponent var7 = var3.getComponent(var2, this.itemPhysicsComponentType);
      assert var7 != null;
      Velocity var8 = var3.getComponent(var2, this.velocityComponentType);
      assert var8 != null;
      TransformComponent var9 = var3.getComponent(var2, this.transformComponentType);
      assert var9 != null;
      Vector3d var10 = var9.getPosition();
      Vector3d var11 = var7.scaledVelocity;
      CollisionResult var12 = var7.collisionResult;
      var8.assignVelocityTo(var11).mul(var1);
      BoundingBox var13 = var3.getComponent(var2, this.boundingBoxComponentType);
      assert var13 != null;
      Box var14 = var13.getBoundingBox();
      if (CollisionModule.isBelowMovementThreshold(var11)) {
         CollisionModule.findBlockCollisionsShortDistance(var6, var14, var10, var11, var12);
      } else {
         CollisionModule.findBlockCollisionsIterative(var6, var14, var10, var11, true, var12);
      }

      BlockCollisionData var15 = var12.getFirstBlockCollision();
      if (var15 != null) {
         if (var15.collisionNormal.equals(Vector3dUtil.UP)) {
            var8.setZero();
            var10.set(var15.collisionPoint);
         } else {
            Vector3d var16 = var8.getVelocity();
            double var17 = var16.dot(var15.collisionNormal);
            Vector3d var19 = new Vector3d(var15.collisionNormal).mul(var17);
            var16.sub(var19);
         }
      } else {
         var8.assignVelocityTo(var11).mul(var1);
         var10.add(var11);
      }

      var12.reset();
      if (var10.y() < -32.0) {
         LOGGER.at(Level.WARNING).log("Item fell out of the world %s", var3.getReferenceTo(var2));
         var5.removeEntity(var3.getReferenceTo(var2), RemoveReason.REMOVE);
      }
   }
}