SignalNearbyVolumesInteraction class
Пакет: com.hypixel.hytale.builtin.triggervolumes.interaction
Файл: com/hypixel/hytale/builtin/triggervolumes/interaction/SignalNearbyVolumesInteraction.java
extends: SimpleInstantInteraction
Поля (25)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
String[] |
EMPTY |
|
|
return |
|
|
return |
|
|
return |
|
TransformComponent |
var10 |
|
Ref |
var11 |
|
|
var11 |
|
UUID |
var12 |
|
|
var12 |
|
UUIDComponent |
var13 |
|
TriggerVolumeManager |
var16 |
|
Ref |
var17 |
|
Ref |
var18 |
|
List |
var19 |
|
String |
var3 |
|
CommandBuffer |
var4 |
|
double |
var4 |
|
Store |
var5 |
|
Vector4d |
var6 |
|
ArrayList |
var6 |
|
Vector3d |
var7 |
|
|
var7 |
|
|
var7 |
|
Ref |
var8 |
|
Ref |
var9 |
Методы (8)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
if if(var4 != null) |
|
|
if if(var6 != null) |
|
|
if if(this.requireHitLocation) |
|
|
if if(var10 == null) |
|
|
if if(var16 != null) |
|
|
if if(var13 != null) |
|
|
if if(var3 != null) |
|
|
if if(this.radius <= 0.0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.interaction;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.TriggerVolumesPlugin;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.SignalTag;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEventType;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.TaggedVolumeEffectUtil;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.TriggerVolumeManager;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.VolumeEntry;
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.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInstantInteraction;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector4d;
class="kw">public class SignalNearbyVolumesInteraction class="kw">extends SimpleInstantInteraction {
class="kw">private class="kw">static class="kw">final String[] EMPTY = new String[0];
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<SignalNearbyVolumesInteraction> CODEC = BuilderCodec.builder(
SignalNearbyVolumesInteraction.class, SignalNearbyVolumesInteraction::new, SimpleInstantInteraction.CODEC
)
.documentation("Sends a SignalReceived event to trigger volumes within a radius of the target point.")
.<String>appendInherited(
new KeyedCodec<>("MatchKey", Codec.STRING, false),
(var0, var1) -> var0.matchKey = var1,
var0 -> var0.matchKey,
(var0, var1) -> var0.matchKey = var1.matchKey
)
.documentation("When set, only volumes carrying this tag are signalled. When absent, every volume in range is signalled.")
.add()
.appendInherited(
new KeyedCodec<>("MatchValue", Codec.STRING, false),
(var0, var1) -> var0.matchValue = var1,
var0 -> var0.matchValue,
(var0, var1) -> var0.matchValue = var1.matchValue
)
.add()
.<Double>appendInherited(
new KeyedCodec<>("Radius", Codec.DOUBLE, false), (var0, var1) -> var0.radius = var1, var0 -> var0.radius, (var0, var1) -> var0.radius = var1.radius
)
.documentation("Radius around the origin to search for volumes. 0 or less signals all volumes (matching the tag filter when set).")
.add()
.appendInherited(
new KeyedCodec<>("SignalKeys", Codec.STRING_ARRAY, false),
(var0, var1) -> var0.signalKeys = var1 != null ? var1 : EMPTY,
var0 -> var0.signalKeys.length == 0 ? null : var0.signalKeys,
(var0, var1) -> var0.signalKeys = var1.signalKeys
)
.add()
.appendInherited(
new KeyedCodec<>("SignalValues", Codec.STRING_ARRAY, false),
(var0, var1) -> var0.signalValues = var1 != null ? var1 : EMPTY,
var0 -> var0.signalValues.length == 0 ? null : var0.signalValues,
(var0, var1) -> var0.signalValues = var1.signalValues
)
.add()
.<Boolean>appendInherited(
new KeyedCodec<>("RequireHitLocation", Codec.BOOLEAN, false),
(var0, var1) -> var0.requireHitLocation = var1,
var0 -> var0.requireHitLocation,
(var0, var1) -> var0.requireHitLocation = var1.requireHitLocation
)
.documentation(
"When true, the interaction does nothing if there is no hit location. When false (class="kw">default), it falls back to the instigating entity's position."
)
.add()
.build();
class="kw">private String matchKey;
class="kw">private String matchValue;
class="kw">private double radius = 50.0;
@Nonnull
class="kw">private String[] signalKeys = EMPTY;
@Nonnull
class="kw">private String[] signalValues = EMPTY;
class="kw">private boolean requireHitLocation;
class="kw">public SignalNearbyVolumesInteraction() {
}
@Override
class="kw">public boolean needsRemoteSync() {
class="kw">return false;
}
@Override
class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
CommandBuffer var4 = var2.getCommandBuffer();
if (var4 != null) {
Store var5 = var4.getStore();
Vector4d var6 = var2.getMetaStore().getIfPresentMetaObject(Interaction.HIT_LOCATION);
Vector3d var7;
if (var6 != null) {
var7 = new Vector3d(var6.x(), var6.y(), var6.z());
} else {
if (this.requireHitLocation) {
class="kw">return;
}
Ref var8 = var2.getOwningEntity();
Ref var9 = var8 != null ? var8 : var2.getEntity();
if (!var9.isValid()) {
class="kw">return;
}
TransformComponent var10 = var5.getComponent(var9, TransformComponent.getComponentType());
if (var10 == null) {
class="kw">return;
}
var7 = new Vector3d(var10.getPosition());
}
TriggerVolumeManager var16 = var5.getResource(TriggerVolumesPlugin.get().getManagerResourceType());
if (var16 != null) {
Ref var17 = var2.getOwningEntity();
Ref var18 = var17 != null && var17.isValid() ? var17 : var2.getEntity();
Ref var11 = null;
UUID var12 = TriggerVolumeManager.ENVIRONMENT_ACTOR_UUID;
if (var18 != null && var18.isValid()) {
UUIDComponent var13 = var5.getComponent(var18, UUIDComponent.getComponentType());
if (var13 != null) {
var11 = var18;
var12 = var13.getUuid();
}
}
List var19 = SignalTag.zip(this.signalKeys, this.signalValues);
for (VolumeEntry var15 : this.collectTargets(var16, var7)) {
var16.enqueueVolumeEvent(TriggerEventType.SIGNAL_RECEIVED, var11, var12, var15.getId(), var19, var7, null);
}
}
}
}
@Nonnull
class="kw">private List<VolumeEntry> collectTargets(@Nonnull TriggerVolumeManager var1, @Nonnull Vector3d var2) {
String var3 = TaggedVolumeEffectUtil.composeTagFilter(this.matchKey, this.matchValue);
if (var3 != null) {
class="kw">return TaggedVolumeEffectUtil.collectTargets(var1, var3, this.radius, var2);
}
if (this.radius <= 0.0) {
class="kw">return new ArrayList<>(var1.getVolumes());
}
double var4 = this.radius * this.radius;
ArrayList var6 = new ArrayList<>();
for (VolumeEntry var8 : var1.getVolumes()) {
if (var8.getPosition().distanceSquared(var2) <= var4) {
var6.add(var8);
}
}
class="kw">return var6;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "SignalNearbyVolumesInteraction{matchKey="
+ this.matchKey
+ ", matchValue="
+ this.matchValue
+ ", radius="
+ this.radius
+ "} "
+ super.toString();
}
}