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);
}
}