RayBlockHitTest class

Пакет: com.hypixel.hytale.server.npc.util

Файл: com/hypixel/hytale/server/npc/util/RayBlockHitTest.java

implements: BlockIterator.BlockIteratorProcedure

Поля (7)

МодификаторыТипИмя
final ThreadLocal<RayBlockHitTest> THREAD_LOCAL
int var16
TransformComponent var5
ModelComponent var6
HeadRotation var7
World var8
float var9

Методы (8)

МодификаторыВозвратСигнатура
public void clearvoid clear()
public short getLastBlockRevisionshort getLastBlockRevision()
if if(this.chunk == null)
if if(var16 == 0)
if if(var16 == 1)
if if(this.chunk == null)
public boolean initboolean init(@Nonnull Ref<EntityStore> var1, int var2, float var3, @Nonnull ComponentAccessor<EntityStore> var4)
public boolean runboolean run(double var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.util;

class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.math.iterator.BlockIterator;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.server.core.modules.blockset.BlockSetModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class RayBlockHitTest class="kw">implements BlockIterator.BlockIteratorProcedure {
   class="kw">public class="kw">static class="kw">final ThreadLocal<RayBlockHitTest> THREAD_LOCAL = ThreadLocal.withInitial(RayBlockHitTest::new);
   @Nullable
   class="kw">private World world;
   @Nullable
   class="kw">private WorldChunk chunk;
   class="kw">private class="kw">final Vector3d origin = new Vector3d();
   class="kw">private class="kw">final Vector3d direction = new Vector3d();
   class="kw">private int blockSet;
   class="kw">private class="kw">final Vector3d hitPosition = new Vector3d(Vector3dUtil.MIN);
   class="kw">private short lastBlockRevision;

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

   @Override
   class="kw">public boolean accept(int var1, int var2, int var3, double var4, double var6, double var8, double var10, double var12, double var14) {
      if (!ChunkUtil.isInsideChunk(this.chunk.getX(), this.chunk.getZ(), var1, var3)) {
         this.chunk = this.world.getChunkIfInMemory(ChunkUtil.indexChunkFromBlock(var1, var3));
         if (this.chunk == null) {
            this.hitPosition.set(Vector3dUtil.MIN);
            class="kw">return false;
         }
      }

      int var16 = this.chunk.getBlock(var1, var2, var3);
      if (var16 == 0) {
         class="kw">return true;
      }

      if (var16 == 1) {
         class="kw">return false;
      }

      this.lastBlockRevision = this.chunk.getBlockChunk().getSectionAtBlockY(var2).getLocalChangeCounter();
      if (BlockSetModule.getInstance().blockInSet(this.blockSet, var16)) {
         this.hitPosition.set(var1, var2, var3);
      }

      class="kw">return false;
   }

   @Nonnull
   class="kw">public Vector3d getHitPosition() {
      class="kw">return this.hitPosition;
   }

   class="kw">public short getLastBlockRevision() {
      class="kw">return this.lastBlockRevision;
   }

   class="kw">public boolean init(@Nonnull Ref<EntityStore> var1, int var2, float var3, @Nonnull ComponentAccessor<EntityStore> var4) {
      TransformComponent var5 = var4.getComponent(var1, TransformComponent.getComponentType());
      assert var5 != null;
      ModelComponent var6 = var4.getComponent(var1, ModelComponent.getComponentType());
      assert var6 != null;
      HeadRotation var7 = var4.getComponent(var1, HeadRotation.getComponentType());
      assert var7 != null;
      World var8 = var4.getExternalData().getWorld();
      this.blockSet = var2;
      this.origin.set(var5.getPosition());
      this.origin.y = this.origin.y + var6.getModel().getEyeHeight();
      this.world = var8;
      this.chunk = var8.getChunkIfInMemory(ChunkUtil.indexChunkFromBlock(this.origin.x, this.origin.z));
      if (this.chunk == null) {
         class="kw">return false;
      }

      float var9 = var7.getRotation().yaw();
      Vector3dUtil.setYawPitch(var9, var3, this.direction);
      class="kw">return true;
   }

   class="kw">public boolean run(double var1) {
      BlockIterator.iterate(this.origin, this.direction, var1, this);
      class="kw">return !this.hitPosition.equals(Vector3dUtil.MIN);
   }

   class="kw">public void clear() {
      this.world = null;
      this.chunk = null;
      this.hitPosition.set(Vector3dUtil.MIN);
   }
}