SpawnTriggerVolumeInteraction class
Пакет: com.hypixel.hytale.builtin.triggervolumes.interaction
Файл: com/hypixel/hytale/builtin/triggervolumes/interaction/SpawnTriggerVolumeInteraction.java
extends: SimpleInstantInteraction
Поля (27)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
return |
|
|
return |
|
|
return |
|
TransformComponent |
var10 |
|
TriggerVolumeManager |
var11 |
|
String |
var12 |
|
VolumeEntry |
var13 |
|
TriggerEffectAsset.VolumeSettings |
var14 |
|
TimeResource |
var15 |
|
Ref |
var16 |
|
Ref |
var17 |
|
|
var17 |
|
UUID |
var18 |
|
|
var18 |
|
UUIDComponent |
var19 |
|
AssetStore |
var20 |
|
TriggerEffectAsset |
var21 |
|
World |
var22 |
|
Ref |
var23 |
|
CommandBuffer |
var4 |
|
Store |
var5 |
|
Vector4d |
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(var21 == null) |
|
|
if if(var14 != null) |
|
|
if if(this.lifetimeS > 0.0F) |
|
|
if if(var19 != null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.interaction;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.AssetStore;
class="kw">import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.TriggerVolumesPlugin;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.asset.TriggerEffectAsset;
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.builtin.triggervolumes.shape.TriggerVolumeShape;
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.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
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.modules.time.TimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.time.Duration;
class="kw">import java.util.Arrays;
class="kw">import java.util.EnumSet;
class="kw">import java.util.Locale;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector4d;
class="kw">public class SpawnTriggerVolumeInteraction class="kw">extends SimpleInstantInteraction {
@Nonnull
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<SpawnTriggerVolumeInteraction> CODEC = BuilderCodec.builder(
SpawnTriggerVolumeInteraction.class, SpawnTriggerVolumeInteraction::new, SimpleInstantInteraction.CODEC
)
.documentation("Spawns a trigger volume at the hit location, falling back to the instigator's position when there is no hit.")
.<String>appendInherited(
new KeyedCodec<>("EffectAsset", Codec.STRING),
(var0, var1) -> var0.effectAsset = var1,
var0 -> var0.effectAsset,
(var0, var1) -> var0.effectAsset = var1.effectAsset
)
.documentation("The TriggerVolumes/Effects asset id whose conditions and effects the spawned volume runs.")
.addValidator(Validators.nonNull())
.add()
.<TriggerVolumeShape>appendInherited(
new KeyedCodec<>("Shape", TriggerVolumeShape.CODEC), (var0, var1) -> var0.shape = var1, var0 -> var0.shape, (var0, var1) -> var0.shape = var1.shape
)
.documentation("The shape of the spawned volume, relative to the hit location.")
.addValidator(Validators.nonNull())
.add()
.<Float>appendInherited(
new KeyedCodec<>("LifetimeS", Codec.FLOAT, false),
(var0, var1) -> var0.lifetimeS = var1,
var0 -> var0.lifetimeS,
(var0, var1) -> var0.lifetimeS = var1.lifetimeS
)
.documentation("Seconds before the spawned volume auto-expires. 0 or less means it persists until destroyed by an effect.")
.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 effectAsset;
class="kw">private TriggerVolumeShape shape;
class="kw">private float lifetimeS;
class="kw">private boolean requireHitLocation;
class="kw">public SpawnTriggerVolumeInteraction() {
}
@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());
}
AssetStore var20 = AssetRegistry.getAssetStore(TriggerEffectAsset.class);
TriggerEffectAsset var21 = var20 != null ? (TriggerEffectAsset)((DefaultAssetMap)var20.getAssetMap()).getAsset(this.effectAsset) : null;
if (var21 == null) {
((HytaleLogger.Api)LOGGER.at(Level.WARNING).atMostEvery(5, TimeUnit.MINUTES))
.log("SpawnTriggerVolume references missing effect asset '%s'", this.effectAsset);
} else {
World var22 = var4.getExternalData().getWorld();
TriggerVolumeManager var11 = var5.getResource(TriggerVolumesPlugin.get().getManagerResourceType());
String var12 = var11.generateUniqueVolumeId();
VolumeEntry var13 = new VolumeEntry(
var12,
var22.getName().toLowerCase(Locale.ROOT),
var7,
this.shape.copy(),
new ObjectArrayList(Arrays.asList(var21.getEffects())),
EnumSet.copyOf(var21.getTargetTypes()),
true
);
var13.setEffectAssetRef(this.effectAsset);
var13.setConditionTiming(var21.getConditionTiming());
var13.getConditions().addAll(Arrays.asList(var21.getConditions()));
var13.getRejectionEffects().addAll(Arrays.asList(var21.getRejectionEffects()));
TriggerEffectAsset.VolumeSettings var14 = var21.getVolumeSettings();
if (var14 != null) {
var13.setProjectileSource(var14.projectileSource());
var13.setRejectionDelayMode(var14.rejectionDelayMode());
var13.setCooldown(var14.cooldown());
var13.setCooldownMode(var14.cooldownMode());
var13.setActivationDelay(var14.activationDelay());
var13.setKeepLoaded(var14.keepLoaded());
var13.setRotateEffectsOnPaste(var14.rotateEffectsOnPaste());
var13.setCancelDelayedEffectsOnExit(var14.cancelDelayedOnExit());
var13.setTags(var14.tags());
}
if (this.lifetimeS > 0.0F) {
TimeResource var15 = var5.getResource(TimeResource.getResourceType());
var13.setExpiresAt(var15.getNow().plus(Duration.ofMillis((long)(this.lifetimeS * 1000.0F))));
}
var11.register(var12, var13);
var11.notifyViewersAdd(var13);
Ref var23 = var2.getOwningEntity();
Ref var16 = var23 != null && var23.isValid() ? var23 : var2.getEntity();
Ref var17 = null;
UUID var18 = TriggerVolumeManager.ENVIRONMENT_ACTOR_UUID;
if (var16 != null && var16.isValid()) {
UUIDComponent var19 = var5.getComponent(var16, UUIDComponent.getComponentType());
if (var19 != null) {
var17 = var16;
var18 = var19.getUuid();
}
}
var11.enqueueVolumeCreateEvent(var13, var17, var18);
}
}
}
@Override
class="kw">protected void simulateFirstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "SpawnTriggerVolumeInteraction{effectAsset="
+ this.effectAsset
+ ", lifetime="
+ this.lifetimeS
+ ", requireHitLocation="
+ this.requireHitLocation
+ "} "
+ super.toString();
}
}