SensorBlock class
Пакет: com.hypixel.hytale.server.npc.corecomponents.world
Файл: com/hypixel/hytale/server/npc/corecomponents/world/SensorBlock.java
extends: SensorBase
Поля (16)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
double |
range |
|
Vector3d |
var10 |
|
ChunkStore |
var11 |
|
long |
var12 |
|
int |
var13 |
|
Ref |
var14 |
|
BlockChunk |
var15 |
|
BlockSection |
var16 |
|
BlockTypeView |
var17 |
|
IBlockPositionData |
var18 |
|
BlockType |
var19 |
|
ResourceView |
var20 |
|
TransformComponent |
var6 |
|
Vector3d |
var7 |
|
BlackboardSubscription |
var8 |
|
BlockTarget |
var9 |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
if if(var15 != null) |
|
|
if if(var18 == null) |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.corecomponents.world;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
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.chunk.section.blockpositions.IBlockPositionData;
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.blackboard.Blackboard;
class="kw">import com.hypixel.hytale.server.npc.blackboard.BlackboardSubscription;
class="kw">import com.hypixel.hytale.server.npc.blackboard.view.blocktype.BlockTypeView;
class="kw">import com.hypixel.hytale.server.npc.blackboard.view.resource.ResourceView;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.BlockTarget;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.SensorBase;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.world.builders.BuilderSensorBlock;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.PositionProvider;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">public class SensorBlock class="kw">extends SensorBase {
class="kw">protected class="kw">final double range;
class="kw">protected class="kw">final double yRange;
class="kw">protected class="kw">final int blockSet;
class="kw">protected class="kw">final boolean pickRandom;
class="kw">protected class="kw">final boolean reserveBlock;
class="kw">protected class="kw">final PositionProvider positionProvider = new PositionProvider();
class="kw">public SensorBlock(@Nonnull BuilderSensorBlock var1, @Nonnull BuilderSupport var2) {
super(var1);
this.range = var1.getRange(var2);
this.yRange = var1.getYRange(var2);
this.blockSet = var1.getBlockSet(var2);
this.pickRandom = var1.isPickRandom(var2);
this.reserveBlock = var1.isReserveBlock(var2);
var2.requireBlockTypeBlackboard(this.blockSet);
}
@Override
class="kw">public boolean matches(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, double var3, @Nonnull Store<EntityStore> var5) {
if (!super.matches(var1, var2, var3, var5)) {
this.positionProvider.clear();
class="kw">return false;
}
TransformComponent var6 = var5.getComponent(var1, TransformComponent.getComponentType());
assert var6 != null;
Vector3d var7 = var6.getPosition();
BlackboardSubscription var8 = var5.getComponent(var1, BlackboardSubscription.getComponentType());
assert var8 != null;
BlockTarget var9 = var2.getWorldSupport().getCachedBlockTarget(this.blockSet);
Vector3d var10 = var9.getPosition();
if (!var10.equals(Vector3dUtil.MIN)) {
ChunkStore var11 = var5.getExternalData().getWorld().getChunkStore();
long var12 = ChunkUtil.indexChunkFromBlock(var10.x, var10.z);
Ref var14 = var11.getChunkReference(var12);
BlockChunk var15 = var14 != null && var14.isValid() ? var11.getStore().getComponent(var14, BlockChunk.getComponentType()) : null;
if (var15 != null) {
BlockSection var16 = var15.getSectionAtBlockY(MathUtil.floor(var10.y));
if (var16.getLocalChangeCounter() == var9.getChunkChangeRevision()
|| var16.get(MathUtil.floor(var10.x), MathUtil.floor(var10.y), MathUtil.floor(var10.z)) == var9.getFoundBlockType()) {
if (!(Math.abs(var7.y - var10.y) > this.yRange) && !(var7.distanceSquared(var10) > this.range * this.range)) {
this.positionProvider.setTarget(var10);
class="kw">return true;
} else {
this.positionProvider.clear();
class="kw">return false;
}
}
}
}
if (var9.isActive()) {
var9.reset(var1);
}
BlockTypeView var17 = var8.getBlockTypeBlackboardView(var1, var5);
IBlockPositionData var18 = var17.findBlock(this.blockSet, this.range, this.yRange, this.pickRandom, var1, var5);
if (var18 == null) {
this.positionProvider.clear();
class="kw">return false;
}
var10.set(var18.getXCentre(), var18.getYCentre(), var18.getZCentre());
int var13 = var18.getBlockType();
var9.setFoundBlockType(var13);
var9.setChunkChangeRevision(var18.getChunkSection().getLocalChangeCounter());
BlockType var19 = BlockType.getAssetMap().getAsset(var13);
if (this.reserveBlock || !var19.isAllowsMultipleUsers()) {
ResourceView var20 = var5.getResource(Blackboard.getResourceType()).getView(ResourceView.class, ResourceView.indexViewFromWorldPosition(var10));
var20.reserveBlock(var1, var18.getX(), var18.getY(), var18.getZ());
var9.setReservationHolder(var20);
Blackboard.LOGGER.at(Level.FINE).log("Entity %s reserved block from set %s at %s", var1, this.blockSet, var10);
}
Blackboard.LOGGER.at(Level.FINE).log("Entity %s found block from set %s at %s", var1, this.blockSet, var10);
this.positionProvider.setTarget(var10);
class="kw">return true;
}
@Override
class="kw">public InfoProvider getSensorInfo() {
class="kw">return this.positionProvider;
}
}