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