EntityFilterInsideBlock class
Пакет: com.hypixel.hytale.server.npc.corecomponents.entity.filters
Файл: com/hypixel/hytale/server/npc/corecomponents/entity/filters/EntityFilterInsideBlock.java
extends: EntityFilterBase
Поля (6)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
COST |
|
long |
var4 |
|
Vector3d |
var5 |
|
Box |
var6 |
|
int |
var6 |
|
int |
var7 |
Методы (5)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
boolean |
acceptboolean accept(int var0, int var1, int var2, @Nonnull EntityFilterInsideBlock var3) |
|
|
if if(var4 != var3.chunkIndex) |
|
|
if if(var3.blockChunk == null) |
|
|
if if(var6 != var3.chunkSectionIndex) |
|
|
if if(var3.chunkSection == null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.corecomponents.entity.filters;
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.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.modules.blockset.BlockSetModule;
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.universe.world.chunk.BlockChunk;
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 com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.EntityFilterBase;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.entity.filters.builders.BuilderEntityFilterInsideBlock;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class EntityFilterInsideBlock class="kw">extends EntityFilterBase {
class="kw">public class="kw">static class="kw">final int COST = 400;
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, BoundingBox> BOUNDING_BOX_COMPONENT_TYPE = BoundingBox.getComponentType();
class="kw">protected class="kw">static class="kw">final ComponentType<ChunkStore, BlockChunk> BLOCK_CHUNK_COMPONENT_TYPE = BlockChunk.getComponentType();
class="kw">protected class="kw">final int blockSet;
@Nullable
class="kw">protected ChunkStore chunkStore;
class="kw">protected long chunkIndex = ChunkUtil.NOT_FOUND;
@Nullable
class="kw">protected BlockChunk blockChunk;
class="kw">protected int chunkSectionIndex = Integer.MIN_VALUE;
@Nullable
class="kw">protected BlockSection chunkSection;
class="kw">protected boolean matches;
class="kw">public EntityFilterInsideBlock(@Nonnull BuilderEntityFilterInsideBlock var1, @Nonnull BuilderSupport var2) {
this.blockSet = var1.getBlockSet(var2);
}
@Override
class="kw">public boolean matchesEntity(
@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ExecutionSupport var3, @Nonnull Store<EntityStore> var4
) {
this.chunkStore = var4.getExternalData().getWorld().getChunkStore();
this.matches = false;
Vector3d var5 = var4.getComponent(var2, TRANSFORM_COMPONENT_TYPE).getPosition();
Box var6 = var4.getComponent(var2, BOUNDING_BOX_COMPONENT_TYPE).getBoundingBox();
var6.forEachBlock(var5.x, var5.y, var5.z, this, EntityFilterInsideBlock::accept);
this.chunkStore = null;
this.chunkIndex = ChunkUtil.NOT_FOUND;
this.blockChunk = null;
this.chunkSectionIndex = Integer.MIN_VALUE;
this.chunkSection = null;
class="kw">return this.matches;
}
@Override
class="kw">public int cost() {
class="kw">return 400;
}
class="kw">private class="kw">static boolean accept(int var0, int var1, int var2, @Nonnull EntityFilterInsideBlock var3) {
long var4 = ChunkUtil.indexChunkFromBlock(var0, var2);
if (var4 != var3.chunkIndex) {
var3.chunkIndex = var4;
var3.blockChunk = var3.chunkStore.getChunkComponent(var4, BLOCK_CHUNK_COMPONENT_TYPE);
}
if (var3.blockChunk == null) {
class="kw">return false;
}
int var6 = ChunkUtil.indexSection(var1);
if (var6 != var3.chunkSectionIndex) {
var3.chunkSectionIndex = var6;
var3.chunkSection = var6 >= 0 && var6 < 10 ? var3.blockChunk.getSectionAtIndex(var6) : null;
}
if (var3.chunkSection == null) {
var3.matches = BlockSetModule.getInstance().blockInSet(var3.blockSet, 0);
class="kw">return !var3.matches;
} else {
int var7 = var3.chunkSection.get(var0, var1, var2);
var3.matches = BlockSetModule.getInstance().blockInSet(var3.blockSet, var7);
class="kw">return !var3.matches;
}
}
}