AOECircleSelector class

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

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

extends: SelectorType

Поля (14)

МодификаторыТипИмя
double var13
TransformComponent var3
Vector3d var4
var4
Vector3d var4
HeadRotation var5
Vector3d var5
Vector3d var5
CachedAccessor var5
Vector3f var6
int var6
int var7
int var8
int var9

Методы (11)

МодификаторыВозвратСигнатура
private RuntimeSelectorprivate RuntimeSelector()
for for(int var10 = -var9; var10 <= var9; var10++)
for for(int var11 = -var9; var11 <= var9; var11++)
for for(int var12 = -var9; var12 <= var9; var12++)
if if(this.offset.x != 0.0 || this.offset.y != 0.0 || this.offset.z != 0.0)
if if(SelectInteraction.SHOW_VISUAL_DEBUG)
if if(var13 <= var9 * var9)
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, Predicate<Ref<EntityStore>> var4)
public void tickpublic void tick(@Nonnull CommandBuffer<EntityStore> var1, @Nonnull Ref<EntityStore> var2, float var3, float var4)
public com.hypixel.hytale.protocol.Selector toPacketcom.hypixel.hytale.protocol.Selector toPacket()

Исходный код

Показать/скрыть
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.codec.validation.Validators;
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.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.server.core.modules.debug.DebugUtils;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
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 java.util.function.BiConsumer;
class="kw">import java.util.function.Predicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3f;
class="kw">import org.joml.Vector4d;

class="kw">public class AOECircleSelector class="kw">extends SelectorType {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<AOECircleSelector> CODEC = BuilderCodec.builder(AOECircleSelector.class, AOECircleSelector::new, BASE_CODEC)
      .documentation("A selector that selects all entities within a given range.")
      .<Float>appendInherited(
         new KeyedCodec<>("Range", Codec.FLOAT), (var0, var1) -> var0.range = var1, var0 -> var0.range, (var0, var1) -> var0.range = var1.range
      )
      .addValidator(Validators.max(30.0F))
      .documentation("The range of the area to search for targets in.")
      .add()
      .<Vector3d>append(new KeyedCodec<>("Offset", Vector3dUtil.CODEC), (var0, var1) -> var0.offset.set(var1), var0 -> var0.offset)
      .documentation("The offset of the area to search for targets in.")
      .add()
      .build();
   @Nonnull
   class="kw">private class="kw">final AOECircleSelector.RuntimeSelector instance = new AOECircleSelector.RuntimeSelector();
   class="kw">protected float range;
   @Nonnull
   class="kw">protected class="kw">final Vector3d offset = new Vector3d();

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

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

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

   @Nonnull
   class="kw">public Vector3f getOffset() {
      class="kw">return new Vector3f((float)this.offset.x, (float)this.offset.y, (float)this.offset.z);
   }

   @Nonnull
   class="kw">public Vector3d selectTargetPosition(@Nonnull CommandBuffer<EntityStore> var1, @Nonnull Ref<EntityStore> var2) {
      TransformComponent var3 = var1.getComponent(var2, TransformComponent.getComponentType());
      assert var3 != null;
      Vector3d var4 = var3.getPosition();
      if (this.offset.x != 0.0 || this.offset.y != 0.0 || this.offset.z != 0.0) {
         HeadRotation var5 = var1.getComponent(var2, HeadRotation.getComponentType());
         assert var5 != null;
         var4 = new Vector3d(this.offset);
         var4.rotateY(var5.getRotation().yaw());
         var4.add(var3.getPosition());
      }

      class="kw">return var4;
   }

   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 = AOECircleSelector.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.addSphere(var1.getExternalData().getWorld(), var5, var6, AOECircleSelector.this.range * 2.0F, 5.0F);
         }
      }

      @Override
      class="kw">public void selectTargetEntities(
         @Nonnull CommandBuffer<EntityStore> var1,
         @Nonnull Ref<EntityStore> var2,
         @Nonnull BiConsumer<Ref<EntityStore>, Vector4d> var3,
         Predicate<Ref<EntityStore>> var4
      ) {
         Vector3d var5 = AOECircleSelector.this.selectTargetPosition(var1, var2);
         Selector.selectNearbyEntities(var1, var5, AOECircleSelector.this.range, var2x -> var3.accept(var2x, new Vector4d(var5.x, var5.y, var5.z, 1.0)), var4);
      }

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

         for (int var10 = -var9; var10 <= var9; var10++) {
            for (int var11 = -var9; var11 <= var9; var11++) {
               for (int var12 = -var9; var12 <= var9; var12++) {
                  double var13 = var10 * var10 + var11 * var11 + var12 * var12;
                  if (var13 <= var9 * var9) {
                     SelectorBlockScan.accept(var5, var6 + var10, var7 + var11, var8 + var12, var3);
                  }
               }
            }
         }
      }
   }
}