AOECylinderSelector class

Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.selector

Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/selector/AOECylinderSelector.java

extends: AOECircleSelector

Поля (22)

МодификаторыТипИмя
int var10
Archetype var11
int var11
boolean var12
float var12
boolean var13
TransformComponent var14
Vector3d var15
double var16
double var18
double var20
Vector3d var4
Vector3d var5
Vector3d var5
CachedAccessor var5
Vector3f var6
Vector3d var6
int var6
Vector3d var7
int var7
int var8
int var9

Методы (11)

МодификаторыВозвратСигнатура
private RuntimeSelectorprivate RuntimeSelector()
for for(int var13 = var6; var13 < var9; var13++)
for for(int var14 = var7; var14 < var10; var14++)
for for(int var15 = var8; var15 < var11; var15++)
if if(SelectInteraction.SHOW_VISUAL_DEBUG)
if if(!var12 && !var13)
if if(var16 * var16 + var20 * var20 <= AOECylinderSelector.this.range * AOECylinderSelector.this.range && var18 <= AOECylinderSelector.this.height && var18 >= 0.0)
if if(var13 * var13 + var15 * var15 <= var12)
public void selectTargetBlockspublic void selectTargetBlocks(@Nonnull CommandBuffer<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull Selector.BlockConsumer var3)
public void selectTargetEntitiespublic void selectTargetEntities(@Nonnull CommandBuffer<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull BiConsumer<Ref<EntityStore>, Vector4d> var3, @Nullable Predicate<Ref<EntityStore>> var4)
public void tickpublic void tick(@Nonnull CommandBuffer<EntityStore> var1, @Nonnull Ref<EntityStore> var2, float var3, float var4)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config.selector;

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.server.core.modules.debug.DebugUtils;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Invulnerable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.none.SelectInteraction;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.CachedAccessor;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.TargetUtil;
class="kw">import java.util.function.BiConsumer;
class="kw">import java.util.function.Predicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3f;
class="kw">import org.joml.Vector4d;

class="kw">public class AOECylinderSelector class="kw">extends AOECircleSelector {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<AOECylinderSelector> CODEC = BuilderCodec.builder(
         AOECylinderSelector.class, AOECylinderSelector::new, AOECircleSelector.CODEC
      )
      .documentation("A selector that selects all entities within a given range and height.")
      .<Float>append(new KeyedCodec<>("Height", Codec.FLOAT), (var0, var1) -> var0.height = var1, var0 -> var0.height)
      .documentation("The height of the area to search for targets in from the entity position.")
      .add()
      .build();
   class="kw">private class="kw">final AOECylinderSelector.RuntimeSelector instance = new AOECylinderSelector.RuntimeSelector();
   class="kw">protected float height;

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

   @Nonnull
   @Override
   class="kw">public Selector newSelector() {
      class="kw">return this.instance;
   }

   @Override
   class="kw">public com.hypixel.hytale.protocol.Selector toPacket() {
      class="kw">return new com.hypixel.hytale.protocol.AOECylinderSelector(this.range, this.height, this.getOffset());
   }

   class="kw">private class RuntimeSelector class="kw">implements Selector {
      class="kw">private RuntimeSelector() {
      }

      @Override
      class="kw">public void tick(@Nonnull CommandBuffer<EntityStore> var1, @Nonnull Ref<EntityStore> var2, float var3, float var4) {
         if (SelectInteraction.SHOW_VISUAL_DEBUG) {
            Vector3d var5 = AOECylinderSelector.this.selectTargetPosition(var1, var2);
            Vector3f var6 = new Vector3f(
               (float)HashUtil.random(var2.getIndex(), this.hashCode(), 10L),
               (float)HashUtil.random(var2.getIndex(), this.hashCode(), 11L),
               (float)HashUtil.random(var2.getIndex(), this.hashCode(), 12L)
            );
            DebugUtils.addCylinder(var1.getExternalData().getWorld(), var5, var6, AOECylinderSelector.this.range * 2.0F, AOECylinderSelector.this.height, 5.0F);
         }
      }

      @Override
      class="kw">public void selectTargetEntities(
         @Nonnull CommandBuffer<EntityStore> var1,
         @Nonnull Ref<EntityStore> var2,
         @Nonnull BiConsumer<Ref<EntityStore>, Vector4d> var3,
         @Nullable Predicate<Ref<EntityStore>> var4
      ) {
         Vector3d var5 = AOECylinderSelector.this.selectTargetPosition(var1, var2);
         Vector3d var6 = new Vector3d(var5.x - AOECylinderSelector.this.range, var5.y, var5.z - AOECylinderSelector.this.range);
         Vector3d var7 = new Vector3d(
            var5.x + AOECylinderSelector.this.range, var5.y + AOECylinderSelector.this.height, var5.z + AOECylinderSelector.this.range
         );

         for (Ref var10 : TargetUtil.getAllEntitiesInBox(var6, var7, var1)) {
            if (var10.isValid() && !var10.equals(var2) && (var4 == null || var4.test(var10))) {
               Archetype var11 = var1.getArchetype(var10);
               boolean var12 = var11.contains(DeathComponent.getComponentType());
               boolean var13 = var11.contains(Invulnerable.getComponentType());
               if (!var12 && !var13) {
                  TransformComponent var14 = var1.getComponent(var10, TransformComponent.getComponentType());
                  assert var14 != null;
                  Vector3d var15 = var14.getPosition();
                  double var16 = var15.x - var5.x;
                  double var18 = var15.y - var5.y;
                  double var20 = var15.z - var5.z;
                  if (var16 * var16 + var20 * var20 <= AOECylinderSelector.this.range * AOECylinderSelector.this.range
                     && var18 <= AOECylinderSelector.this.height
                     && var18 >= 0.0) {
                     var3.accept(var10, new Vector4d(var5.x, var5.y, var5.z, 1.0));
                  }
               }
            }
         }
      }

      @Override
      class="kw">public void selectTargetBlocks(@Nonnull CommandBuffer<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull Selector.BlockConsumer var3) {
         Vector3d var4 = AOECylinderSelector.this.selectTargetPosition(var1, var2);
         CachedAccessor var5 = SelectorBlockScan.accessorAt(
            var1.getExternalData().getWorld(), var4.x, var4.y, var4.z, AOECylinderSelector.this.range, AOECylinderSelector.this.height
         );
         int var6 = MathUtil.floor(-AOECylinderSelector.this.range);
         int var7 = 0;
         int var8 = MathUtil.floor(-AOECylinderSelector.this.range);
         int var9 = MathUtil.floor(AOECylinderSelector.this.range);
         int var10 = MathUtil.floor(AOECylinderSelector.this.height);
         int var11 = MathUtil.floor(AOECylinderSelector.this.range);
         float var12 = AOECylinderSelector.this.range * AOECylinderSelector.this.range;

         for (int var13 = var6; var13 < var9; var13++) {
            for (int var14 = var7; var14 < var10; var14++) {
               for (int var15 = var8; var15 < var11; var15++) {
                  if (var13 * var13 + var15 * var15 <= var12) {
                     SelectorBlockScan.accept(var5, MathUtil.floor(var4.x + var13), MathUtil.floor(var4.y + var14), MathUtil.floor(var4.z + var15), var3);
                  }
               }
            }
         }
      }
   }
}