RuntimeSelector class

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

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

implements: Selector

Поля (10)

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

Методы (8)

МодификаторыВозвратСигнатура
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(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)

Исходный код

Показать/скрыть
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);
                  }
               }
            }
         }
      }
   }
}