PlayerProcessMovementSystem class

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

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

extends: EntityTickingSystem<EntityStore>

Поля (27)

МодификаторыТипИмя
static boolean FIND_MOTION_PATH_TRIGGERS
CollisionResultComponent var10
InteractionManager var11
PlayerRef var12
TransformComponent var13
boolean var14
BoundingBox var15
Box var16
BlockCollisionData var17
PositionDataComponent var18
Store var19
BlockSection var20
PositionDataComponent var21
Vector3i var22
int var23
BlockSection var24
var24
var24
Ref var25
Ref var26
ChunkStore var27
World var6
Ref var7
Player var8
int var8
Velocity var9
Damage var9

Методы (5)

МодификаторыВозвратСигнатура
if if(var11 != null)
if if(var14 && FIND_MOTION_PATH_TRIGGERS)
if if(var17 != null)
if if(var24 != null)
if if(var8.executeBlockDamage && var8 > 0)

Исходный код

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

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.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.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.protocol.GameMode;
class="kw">import com.hypixel.hytale.server.core.entity.Entity;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionManager;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
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.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.CollisionResultComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PositionDataComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.Damage;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DamageCause;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DamageSystems;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.InteractionModule;
class="kw">import com.hypixel.hytale.server.core.modules.physics.component.Velocity;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
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.Vector3i;

class="kw">public class PlayerProcessMovementSystem class="kw">extends EntityTickingSystem<EntityStore> {
   class="kw">private class="kw">static boolean FIND_MOTION_PATH_TRIGGERS = false;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, Player> playerComponentType;
   @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, CollisionResultComponent> collisionResultComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, PlayerRef> playerRefComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, PositionDataComponent> positionDataComponentType;
   @Nonnull
   class="kw">private class="kw">final Query<EntityStore> query;

   class="kw">public PlayerProcessMovementSystem(
      @Nonnull ComponentType<EntityStore, Player> var1,
      @Nonnull ComponentType<EntityStore, Velocity> var2,
      @Nonnull ComponentType<EntityStore, CollisionResultComponent> var3
   ) {
      this.playerComponentType = var1;
      this.velocityComponentType = var2;
      this.collisionResultComponentType = var3;
      this.boundingBoxComponentType = BoundingBox.getComponentType();
      this.playerRefComponentType = PlayerRef.getComponentType();
      this.transformComponentType = TransformComponent.getComponentType();
      this.positionDataComponentType = PositionDataComponent.getComponentType();
      this.query = Query.and(
         var1, this.playerRefComponentType, this.transformComponentType, this.boundingBoxComponentType, var2, var3, this.positionDataComponentType
      );
   }

   @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();
      Ref var7 = var3.getReferenceTo(var2);
      Player var8 = var3.getComponent(var2, this.playerComponentType);
      assert var8 != null;
      Velocity var9 = var3.getComponent(var2, this.velocityComponentType);
      assert var9 != null;
      CollisionResultComponent var10 = var3.getComponent(var2, this.collisionResultComponentType);
      assert var10 != null;
      InteractionManager var11 = var3.getComponent(var2, InteractionModule.get().getInteractionManagerComponent());
      if (var11 != null) {
         PlayerRef var12 = var3.getComponent(var2, this.playerRefComponentType);
         assert var12 != null;
         TransformComponent var13 = var3.getComponent(var2, this.transformComponentType);
         assert var13 != null;
         boolean var14 = var10.isPendingCollisionCheck();
         var10.getCollisionStartPositionCopy().set(var14 ? var10.getCollisionStartPosition() : var13.getPosition());
         var10.getCollisionPositionOffsetCopy().set(var10.getCollisionPositionOffset());
         var10.resetLocationChange();
         if (var10.getCollisionPositionOffsetCopy().lengthSquared() >= 100.0) {
            if (var8.getGameMode() == GameMode.Adventure) {
               Entity.LOGGER
                  .at(Level.WARNING)
                  .log(
                     "%s, %s: Jump in location in processMovementBlockCollisions %s",
                     var12.getUsername(),
                     var12.getUuid(),
                     var10.getCollisionPositionOffsetCopy().length()
                  );
            }

            var8.resetVelocity(var9);
         } else {
            BoundingBox var15 = var3.getComponent(var2, this.boundingBoxComponentType);
            assert var15 != null;
            Box var16 = var15.getBoundingBox();
            if (var14 && FIND_MOTION_PATH_TRIGGERS) {
               CollisionModule.findCollisions(
                  var16, var10.getCollisionStartPositionCopy(), var10.getCollisionPositionOffsetCopy(), var10.getCollisionResult(), var5
               );
               BlockCollisionData var17 = var10.getCollisionResult().getFirstBlockCollision();
               if (var17 != null) {
               }
            } else {
               CollisionModule.get().findIntersections(var6, var16, var10.getCollisionStartPositionCopy(), var10.getCollisionResult(), true, false);
            }

            var8.processVelocitySample(var1, var10.getCollisionPositionOffsetCopy(), var9);
            Ref var26 = var13.getSectionRef();
            if (var26 != null && var26.isValid()) {
               ChunkStore var27 = var6.getChunkStore();
               Store var19 = var27.getStore();
               BlockSection var20 = var19.getComponent(var26, BlockSection.getComponentType());
               assert var20 != null;
               PositionDataComponent var21 = var3.getComponent(var2, this.positionDataComponentType);
               assert var21 != null;
               Vector3i var22 = Vector3dUtil.toVector3i(var13.getPosition());
               var21.setInsideBlockTypeId(var20.get(var22.x, var22.y, var22.z));
               int var23 = var22.y - 1;
               BlockSection var24;
               if (ChunkUtil.chunkCoordinate(var23) == ChunkUtil.chunkCoordinate(var22.y)) {
                  var24 = var20;
               } else {
                  Ref var25 = var27.getChunkSectionReferenceAtBlock(var22.x, var23, var22.z);
                  var24 = var25 != null && var25.isValid() ? var19.getComponent(var25, BlockSection.getComponentType()) : null;
               }

               if (var24 != null) {
                  var21.setStandingOnBlockTypeId(var24.get(var22.x, var23, var22.z));
               } else {
                  var21.setStandingOnBlockTypeId(0);
               }
            } else {
               PositionDataComponent var18 = var3.getComponent(var2, this.positionDataComponentType);
               assert var18 != null;
               var18.setInsideBlockTypeId(0);
               var18.setStandingOnBlockTypeId(0);
            }

            var5.run(var7x -> {
               int var8 = var10.getCollisionResult().defaultTriggerBlocksProcessing(var11, var8, var7, var8.executeTriggers, var5);
               if (var8.executeBlockDamage && var8 > 0) {
                  Damage var9 = new Damage(Damage.NULL_SOURCE, DamageCause.ENVIRONMENT, var8);
                  DamageSystems.executeDamage(var2, var3, var5, var9);
               }
            });
         }
      }
   }
}