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