RuntimeSelector class
Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.selector
Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/selector/AOECylinderSelector.java
implements: Selector
Поля (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 |
Методы (10)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
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);
}
}
}
}
}
}
}