TriggerVolumesPlugin class

Пакет: com.hypixel.hytale.builtin.triggervolumes

Файл: com/hypixel/hytale/builtin/triggervolumes/TriggerVolumesPlugin.java

extends: JavaPlugin

Поля (63)

МодификаторыТипИмя
break
private final int effectIndex
private final String effectListKind
instance
private Vector3d lastSentPosition
private final String selectedId
private final boolean selectedIsGroup
AssetStore var0
ArrayList var0
LinkedHashSet var0
TreeSet var0
TreeSet var0
ArrayList var0
ComponentRegistry var1
BuilderToolsPlugin var1
ArrayList var1
TreeSet var1
var1
var1
PrefabStore var1
TriggerEventType var2
AssetSourceProvider var2
EntityModule var2
TriggerVolumeManager var2
TriggerVolumeManager var2
PlayerRef var2
PlayerRef var2
Store var2
ModelAsset var2
ArrayList var2
String var2
ModelAsset var2
String var2
NPCPlugin var2
String var2
TriggerVolumeTickingSystem var3
World var3
TriggerVolumeManager var3
TriggerVolumeManager var3
ModelAsset var3
ModelAsset var3
BuilderInfo var3
Path var3
Store var3
TriggerVolumeManager var4
UUID var4
EnumSet var4
ModelAsset.AnimationSet var4
Builder var4
Path var4
TriggerVolumeManager var4
PlayerRef var5
EnumSet var5
String var5
AssetStore var5
String var6
ModelAsset var6
ExecutionContext var6
ModelAsset var7
Set var7
String var7
TriggerEffectAsset var8
private final String worldName

Методы (53)

МодификаторыВозвратСигнатура
private record AssetFieldKeyrecord AssetFieldKey(@Nonnull String typeId, @Nonnull String fieldKey)
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Trigger effect type '" + var1 + "' is already registered")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Trigger condition type '" + var1 + "' is already registered")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Trigger rule type '" + var1 + "' is already registered")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Trigger event type '" + var1 + "' is already registered")
public PastePrefabPreviewStatepublic PastePrefabPreviewState(@Nonnull String var1, @Nullable String var2, boolean var3, @Nonnull String var4, int var5, @Nullable Vector3d var6)
public void clearPastePrefabPreviewStatevoid clearPastePrefabPreviewState(@Nonnull UUID var1)
static void clearViewerStatevoid clearViewerState(@Nonnull TriggerVolumeManager var0, @Nonnull UUID var1)
abstract clearViewerState clearViewerState(var3, var4)
abstract return collectAnimationIdsreturn collectAnimationIds()
public int effectIndexpublic int effectIndex()
public String effectListKindpublic String effectListKind()
for for(TriggerVolumeManager.ViewSource var6 : var4)
if if(var3 != null)
if if(var4 != null)
if if(var2 != null)
if if(var5 != null)
if if(var2 != null)
if if(var2 != null)
if if(var3 != null)
if if(var2 != null)
if if(var3 != null)
if if(var2 != null)
if if(var6 != null)
if if(var3 == null)
if if(var2 != null)
if if(var5 != null)
if if(var6 != null)
if if(var1 == null)
if if(var3 == null)
if if(var4 != null)
if if(var8 == null)
private void initManagerForWorldvoid initManagerForWorld(@Nonnull World var1)
public boolean isLoopingAnimationboolean isLoopingAnimation(@Nonnull String var1, @Nonnull String var2)
public Vector3d lastSentPositionpublic Vector3d lastSentPosition()
public boolean matchespublic boolean matches(@Nonnull String var1, @Nullable String var2, boolean var3, @Nonnull String var4, int var5)
private void onPlayerAddedToWorldvoid onPlayerAddedToWorld(@Nonnull AddPlayerToWorldEvent var1)
private void onPlayerDisconnectvoid onPlayerDisconnect(@Nonnull PlayerDisconnectEvent var1)
private void onPlayerRemovedFromWorldvoid onPlayerRemovedFromWorld(@Nonnull RemovedPlayerFromWorldEvent var1)
private void onWorldGenChunksClearedvoid onWorldGenChunksCleared(@Nonnull WorldGenChunksClearedEvent var1)
private void onWorldRemovedvoid onWorldRemoved(@Nonnull RemoveWorldEvent var1)
public void registerAssetFieldvoid registerAssetField(@Nonnull String var1, @Nonnull String var2, @Nonnull String var3)
public void registerAssetSourcevoid registerAssetSource(@Nonnull String var1, @Nonnull AssetSourceProvider var2)
public <T extends TriggerCondition> void registerConditionType<T extends TriggerCondition> void registerConditionType(@Nonnull String var1, @Nonnull Class<T> var2, @Nonnull BuilderCodec<T> var3)
public <T extends TriggerEffect> void registerEffectType<T extends TriggerEffect> void registerEffectType(@Nonnull String var1, @Nonnull Class<T> var2, @Nonnull BuilderCodec<T> var3)
private void registerEffectTypesvoid registerEffectTypes()
public <T extends TriggerRule> void registerRuleType<T extends TriggerRule> void registerRuleType(@Nonnull String var1, @Nonnull Class<T> var2, @Nonnull BuilderCodec<T> var3)
public String selectedIdpublic String selectedId()
public boolean selectedIsGrouppublic boolean selectedIsGroup()
public void setLastSentPositionpublic void setLastSentPosition(@Nonnull Vector3d var1)
public void setPastePrefabPreviewStatevoid setPastePrefabPreviewState(@Nonnull UUID var1, @Nonnull TriggerVolumesPlugin.PastePrefabPreviewState var2)
abstract super super(var1)
public String worldNamepublic String worldName()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes;

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.adventure.worldevents.action.EventAction;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.context.Context;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsPlugin;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.asset.TriggerEffectAsset;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.command.TriggerVolumeCommand;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.component.IgnoreTriggerVolumes;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.component.TriggerVolume;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.component.TriggerVolumeGroup;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEventType;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.CancelParticlesEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.ControlDoorsEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.DamageEntityEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.DeleteVolumeEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.DisableVolumeEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.EnableVolumeEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.EntityEffectEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.GiveItemEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.ItemCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.ModifyRulesEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.ModifyTagsEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.PastePrefabEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.PlaceBlockEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.PlayAnimationEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.PlaySoundEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.PlayVfxEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.RemoveEntitiesEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.ReplaceBlockTypeEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.RunRootInteractionEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.SendMessageEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.SendSignalEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.SetGameModeEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.SetMusicEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.SetVelocityEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.SetWeatherEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.ShowEventTitleEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.SpawnNpcEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.TeleportEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.TimeEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.TriggerNpcMarkersEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.BlockTypeCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.CooldownCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.EntityCountCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.GameModeCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.PermissionCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.PlayerCountCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.RandomChanceCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.TagCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.TimeOfDayCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.CreativePlacementRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.DamageMultiplierRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.FlyRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.NoBuildRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.NoDamageRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.NoDestroyRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.NoDoorOpenRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.NoHarvestRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.NoHealRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.NoTickRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.NoUseRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.interaction.DestroyTaggedVolumesInteraction;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.interaction.SignalNearbyVolumesInteraction;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.interaction.SpawnTriggerVolumeInteraction;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.GroupEntry;
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.npc.builders.BuilderActionSignalTaggedVolumes;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.prefab.TriggerVolumeChunkRegenSystem;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.prefab.TriggerVolumeGroupWorldGenHandler;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.prefab.TriggerVolumePasteHandler;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.prefab.TriggerVolumePrefabContributor;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.prefab.TriggerVolumePrefabPasteRemapSystem;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.prefab.TriggerVolumeWorldGenHandler;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.shape.TriggerVolumeShape;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.system.TriggerVolumeBlockEventSystems;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.system.TriggerVolumeDeathSystem;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.system.TriggerVolumeEntityRemoveSystem;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.system.TriggerVolumeNoHealSystem;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.system.TriggerVolumePlayerStateSystem;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.system.TriggerVolumeRuleSystems;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.system.TriggerVolumeTickingSystem;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.worldevent.TriggerVolumeContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.worldevent.TriggerVolumeCreateAction;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.worldevent.TriggerVolumeRemoveAction;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.component.ComponentRegistry;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.packets.player.UpdateTriggerVolumeDisplay;
class="kw">import com.hypixel.hytale.server.core.asset.HytaleAssetStore;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.PrefabListAsset;
class="kw">import com.hypixel.hytale.server.core.asset.type.entityeffect.config.EntityEffect;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.ModelAsset;
class="kw">import com.hypixel.hytale.server.core.asset.type.musiccontainer.config.MusicContainer;
class="kw">import com.hypixel.hytale.server.core.asset.type.particle.config.ParticleSystem;
class="kw">import com.hypixel.hytale.server.core.asset.type.soundevent.config.SoundEvent;
class="kw">import com.hypixel.hytale.server.core.asset.type.weather.config.Weather;
class="kw">import com.hypixel.hytale.server.core.event.events.player.AddPlayerToWorldEvent;
class="kw">import com.hypixel.hytale.server.core.event.events.player.PlayerDisconnectEvent;
class="kw">import com.hypixel.hytale.server.core.event.events.player.RemovedPlayerFromWorldEvent;
class="kw">import com.hypixel.hytale.server.core.io.ServerManager;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
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.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.time.TimeResource;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import com.hypixel.hytale.server.core.universe.world.TickSuppressionRegistry;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.events.RemoveWorldEvent;
class="kw">import com.hypixel.hytale.server.core.universe.world.events.StartWorldEvent;
class="kw">import com.hypixel.hytale.server.core.universe.world.events.WorldGenChunksClearedEvent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.Builder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderInfo;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
class="kw">import com.hypixel.hytale.server.spawning.ISpawnableWithModel;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawnmarker.config.SpawnMarker;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Arrays;
class="kw">import java.util.Collection;
class="kw">import java.util.Collections;
class="kw">import java.util.EnumSet;
class="kw">import java.util.HashMap;
class="kw">import java.util.LinkedHashMap;
class="kw">import java.util.LinkedHashSet;
class="kw">import java.util.List;
class="kw">import java.util.Locale;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.TreeSet;
class="kw">import java.util.UUID;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.logging.Level;
class="kw">import java.util.stream.Stream;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class TriggerVolumesPlugin class="kw">extends JavaPlugin {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">static TriggerVolumesPlugin instance;
   class="kw">private ResourceType<EntityStore, TriggerVolumeManager> managerResourceType;
   class="kw">private ComponentType<EntityStore, TriggerVolume> triggerVolumeComponentType;
   class="kw">private ComponentType<EntityStore, TriggerVolumeGroup> triggerVolumeGroupComponentType;
   class="kw">private ComponentType<EntityStore, IgnoreTriggerVolumes> ignoreTriggerVolumesComponentType;
   class="kw">private TriggerVolumePlayerStateSystem playerStateSystem;
   class="kw">private class="kw">final Map<String, AssetSourceProvider> assetSources = new LinkedHashMap<>();
   class="kw">private class="kw">final Map<TriggerVolumesPlugin.AssetFieldKey, String> assetFieldMappings = new HashMap<>();
   class="kw">private class="kw">final Map<String, String> roleModelNameCache = new ConcurrentHashMap<>();
   class="kw">private class="kw">final Map<UUID, TriggerVolumesPlugin.PastePrefabPreviewState> pastePrefabPreviewStates = new ConcurrentHashMap<>();
   class="kw">private class="kw">final Map<UUID, EnumSet<TriggerVolumeManager.ViewSource>> pendingTransferSources = new ConcurrentHashMap<>();

   @Nonnull
   class="kw">public class="kw">static TriggerVolumesPlugin get() {
      class="kw">return instance;
   }

   class="kw">public TriggerVolumesPlugin(@Nonnull JavaPluginInit var1) {
      super(var1);
   }

   class="kw">public <T class="kw">extends TriggerEffect> void registerEffectType(@Nonnull String var1, @Nonnull Class<T> var2, @Nonnull BuilderCodec<T> var3) {
      Objects.requireNonNull(var1, "typeId");
      Objects.requireNonNull(var2, "clazz");
      Objects.requireNonNull(var3, "codec");
      if (TriggerEffect.CODEC.getCodecFor(var1) != null) {
         throw new IllegalArgumentException("Trigger effect type '" + var1 + "' is already registered");
      }

      TriggerEffect.CODEC.register(var1, var2, var3);
      LOGGER.at(Level.INFO).log("Registered trigger effect type '%s' (%s)", var1, var2.getSimpleName());
   }

   class="kw">public <T class="kw">extends TriggerCondition> void registerConditionType(@Nonnull String var1, @Nonnull Class<T> var2, @Nonnull BuilderCodec<T> var3) {
      Objects.requireNonNull(var1, "typeId");
      Objects.requireNonNull(var2, "clazz");
      Objects.requireNonNull(var3, "codec");
      if (TriggerCondition.CODEC.getCodecFor(var1) != null) {
         throw new IllegalArgumentException("Trigger condition type '" + var1 + "' is already registered");
      }

      TriggerCondition.CODEC.register(var1, var2, var3);
      LOGGER.at(Level.INFO).log("Registered trigger condition type '%s' (%s)", var1, var2.getSimpleName());
   }

   class="kw">public <T class="kw">extends TriggerRule> void registerRuleType(@Nonnull String var1, @Nonnull Class<T> var2, @Nonnull BuilderCodec<T> var3) {
      Objects.requireNonNull(var1, "typeId");
      Objects.requireNonNull(var2, "clazz");
      Objects.requireNonNull(var3, "codec");
      if (TriggerRule.CODEC.getCodecFor(var1) != null) {
         throw new IllegalArgumentException("Trigger rule type '" + var1 + "' is already registered");
      }

      TriggerRule.CODEC.register(var1, var2, var3);
      LOGGER.at(Level.INFO).log("Registered trigger rule type '%s' (%s)", var1, var2.getSimpleName());
   }

   @Nonnull
   class="kw">public TriggerEventType registerEventType(@Nonnull String var1) {
      Objects.requireNonNull(var1, "typeId");
      if (TriggerEventType.get(var1) != null) {
         throw new IllegalArgumentException("Trigger event type '" + var1 + "' is already registered");
      }

      TriggerEventType var2 = TriggerEventType.register(var1);
      LOGGER.at(Level.INFO).log("Registered trigger event type '%s'", var1);
      class="kw">return var2;
   }

   class="kw">public void registerAssetSource(@Nonnull String var1, @Nonnull AssetSourceProvider var2) {
      Objects.requireNonNull(var1, "sourceId");
      Objects.requireNonNull(var2, "provider");
      this.assetSources.put(var1, var2);
   }

   class="kw">public void registerAssetField(@Nonnull String var1, @Nonnull String var2, @Nonnull String var3) {
      Objects.requireNonNull(var1, "effectTypeId");
      Objects.requireNonNull(var2, "fieldKey");
      Objects.requireNonNull(var3, "sourceId");
      this.assetFieldMappings.put(new TriggerVolumesPlugin.AssetFieldKey(var1, var2), var3);
   }

   @Nullable
   class="kw">public TriggerVolumesPlugin.PastePrefabPreviewState getPastePrefabPreviewState(@Nonnull UUID var1) {
      class="kw">return this.pastePrefabPreviewStates.get(var1);
   }

   class="kw">public void setPastePrefabPreviewState(@Nonnull UUID var1, @Nonnull TriggerVolumesPlugin.PastePrefabPreviewState var2) {
      this.pastePrefabPreviewStates.put(var1, var2);
   }

   class="kw">public void clearPastePrefabPreviewState(@Nonnull UUID var1) {
      this.pastePrefabPreviewStates.remove(var1);
   }

   @Nullable
   class="kw">public String getAssetSourceForField(@Nonnull String var1, @Nonnull String var2) {
      class="kw">return this.assetFieldMappings.get(new TriggerVolumesPlugin.AssetFieldKey(var1, var2));
   }

   @Nonnull
   class="kw">public Collection<String> getAssetIds(@Nonnull String var1) {
      AssetSourceProvider var2 = this.assetSources.get(var1);
      class="kw">return var2 == null ? List.of() : var2.getAssetIds().stream().filter(var0 -> !var0.startsWith("*")).toList();
   }

   @Nonnull
   class="kw">public ResourceType<EntityStore, TriggerVolumeManager> getManagerResourceType() {
      class="kw">return this.managerResourceType;
   }

   @Nonnull
   class="kw">public ComponentType<EntityStore, TriggerVolume> getTriggerVolumeComponentType() {
      class="kw">return this.triggerVolumeComponentType;
   }

   @Nonnull
   class="kw">public ComponentType<EntityStore, TriggerVolumeGroup> getTriggerVolumeGroupComponentType() {
      class="kw">return this.triggerVolumeGroupComponentType;
   }

   @Nonnull
   class="kw">public ComponentType<EntityStore, IgnoreTriggerVolumes> getIgnoreTriggerVolumesComponentType() {
      class="kw">return this.ignoreTriggerVolumesComponentType;
   }

   @Override
   class="kw">protected void setup() {
      instance = this;
      this.registerEffectTypes();
      AssetRegistry.register(
         ((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)HytaleAssetStore.builder(
                        TriggerEffectAsset.class, new DefaultAssetMap()
                     )
                     .setPath("TriggerVolumes/Effects"))
                  .setCodec(TriggerEffectAsset.CODEC))
               .setKeyFunction(TriggerEffectAsset::getId))
            .build()
      );
      ComponentRegistry var1 = EntityStore.REGISTRY;
      this.managerResourceType = var1.registerResource(TriggerVolumeManager.class, "TriggerVolumeData", TriggerVolumeManager.CODEC);
      this.triggerVolumeComponentType = var1.registerComponent(TriggerVolume.class, "TriggerVolume", TriggerVolume.CODEC);
      this.triggerVolumeGroupComponentType = var1.registerComponent(TriggerVolumeGroup.class, "TriggerVolumeGroup", TriggerVolumeGroup.CODEC);
      this.ignoreTriggerVolumesComponentType = var1.registerComponent(IgnoreTriggerVolumes.class, "IgnoreTriggerVolumes", IgnoreTriggerVolumes.CODEC);
      EntityModule var2 = EntityModule.get();
      TriggerVolumeTickingSystem var3 = new TriggerVolumeTickingSystem(
         this.managerResourceType,
         var2.getPlayerSpatialResourceType(),
         var2.getEntitySpatialResourceType(),
         TimeResource.getResourceType(),
         TickSuppressionRegistry.RESOURCE
      );
      var1.registerSystem(var3);
      var1.registerSystem(new TriggerVolumeEntityRemoveSystem(var3, this.managerResourceType));
      var1.registerSystem(new TriggerVolumeRuleSystems.NoBuild(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeRuleSystems.NoDestroyBlockDamage(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeRuleSystems.NoDestroyBlockBreak(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeRuleSystems.NoDoorOpen(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeRuleSystems.NoUseBlock(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeRuleSystems.NoUseEntity(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeRuleSystems.NoHarvestUse(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeRuleSystems.CreativePlacement(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeRuleSystems.DamageRuleFilter(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeRuleSystems.DamageMultiplier(this.managerResourceType));
      this.playerStateSystem = new TriggerVolumePlayerStateSystem(this.managerResourceType);
      var1.registerSystem(this.playerStateSystem);
      var1.registerSystem(new TriggerVolumeNoHealSystem(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeBlockEventSystems.BlockPlaced(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeBlockEventSystems.BlockBroken(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeBlockEventSystems.EnvironmentBlockBroken(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeBlockEventSystems.BlockUsed(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeBlockEventSystems.EntityUsed(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeDeathSystem(this.managerResourceType));
      var1.registerSystem(new TriggerVolumePasteHandler(this.managerResourceType, this.triggerVolumeComponentType, this.triggerVolumeGroupComponentType));
      var1.registerSystem(new TriggerVolumePrefabPasteRemapSystem(this.managerResourceType));
      var1.registerSystem(new TriggerVolumeWorldGenHandler(this.managerResourceType, this.triggerVolumeComponentType));
      var1.registerSystem(new TriggerVolumeGroupWorldGenHandler(this.managerResourceType, this.triggerVolumeGroupComponentType));
      this.getChunkStoreRegistry().registerSystem(new TriggerVolumeChunkRegenSystem(this.managerResourceType));
      this.getCodecRegistry(Interaction.CODEC).register("DestroyTaggedVolumes", DestroyTaggedVolumesInteraction.class, DestroyTaggedVolumesInteraction.CODEC);
      this.getCodecRegistry(Interaction.CODEC).register("SpawnTriggerVolume", SpawnTriggerVolumeInteraction.class, SpawnTriggerVolumeInteraction.CODEC);
      this.getCodecRegistry(Interaction.CODEC).register("SignalNearbyVolumes", SignalNearbyVolumesInteraction.class, SignalNearbyVolumesInteraction.CODEC);
      NPCPlugin.get().registerCoreComponentType("SignalTaggedVolumes", BuilderActionSignalTaggedVolumes::new);
      this.getCodecRegistry(Context.TYPE_CODEC).register("TriggerVolumeContext", TriggerVolumeContext.class, TriggerVolumeContext.CODEC);
      this.getCodecRegistry(EventAction.TYPE_CODEC)
         .register("TriggerVolumeCreateAction", TriggerVolumeCreateAction.class, TriggerVolumeCreateAction.CODEC)
         .register("TriggerVolumeRemoveAction", TriggerVolumeRemoveAction.class, TriggerVolumeRemoveAction.CODEC);
      this.getCommandRegistry().registerCommand(new TriggerVolumeCommand());
      ServerManager.get().registerSubPacketHandlers(TriggerVolumeToolPacketHandler::new);
      this.getEventRegistry().registerGlobal(StartWorldEvent.class, var1x -> this.initManagerForWorld(var1x.getWorld()));
      this.getEventRegistry().registerGlobal(RemoveWorldEvent.class, this::onWorldRemoved);
      this.getEventRegistry().registerGlobal(WorldGenChunksClearedEvent.class, this::onWorldGenChunksCleared);
      this.getEventRegistry().registerGlobal(RemovedPlayerFromWorldEvent.class, this::onPlayerRemovedFromWorld);
      this.getEventRegistry().registerGlobal(AddPlayerToWorldEvent.class, this::onPlayerAddedToWorld);
      this.getEventRegistry().registerGlobal(PlayerDisconnectEvent.class, this::onPlayerDisconnect);
   }

   @Override
   class="kw">protected void start() {
      BuilderToolsPlugin var1 = BuilderToolsPlugin.get();
      var1.registerPrefabSaveContributor(new TriggerVolumePrefabContributor());
      var1.registerClipboardContributor(new TriggerVolumePrefabContributor());
      var1.setBuilderToolModeDeactivatedCallback((var1x, var2) -> {
         World var3 = var2.getExternalData().getWorld();
         if (var3 != null) {
            TriggerVolumeManager var4 = var3.getEntityStore().getStore().getResource(this.managerResourceType);
            if (var4 != null) {
               var4.removeViewer(var1x.getUuid(), TriggerVolumeManager.ViewSource.SELECTION_TOOL);
               if (!var4.isViewing(var1x.getUuid())) {
                  var1x.getPacketHandler().write(new UpdateTriggerVolumeDisplay());
               } else {
                  var4.sendVolumeDisplay(var1x);
               }
            }
         }
      });
   }

   @Override
   class="kw">protected void shutdown() {
   }

   class="kw">private void onWorldRemoved(@Nonnull RemoveWorldEvent var1) {
      TriggerVolumeManager var2 = this.getManager(var1.getWorld());
      if (var2 != null) {
         for (UUID var4 : var2.getViewerUuids()) {
            this.pendingTransferSources.remove(var4);
            PlayerRef var5 = Universe.get().getPlayer(var4);
            if (var5 != null) {
               var5.getPacketHandler().write(new UpdateTriggerVolumeDisplay());
            }
         }

         var2.clearViewers();
      }
   }

   class="kw">private void onWorldGenChunksCleared(@Nonnull WorldGenChunksClearedEvent var1) {
      TriggerVolumeManager var2 = this.getManager(var1.getWorld());
      if (var2 != null) {
         var2.removeAllVolumes();
      }
   }

   class="kw">private void onPlayerRemovedFromWorld(@Nonnull RemovedPlayerFromWorldEvent var1) {
      PlayerRef var2 = var1.getHolder().getComponent(PlayerRef.getComponentType());
      if (var2 != null) {
         this.playerStateSystem.revertPlayer(var1.getHolder());
         TriggerVolumeManager var3 = this.getManager(var1.getWorld());
         if (var3 != null) {
            UUID var4 = var2.getUuid();
            EnumSet var5 = var3.peekViewerSources(var4);
            if (var5 != null && !var5.isEmpty()) {
               this.pendingTransferSources.put(var4, var5);
               var2.getPacketHandler().write(new UpdateTriggerVolumeDisplay());
            } else {
               this.pendingTransferSources.remove(var4);
            }

            clearViewerState(var3, var4);
         }
      }
   }

   class="kw">private void onPlayerAddedToWorld(@Nonnull AddPlayerToWorldEvent var1) {
      PlayerRef var2 = var1.getHolder().getComponent(PlayerRef.getComponentType());
      if (var2 != null) {
         TriggerVolumeManager var3 = this.getManager(var1.getWorld());
         if (var3 != null) {
            var3.sendClientRuleVolumes(var2);
            EnumSet var4 = this.pendingTransferSources.remove(var2.getUuid());
            if (var4 != null && !var4.isEmpty()) {
               for (TriggerVolumeManager.ViewSource var6 : var4) {
                  var3.addViewer(var2.getUuid(), var6);
               }

               var3.sendVolumeDisplay(var2);
            }
         }
      }
   }

   class="kw">private void onPlayerDisconnect(@Nonnull PlayerDisconnectEvent var1) {
      this.pendingTransferSources.remove(var1.getPlayerRef().getUuid());
      this.playerStateSystem.forgetPlayer(var1.getPlayerRef().getUuid());
   }

   class="kw">private class="kw">static void clearViewerState(@Nonnull TriggerVolumeManager var0, @Nonnull UUID var1) {
      for (TriggerVolumeManager.ViewSource var5 : TriggerVolumeManager.ViewSource.values()) {
         var0.removeViewer(var1, var5);
      }

      var0.setPlayerSelection(var1, null);
   }

   @Nullable
   class="kw">private TriggerVolumeManager getManager(@Nonnull World var1) {
      Store var2 = var1.getEntityStore().getStore();
      class="kw">return var2 == null ? null : var2.getResource(this.managerResourceType);
   }

   class="kw">private void registerEffectTypes() {
      TriggerVolumeShape.registerBuiltinShapes();
      TriggerCondition.CODEC.register("PermissionCondition", PermissionCondition.class, PermissionCondition.CODEC);
      TriggerCondition.CODEC.register("CooldownCondition", CooldownCondition.class, CooldownCondition.CODEC);
      TriggerCondition.CODEC.register("GameModeCondition", GameModeCondition.class, GameModeCondition.CODEC);
      TriggerCondition.CODEC.register("ItemCondition", ItemCondition.class, ItemCondition.CODEC);
      TriggerCondition.CODEC.register("RandomChanceCondition", RandomChanceCondition.class, RandomChanceCondition.CODEC);
      TriggerCondition.CODEC.register("PlayerCountCondition", PlayerCountCondition.class, PlayerCountCondition.CODEC);
      TriggerCondition.CODEC.register("TagCondition", TagCondition.class, TagCondition.CODEC);
      TriggerCondition.CODEC.register("BlockTypeCondition", BlockTypeCondition.class, BlockTypeCondition.CODEC);
      TriggerCondition.CODEC.register("EntityCountCondition", EntityCountCondition.class, EntityCountCondition.CODEC);
      TriggerCondition.CODEC.register("TimeOfDay", TimeOfDayCondition.class, TimeOfDayCondition.CODEC);
      TriggerEffect.CODEC.register("Teleport", TeleportEffect.class, TeleportEffect.CODEC);
      TriggerEffect.CODEC.register("SendMessage", SendMessageEffect.class, SendMessageEffect.CODEC);
      TriggerEffect.CODEC.register("PlaySound", PlaySoundEffect.class, PlaySoundEffect.CODEC);
      TriggerEffect.CODEC.register("SetVelocity", SetVelocityEffect.class, SetVelocityEffect.CODEC);
      TriggerEffect.CODEC.register("EntityEffect", EntityEffectEffect.class, EntityEffectEffect.CODEC);
      TriggerEffect.CODEC.register("TriggerNpcMarkers", TriggerNpcMarkersEffect.class, TriggerNpcMarkersEffect.CODEC);
      TriggerEffect.CODEC.register("PlayVfx", PlayVfxEffect.class, PlayVfxEffect.CODEC);
      TriggerEffect.CODEC.register("SetWeather", SetWeatherEffect.class, SetWeatherEffect.CODEC);
      TriggerEffect.CODEC.register("Time", TimeEffect.class, TimeEffect.CODEC);
      TriggerEffect.CODEC.register("ShowEventTitle", ShowEventTitleEffect.class, ShowEventTitleEffect.CODEC);
      TriggerEffect.CODEC.register("PastePrefab", PastePrefabEffect.class, PastePrefabEffect.CODEC);
      TriggerEffect.CODEC.register("ControlDoors", ControlDoorsEffect.class, ControlDoorsEffect.CODEC);
      TriggerEffect.CODEC.register("EnableVolume", EnableVolumeEffect.class, EnableVolumeEffect.CODEC);
      TriggerEffect.CODEC.register("DisableVolume", DisableVolumeEffect.class, DisableVolumeEffect.CODEC);
      TriggerEffect.CODEC.register("DeleteVolume", DeleteVolumeEffect.class, DeleteVolumeEffect.CODEC);
      TriggerEffect.CODEC.register("DamageEntity", DamageEntityEffect.class, DamageEntityEffect.CODEC);
      TriggerEffect.CODEC.register("RemoveEntities", RemoveEntitiesEffect.class, RemoveEntitiesEffect.CODEC);
      TriggerEffect.CODEC.register("CancelParticles", CancelParticlesEffect.class, CancelParticlesEffect.CODEC);
      TriggerEffect.CODEC.register("RunRootInteraction", RunRootInteractionEffect.class, RunRootInteractionEffect.CODEC);
      TriggerEffect.CODEC.register("SetMusic", SetMusicEffect.class, SetMusicEffect.CODEC);
      TriggerEffect.CODEC.register("GiveItem", GiveItemEffect.class, GiveItemEffect.CODEC);
      TriggerEffect.CODEC.register("SetGameMode", SetGameModeEffect.class, SetGameModeEffect.CODEC);
      TriggerEffect.CODEC.register("ModifyTags", ModifyTagsEffect.class, ModifyTagsEffect.CODEC);
      TriggerEffect.CODEC.register("SendSignal", SendSignalEffect.class, SendSignalEffect.CODEC);
      TriggerEffect.CODEC.register("PlaceBlock", PlaceBlockEffect.class, PlaceBlockEffect.CODEC);
      TriggerEffect.CODEC.register("ReplaceBlockType", ReplaceBlockTypeEffect.class, ReplaceBlockTypeEffect.CODEC);
      TriggerEffect.CODEC.register("SpawnNpc", SpawnNpcEffect.class, SpawnNpcEffect.CODEC);
      TriggerEffect.CODEC.register("PlayAnimation", PlayAnimationEffect.class, PlayAnimationEffect.CODEC);
      TriggerEffect.CODEC.register("ModifyRules", ModifyRulesEffect.class, ModifyRulesEffect.CODEC);
      TriggerRule.CODEC.register("NoBuild", NoBuildRule.class, NoBuildRule.CODEC);
      TriggerRule.CODEC.register("NoDestroy", NoDestroyRule.class, NoDestroyRule.CODEC);
      TriggerRule.CODEC.register("NoHarvest", NoHarvestRule.class, NoHarvestRule.CODEC);
      TriggerRule.CODEC.register("NoDamage", NoDamageRule.class, NoDamageRule.CODEC);
      TriggerRule.CODEC.register("NoDoorOpen", NoDoorOpenRule.class, NoDoorOpenRule.CODEC);
      TriggerRule.CODEC.register("NoUse", NoUseRule.class, NoUseRule.CODEC);
      TriggerRule.CODEC.register("NoHeal", NoHealRule.class, NoHealRule.CODEC);
      TriggerRule.CODEC.register("DamageMultiplier", DamageMultiplierRule.class, DamageMultiplierRule.CODEC);
      TriggerRule.CODEC.register("Fly", FlyRule.class, FlyRule.CODEC);
      TriggerRule.CODEC.register("CreativePlacement", CreativePlacementRule.class, CreativePlacementRule.CODEC);
      TriggerRule.CODEC.register("NoTick", NoTickRule.class, NoTickRule.CODEC);
      TickSuppressionRegistry.ensureRegistered();
      this.registerAssetSource("BlockType", () -> BlockType.getAssetMap().getAssetMap().keySet());
      this.registerAssetSource("EntityEffect", () -> EntityEffect.getAssetMap().getAssetMap().keySet());
      this.registerAssetSource("Item", () -> Item.getAssetMap().getAssetMap().keySet());
      this.registerAssetSource("BlockOrItem", TriggerVolumesPlugin::collectBlockAndItemIds);
      this.registerAssetSource("SoundEvent", () -> SoundEvent.getAssetMap().getAssetMap().keySet());
      this.registerAssetSource("EffectAsset", () -> {
         AssetStore var0 = AssetRegistry.getAssetStore(TriggerEffectAsset.class);
         class="kw">return var0 != null ? ((DefaultAssetMap)var0.getAssetMap()).getAssetMap().keySet() : Set.of();
      });
      this.registerAssetSource("Weather", () -> Weather.getAssetMap().getAssetMap().keySet());
      this.registerAssetSource("PrefabList", () -> PrefabListAsset.getAssetMap().getAssetMap().keySet());
      this.registerAssetSource("Prefab", TriggerVolumesPlugin::collectPrefabRelPaths);
      this.registerAssetSource("ParticleSystem", () -> ParticleSystem.getAssetMap().getAssetMap().keySet());
      this.registerAssetSource("ManualSpawnMarker", TriggerVolumesPlugin::collectManualSpawnMarkerIds);
      this.registerAssetSource("RootInteraction", () -> RootInteraction.getAssetMap().getAssetMap().keySet());
      this.registerAssetSource("MusicContainer", () -> MusicContainer.getAssetMap().getAssetMap().keySet());
      this.registerAssetSource("NpcRole", () -> NPCPlugin.get().getRoleTemplateNames(true));
      this.registerAssetSource("Animation", TriggerVolumesPlugin::collectAnimationIds);
      this.registerAssetSource("AnimationApplyOn", this::collectApplyOnIds);
      this.registerAssetSource("RuleEntity", TriggerVolumesPlugin::collectRuleEntityIds);
      this.registerAssetField("EntityEffect", "Effect", "EntityEffect");
      this.registerAssetField("PlaySound", "SoundEvent", "SoundEvent");
      this.registerAssetField("SetWeather", "Weather", "Weather");
      this.registerAssetField("PastePrefab", "PrefabList", "PrefabList");
      this.registerAssetField("PastePrefab", "Prefab", "Prefab");
      this.registerAssetField("PlayVfx", "ParticleSystem", "ParticleSystem");
      this.registerAssetField("CancelParticles", "ParticleSystems", "ParticleSystem");
      this.registerAssetField("TriggerNpcMarkers", "MarkerType", "ManualSpawnMarker");
      this.registerAssetField("RunRootInteraction", "RootInteraction", "RootInteraction");
      this.registerAssetField("SetMusic", "MusicContainer", "MusicContainer");
      this.registerAssetField("GiveItem", "Item", "Item");
      this.registerAssetField("PlaceBlock", "BlockType", "BlockType");
      this.registerAssetField("ReplaceBlockType", "FromBlockTypes", "BlockType");
      this.registerAssetField("ReplaceBlockType", "ToBlockType", "BlockType");
      this.registerAssetField("ItemCondition", "Item", "Item");
      this.registerAssetField("BlockTypeCondition", "BlockType", "BlockType");
      this.registerAssetField("EntityCountCondition", "EntityType", "NpcRole");
      this.registerAssetField("SpawnNpc", "NpcType", "NpcRole");
      this.registerAssetField("RemoveEntities", "Roles", "NpcRole");
      this.registerAssetField("PlayAnimation", "Animation", "Animation");
      this.registerAssetField("PlayAnimation", "NpcType", "AnimationApplyOn");
      this.registerAssetField("NoBuild", "ExceptBlocks", "BlockType");
      this.registerAssetField("NoDestroy", "ExceptBlocks", "BlockType");
      this.registerAssetField("NoDestroy", "ExceptTools", "Item");
      this.registerAssetField("NoHarvest", "ExceptBlocks", "BlockType");
      this.registerAssetField("NoUse", "ExceptBlocks", "BlockOrItem");
      this.registerAssetField("NoDamage", "Entities", "RuleEntity");
      this.registerAssetField("DamageMultiplier", "Entities", "RuleEntity");
   }

   @Nonnull
   class="kw">private class="kw">static Collection<String> collectRuleEntityIds() {
      ArrayList var0 = new ArrayList<>();
      var0.add("Player");
      var0.addAll(NPCPlugin.get().getRoleTemplateNames(true));
      class="kw">return var0;
   }

   @Nonnull
   class="kw">private class="kw">static Collection<String> collectBlockAndItemIds() {
      LinkedHashSet var0 = new LinkedHashSet<>(BlockType.getAssetMap().getAssetMap().keySet());
      var0.addAll(Item.getAssetMap().getAssetMap().keySet());
      class="kw">return var0;
   }

   @Nonnull
   class="kw">private class="kw">static Collection<String> collectAnimationIds() {
      TreeSet var0 = new TreeSet<>();

      for (ModelAsset var2 : ModelAsset.getAssetMap().getAssetMap().values()) {
         if (var2 != null) {
            var0.addAll(var2.getAnimationSetMap().keySet());
         }
      }

      class="kw">return var0;
   }

   @Nonnull
   class="kw">private Collection<String> collectApplyOnIds() {
      ArrayList var1 = new ArrayList<>();
      var1.add("Player");
      var1.add("Everyone");
      var1.addAll(NPCPlugin.get().getRoleTemplateNames(true));
      class="kw">return var1;
   }

   @Nonnull
   class="kw">public Collection<String> collectAnimationIdsForApplyOn(@Nonnull String var1) {
      if (var1.isBlank()) {
         class="kw">return collectAnimationIds();
      }

      if ("Everyone".equals(var1)) {
         class="kw">return this.collectCommonAnimationIds();
      }

      ModelAsset var2 = this.resolveConcreteModel(var1);
      class="kw">return var2 == null ? collectAnimationIds() : new TreeSet<>(var2.getAnimationSetMap().keySet());
   }

   @Nonnull
   class="kw">public Collection<String> collectApplyOnIdsForAnimation(@Nonnull String var1) {
      ArrayList var2 = new ArrayList<>();
      ModelAsset var3 = ModelAsset.getAssetMap().getAsset("Player");
      if (var3 != null && var3.getAnimationSetMap().containsKey(var1)) {
         var2.add("Player");
      }

      if (this.collectCommonAnimationIds().contains(var1)) {
         var2.add("Everyone");
      }

      for (String var5 : NPCPlugin.get().getRoleTemplateNames(true)) {
         String var6 = this.resolveRoleModelName(var5);
         if (var6 != null) {
            ModelAsset var7 = ModelAsset.getAssetMap().getAsset(var6);
            if (var7 != null && var7.getAnimationSetMap().containsKey(var1)) {
               var2.add(var5);
            }
         }
      }

      class="kw">return var2;
   }

   class="kw">public boolean isLoopingAnimation(@Nonnull String var1, @Nonnull String var2) {
      ModelAsset var3 = this.resolveConcreteModel(var1);
      if (var3 == null) {
         class="kw">return false;
      }

      ModelAsset.AnimationSet var4 = var3.getAnimationSetMap().get(var2);
      if (var4 != null && var4.getAnimations() != null) {
         for (ModelAsset.Animation var8 : var4.getAnimations()) {
            if (var8.isLooping()) {
               class="kw">return true;
            }
         }

         class="kw">return false;
      } else {
         class="kw">return false;
      }
   }

   @Nullable
   class="kw">private ModelAsset resolveConcreteModel(@Nonnull String var1) {
      if ("Player".equals(var1)) {
         class="kw">return ModelAsset.getAssetMap().getAsset("Player");
      }

      String var2 = this.resolveRoleModelName(var1);
      class="kw">return var2 != null ? ModelAsset.getAssetMap().getAsset(var2) : null;
   }

   @Nonnull
   class="kw">private Collection<String> collectCommonAnimationIds() {
      TreeSet var1 = null;
      ModelAsset var2 = ModelAsset.getAssetMap().getAsset("Player");
      if (var2 != null) {
         var1 = new TreeSet<>(var2.getAnimationSetMap().keySet());
      }

      for (String var4 : NPCPlugin.get().getRoleTemplateNames(true)) {
         String var5 = this.resolveRoleModelName(var4);
         if (var5 != null) {
            ModelAsset var6 = ModelAsset.getAssetMap().getAsset(var5);
            if (var6 != null) {
               Set var7 = var6.getAnimationSetMap().keySet();
               if (var1 == null) {
                  var1 = new TreeSet<>(var7);
               } else {
                  var1.retainAll(var7);
               }

               if (var1.isEmpty()) {
                  break;
               }
            }
         }
      }

      class="kw">return var1 == null ? collectAnimationIds() : var1;
   }

   @Nullable
   class="kw">private String resolveRoleModelName(@Nonnull String var1) {
      String var2 = this.roleModelNameCache.computeIfAbsent(var1, this::computeRoleModelName);
      class="kw">return var2.isEmpty() ? null : var2;
   }

   @Nonnull
   class="kw">private String computeRoleModelName(@Nonnull String var1) {
      NPCPlugin var2 = NPCPlugin.get();
      BuilderInfo var3 = var2.getRoleBuilderInfo(var2.getIndex(var1));
      if (var3 == null) {
         class="kw">return "";
      }

      Builder var4 = var3.getBuilder();
      if (var4.isSpawnable() && var4 class="kw">instanceof ISpawnableWithModel var5) {
         try {
            ExecutionContext var6 = new ExecutionContext(var4.getBuilderParameters().createScope());
            String var7 = var5.getSpawnModelName(var6, var5.createModifierScope(var6));
            class="kw">return var7 != null ? var7 : "";
         } catch (RuntimeException var8) {
            class="kw">return "";
         }
      } else {
         class="kw">return "";
      }
   }

   @Nonnull
   class="kw">private class="kw">static Collection<String> collectPrefabRelPaths() {
      TreeSet var0 = new TreeSet<>();
      PrefabStore var1 = PrefabStore.get();

      for (PrefabStore.AssetPackPrefabPath var3 : var1.getAllAssetPrefabPaths()) {
         Path var4 = var3.prefabsPath();

         try (Stream var5 = Files.walk(var4)) {
            var5.filter(PrefabStore.PREFAB_FILTER).forEach(var2 -> {
               Path var3 = var4.relativize(var2);
               var0.add(PrefabStore.stripPrefabSuffix(var3.toString().replace('\\', '/')));
            });
         } catch (Exception var10) {
            ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var10)).log("Failed to enumerate prefabs under %s", var4);
         }
      }

      class="kw">return var0;
   }

   @Nonnull
   class="kw">private class="kw">static Collection<String> collectManualSpawnMarkerIds() {
      ArrayList var0 = new ArrayList<>();

      for (Entry var2 : SpawnMarker.getAssetMap().getAssetMap().entrySet()) {
         if (var2.getValue().isManualTrigger()) {
            var0.add(var2.getKey());
         }
      }

      Collections.sort(var0);
      class="kw">return var0;
   }

   class="kw">private void initManagerForWorld(@Nonnull World var1) {
      String var2 = var1.getName().toLowerCase(Locale.ROOT);
      Store var3 = var1.getEntityStore().getStore();
      TriggerVolumeManager var4 = var3.getResource(this.managerResourceType);
      if (var4 != null) {
         var4.setWorld(var1);
         AssetStore var5 = AssetRegistry.getAssetStore(TriggerEffectAsset.class);

         for (VolumeEntry var7 : var4.getVolumesMap().values()) {
            var7.setWorldName(var2);
            if (var7.getEffectAssetRef() != null && var5 != null) {
               TriggerEffectAsset var8 = (TriggerEffectAsset)((DefaultAssetMap)var5.getAssetMap()).getAsset(var7.getEffectAssetRef());
               if (var8 == null) {
                  LOGGER.at(Level.WARNING).log("Volume '%s' references missing effect asset '%s'", var7.getId(), var7.getEffectAssetRef());
               } else {
                  var7.getConditions().clear();
                  var7.getConditions().addAll(Arrays.asList(var8.getConditions()));
                  var7.getEffects().clear();
                  var7.getEffects().addAll(Arrays.asList(var8.getEffects()));
                  var7.getRejectionEffects().clear();
                  var7.getRejectionEffects().addAll(Arrays.asList(var8.getRejectionEffects()));
                  var7.getRules().clear();
                  var7.getRules().addAll(Arrays.asList(var8.getRules()));
               }
            }
         }

         for (GroupEntry var10 : var4.getGroupsMap().values()) {
            var10.setWorldName(var2);
         }

         LOGGER.at(Level.INFO).log("Loaded %d trigger volumes and %d groups for world '%s'", var4.getVolumesMap().size(), var4.getGroupsMap().size(), var2);
      }
   }

   class="kw">private record AssetFieldKey(@Nonnull String typeId, @Nonnull String fieldKey) {
      class="kw">private AssetFieldKey {
      }
   }

   class="kw">public class="kw">static class="kw">final class PastePrefabPreviewState {
      @Nonnull
      class="kw">private class="kw">final String worldName;
      @Nullable
      class="kw">private class="kw">final String selectedId;
      class="kw">private class="kw">final boolean selectedIsGroup;
      @Nonnull
      class="kw">private class="kw">final String effectListKind;
      class="kw">private class="kw">final int effectIndex;
      @Nullable
      class="kw">private Vector3d lastSentPosition;

      class="kw">public PastePrefabPreviewState(@Nonnull String var1, @Nullable String var2, boolean var3, @Nonnull String var4, int var5, @Nullable Vector3d var6) {
         this.worldName = var1;
         this.selectedId = var2;
         this.selectedIsGroup = var3;
         this.effectListKind = var4;
         this.effectIndex = var5;
         this.lastSentPosition = var6 != null ? new Vector3d(var6) : null;
      }

      class="kw">public boolean matches(@Nonnull String var1, @Nullable String var2, boolean var3, @Nonnull String var4, int var5) {
         class="kw">return this.worldName.equals(var1)
            && Objects.equals(this.selectedId, var2)
            && this.selectedIsGroup == var3
            && this.effectListKind.equals(var4)
            && this.effectIndex == var5;
      }

      @Nonnull
      class="kw">public String worldName() {
         class="kw">return this.worldName;
      }

      @Nullable
      class="kw">public String selectedId() {
         class="kw">return this.selectedId;
      }

      class="kw">public boolean selectedIsGroup() {
         class="kw">return this.selectedIsGroup;
      }

      @Nonnull
      class="kw">public String effectListKind() {
         class="kw">return this.effectListKind;
      }

      class="kw">public int effectIndex() {
         class="kw">return this.effectIndex;
      }

      @Nullable
      class="kw">public Vector3d lastSentPosition() {
         class="kw">return this.lastSentPosition != null ? new Vector3d(this.lastSentPosition) : null;
      }

      class="kw">public void setLastSentPosition(@Nonnull Vector3d var1) {
         this.lastSentPosition = new Vector3d(var1);
      }
   }
}