PageData class

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

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

Поля (32)

МодификаторыТипИмя
public static final BuilderCodec<TriggerVolumeInspectorPage.PageData> CODEC
public TriggerVolumeInspectorPage.Action action
public String addEntry
public String addEventType
public String addTargetKind
public String assetPickerQuery
public String assetPickerSelection
public String effectIndex
public String effectListKind
public String effectType
public String eventCategoryScope
public String eventEntry
public String eventType
public String filterText
public String id
public Boolean includeVolumeSettings
public String isGroup
public final AssetPackSaveBrowserEventData packBrowserData
public Boolean paramBool
public String paramKey
public Double paramNumericValue
public String paramValue
public String presetId
public String presetName
public String removeTagKey
public String tab
public String tagKey
public String tagValues
public Double vecX
public Double vecY
public Double vecZ
public String worldName

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetPack;
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.EntityTargetType;
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.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.ModifyRulesEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.PastePrefabEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.PlayAnimationEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.RemoveEntitiesEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.TaggedVolumeEffectUtil;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.BlockTypeCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.TagCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.rules.AbstractDenyRule;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.ConditionTiming;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.CooldownMode;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.GroupEntry;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.ProjectileSource;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.RejectionDelayMode;
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.EmptyExtraInfo;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderField;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.common.util.StringCompareUtil;
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.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.protocol.Color;
class="kw">import com.hypixel.hytale.protocol.SoundCategory;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.EditorBlocksChange;
class="kw">import com.hypixel.hytale.protocol.packets.player.HideTriggerVolumePastePrefabPreview;
class="kw">import com.hypixel.hytale.protocol.packets.player.ShowTriggerVolumePastePrefabPreview;
class="kw">import com.hypixel.hytale.protocol.packets.player.TriggerVolumeShapeType;
class="kw">import com.hypixel.hytale.protocol.packets.player.TriggerVolumeToolSelection;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.PrefabListAsset;
class="kw">import com.hypixel.hytale.server.core.asset.type.environment.config.Environment;
class="kw">import com.hypixel.hytale.server.core.asset.type.soundevent.config.SoundEvent;
class="kw">import com.hypixel.hytale.server.core.asset.util.ColorParseUtil;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.modules.i18n.I18nModule;
class="kw">import com.hypixel.hytale.server.core.modules.singleplayer.SingleplayerModule;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabStore;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.standard.BlockSelection;
class="kw">import com.hypixel.hytale.server.core.ui.Anchor;
class="kw">import com.hypixel.hytale.server.core.ui.DropdownEntryInfo;
class="kw">import com.hypixel.hytale.server.core.ui.LocalizableString;
class="kw">import com.hypixel.hytale.server.core.ui.PatchStyle;
class="kw">import com.hypixel.hytale.server.core.ui.Value;
class="kw">import com.hypixel.hytale.server.core.ui.browser.AssetPackSaveBrowser;
class="kw">import com.hypixel.hytale.server.core.ui.browser.AssetPackSaveBrowserConfig;
class="kw">import com.hypixel.hytale.server.core.ui.browser.AssetPackSaveBrowserEventData;
class="kw">import com.hypixel.hytale.server.core.ui.builder.EventData;
class="kw">import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder;
class="kw">import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder;
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.SoundUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrayList;
class="kw">import it.unimi.dsi.fastutil.ints.IntList;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
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.Comparator;
class="kw">import java.util.EnumSet;
class="kw">import java.util.HashSet;
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.Map.Entry;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonArray;
class="kw">import org.bson.BsonBoolean;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonDouble;
class="kw">import org.bson.BsonInt32;
class="kw">import org.bson.BsonInt64;
class="kw">import org.bson.BsonString;
class="kw">import org.bson.BsonValue;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3f;

class="kw">public class TriggerVolumeInspectorPage class="kw">extends InteractiveCustomUIPage<TriggerVolumeInspectorPage.PageData> {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">static class="kw">final int ASSET_PICKER_MAX_RESULTS = 50;
   class="kw">private class="kw">static class="kw">final Value<String> NORMAL_ROW_STYLE = Value.ref("Pages/TriggerVolume/TriggerVolumeBrowseGroupRow.ui", "NormalRowStyle");
   class="kw">private class="kw">static class="kw">final Value<String> SELECTED_ROW_STYLE = Value.ref("Pages/TriggerVolume/TriggerVolumeBrowseGroupRow.ui", "SelectedRowStyle");
   class="kw">private class="kw">static class="kw">final Value<String> NORMAL_EFFECT_ROW_STYLE = Value.ref("Pages/TriggerVolume/TriggerVolumeInspectorEffectRow.ui", "NormalRowStyle");
   class="kw">private class="kw">static class="kw">final Value<String> SELECTED_EFFECT_ROW_STYLE = Value.ref("Pages/TriggerVolume/TriggerVolumeInspectorEffectRow.ui", "SelectedRowStyle");
   class="kw">private class="kw">static class="kw">final Value<String> INHERITED_EFFECT_ROW_STYLE = Value.ref("Pages/TriggerVolume/TriggerVolumeInspectorEffectRow.ui", "InheritedRowStyle");
   class="kw">private class="kw">static class="kw">final Value<String> NORMAL_EFFECT_LABEL_STYLE = Value.ref("Pages/TriggerVolume/TriggerVolumeInspectorEffectRow.ui", "NormalLabelStyle");
   class="kw">private class="kw">static class="kw">final Value<String> SELECTED_EFFECT_LABEL_STYLE = Value.ref("Pages/TriggerVolume/TriggerVolumeInspectorEffectRow.ui", "SelectedLabelStyle");
   class="kw">private class="kw">static class="kw">final Value<String> INHERITED_EFFECT_LABEL_STYLE = Value.ref("Pages/TriggerVolume/TriggerVolumeInspectorEffectRow.ui", "InheritedLabelStyle");
   class="kw">private class="kw">static class="kw">final String PAGE = "Pages/TriggerVolume/TriggerVolumeInspectorPage.ui";
   class="kw">private class="kw">static class="kw">final String GROUP_ROW = "Pages/TriggerVolume/TriggerVolumeBrowseGroupRow.ui";
   class="kw">private class="kw">static class="kw">final String VOLUME_ROW = "Pages/TriggerVolume/TriggerVolumeBrowseVolumeRow.ui";
   class="kw">private class="kw">static class="kw">final String TAG_ROW = "Pages/TriggerVolume/TriggerVolumeBrowseTagRow.ui";
   class="kw">private class="kw">static class="kw">final String TAG_CHIP = "Pages/TriggerVolume/TriggerVolumeTagChip.ui";
   class="kw">private class="kw">static class="kw">final int[] TAG_CHIP_COLORS = new int[]{
      5223543,
      4176047,
      5214176,
      7237344,
      10181046,
      13393320,
      14707612,
      14715452,
      14070332,
      14247259,
      6013118,
      8365648,
      11566278,
      15241563,
      13194606,
      4878288,
      4894348,
      12546880,
      7317724,
      13332382
   };
   class="kw">private class="kw">static class="kw">final int OVERFLOW_CHIP_COLOR = 5596014;
   class="kw">private class="kw">static class="kw">final int INSPECTOR_PANE_WIDTH = 895;
   class="kw">private class="kw">static class="kw">final int TAB_BUTTONS_WIDTH = 300;
   class="kw">private class="kw">static class="kw">final int TITLE_CHIP_ROW_BUDGET = 579;
   class="kw">private class="kw">static class="kw">final int[] EMPTY_ENTRIES = new int[0];
   class="kw">private class="kw">static class="kw">final String ADD_ENTRY_NEW = "NEW";
   class="kw">private class="kw">static class="kw">final String ALWAYS_ACTIVE_EVENT_VALUE = "ALWAYS_ACTIVE";
   class="kw">private class="kw">static class="kw">final String PROPERTY_ROW = "Pages/TriggerVolume/TriggerVolumeBrowsePropertyRow.ui";
   class="kw">private class="kw">static class="kw">final String TAB_BUTTON = "Pages/TriggerVolume/TriggerVolumeInspectorTabButton.ui";
   class="kw">private class="kw">static class="kw">final String EFFECT_ROW = "Pages/TriggerVolume/TriggerVolumeInspectorEffectRow.ui";
   class="kw">private class="kw">static class="kw">final String EVENT_CATEGORY_HEADER = "Pages/TriggerVolume/TriggerVolumeInspectorEventCategoryHeader.ui";
   class="kw">private class="kw">static class="kw">final List<String> DENY_SIGNAL_FIELD_KEYS = List.of("Target", "MatchKey", "MatchValue", "Radius", "SignalKeys", "SignalValues");
   class="kw">private class="kw">static class="kw">final Set<String> DENY_SIGNAL_FIELD_KEY_SET = Set.copyOf(DENY_SIGNAL_FIELD_KEYS);
   class="kw">private class="kw">static class="kw">final Set<String> DENY_SIGNAL_OTHER_ONLY_KEYS = Set.of("MatchKey", "MatchValue", "Radius");
   class="kw">private class="kw">static class="kw">final Set<String> TAG_CONDITION_RADIUS_ONLY_KEYS = Set.of("MatchKey", "MatchValue", "Radius", "Center");
   class="kw">private class="kw">static class="kw">final String EVENT_SECTION_LABEL = "Pages/TriggerVolume/TriggerVolumeInspectorEventSectionLabel.ui";
   class="kw">private class="kw">static class="kw">final String EVENT_CATEGORY_SPACER = "Pages/TriggerVolume/TriggerVolumeInspectorEventCategorySpacer.ui";
   class="kw">private class="kw">static class="kw">final String SECTION_LABEL = "Pages/TriggerVolume/TriggerVolumeInspectorSectionLabel.ui";
   class="kw">private class="kw">static class="kw">final String VOLUME_SECTION_LABEL = "Pages/TriggerVolume/TriggerVolumeInspectorVolumeSectionLabel.ui";
   class="kw">private class="kw">static class="kw">final String EFFECT_OWNER_SECTION_LABEL = "Pages/TriggerVolume/TriggerVolumeInspectorEffectOwnerSectionLabel.ui";
   class="kw">private class="kw">static class="kw">final String COMMON_TEXT_BUTTON_DOCUMENT = "Common/TextButton.ui";
   class="kw">private class="kw">static class="kw">final String BASE_HEADER_GRID = "Pages/TriggerVolume/TriggerVolumeInspectorBaseHeaderGrid.ui";
   class="kw">private class="kw">static class="kw">final String FIELD_TEXT = "Pages/TriggerVolume/TriggerVolumeInspectorTextRow.ui";
   class="kw">private class="kw">static class="kw">final String FIELD_COLOR = "Pages/TriggerVolume/TriggerVolumeInspectorColorRow.ui";
   class="kw">private class="kw">static class="kw">final String FIELD_NUMBER = "Pages/TriggerVolume/TriggerVolumeInspectorNumberRow.ui";
   class="kw">private class="kw">static class="kw">final String FIELD_INT = "Pages/TriggerVolume/TriggerVolumeInspectorIntRow.ui";
   class="kw">private class="kw">static class="kw">final String FIELD_CHECKBOX = "Pages/TriggerVolume/TriggerVolumeInspectorCheckboxRow.ui";
   class="kw">private class="kw">static class="kw">final String FIELD_DROPDOWN = "Pages/TriggerVolume/TriggerVolumeInspectorDropdownRow.ui";
   class="kw">private class="kw">static class="kw">final String FIELD_VEC3 = "Pages/TriggerVolume/TriggerVolumeInspectorVec3Row.ui";
   class="kw">private class="kw">static class="kw">final String FIELD_ROTATION3 = "Pages/TriggerVolume/TriggerVolumeInspectorRotation3Row.ui";
   class="kw">private class="kw">static class="kw">final EnumCodec<BlockTypeCondition.AxisRotation> AXIS_ROTATION_CODEC = new EnumCodec<>(BlockTypeCondition.AxisRotation.class);
   class="kw">private class="kw">static class="kw">final String FIELD_DIMENSIONS_BOX = "Pages/TriggerVolume/TriggerVolumeInspectorDimensionsBoxRow.ui";
   class="kw">private class="kw">static class="kw">final String FIELD_DIMENSIONS_SPHERE = "Pages/TriggerVolume/TriggerVolumeInspectorDimensionsSphereRow.ui";
   class="kw">private class="kw">static class="kw">final String FIELD_DIMENSIONS_CYLINDER = "Pages/TriggerVolume/TriggerVolumeInspectorDimensionsCylinderRow.ui";
   class="kw">private class="kw">static class="kw">final String FIELD_ASSET_PICKER = "Pages/TriggerVolume/TriggerVolumeInspectorAssetPickerRow.ui";
   class="kw">private class="kw">static class="kw">final String SOUND_ASSET_PICKER_ROW = "Pages/TriggerVolume/TriggerVolumeInspectorSoundAssetRow.ui";
   class="kw">private class="kw">static class="kw">final String RULE_TYPE_PARAM = "RuleType";
   class="kw">private class="kw">static class="kw">final String RULE_FIELD_PARAM = "RuleField";
   class="kw">private class="kw">static class="kw">final Set<String> NON_NEGATIVE_NUMERIC_FIELDS = Set.of(
      "CooldownCondition.Cooldown",
      "ItemCondition.Quantity",
      "PlayerCountCondition.Count",
      "GiveItem.Quantity",
      "DamageMultiplier.Multiplier",
      "TriggerNpcMarkers.Range",
      "TriggerNpcMarkers.Radius",
      "ModifyTags.Radius",
      "EnableVolume.Radius",
      "DisableVolume.Radius",
      "DeleteVolume.Radius",
      "ModifyRules.Radius",
      "TagCondition.Radius",
      "TagCondition.MinimumCount"
   );
   class="kw">private class="kw">static class="kw">final Map<String, BsonValue> DEFAULT_FIELD_VALUES = Map.of(
      "ModifyTags.TagValue",
      new BsonString("Empty"),
      "ModifyTags.Radius",
      new BsonDouble(50.0),
      "EnableVolume.Radius",
      new BsonDouble(50.0),
      "DisableVolume.Radius",
      new BsonDouble(50.0),
      "DeleteVolume.Radius",
      new BsonDouble(50.0),
      "ModifyRules.Radius",
      new BsonDouble(50.0),
      "TagCondition.Radius",
      new BsonDouble(50.0)
   );
   class="kw">private class="kw">static class="kw">final Color DEFAULT_PREFAB_BIOME_TINT = new Color((byte)91, (byte)-98, (byte)40);
   class="kw">private class="kw">static class="kw">final int DEFAULT_BIOME_TINT = ColorParseUtil.colorToARGBInt(DEFAULT_PREFAB_BIOME_TINT) & 16777215;
   class="kw">private class="kw">static class="kw">final int DEFAULT_WATER_TINT = ColorParseUtil.colorToARGBInt(Environment.getUnknownFor("").getWaterTint()) & 16777215;
   @Nonnull
   class="kw">private String selectedWorld;
   @Nullable
   class="kw">private String selectedId;
   class="kw">private boolean selectedIsGroup;
   @Nonnull
   class="kw">private TriggerVolumeInspectorPage.InspectorTab selectedTab;
   @Nonnull
   class="kw">private String filterText = "";
   class="kw">private class="kw">final Map<String, TriggerVolumeInspectorDrafts.VolumeDraft> volumeDrafts = new LinkedHashMap<>();
   class="kw">private class="kw">final Map<String, TriggerVolumeInspectorDrafts.GroupDraft> groupDrafts = new LinkedHashMap<>();
   class="kw">private class="kw">final Set<String> deletedVolumes = new LinkedHashSet<>();
   class="kw">private class="kw">final Set<String> deletedGroups = new LinkedHashSet<>();
   class="kw">private class="kw">final List<TriggerVolumeInspectorPage.RowEntry> currentRows = new ArrayList<>();
   class="kw">private class="kw">final TriggerVolumeManager.SelectionObserver selectionObserver = this::onExternalSelectionChanged;
   class="kw">private class="kw">final TriggerVolumeManager.VolumeUpdateObserver volumeUpdateObserver = new TriggerVolumeManager.VolumeUpdateObserver() {
      @Override
      class="kw">public void onVolumeUpdated(@Nonnull VolumeEntry var1) {
         TriggerVolumeInspectorPage.this.onExternalVolumeUpdated(var1);
      }

      @Override
      class="kw">public void onVolumeRemoved(@Nonnull String var1) {
         TriggerVolumeInspectorPage.this.onExternalVolumeRemoved(var1);
      }
   };
   @Nullable
   class="kw">private class="kw">final String preSelectedVolumeId;
   class="kw">private class="kw">final boolean preSelectedIsGroup;
   @Nonnull
   class="kw">private TriggerVolumeInspectorPage.EffectListKind selectedKind = TriggerVolumeInspectorPage.EffectListKind.EFFECT;
   @Nonnull
   class="kw">private TriggerVolumeInspectorPage.EffectListKind addTargetKind = TriggerVolumeInspectorPage.EffectListKind.EFFECT;
   @Nonnull
   class="kw">private TriggerVolumeInspectorPage.EffectListKind lastRegularTargetKind = TriggerVolumeInspectorPage.EffectListKind.EFFECT;
   @Nonnull
   class="kw">private TriggerEventType addEventType = TriggerEventType.ENTER;
   @Nonnull
   class="kw">private String addEffectType = "";
   class="kw">private int addEntry = 0;
   class="kw">private boolean volumeRulesCollapsed;
   class="kw">private boolean groupRulesExpanded;
   class="kw">private boolean rejectionSignalExpanded;
   class="kw">private boolean renamingSelected = false;
   @Nullable
   class="kw">private String renameOriginalId = null;
   class="kw">private int selectedEffectIndex = -1;
   class="kw">private int lastCommittedEntry = -1;
   @Nonnull
   class="kw">private class="kw">final Set<TriggerVolumeInspectorPage.EventCategoryKey> collapsedVolumeEventCategories = new HashSet<>();
   @Nonnull
   class="kw">private class="kw">final Set<TriggerVolumeInspectorPage.EventCategoryKey> expandedGroupEventCategories = new HashSet<>();
   class="kw">private boolean suppressSelectionObserver;
   class="kw">private boolean skipSaveOnDismiss;
   class="kw">private boolean pendingScrollToSelection = true;
   @Nullable
   class="kw">private String pendingPickerFieldKey;
   @Nullable
   class="kw">private String pendingPickerSource;
   class="kw">private boolean pendingPickerMultiSelect;
   @Nonnull
   class="kw">private class="kw">final Set<String> pendingPickerSelections = new LinkedHashSet<>();
   @Nonnull
   class="kw">private String assetPickerSearchQuery = "";
   @Nonnull
   class="kw">private class="kw">final Set<String> missingOptionLangKeys = new HashSet<>();
   @Nonnull
   class="kw">private class="kw">final AssetPackSaveBrowser presetPackBrowser = new AssetPackSaveBrowser(AssetPackSaveBrowserConfig.defaults());
   @Nonnull
   class="kw">private String presetSaveName = "";

   class="kw">public TriggerVolumeInspectorPage(
      @Nonnull PlayerRef var1, @Nonnull String var2, @Nullable String var3, @Nonnull TriggerVolumeInspectorPage.InspectorTab var4
   ) {
      this(var1, var2, var3, false, var4);
   }

   class="kw">public TriggerVolumeInspectorPage(
      @Nonnull PlayerRef var1, @Nonnull String var2, @Nullable String var3, boolean var4, @Nonnull TriggerVolumeInspectorPage.InspectorTab var5
   ) {
      super(var1, CustomPageLifetime.CanDismiss, TriggerVolumeInspectorPage.PageData.CODEC);
      this.selectedWorld = var2;
      this.preSelectedVolumeId = var3;
      this.preSelectedIsGroup = var4;
      this.selectedTab = var5;
   }

   @Override
   class="kw">public void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
      var2.append("Pages/TriggerVolume/TriggerVolumeInspectorPage.ui");
      this.registerSelectionObserver();
      this.registerVolumeUpdateObserver();
      this.clearPastePrefabPreviewIfFromDifferentWorld();
      this.buildWorldDropdown(var2);
      this.buildTabs(var2, var3);
      this.buildList(var2, var3);
      if (this.preSelectedVolumeId != null) {
         this.applyPreSelection(var2);
      }

      this.buildSelectedPane(var2, var3);
      this.bindStaticEvents(var3);
      this.presetPackBrowser.buildUI(var2, var3);
   }

   @Override
   class="kw">public void onDismiss(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
      TriggerVolumeManager var3 = getManagerForWorld(this.selectedWorld);
      if (var3 != null) {
         if (!this.skipSaveOnDismiss) {
            this.saveDrafts(var3, false);
         }

         var3.clearSelectionObserver(this.playerRef.getUuid(), this.selectionObserver);
         var3.clearVolumeUpdateObserver(this.playerRef.getUuid(), this.volumeUpdateObserver);
      }

      this.skipSaveOnDismiss = false;
   }

   class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull TriggerVolumeInspectorPage.PageData var3) {
      AssetPackSaveBrowser.ActionResult var4 = this.presetPackBrowser
         .handleAction(var3.action != null ? var3.action.name() : null, var3.packBrowserData, "#PresetSavePage #SelectedPackLabel");
      if (var4 != null) {
         if (var4.errorKey() != null) {
            this.playerRef.sendMessage(Message.translation(var4.errorKey()));
         }

         this.setSavePresetButtonState(var4.commandBuilder());
         this.sendUpdate(var4.commandBuilder(), var4.eventBuilder(), false);
      } else if (var3.action != null) {
         class="kw">switch (var3.action) {
            case Select:
               this.onSelect(var3);
               break;
            case ChangeWorld:
               this.onChangeWorld(var3);
               break;
            case FilterChanged:
               this.onFilterChanged(var3);
               break;
            case ChangeTab:
               this.onChangeTab(var3);
               break;
            case UpdateVolumeField:
               this.onUpdateVolumeField(var3);
               break;
            case CommitName:
               this.onCommitName(var3);
               break;
            case UpdateTag:
               this.onUpdateTag(var3);
               break;
            case RemoveTag:
               this.onRemoveTag(var3);
               break;
            case DeleteSelection:
               this.onDeleteSelection();
               break;
            case Save:
               this.onSave();
               break;
            case Discard:
               this.onDiscard();
               break;
            case Teleport:
               this.onTeleport(var1, var2);
               break;
            case ToggleRenameSelected:
               this.onToggleRenameSelected();
               break;
            case ConfirmRenameSelected:
               this.onConfirmRenameSelected();
               break;
            case CancelRenameSelected:
               this.onCancelRenameSelected();
               break;
            case SelectEffect:
               this.onSelectEffect(var3);
               break;
            case AddEffect:
               this.onAddEffect(var3);
               break;
            case RemoveEffect:
               this.onRemoveEffect();
               break;
            case DuplicateEffect:
               this.onDuplicateEffect();
               break;
            case MoveEffectUp:
               this.onMoveEffect(-1);
               break;
            case MoveEffectDown:
               this.onMoveEffect(1);
               break;
            case UpdateAddTarget:
               this.onUpdateAddTarget(var3);
               break;
            case UpdateAddEffectType:
               this.onUpdateAddEffectType(var3);
               break;
            case UpdateAddEventType:
               this.onUpdateAddEventType(var3);
               break;
            case UpdateAddEntry:
               this.onUpdateAddEntry(var3);
               break;
            case ToggleEventCategory:
               this.onToggleEventCategory(var3);
               break;
            case ToggleRulesCategory:
               this.onToggleRulesCategory(var3);
               break;
            case ToggleRejectionSignal:
               this.onToggleRejectionSignal();
               break;
            case UpdateParameter:
               this.onUpdateParameter(var3);
               break;
            case CommitEntry:
               this.onCommitEntry();
               break;
            case TogglePrefabPreview:
               this.onTogglePrefabPreview();
               break;
            case OpenPresetSave:
               this.onOpenPresetSave();
               break;
            case PresetNameChanged:
               this.onPresetNameChanged(var3);
               break;
            case ConfirmSavePreset:
               this.onConfirmSavePreset(var3);
               break;
            case CancelPresetSave:
               this.onCancelPresetSave();
               break;
            case OpenPresetLoad:
               this.onOpenPresetLoad();
               break;
            case LoadPreset:
               this.onLoadPreset(var3);
               break;
            case CancelPresetLoad:
               this.onCancelPresetLoad();
               break;
            case OpenAssetPicker:
               this.onOpenAssetPicker(var3);
               break;
            case AssetPickerSearch:
               this.onAssetPickerSearch(var3);
               break;
            case AssetPickerSelect:
               this.onAssetPickerSelect(var3);
               break;
            case ConfirmAssetPicker:
               this.onConfirmAssetPicker();
               break;
            case PreviewSound:
               this.onPreviewSound(var3, var2);
               break;
            case CancelAssetPicker:
               this.onCancelAssetPicker();
         }
      }
   }

   class="kw">private void buildWorldDropdown(@Nonnull UICommandBuilder var1) {
      ObjectArrayList var2 = new ObjectArrayList();

      for (World var4 : Universe.get().getWorlds().values()) {
         String var5 = var4.getName().toLowerCase(Locale.ROOT);
         var2.add(new DropdownEntryInfo(LocalizableString.fromString(var5), var5));
      }

      var1.set("#WorldDropdown.Entries", var2);
      var1.set("#WorldDropdown.Value", this.selectedWorld);
      var1.set("#FilterField.Value", this.filterText);
   }

   class="kw">private void buildTabs(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      var1.clear("#TabButtons");
      int var3 = 0;

      for (TriggerVolumeInspectorPage.InspectorTab var7 : TriggerVolumeInspectorPage.InspectorTab.values()) {
         String var8 = "#TabButtons[" + var3 + "]";
         var1.append("#TabButtons", "Pages/TriggerVolume/TriggerVolumeInspectorTabButton.ui");
         var1.set(var8 + ".Text", var7.label());
         var1.set(var8 + ".TooltipText", var7.tooltip());
         var1.set(var8 + ".Disabled", this.selectedTab == var7);
         var2.addEventBinding(
            CustomUIEventBindingType.Activating,
            var8,
            new EventData().append("Action", TriggerVolumeInspectorPage.Action.ChangeTab.name()).append("Tab", var7.name())
         );
         var3++;
      }
   }

   class="kw">private void buildList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      var1.clear("#ListContainer");
      this.currentRows.clear();
      TriggerVolumeManager var3 = getManagerForWorld(this.selectedWorld);
      if (var3 != null && (!var3.getVolumesMap().isEmpty() || !var3.getGroupsMap().isEmpty())) {
         LinkedHashMap var4 = new LinkedHashMap<>();

         for (GroupEntry var6 : var3.getGroupsMap().values()) {
            if (!this.deletedGroups.contains(var6.getId())) {
               var4.put(var6.getId(), new ArrayList<>());
            }
         }

         ArrayList var14 = new ArrayList<>();

         for (VolumeEntry var7 : var3.getVolumesMap().values()) {
            if (!this.deletedVolumes.contains(var7.getId())) {
               TriggerVolumeInspectorDrafts.VolumeDraft var8 = this.volumeDrafts.get(var7.getId());
               String var9 = var8 != null ? var8.groupId : var7.getGroupId();
               if (var9 != null && var4.containsKey(var9)) {
                  var4.get(var9).add(var7);
               } else {
                  var14.add(var7);
               }
            }
         }

         int var16 = 0;

         for (GroupEntry var19 : var3.getGroupsMap().values()) {
            if (!this.deletedGroups.contains(var19.getId())) {
               TriggerVolumeInspectorDrafts.GroupDraft var21 = this.draftForGroup(var19);
               List var10 = var4.getOrDefault(var19.getId(), List.of());
               if (this.matchesGroupFilter(var21.id, var19, var10)) {
                  var16 = this.appendGroupRow(var1, var2, var16, var19.getId(), var21.id, var21.color);

                  for (VolumeEntry var12 : var10) {
                     if (this.matchesVolumeFilter(var12)) {
                        TriggerVolumeInspectorDrafts.VolumeDraft var13 = this.draftForVolume(var12);
                        var16 = this.appendVolumeRow(var1, var2, var16, var12.getId(), var13.id, true, var21.color, var13.tags);
                     }
                  }
               }
            }
         }

         List var18 = var14.stream().filter(this::matchesVolumeFilter).toList();
         if (!var18.isEmpty()) {
            var1.append("#ListContainer", "Pages/TriggerVolume/TriggerVolumeInspectorSectionLabel.ui");
            var1.set("#ListContainer[" + var16 + "].Text", Message.translation("server.customUI.triggerVolumeBrowse.ungrouped"));
            var16++;

            for (VolumeEntry var22 : var18) {
               TriggerVolumeInspectorDrafts.VolumeDraft var23 = this.draftForVolume(var22);
               var16 = this.appendVolumeRow(var1, var2, var16, var22.getId(), var23.id, false, 0, var23.tags);
            }
         }

         if (var16 == 0) {
            this.appendListMessage(var1, Message.translation("server.customUI.triggerVolumeBrowse.emptyState"));
         } else {
            this.scrollSelectedRowToView(var1);
         }
      } else {
         this.appendListMessage(var1, Message.translation("server.customUI.triggerVolumeBrowse.emptyState"));
      }
   }

   class="kw">private int appendGroupRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, @Nonnull String var5, int var6) {
      String var7 = "#ListContainer[" + var3 + "]";
      var1.append("#ListContainer", "Pages/TriggerVolume/TriggerVolumeBrowseGroupRow.ui");
      var1.set(var7 + " #Label.Text", var5);
      var1.setObject(var7 + " #ColorSwatch.Background", colorPatch(var6));
      var1.set(var7 + ".Style", this.selectedIsGroup && var4.equals(this.selectedId) ? SELECTED_ROW_STYLE : NORMAL_ROW_STYLE);
      var2.addEventBinding(
         CustomUIEventBindingType.Activating,
         var7,
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.Select.name()).append("Id", var4).append("IsGroup", "true"),
         false
      );
      this.currentRows.add(new TriggerVolumeInspectorPage.RowEntry(var4, true, var3));
      class="kw">return var3 + 1;
   }

   class="kw">private int appendVolumeRow(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      int var3,
      @Nonnull String var4,
      @Nonnull String var5,
      boolean var6,
      int var7,
      @Nonnull Map<String, String> var8
   ) {
      String var9 = "#ListContainer[" + var3 + "]";
      var1.append("#ListContainer", "Pages/TriggerVolume/TriggerVolumeBrowseVolumeRow.ui");
      var1.set(var9 + " #Label.Text", var5);
      int var10 = this.appendRowTagChips(var1, var9 + " #TagChips", var8, var6);
      var1.set(var9 + " #TagChips.Visible", var10 > 0);
      if (var10 > 0) {
         Anchor var11 = new Anchor();
         var11.setHeight(Value.of(var10 == 1 ? 44 : 64));
         var1.setObject(var9 + ".Anchor", var11);
      }

      var1.set(var9 + " #Indent.Visible", var6);
      var1.set(var9 + " #ColorBar.Visible", var6);
      if (var6) {
         var1.setObject(var9 + " #ColorBar.Background", colorPatch(var7));
      }

      var1.set(var9 + ".Style", !this.selectedIsGroup && var4.equals(this.selectedId) ? SELECTED_ROW_STYLE : NORMAL_ROW_STYLE);
      var2.addEventBinding(
         CustomUIEventBindingType.Activating,
         var9,
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.Select.name()).append("Id", var4).append("IsGroup", "false"),
         false
      );
      this.currentRows.add(new TriggerVolumeInspectorPage.RowEntry(var4, false, var3));
      class="kw">return var3 + 1;
   }

   class="kw">private void appendListMessage(@Nonnull UICommandBuilder var1, @Nonnull Message var2) {
      var1.append("#ListContainer", "Pages/TriggerVolume/TriggerVolumeInspectorSectionLabel.ui");
      var1.set("#ListContainer[0].Text", var2);
   }

   class="kw">private void applyPreSelection(@Nonnull UICommandBuilder var1) {
      for (TriggerVolumeInspectorPage.RowEntry var3 : this.currentRows) {
         if (var3.isGroup == this.preSelectedIsGroup && var3.id.equals(this.preSelectedVolumeId)) {
            this.selectedId = var3.id;
            this.selectedIsGroup = var3.isGroup;
            var1.set("#ListContainer[" + var3.listIndex + "].Style", SELECTED_ROW_STYLE);
            var1.set("#ListContainer.ScrollChildIndexIntoView", var3.listIndex);
            class="kw">return;
         }
      }
   }

   class="kw">private void scrollSelectedRowToView(@Nonnull UICommandBuilder var1) {
      if (this.pendingScrollToSelection && this.selectedId != null) {
         for (TriggerVolumeInspectorPage.RowEntry var3 : this.currentRows) {
            if (var3.isGroup == this.selectedIsGroup && var3.id.equals(this.selectedId)) {
               var1.set("#ListContainer.ScrollChildIndexIntoView", var3.listIndex);
               this.pendingScrollToSelection = false;
               class="kw">return;
            }
         }
      }
   }

   class="kw">private void buildSelectedPane(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      var1.clear("#VolumeTab");
      var1.clear("#TagsList");
      var1.clear("#EffectListContainer");
      var1.clear("#EffectDetailPanel");
      var1.set("#NoSelectionLabel.Visible", this.selectedId == null);
      this.buildSelectedNameHeader(var1);
      this.buildTitleTagChips(var1);
      var1.set("#VolumeTab.Visible", this.selectedId != null && this.selectedTab == TriggerVolumeInspectorPage.InspectorTab.VOLUME);
      var1.set("#TagsTab.Visible", this.selectedId != null && this.selectedTab == TriggerVolumeInspectorPage.InspectorTab.TAGS);
      var1.set("#EffectsTab.Visible", this.selectedId != null && this.selectedTab == TriggerVolumeInspectorPage.InspectorTab.EFFECTS);
      var1.set("#DeleteButton.Disabled", this.selectedId == null);
      var1.set("#SavePresetButton.Disabled", this.selectedId == null);
      var1.set("#LoadPresetButton.Disabled", this.selectedId == null);
      if (this.selectedId != null) {
         class="kw">switch (this.selectedTab) {
            case VOLUME:
               this.buildVolumeTab(var1, var2);
               break;
            case EFFECTS:
               this.buildEffectsTab(var1, var2);
               break;
            case TAGS:
               this.buildTagsTab(var1, var2);
         }
      }
   }

   class="kw">private void buildSelectedNameHeader(@Nonnull UICommandBuilder var1) {
      String var2 = this.selectedDraftId();
      var1.set("#SelectedNameHeader.Visible", var2 != null);
      if (var2 == null) {
         this.renamingSelected = false;
         var1.set("#SelectedNameValidation.Visible", false);
      } else {
         var1.set("#SelectedNameTitle.Text", var2);
         var1.set("#SelectedNameTitle.Visible", !this.renamingSelected);
         var1.set("#SelectedNameSpacer.Visible", !this.renamingSelected);
         var1.set("#SelectedNameEditButton.Visible", !this.renamingSelected);
         var1.set("#SelectedNameFieldContainer.Visible", this.renamingSelected);
         var1.set("#SelectedNameField.Value", var2);
         var1.set("#SelectedNameEditButton.TooltipText", Message.translation("server.customUI.triggerVolumeInspector.renameToggle.tooltip"));
         var1.set("#SelectedNameConfirmButton.TooltipText", Message.translation("server.customUI.triggerVolumeInspector.renameConfirm.tooltip"));
         var1.set("#SelectedNameCancelButton.TooltipText", Message.translation("server.customUI.triggerVolumeInspector.renameCancel.tooltip"));
         Message var3 = this.idValidationMessage(var2);
         var1.set("#SelectedNameValidation.Visible", this.renamingSelected && var3 != null);
         if (var3 != null) {
            var1.set("#SelectedNameValidation.Text", var3);
         }
      }
   }

   class="kw">private void buildTitleTagChips(@Nonnull UICommandBuilder var1) {
      var1.clear("#TitleTagChips");
      var1.clear("#TitleTagChipsOverflow");
      Map var2 = null;
      if (this.selectedIsGroup) {
         TriggerVolumeInspectorDrafts.GroupDraft var3 = this.selectedGroupDraft();
         if (var3 != null) {
            var2 = var3.tags;
         }
      } else {
         TriggerVolumeInspectorDrafts.VolumeDraft var5 = this.selectedVolumeDraft();
         if (var5 != null) {
            var2 = var5.tags;
         }
      }

      if (this.selectedId != null && var2 != null) {
         ArrayList var6 = new ArrayList<>(var2.entrySet());
         int var4 = this.fillTitleChipRows(var1, "#TitleTagChips", var6, 0, 579, 1, false);
         if (var4 < var6.size()) {
            this.fillTitleChipRows(var1, "#TitleTagChipsOverflow", var6, var4, 579, 2, true);
         }
      }
   }

   class="kw">private int fillTitleChipRows(
      @Nonnull UICommandBuilder var1, @Nonnull String var2, @Nonnull List<Entry<String, String>> var3, int var4, int var5, int var6, boolean var7
   ) {
      int var8 = 0;
      int var9 = 1;
      int var10 = 0;

      int var11;
      for (var11 = var4; var11 < var3.size(); var11++) {
         Entry var12 = var3.get(var11);
         String var13 = var12.getValue();
         String var14 = var13 != null && !var13.isEmpty() ? var12.getKey() + ": " + var13 : var12.getKey();
         int var15 = chipWidth(var14);
         if (var10 > 0 && var10 + var15 > var5) {
            if (var9 == var6) {
               if (var7) {
                  this.appendChip(var1, var2, var8, "+" + (var3.size() - var11), 5596014);
               }
               break;
            }

            var9++;
            var10 = 0;
         }

         this.appendChip(var1, var2, var8++, var14, tagChipColor(var12.getKey()));
         var10 += var15;
      }

      class="kw">return var11;
   }

   @Nullable
   class="kw">private String selectedDraftId() {
      if (this.selectedId == null) {
         class="kw">return null;
      } else if (this.selectedIsGroup) {
         TriggerVolumeInspectorDrafts.GroupDraft var2 = this.selectedGroupDraft();
         class="kw">return var2 != null ? var2.id : null;
      } else {
         TriggerVolumeInspectorDrafts.VolumeDraft var1 = this.selectedVolumeDraft();
         class="kw">return var1 != null ? var1.id : null;
      }
   }

   class="kw">private void buildVolumeTab(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      int var3 = 0;
      if (this.selectedIsGroup) {
         TriggerVolumeInspectorDrafts.GroupDraft var4 = this.selectedGroupDraft();
         if (var4 == null) {
            class="kw">return;
         }

         var3 = this.addVolumeSectionLabel(var1, var3, "identity");
         var3 = this.addVolumeTextRow(var1, var2, var3, "id", var4.id);
         var3 = this.addVolumeColorRow(var1, var2, var3, "color", colorToHex(var4.color));
         var3 = this.addVolumeSectionLabel(var1, var3, "transform");
         var3 = this.addVolumeVec3Row(var1, var2, var3, "position", var4.origin);
         var3 = this.addVolumeSectionLabel(var1, var3, "behavior");
         var3 = this.addVolumeDropdownRow(var1, var2, var3, "targetTypes", targetTypeEntries(), targetTypesValue(var4.targetTypes));
         var3 = this.addVolumeCheckboxRow(var1, var2, var3, "enabled", var4.enabled);
         var3 = this.addVolumeCheckboxRow(var1, var2, var3, "rotateEffectsOnPaste", var4.rotateEffectsOnPaste);
         var3 = this.addVolumeSectionLabel(var1, var3, "timing");
         var3 = this.addVolumeDropdownRow(var1, var2, var3, "conditionTiming", conditionTimingEntries(), var4.conditionTiming.name());
         var3 = this.addVolumeDropdownRow(var1, var2, var3, "rejectionDelayMode", rejectionDelayModeEntries(), var4.rejectionDelayMode.name());
         var3 = this.addReadonlyTextRow(var1, var3, "members", String.join(", ", var4.memberVolumeIds));
      } else {
         TriggerVolumeInspectorDrafts.VolumeDraft var38 = this.selectedVolumeDraft();
         if (var38 == null) {
            class="kw">return;
         }

         var3 = this.addVolumeSectionLabel(var1, var3, "identity");
         var3 = this.addVolumeTextRow(var1, var2, var3, "id", var38.id);
         var3 = this.addVolumeColorRow(var1, var2, var3, "color", var38.color != null ? colorToHex(var38.color) : "#00CCCC");
         var3 = this.addVolumeSectionLabel(var1, var3, "transform");
         var3 = this.addVolumeDropdownRow(var1, var2, var3, "shape", shapeEntries(), var38.shapeType.name());
         var3 = this.addVolumeVec3Row(var1, var2, var3, "position", var38.position, true);
         var3 = this.addVolumeDimensionsRow(var1, var2, var3, var38.shapeType, var38.dimensions);
         var3 = this.addVolumeSectionLabel(var1, var3, "behavior");
         var3 = this.addVolumeDropdownRow(var1, var2, var3, "targetTypes", targetTypeEntries(), targetTypesValue(var38.targetTypes));
         var3 = this.addVolumeDropdownRow(var1, var2, var3, "projectileSource", projectileSourceEntries(), var38.projectileSource.name());
         var3 = this.addVolumeCheckboxRow(var1, var2, var3, "enabled", var38.enabled);
         var3 = this.addVolumeCheckboxRow(var1, var2, var3, "keepLoaded", var38.keepLoaded);
         var3 = this.addVolumeCheckboxRow(var1, var2, var3, "rotateEffectsOnPaste", var38.rotateEffectsOnPaste);
         var3 = this.addVolumeCheckboxRow(var1, var2, var3, "cancelDelayedOnExit", var38.cancelDelayedOnExit);
         var3 = this.addVolumeSectionLabel(var1, var3, "timing");
         var3 = this.addVolumeNumberRow(var1, var2, var3, "activationDelay", String.valueOf(var38.activationDelay), 2);
         var3 = this.addVolumeNumberRow(var1, var2, var3, "cooldown", String.valueOf(var38.cooldown), 2);
         var3 = this.addVolumeDropdownRow(var1, var2, var3, "cooldownMode", cooldownModeEntries(), var38.cooldownMode.name());
         var3 = this.addVolumeDropdownRow(var1, var2, var3, "conditionTiming", conditionTimingEntries(), var38.conditionTiming.name());
         var3 = this.addVolumeDropdownRow(var1, var2, var3, "rejectionDelayMode", rejectionDelayModeEntries(), var38.rejectionDelayMode.name());
      }
   }

   class="kw">private int addVolumeSectionLabel(@Nonnull UICommandBuilder var1, int var2, @Nonnull String var3) {
      String var4 = "#VolumeTab[" + var2 + "]";
      var1.append("#VolumeTab", "Pages/TriggerVolume/TriggerVolumeInspectorVolumeSectionLabel.ui");
      var1.set(var4 + " #Title.Text", Message.translation("server.customUI.triggerVolumeInspector.section." + var3));
      class="kw">return var2 + 1;
   }

   class="kw">private int addVolumeTextRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, @Nonnull String var5) {
      String var6 = "#VolumeTab[" + var3 + "]";
      var1.append("#VolumeTab", "Pages/TriggerVolume/TriggerVolumeInspectorTextRow.ui");
      var1.set(var6 + " #Label.Text", fieldLabel(var4));
      var1.set(var6 + " #Label.TooltipText", volumeFieldTooltip(var4));
      var1.set(var6 + " #Input.Value", var5);
      this.setIdValidation(var1, var6, var4, var5);
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var6 + " #Input", volumeFieldEvent(var4).append("@ParamValue", var6 + " #Input.Value"), false);
      var2.addEventBinding(
         CustomUIEventBindingType.FocusLost,
         var6 + " #Input",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.CommitName.name()).append("@ParamValue", var6 + " #Input.Value"),
         false
      );
      class="kw">return var3 + 1;
   }

   class="kw">private void setIdValidation(@Nonnull UICommandBuilder var1, @Nonnull String var2, @Nonnull String var3, @Nonnull String var4) {
      Message var5 = "id".equals(var3) ? this.idValidationMessage(var4) : null;
      if (var5 == null) {
         var1.set(var2 + " #ValidationLabel.Visible", false);
      } else {
         var1.set(var2 + " #ValidationLabel.Visible", true);
         var1.set(var2 + " #ValidationLabel.Text", var5);
      }
   }

   class="kw">private int addVolumeColorRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, @Nonnull String var5) {
      String var6 = "#VolumeTab[" + var3 + "]";
      var1.append("#VolumeTab", "Pages/TriggerVolume/TriggerVolumeInspectorColorRow.ui");
      var1.set(var6 + " #Label.Text", fieldLabel(var4));
      var1.set(var6 + " #Label.TooltipText", volumeFieldTooltip(var4));
      var1.set(var6 + " #Input.Color", var5);
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var6 + " #Input", volumeFieldEvent(var4).append("@ParamValue", var6 + " #Input.Color"), false);
      class="kw">return var3 + 1;
   }

   class="kw">private int addReadonlyTextRow(@Nonnull UICommandBuilder var1, int var2, @Nonnull String var3, @Nonnull String var4) {
      String var5 = "#VolumeTab[" + var2 + "]";
      var1.append("#VolumeTab", "Pages/TriggerVolume/TriggerVolumeBrowsePropertyRow.ui");
      var1.set(var5 + " #Key.Text", fieldLabel(var3));
      var1.set(var5 + " #Key.TooltipText", volumeFieldTooltip(var3));
      var1.set(var5 + " #Value.Text", var4);
      class="kw">return var2 + 1;
   }

   class="kw">private int addVolumeNumberRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, @Nonnull String var5, int var6) {
      String var7 = "#VolumeTab[" + var3 + "]";
      var1.append("#VolumeTab", var6 > 0 ? "Pages/TriggerVolume/TriggerVolumeInspectorNumberRow.ui" : "Pages/TriggerVolume/TriggerVolumeInspectorIntRow.ui");
      var1.set(var7 + " #Label.Text", fieldLabel(var4));
      var1.set(var7 + " #Label.TooltipText", volumeFieldTooltip(var4));

      try {
         var1.set(var7 + " #Input.Value", Double.parseDouble(var5));
      } catch (NumberFormatException var9) {
         var1.set(var7 + " #Input.Value", 0.0);
      }

      var2.addEventBinding(
         CustomUIEventBindingType.ValueChanged, var7 + " #Input", volumeFieldEvent(var4).append("@ParamNumericValue", var7 + " #Input.Value"), false
      );
      class="kw">return var3 + 1;
   }

   class="kw">private int addVolumeCheckboxRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, boolean var5) {
      String var6 = "#VolumeTab[" + var3 + "]";
      var1.append("#VolumeTab", "Pages/TriggerVolume/TriggerVolumeInspectorCheckboxRow.ui");
      var1.set(var6 + " #Label.Text", fieldLabel(var4));
      var1.set(var6 + " #Label.TooltipText", volumeFieldTooltip(var4));
      var1.set(var6 + " #Input.Value", var5);
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var6 + " #Input", volumeFieldEvent(var4).append("@ParamBool", var6 + " #Input.Value"), false);
      class="kw">return var3 + 1;
   }

   class="kw">private int addVolumeDropdownRow(
      @Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, @Nonnull List<DropdownEntryInfo> var5, @Nonnull String var6
   ) {
      String var7 = "#VolumeTab[" + var3 + "]";
      var1.append("#VolumeTab", "Pages/TriggerVolume/TriggerVolumeInspectorDropdownRow.ui");
      var1.set(var7 + " #Label.Text", fieldLabel(var4));
      var1.set(var7 + " #Label.TooltipText", volumeFieldTooltip(var4));
      var1.set(var7 + " #Input.Entries", new ObjectArrayList(var5));
      var1.set(var7 + " #Input.Value", var6);
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var7 + " #Input", volumeFieldEvent(var4).append("@ParamValue", var7 + " #Input.Value"), false);
      class="kw">return var3 + 1;
   }

   class="kw">private int addVolumeVec3Row(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, @Nonnull Vector3d var5) {
      class="kw">return this.addVolumeVec3Row(var1, var2, var3, var4, var5, false);
   }

   class="kw">private int addVolumeVec3Row(
      @Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, @Nonnull Vector3d var5, boolean var6
   ) {
      String var7 = "#VolumeTab[" + var3 + "]";
      var1.append("#VolumeTab", "Pages/TriggerVolume/TriggerVolumeInspectorVec3Row.ui");
      var1.set(var7 + " #Label.Text", fieldLabel(var4));
      var1.set(var7 + " #Label.TooltipText", volumeFieldTooltip(var4));
      var1.set(var7 + " #X.Value", var5.x());
      var1.set(var7 + " #Y.Value", var5.y());
      var1.set(var7 + " #Z.Value", var5.z());

      for (String var9 : List.of("X", "Y", "Z")) {
         var2.addEventBinding(
            CustomUIEventBindingType.ValueChanged,
            var7 + " #" + var9,
            volumeFieldEvent(var4).append("@VecX", var7 + " #X.Value").append("@VecY", var7 + " #Y.Value").append("@VecZ", var7 + " #Z.Value"),
            false
         );
      }

      if (var6) {
         var1.set(var7 + " #TeleportButton.Visible", true);
         var2.addEventBinding(
            CustomUIEventBindingType.Activating, var7 + " #TeleportButton", new EventData().append("Action", TriggerVolumeInspectorPage.Action.Teleport.name())
         );
      }

      class="kw">return var3 + 1;
   }

   class="kw">private int addVolumeDimensionsRow(
      @Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull TriggerVolumeShapeType var4, @Nonnull Vector3d var5
   ) {
      class="kw">return class="kw">switch (var4) {
         case Box -> this.addBoxDimensionsRow(var1, var2, var3, var5);
         case Sphere -> this.addSphereDimensionsRow(var1, var2, var3, var5);
         case Cylinder -> this.addCylinderDimensionsRow(var1, var2, var3, var5);
      };
   }

   class="kw">private int addBoxDimensionsRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull Vector3d var4) {
      String var5 = "#VolumeTab[" + var3 + "]";
      var1.append("#VolumeTab", "Pages/TriggerVolume/TriggerVolumeInspectorDimensionsBoxRow.ui");
      setDimensionsHeader(var1, var5);
      var1.set(var5 + " #XLabel.Text", Message.translation("server.customUI.triggerVolumeInspector.field.dimensions.x"));
      var1.set(var5 + " #YLabel.Text", Message.translation("server.customUI.triggerVolumeInspector.field.dimensions.y"));
      var1.set(var5 + " #ZLabel.Text", Message.translation("server.customUI.triggerVolumeInspector.field.dimensions.z"));
      var1.set(var5 + " #X.Value", var4.x());
      var1.set(var5 + " #Y.Value", var4.y());
      var1.set(var5 + " #Z.Value", var4.z());

      for (String var7 : List.of("X", "Y", "Z")) {
         var2.addEventBinding(
            CustomUIEventBindingType.ValueChanged,
            var5 + " #" + var7,
            volumeFieldEvent("dimensions").append("@VecX", var5 + " #X.Value").append("@VecY", var5 + " #Y.Value").append("@VecZ", var5 + " #Z.Value"),
            false
         );
      }

      class="kw">return var3 + 1;
   }

   class="kw">private int addSphereDimensionsRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull Vector3d var4) {
      String var5 = "#VolumeTab[" + var3 + "]";
      var1.append("#VolumeTab", "Pages/TriggerVolume/TriggerVolumeInspectorDimensionsSphereRow.ui");
      setDimensionsHeader(var1, var5);
      var1.set(var5 + " #RadiusLabel.Text", Message.translation("server.customUI.triggerVolumeInspector.field.dimensions.radius"));
      var1.set(var5 + " #Radius.Value", var4.x());
      var2.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         var5 + " #Radius",
         volumeFieldEvent("dimensionsRadius").append("@ParamNumericValue", var5 + " #Radius.Value"),
         false
      );
      class="kw">return var3 + 1;
   }

   class="kw">private int addCylinderDimensionsRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull Vector3d var4) {
      String var5 = "#VolumeTab[" + var3 + "]";
      var1.append("#VolumeTab", "Pages/TriggerVolume/TriggerVolumeInspectorDimensionsCylinderRow.ui");
      setDimensionsHeader(var1, var5);
      var1.set(var5 + " #RadiusLabel.Text", Message.translation("server.customUI.triggerVolumeInspector.field.dimensions.radius"));
      var1.set(var5 + " #HeightLabel.Text", Message.translation("server.customUI.triggerVolumeInspector.field.dimensions.height"));
      var1.set(var5 + " #Radius.Value", var4.x());
      var1.set(var5 + " #Height.Value", var4.y());

      for (String var7 : List.of("Radius", "Height")) {
         var2.addEventBinding(
            CustomUIEventBindingType.ValueChanged,
            var5 + " #" + var7,
            volumeFieldEvent("dimensionsCylinder").append("@VecX", var5 + " #Radius.Value").append("@VecY", var5 + " #Height.Value"),
            false
         );
      }

      class="kw">return var3 + 1;
   }

   class="kw">private class="kw">static void setDimensionsHeader(@Nonnull UICommandBuilder var0, @Nonnull String var1) {
      var0.set(var1 + " #Label.Text", fieldLabel("dimensions"));
      var0.set(var1 + " #Label.TooltipText", volumeFieldTooltip("dimensions"));
   }

   @Nonnull
   class="kw">private class="kw">static EventData volumeFieldEvent(@Nonnull String var0) {
      class="kw">return new EventData().append("Action", TriggerVolumeInspectorPage.Action.UpdateVolumeField.name()).append("ParamKey", var0);
   }

   class="kw">private void buildTagsTab(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      Map var3 = this.selectedIsGroup ? this.selectedGroupDraft().tags : this.selectedVolumeDraft().tags;
      int var4 = 0;

      for (Entry var6 : var3.entrySet()) {
         String var7 = "#TagsList[" + var4 + "]";
         var1.append("#TagsList", "Pages/TriggerVolume/TriggerVolumeBrowseTagRow.ui");
         int var8 = tagChipColor(var6.getKey());
         var1.set(var7 + " #TagLabel.Text", var6.getKey() + ": " + var6.getValue());
         var1.setObject(var7 + " #TagLabel.Background", tagColorPatch(var8));
         var2.addEventBinding(
            CustomUIEventBindingType.Activating,
            var7 + " #RemoveButton",
            new EventData().append("Action", TriggerVolumeInspectorPage.Action.RemoveTag.name()).append("RemoveTagKey", var6.getKey())
         );
         var4++;
      }
   }

   class="kw">private void buildEffectsTab(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      this.buildAddEventTypeDropdown(var1);
      this.buildAddEntryDropdown(var1);
      this.buildAddTargetDropdown(var1);
      this.buildAddEffectDropdown(var1);
      this.buildEffectList(var1, var2);
      this.buildEffectDetailPanel(var1, var2);
   }

   class="kw">private void bindStaticEvents(@Nonnull UIEventBuilder var1) {
      this.presetPackBrowser.buildEventBindings(var1, "#BrowsePackButton");
      var1.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         "#WorldDropdown",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.ChangeWorld.name()).append("@WorldName", "#WorldDropdown.Value"),
         false
      );
      var1.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         "#FilterField",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.FilterChanged.name()).append("@FilterText", "#FilterField.Value"),
         false
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#AddTagButton",
         new EventData()
            .append("Action", TriggerVolumeInspectorPage.Action.UpdateTag.name())
            .append("@TagKey", "#TagKeyField.Value")
            .append("@TagValues", "#TagValuesField.Value")
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating, "#DeleteButton", new EventData().append("Action", TriggerVolumeInspectorPage.Action.DeleteSelection.name())
      );
      var1.addEventBinding(CustomUIEventBindingType.Activating, "#SaveButton", new EventData().append("Action", TriggerVolumeInspectorPage.Action.Save.name()));
      var1.addEventBinding(
         CustomUIEventBindingType.Activating, "#DiscardButton", new EventData().append("Action", TriggerVolumeInspectorPage.Action.Discard.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#AddEffectButton",
         new EventData()
            .append("Action", TriggerVolumeInspectorPage.Action.AddEffect.name())
            .append("@EffectType", "#AddEffectDropdown.Value")
            .append("@AddTargetKind", "#AddTargetDropdown.Value")
            .append("@AddEventType", "#AddEventTypeDropdown.Value")
            .append("@AddEntry", "#AddEntryDropdown.Value")
      );
      var1.addEventBinding(
         CustomUIEventBindingType.ValueChanged, "#SelectedNameField", volumeFieldEvent("id").append("@ParamValue", "#SelectedNameField.Value"), false
      );
      var1.addEventBinding(
         CustomUIEventBindingType.FocusLost,
         "#SelectedNameField",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.CommitName.name()).append("@ParamValue", "#SelectedNameField.Value"),
         false
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#SelectedNameEditButton",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.ToggleRenameSelected.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#SelectedNameConfirmButton",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.ConfirmRenameSelected.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#SelectedNameCancelButton",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.CancelRenameSelected.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         "#AddEffectDropdown",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.UpdateAddEffectType.name()).append("@EffectType", "#AddEffectDropdown.Value"),
         false
      );
      var1.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         "#AddTargetDropdown",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.UpdateAddTarget.name()).append("@AddTargetKind", "#AddTargetDropdown.Value"),
         false
      );
      var1.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         "#AddEventTypeDropdown",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.UpdateAddEventType.name()).append("@AddEventType", "#AddEventTypeDropdown.Value"),
         false
      );
      var1.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         "#AddEntryDropdown",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.UpdateAddEntry.name()).append("@AddEntry", "#AddEntryDropdown.Value"),
         false
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating, "#RemoveEffectButton", new EventData().append("Action", TriggerVolumeInspectorPage.Action.RemoveEffect.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#DuplicateEffectButton",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.DuplicateEffect.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating, "#MoveEffectUpButton", new EventData().append("Action", TriggerVolumeInspectorPage.Action.MoveEffectUp.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#MoveEffectDownButton",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.MoveEffectDown.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating, "#SavePresetButton", new EventData().append("Action", TriggerVolumeInspectorPage.Action.OpenPresetSave.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating, "#LoadPresetButton", new EventData().append("Action", TriggerVolumeInspectorPage.Action.OpenPresetLoad.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         "#PresetName #Input",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.PresetNameChanged.name()).append("@PresetName", "#PresetName #Input.Value"),
         false
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#ConfirmSavePresetButton",
         new EventData()
            .append("Action", TriggerVolumeInspectorPage.Action.ConfirmSavePreset.name())
            .append("@PresetName", "#PresetName #Input.Value")
            .append("@IncludeVolumeSettings", "#IncludeVolumeSettings #Input.Value")
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#CancelSavePresetButton",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.CancelPresetSave.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#CancelLoadPresetButton",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.CancelPresetLoad.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         "#AssetPickerPage #SearchInput",
         new EventData()
            .append("Action", TriggerVolumeInspectorPage.Action.AssetPickerSearch.name())
            .append("@AssetPickerQuery", "#AssetPickerPage #SearchInput.Value"),
         false
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#ConfirmAssetPickerButton",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.ConfirmAssetPicker.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#CancelAssetPickerButton",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.CancelAssetPicker.name())
      );
   }

   class="kw">private void onSelect(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.id != null) {
         this.selectedId = var1.id;
         this.selectedIsGroup = "true".equals(var1.isGroup);
         this.selectedEffectIndex = -1;
         this.lastCommittedEntry = -1;
         this.renamingSelected = false;
         this.pendingScrollToSelection = false;
         this.syncSelectionToTool();
         this.rebuildAll();
      }
   }

   class="kw">private void onToggleRenameSelected() {
      if (this.selectedId != null) {
         this.renamingSelected = !this.renamingSelected;
         this.renameOriginalId = this.renamingSelected ? this.selectedDraftId() : null;
         this.rebuildAll();
      }
   }

   class="kw">private void onConfirmRenameSelected() {
      if (this.renamingSelected) {
         this.renamingSelected = false;
         this.renameOriginalId = null;
         this.rebuildAll();
      }
   }

   class="kw">private void onCancelRenameSelected() {
      if (this.renamingSelected) {
         if (this.renameOriginalId != null) {
            if (this.selectedIsGroup) {
               TriggerVolumeInspectorDrafts.GroupDraft var1 = this.selectedGroupDraft();
               if (var1 != null) {
                  var1.id = this.renameOriginalId;
               }
            } else {
               TriggerVolumeInspectorDrafts.VolumeDraft var2 = this.selectedVolumeDraft();
               if (var2 != null) {
                  var2.id = this.renameOriginalId;
               }
            }
         }

         this.renamingSelected = false;
         this.renameOriginalId = null;
         this.rebuildAll();
      }
   }

   class="kw">private void onChangeWorld(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.worldName != null && !var1.worldName.equals(this.selectedWorld)) {
         TriggerVolumeManager var2 = getManagerForWorld(this.selectedWorld);
         if (var2 != null && !this.saveDrafts(var2, false)) {
            this.revertRejectedDraftIds();
            this.rebuildAll();
         } else {
            this.hidePastePrefabPreview();
            if (var2 != null) {
               var2.clearSelectionObserver(this.playerRef.getUuid(), this.selectionObserver);
               var2.clearVolumeUpdateObserver(this.playerRef.getUuid(), this.volumeUpdateObserver);
            }

            this.clearDraftState();
            this.selectedWorld = var1.worldName;
            this.selectedId = null;
            this.selectedIsGroup = false;
            this.selectedEffectIndex = -1;
            this.lastCommittedEntry = -1;
            this.registerSelectionObserver();
            this.registerVolumeUpdateObserver();
            this.rebuildAll();
         }
      }
   }

   class="kw">private void onFilterChanged(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      this.filterText = var1.filterText != null ? var1.filterText.trim().toLowerCase(Locale.ROOT) : "";
      this.rebuildAll();
   }

   class="kw">private void onChangeTab(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.tab != null) {
         try {
            this.selectedTab = TriggerVolumeInspectorPage.InspectorTab.valueOf(var1.tab);
            this.rebuildAll();
         } catch (IllegalArgumentException var3) {
         }
      }
   }

   class="kw">private void onUpdateVolumeField(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.paramKey != null && this.selectedId != null) {
         boolean var2 = !this.selectedIsGroup && "shape".equals(var1.paramKey);
         if (this.selectedIsGroup) {
            TriggerVolumeInspectorDrafts.GroupDraft var3 = this.selectedGroupDraft();
            if (var3 == null) {
               class="kw">return;
            }

            this.updateGroupField(var3, var1);
            if ("id".equals(var1.paramKey)) {
               class="kw">return;
            }
         } else {
            TriggerVolumeInspectorDrafts.VolumeDraft var4 = this.selectedVolumeDraft();
            if (var4 == null) {
               class="kw">return;
            }

            this.updateVolumeField(var4, var1);
            if ("id".equals(var1.paramKey)) {
               class="kw">return;
            }
         }

         if (var2) {
            this.rebuildAll();
         }

         if ("position".equals(var1.paramKey)) {
            this.refreshActivePastePrefabPreviewPosition();
         }
      }
   }

   class="kw">private void onCommitName(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (this.selectedId != null) {
         if (this.selectedIsGroup) {
            TriggerVolumeInspectorDrafts.GroupDraft var2 = this.selectedGroupDraft();
            if (var2 == null) {
               class="kw">return;
            }

            if (var1.paramValue != null) {
               var2.id = var1.paramValue.trim();
            }

            this.applyGroupNameImmediately(var2);
         } else {
            TriggerVolumeInspectorDrafts.VolumeDraft var3 = this.selectedVolumeDraft();
            if (var3 == null) {
               class="kw">return;
            }

            if (var1.paramValue != null) {
               var3.id = var1.paramValue.trim();
            }

            this.applyVolumeNameImmediately(var3);
         }
      }
   }

   class="kw">private void applyVolumeNameImmediately(@Nonnull TriggerVolumeInspectorDrafts.VolumeDraft var1) {
      TriggerVolumeManager var2 = this.getSelectedManager();
      if (var2 != null) {
         VolumeEntry var3 = var2.getVolume(var1.originalId);
         if (var3 != null) {
            String var4 = var2.makeUniqueVolumeName(var1.id, var1.originalId);
            var1.id = var4;
            if (!var4.equals(var3.getName())) {
               var1.markDirty();
               var3.setName(var4);
               var2.notifyViewersAdd(var3);
               this.rebuildAll();
            }
         }
      }
   }

   class="kw">private void applyGroupNameImmediately(@Nonnull TriggerVolumeInspectorDrafts.GroupDraft var1) {
      TriggerVolumeManager var2 = this.getSelectedManager();
      if (var2 != null) {
         GroupEntry var3 = var2.getGroup(var1.originalId);
         if (var3 != null) {
            String var4 = var2.makeUniqueGroupName(var1.id, var1.originalId);
            var1.id = var4;
            if (!var4.equals(var3.getName())) {
               var1.markDirty();
               var3.setName(var4);
               var2.notifyViewers();
               this.rebuildAll();
            }
         }
      }
   }

   class="kw">private void updateVolumeField(@Nonnull TriggerVolumeInspectorDrafts.VolumeDraft var1, @Nonnull TriggerVolumeInspectorPage.PageData var2) {
      boolean var3 = true;
      class="kw">switch (var2.paramKey) {
         case "id":
            this.updateDraftId(var1, var2.paramValue);
            break;
         case "shape":
            var1.shapeType = parseEnum(TriggerVolumeShapeType.class, var2.paramValue, var1.shapeType);
            break;
         case "position":
            setVec(var1.position, var2);
            break;
         case "dimensions": {
            Vector3d var8 = new Vector3d(var1.dimensions);
            setBoxDimensions(var1.dimensions, var2);
            var1.rescaleAnchorOffset(var8);
            break;
         }
         case "dimensionsRadius": {
            Vector3d var7 = new Vector3d(var1.dimensions);
            setSphereDimensions(var1.dimensions, var2);
            var1.rescaleAnchorOffset(var7);
            break;
         }
         case "dimensionsCylinder": {
            Vector3d var6 = new Vector3d(var1.dimensions);
            setCylinderDimensions(var1.dimensions, var2);
            var1.rescaleAnchorOffset(var6);
            break;
         }
         case "color":
            var1.color = parseColor(var2.paramValue);
            break;
         case "targetTypes":
            var1.targetTypes = parseTargetTypes(var2.paramValue);
            break;
         case "projectileSource":
            var1.projectileSource = parseEnum(ProjectileSource.class, var2.paramValue, var1.projectileSource);
            break;
         case "enabled":
            var1.enabled = Boolean.TRUE.equals(var2.paramBool);
            break;
         case "keepLoaded":
            var1.keepLoaded = Boolean.TRUE.equals(var2.paramBool);
            break;
         case "rotateEffectsOnPaste":
            var1.rotateEffectsOnPaste = Boolean.TRUE.equals(var2.paramBool);
            break;
         case "cancelDelayedOnExit":
            var1.cancelDelayedOnExit = Boolean.TRUE.equals(var2.paramBool);
            break;
         case "activationDelay":
            var1.activationDelay = var2.paramNumericValue != null ? Math.max(0.0F, var2.paramNumericValue.floatValue()) : var1.activationDelay;
            break;
         case "cooldown":
            var1.cooldown = var2.paramNumericValue != null ? Math.max(0.0F, var2.paramNumericValue.floatValue()) : var1.cooldown;
            break;
         case "cooldownMode":
            var1.cooldownMode = parseEnum(CooldownMode.class, var2.paramValue, var1.cooldownMode);
            break;
         case "conditionTiming":
            var1.conditionTiming = parseEnum(ConditionTiming.class, var2.paramValue, var1.conditionTiming);
            break;
         case "rejectionDelayMode":
            var1.rejectionDelayMode = parseEnum(RejectionDelayMode.class, var2.paramValue, var1.rejectionDelayMode);
            break;
         class="kw">default:
            var3 = false;
      }

      if (var3) {
         var1.markDirty();
      }
   }

   class="kw">private void updateDraftId(@Nonnull TriggerVolumeInspectorDrafts.VolumeDraft var1, @Nullable String var2) {
      var1.id = var2 != null ? var2.trim() : var1.id;
   }

   class="kw">private void updateGroupField(@Nonnull TriggerVolumeInspectorDrafts.GroupDraft var1, @Nonnull TriggerVolumeInspectorPage.PageData var2) {
      boolean var3 = true;
      class="kw">switch (var2.paramKey) {
         case "id":
            this.updateDraftId(var1, var2.paramValue);
            break;
         case "position":
            setVec(var1.origin, var2);
            break;
         case "color":
            var1.color = parsePackedColor(var2.paramValue, var1.color);
            break;
         case "targetTypes":
            var1.targetTypes = parseTargetTypes(var2.paramValue);
            break;
         case "enabled":
            var1.enabled = Boolean.TRUE.equals(var2.paramBool);
            break;
         case "rotateEffectsOnPaste":
            var1.rotateEffectsOnPaste = Boolean.TRUE.equals(var2.paramBool);
            break;
         case "conditionTiming":
            var1.conditionTiming = parseEnum(ConditionTiming.class, var2.paramValue, var1.conditionTiming);
            break;
         case "rejectionDelayMode":
            var1.rejectionDelayMode = parseEnum(RejectionDelayMode.class, var2.paramValue, var1.rejectionDelayMode);
            break;
         class="kw">default:
            var3 = false;
      }

      if (var3) {
         var1.markDirty();
      }
   }

   class="kw">private void updateDraftId(@Nonnull TriggerVolumeInspectorDrafts.GroupDraft var1, @Nullable String var2) {
      var1.id = var2 != null ? var2.trim() : var1.id;
   }

   class="kw">private void onUpdateTag(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (this.selectedId != null && var1.tagKey != null) {
         String var2 = var1.tagKey.trim();
         if (!var2.isEmpty()) {
            this.currentTags().put(var2, TaggedVolumeEffectUtil.normalizeTagValue(var1.tagValues));
            this.markSelectedDraftDirty();
            UICommandBuilder var3 = new UICommandBuilder();
            UIEventBuilder var4 = new UIEventBuilder();
            var3.clear("#TagsList");
            this.buildTagsTab(var3, var4);
            var3.set("#TagKeyField.Value", "");
            var3.set("#TagValuesField.Value", "");
            this.sendUpdate(var3, var4, false);
         }
      }
   }

   class="kw">private void onRemoveTag(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.removeTagKey != null) {
         if (this.currentTags().remove(var1.removeTagKey) != null) {
            this.markSelectedDraftDirty();
            this.rebuildAll();
         }
      }
   }

   class="kw">private void onDeleteSelection() {
      if (this.selectedId != null) {
         this.hidePastePrefabPreview();
         if (this.selectedIsGroup) {
            this.deletedGroups.add(this.selectedId);
         } else {
            this.deletedVolumes.add(this.selectedId);
         }

         this.selectedId = null;
         this.rebuildAll();
      }
   }

   class="kw">private void onTeleport(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
      if (this.selectedId != null && !this.selectedIsGroup) {
         TriggerVolumeManager var3 = getManagerForWorld(this.selectedWorld);
         if (var3 != null) {
            VolumeEntry var4 = var3.getVolume(this.selectedId);
            if (var4 != null && var1.isValid()) {
               TransformComponent var5 = var2.getComponent(var1, TransformComponent.getComponentType());
               if (var5 != null) {
                  Vector3d var6 = new Vector3d(var4.getPosition());
                  var2.addComponent(var1, Teleport.getComponentType(), Teleport.createForPlayer(var6, var5.getRotation()));
                  this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeInspector.teleported").param("name", this.selectedId));
                  this.close();
               }
            }
         }
      }
   }

   class="kw">private void onSave() {
      TriggerVolumeManager var1 = getManagerForWorld(this.selectedWorld);
      if (var1 != null && this.saveDrafts(var1, true)) {
         this.skipSaveOnDismiss = true;
         this.close();
      } else {
         this.revertRejectedDraftIds();
         this.rebuildAll();
      }
   }

   class="kw">private void clearDraftState() {
      this.volumeDrafts.clear();
      this.groupDrafts.clear();
      this.deletedVolumes.clear();
      this.deletedGroups.clear();
   }

   class="kw">private void onDiscard() {
      this.skipSaveOnDismiss = true;
      this.close();
   }

   class="kw">private boolean saveDrafts(@Nonnull TriggerVolumeManager var1, boolean var2) {
      if (!this.validateDraftIds(var1)) {
         class="kw">return false;
      }

      this.applyDeletes(var1);
      this.applyGroupDrafts(var1);
      this.applyVolumeDrafts(var1);
      var1.markSpatialDirty();
      var1.notifyViewers();
      if (var2) {
         this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeInspector.saved"));
      }

      class="kw">return true;
   }

   class="kw">private void revertRejectedDraftIds() {
   }

   class="kw">private boolean validateDraftIds(@Nonnull TriggerVolumeManager var1) {
      class="kw">return true;
   }

   @Nullable
   class="kw">private Message idValidationMessage(@Nonnull String var1) {
      class="kw">return null;
   }

   class="kw">private void applyDeletes(@Nonnull TriggerVolumeManager var1) {
      for (String var3 : this.deletedVolumes) {
         VolumeEntry var4 = var1.getVolume(var3);
         if (var4 != null) {
            if (var4.getGroupId() != null) {
               GroupEntry var5 = var1.getGroup(var4.getGroupId());
               if (var5 != null) {
                  var5.removeMember(var3);
               }
            }

            var1.unregister(var3);
            var1.notifyViewersRemove(var3);
         }
      }

      for (String var9 : this.deletedGroups) {
         GroupEntry var10 = var1.getGroup(var9);
         if (var10 != null) {
            for (String var6 : new ArrayList<>(var10.getMemberVolumeIds())) {
               VolumeEntry var7 = var1.getVolume(var6);
               if (var7 != null) {
                  var7.setGroupId(null);
                  var1.notifyViewersAdd(var7);
               }
            }

            var1.unregisterGroup(var9);
         }
      }
   }

   class="kw">private void applyGroupDrafts(@Nonnull TriggerVolumeManager var1) {
      for (TriggerVolumeInspectorDrafts.GroupDraft var3 : this.groupDrafts.values()) {
         if (!this.deletedGroups.contains(var3.originalId) && var3.dirty) {
            GroupEntry var4 = var1.getGroup(var3.originalId);
            if (var4 != null) {
               var3.applyTo(var4);
               var4.setName(var1.makeUniqueGroupName(var3.id, var3.originalId));
            }
         }
      }
   }

   class="kw">private void applyVolumeDrafts(@Nonnull TriggerVolumeManager var1) {
      for (TriggerVolumeInspectorDrafts.VolumeDraft var3 : this.volumeDrafts.values()) {
         if (!this.deletedVolumes.contains(var3.originalId) && var3.dirty) {
            VolumeEntry var4 = var1.getVolume(var3.originalId);
            if (var4 != null) {
               String var5 = var3.originalId;
               String var6 = var4.getGroupId();
               var3.applyTo(var4);
               var4.setName(var1.makeUniqueVolumeName(var3.id, var5));
               if (var6 != null && !var6.equals(var3.groupId)) {
                  GroupEntry var7 = var1.getGroup(var6);
                  if (var7 != null) {
                     var7.removeMember(var5);
                  }
               }

               if (var3.groupId != null) {
                  GroupEntry var8 = var1.getGroup(var3.groupId);
                  if (var8 != null) {
                     var8.addMember(var5);
                  }
               }

               var1.notifyViewersAdd(var4);
            }
         }
      }
   }

   class="kw">private void buildAddEffectDropdown(@Nonnull UICommandBuilder var1) {
      if (this.isAddingRule()) {
         List var7 = getSortedRuleTypeIds();
         ObjectArrayList var8 = new ObjectArrayList();

         for (String var12 : var7) {
            var8.add(new DropdownEntryInfo(this.ruleDropdownLabel(var12), var12));
         }

         var1.set("#AddEffectDropdown.Entries", var8);
         String var10 = !this.addEffectType.isEmpty() && var7.contains(this.addEffectType) ? this.addEffectType : (var7.isEmpty() ? "" : var7.get(0));
         if (!var10.isEmpty()) {
            var1.set("#AddEffectDropdown.Value", var10);
         }
      } else {
         boolean var2 = this.addTargetKind == TriggerVolumeInspectorPage.EffectListKind.CONDITION;
         List var3 = var2 ? getSortedConditionTypeIds() : getSortedTypeIds();
         ObjectArrayList var4 = new ObjectArrayList();

         for (String var6 : var3) {
            var4.add(new DropdownEntryInfo(this.typeDropdownLabel(var6, var2), var6));
         }

         var1.set("#AddEffectDropdown.Entries", var4);
         String var11 = !this.addEffectType.isEmpty() && var3.contains(this.addEffectType) ? this.addEffectType : (var3.isEmpty() ? "" : var3.get(0));
         if (!var11.isEmpty()) {
            var1.set("#AddEffectDropdown.Value", var11);
         }
      }
   }

   class="kw">private void buildAddEventTypeDropdown(@Nonnull UICommandBuilder var1) {
      ObjectArrayList var2 = new ObjectArrayList();

      for (TriggerEventType var4 : TriggerEventType.values()) {
         var2.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.triggerVolumeEffectEditor.addEventType." + var4.name()), var4.name()));
      }

      var2.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.triggerVolumeEffectEditor.addEventType.ALWAYS_ACTIVE"), "ALWAYS_ACTIVE"));
      var1.set("#AddEventTypeDropdown.Entries", var2);
      var1.set("#AddEventTypeDropdown.Value", this.isAddingRule() ? "ALWAYS_ACTIVE" : this.addEventType.name());
   }

   class="kw">private void buildAddEntryDropdown(@Nonnull UICommandBuilder var1) {
      if (this.isAddingRule()) {
         ObjectArrayList var9 = new ObjectArrayList();
         var9.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.triggerVolumeEffectEditor.addEntry.notApplicable"), "0"));
         var1.set("#AddEntryDropdown.Entries", var9);
         var1.set("#AddEntryDropdown.Value", "0");
      } else {
         IntOpenHashSet var2 = new IntOpenHashSet();
         var2.add(0);
         var2.add(this.addEntry);

         for (int var6 : this.getEventEntries(TriggerVolumeInspectorPage.EventCategoryScope.VOLUME, null, this.addEventType)) {
            var2.add(var6);
         }

         int[] var10 = var2.toIntArray();
         Arrays.sort(var10);
         ObjectArrayList var11 = new ObjectArrayList();

         for (int var8 : var10) {
            var11.add(
               new DropdownEntryInfo(
                  LocalizableString.fromMessageId("server.customUI.triggerVolumeEffectEditor.addEntry.option", Map.of("entry", String.valueOf(var8 + 1))),
                  String.valueOf(var8)
               )
            );
         }

         var11.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.triggerVolumeEffectEditor.addEntry.new"), "NEW"));
         var1.set("#AddEntryDropdown.Entries", var11);
         var1.set("#AddEntryDropdown.Value", String.valueOf(this.addEntry));
      }
   }

   class="kw">private void buildAddTargetDropdown(@Nonnull UICommandBuilder var1) {
      ObjectArrayList var2 = new ObjectArrayList();
      var2.add(
         new DropdownEntryInfo(
            LocalizableString.fromMessageId("server.customUI.triggerVolumeEffectEditor.addTarget.conditions"),
            TriggerVolumeInspectorPage.EffectListKind.CONDITION.name()
         )
      );
      var2.add(
         new DropdownEntryInfo(
            LocalizableString.fromMessageId("server.customUI.triggerVolumeEffectEditor.addTarget.successEffects"),
            TriggerVolumeInspectorPage.EffectListKind.EFFECT.name()
         )
      );
      var2.add(
         new DropdownEntryInfo(
            LocalizableString.fromMessageId("server.customUI.triggerVolumeEffectEditor.addTarget.rejectionEffects"),
            TriggerVolumeInspectorPage.EffectListKind.REJECTION_EFFECT.name()
         )
      );
      var2.add(
         new DropdownEntryInfo(
            LocalizableString.fromMessageId("server.customUI.triggerVolumeEffectEditor.addTarget.alwaysActive"),
            TriggerVolumeInspectorPage.EffectListKind.RULE.name()
         )
      );
      var1.set("#AddTargetDropdown.Entries", var2);
      var1.set("#AddTargetDropdown.Value", this.addTargetKind.name());
   }

   class="kw">private boolean isAddingRule() {
      class="kw">return this.addTargetKind == TriggerVolumeInspectorPage.EffectListKind.RULE;
   }

   class="kw">private void enterRuleAddMode() {
      if (this.addTargetKind != TriggerVolumeInspectorPage.EffectListKind.RULE) {
         this.lastRegularTargetKind = this.addTargetKind;
         this.addTargetKind = TriggerVolumeInspectorPage.EffectListKind.RULE;
      }
   }

   class="kw">private void leaveRuleAddMode() {
      if (this.addTargetKind == TriggerVolumeInspectorPage.EffectListKind.RULE) {
         this.addTargetKind = this.lastRegularTargetKind;
      }
   }

   class="kw">private void buildEffectList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      this.appendEffectList(var1, var2, "#EffectListContainer");
      Object var3 = this.getSelectedItem();
      var1.set("#DuplicateEffectButton.Disabled", var3 == null);
      var1.set("#RemoveEffectButton.Disabled", var3 == null);
      var1.set("#MoveEffectUpButton.Disabled", var3 == null || this.selectedEffectIndex <= 0);
      var1.set("#MoveEffectDownButton.Disabled", var3 == null || this.selectedEffectIndex >= this.getItemCount(this.selectedKind) - 1);
   }

   class="kw">private void appendEffectList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3) {
      var1.clear(var3);
      int var4 = 0;
      var4 = this.appendInheritedGroupSections(var1, var2, var3, var4);
      var4 = this.appendVolumeEffectsSection(var1, var3, var4, var4 > 0 || this.selectedIsGroup);
      var4 = this.appendRulesCategory(var1, var2, var3, var4, TriggerVolumeInspectorPage.EventCategoryScope.VOLUME, null);
      this.appendEventCategoryGroups(var1, var2, var3, var4, TriggerVolumeInspectorPage.EventCategoryScope.VOLUME, null);
   }

   @Nonnull
   class="kw">private Message effectSectionLabel(@Nonnull TriggerVolumeInspectorPage.EffectListKind var1, boolean var2) {
      String var3 = class="kw">switch (var1) {
         case CONDITION -> "conditions";
         case EFFECT -> "successEffects";
         case REJECTION_EFFECT -> "rejectionEffects";
         case RULE -> "alwaysActiveRules";
      };
      String var4 = var2 ? "group" : "volume";
      class="kw">return Message.translation("server.customUI.triggerVolumeEffectEditor." + var4 + "." + var3);
   }

   @Nonnull
   class="kw">private Message effectRowLabel(int var1, @Nonnull String var2, boolean var3) {
      class="kw">return Message.raw(var1 + ". ").insert(this.typeMessage(var2, var3));
   }

   @Nonnull
   class="kw">private Message typeMessage(@Nonnull String var1, boolean var2) {
      String var3 = typeLangKey(var1, var2);
      class="kw">return messageExists(var3) ? Message.translation(var3) : Message.raw(humanizeTypeId(var1));
   }

   @Nonnull
   class="kw">private LocalizableString typeDropdownLabel(@Nonnull String var1, boolean var2) {
      String var3 = typeLangKey(var1, var2);
      class="kw">return messageExists(var3) ? LocalizableString.fromMessageId(var3) : LocalizableString.fromString(humanizeTypeId(var1));
   }

   @Nonnull
   class="kw">private class="kw">static String typeLangKey(@Nonnull String var0, boolean var1) {
      class="kw">return "server.customUI.triggerVolumeEffectEditor." + (var1 ? "conditionType." : "effectType.") + var0;
   }

   @Nonnull
   class="kw">private Message ruleRowLabel(int var1, @Nonnull String var2, boolean var3) {
      Message var4 = Message.raw(var1 + ". ").insert(this.ruleTypeMessage(var2));
      if (!var3) {
         var4 = var4.insert(Message.raw(" ")).insert(Message.translation("server.customUI.triggerVolumeEffectEditor.ruleDisabledSuffix"));
      }

      class="kw">return var4;
   }

   @Nonnull
   class="kw">private Message ruleTypeMessage(@Nonnull String var1) {
      String var2 = ruleTypeLangKey(var1);
      class="kw">return messageExists(var2) ? Message.translation(var2) : Message.raw(humanizeTypeId(var1));
   }

   @Nonnull
   class="kw">private LocalizableString ruleDropdownLabel(@Nonnull String var1) {
      String var2 = ruleTypeLangKey(var1);
      class="kw">return messageExists(var2) ? LocalizableString.fromMessageId(var2) : LocalizableString.fromString(humanizeTypeId(var1));
   }

   @Nonnull
   class="kw">private class="kw">static String ruleTypeLangKey(@Nonnull String var0) {
      class="kw">return "server.customUI.triggerVolumeEffectEditor.ruleType." + var0;
   }

   class="kw">private int appendInheritedGroupSections(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, int var4) {
      TriggerVolumeInspectorDrafts.GroupDraft var5 = this.selectedInheritedGroupDraft();
      if (var5 != null && (!var5.conditions.isEmpty() || !var5.rejectionEffects.isEmpty() || !var5.effects.isEmpty() || !var5.rules.isEmpty())) {
         var1.append(var3, "Pages/TriggerVolume/TriggerVolumeInspectorEffectOwnerSectionLabel.ui");
         var1.set(var3 + "[" + var4 + "].Text", Message.translation("server.customUI.triggerVolumeEffectEditor.inheritedFromGroup").param("group", var5.id));
         var4 = this.appendRulesCategory(var1, var2, var3, ++var4, TriggerVolumeInspectorPage.EventCategoryScope.GROUP, var5);
         class="kw">return this.appendEventCategoryGroups(var1, var2, var3, var4, TriggerVolumeInspectorPage.EventCategoryScope.GROUP, var5);
      } else {
         class="kw">return var4;
      }
   }

   class="kw">private int appendVolumeEffectsSection(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, boolean var4) {
      if (this.currentConditions().isEmpty()
         && this.currentEffects(TriggerVolumeInspectorPage.EffectListKind.REJECTION_EFFECT).isEmpty()
         && this.currentEffects(TriggerVolumeInspectorPage.EffectListKind.EFFECT).isEmpty()
         && this.currentRules().isEmpty()) {
         class="kw">return var3;
      }

      if (!var4) {
         class="kw">return var3;
      }

      if (var3 > 0 && !this.selectedIsGroup) {
         var3 = this.appendEventCategorySpacer(var1, var2, var3);
      }

      var1.append(var2, "Pages/TriggerVolume/TriggerVolumeInspectorEffectOwnerSectionLabel.ui");
      Message var5 = this.selectedIsGroup
         ? Message.translation("server.customUI.triggerVolumeEffectEditor.groupEffects")
         : Message.translation("server.customUI.triggerVolumeEffectEditor.volumeEffects");
      var1.set(var2 + "[" + var3 + "].Text", var5);
      class="kw">return var3 + 1;
   }

   class="kw">private int appendEventCategoryGroups(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      @Nonnull String var3,
      int var4,
      @Nonnull TriggerVolumeInspectorPage.EventCategoryScope var5,
      @Nullable TriggerVolumeInspectorDrafts.GroupDraft var6
   ) {
      for (TriggerEventType var8 : TriggerEventType.values()) {
         for (int var12 : this.getEventEntries(var5, var6, var8)) {
            int var13 = this.getEventCategoryItemCount(var5, var6, var8, var12);
            if (var13 != 0) {
               var4 = this.appendEventCategoryHeader(var1, var2, var3, var4, var5, var8, var12, var13);
               if (!this.isEventCategoryCollapsed(var5, var8, var12)) {
                  var4 = this.appendEventSection(var1, var2, var3, var4, var5, var6, var8, var12, TriggerVolumeInspectorPage.EffectListKind.CONDITION);
                  var4 = this.appendEventSection(var1, var2, var3, var4, var5, var6, var8, var12, TriggerVolumeInspectorPage.EffectListKind.REJECTION_EFFECT);
                  var4 = this.appendEventSection(var1, var2, var3, var4, var5, var6, var8, var12, TriggerVolumeInspectorPage.EffectListKind.EFFECT);
                  var4 = this.appendEventCategorySpacer(var1, var3, var4);
               }
            }
         }
      }

      class="kw">return var4;
   }

   class="kw">private int appendRulesCategory(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      @Nonnull String var3,
      int var4,
      @Nonnull TriggerVolumeInspectorPage.EventCategoryScope var5,
      @Nullable TriggerVolumeInspectorDrafts.GroupDraft var6
   ) {
      if (var5 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP && var6 == null) {
         class="kw">return var4;
      }

      List var7 = var5 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP ? var6.rules : this.currentRules();
      if (var7.isEmpty()) {
         class="kw">return var4;
      }

      boolean var8 = var5 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP ? !this.groupRulesExpanded : this.volumeRulesCollapsed;
      String var9 = var3 + "[" + var4 + "]";
      Message var10 = Message.translation("server.customUI.triggerVolumeEffectEditor.eventCategory.ALWAYS_ACTIVE");
      if (var5 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP) {
         var10 = var10.insert(Message.translation("server.customUI.triggerVolumeEffectEditor.eventCategoryInheritedSuffix"));
      }

      var1.append(var3, "Pages/TriggerVolume/TriggerVolumeInspectorEventCategoryHeader.ui");
      var1.set(var9 + ".TextSpans", var10.param("state", var8 ? ">" : "v").param("count", var7.size()));
      var2.addEventBinding(
         CustomUIEventBindingType.Activating,
         var9,
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.ToggleRulesCategory.name()).append("EventCategoryScope", var5.name())
      );
      var4++;
      if (var8) {
         class="kw">return var4;
      }

      var1.append(var3, "Pages/TriggerVolume/TriggerVolumeInspectorEventSectionLabel.ui");
      var1.set(
         var3 + "[" + var4 + "] #Label.Text",
         this.effectSectionLabel(TriggerVolumeInspectorPage.EffectListKind.RULE, var5 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP)
      );
      var4++;

      for (int var11 = 0; var11 < var7.size(); var11++) {
         String var12 = var3 + "[" + var4 + "]";
         Message var13 = this.ruleRowLabel(var11 + 1, getRuleTypeId(var7.get(var11)), var7.get(var11).isEnabled());
         var1.append(var3, "Pages/TriggerVolume/TriggerVolumeInspectorEffectRow.ui");
         var1.set(var12 + " #Label.TextSpans", var13);
         if (var5 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP) {
            var1.set(var12 + ".Style", INHERITED_EFFECT_ROW_STYLE);
            var1.set(var12 + " #Label.Style", INHERITED_EFFECT_LABEL_STYLE);
         } else {
            boolean var14 = this.selectedKind == TriggerVolumeInspectorPage.EffectListKind.RULE && var11 == this.selectedEffectIndex;
            var1.set(var12 + ".Style", var14 ? SELECTED_EFFECT_ROW_STYLE : NORMAL_EFFECT_ROW_STYLE);
            var1.set(var12 + " #Label.Style", var14 ? SELECTED_EFFECT_LABEL_STYLE : NORMAL_EFFECT_LABEL_STYLE);
            var2.addEventBinding(
               CustomUIEventBindingType.Activating,
               var12,
               new EventData()
                  .append("Action", TriggerVolumeInspectorPage.Action.SelectEffect.name())
                  .append("EffectListKind", TriggerVolumeInspectorPage.EffectListKind.RULE.name())
                  .append("EffectIndex", String.valueOf(var11))
            );
         }

         var4++;
      }

      class="kw">return this.appendEventCategorySpacer(var1, var3, var4);
   }

   class="kw">private void onToggleRulesCategory(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.eventCategoryScope != null) {
         try {
            TriggerVolumeInspectorPage.EventCategoryScope var2 = TriggerVolumeInspectorPage.EventCategoryScope.valueOf(var1.eventCategoryScope);
            if (var2 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP) {
               this.groupRulesExpanded = !this.groupRulesExpanded;
            } else {
               this.volumeRulesCollapsed = !this.volumeRulesCollapsed;
            }

            this.rebuildAll();
         } catch (IllegalArgumentException var3) {
         }
      }
   }

   class="kw">private void onToggleRejectionSignal() {
      this.rejectionSignalExpanded = !this.rejectionSignalExpanded;
      this.rebuildAll();
   }

   class="kw">private int appendEventCategoryHeader(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      @Nonnull String var3,
      int var4,
      @Nonnull TriggerVolumeInspectorPage.EventCategoryScope var5,
      @Nonnull TriggerEventType var6,
      int var7,
      int var8
   ) {
      String var9 = var3 + "[" + var4 + "]";
      String var10 = this.isEventCategoryCollapsed(var5, var6, var7) ? ">" : "v";
      var1.append(var3, "Pages/TriggerVolume/TriggerVolumeInspectorEventCategoryHeader.ui");
      var1.set(var9 + ".TextSpans", eventCategoryLabel(var5, var6, var7).param("state", var10).param("count", var8));
      var2.addEventBinding(
         CustomUIEventBindingType.Activating,
         var9,
         new EventData()
            .append("Action", TriggerVolumeInspectorPage.Action.ToggleEventCategory.name())
            .append("EventType", var6.name())
            .append("EventEntry", String.valueOf(var7))
            .append("EventCategoryScope", var5.name())
      );
      class="kw">return var4 + 1;
   }

   class="kw">private int appendEventSection(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      @Nonnull String var3,
      int var4,
      @Nonnull TriggerVolumeInspectorPage.EventCategoryScope var5,
      @Nullable TriggerVolumeInspectorDrafts.GroupDraft var6,
      @Nonnull TriggerEventType var7,
      int var8,
      @Nonnull TriggerVolumeInspectorPage.EffectListKind var9
   ) {
      IntList var10 = this.getEventItemIndices(var5, var6, var7, var8, var9);
      if (var10.isEmpty()) {
         class="kw">return var4;
      }

      var1.append(var3, "Pages/TriggerVolume/TriggerVolumeInspectorEventSectionLabel.ui");
      var1.set(var3 + "[" + var4 + "] #Label.Text", this.effectSectionLabel(var9, var5 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP));
      var4++;

      for (int var11 = 0; var11 < var10.size(); var11++) {
         int var12 = var10.getInt(var11);
         String var13 = var3 + "[" + var4 + "]";
         String var14 = var5 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP ? getGroupItemTypeId(var9, var12, var6) : this.getItemTypeId(var9, var12);
         Message var15 = this.effectRowLabel(var11 + 1, var14, var9 == TriggerVolumeInspectorPage.EffectListKind.CONDITION);
         var1.append(var3, "Pages/TriggerVolume/TriggerVolumeInspectorEffectRow.ui");
         var1.set(var13 + " #Label.TextSpans", var15);
         if (var5 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP) {
            var1.set(var13 + ".Style", INHERITED_EFFECT_ROW_STYLE);
            var1.set(var13 + " #Label.Style", INHERITED_EFFECT_LABEL_STYLE);
         } else {
            boolean var16 = var9 == this.selectedKind && var12 == this.selectedEffectIndex;
            var1.set(var13 + ".Style", var16 ? SELECTED_EFFECT_ROW_STYLE : NORMAL_EFFECT_ROW_STYLE);
            var1.set(var13 + " #Label.Style", var16 ? SELECTED_EFFECT_LABEL_STYLE : NORMAL_EFFECT_LABEL_STYLE);
            var2.addEventBinding(
               CustomUIEventBindingType.Activating,
               var13,
               new EventData()
                  .append("Action", TriggerVolumeInspectorPage.Action.SelectEffect.name())
                  .append("EffectListKind", var9.name())
                  .append("EffectIndex", String.valueOf(var12))
            );
         }

         var4++;
      }

      class="kw">return var4;
   }

   class="kw">private int appendEventCategorySpacer(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3) {
      var1.append(var2, "Pages/TriggerVolume/TriggerVolumeInspectorEventCategorySpacer.ui");
      class="kw">return var3 + 1;
   }

   @Nonnull
   class="kw">private class="kw">static Message eventCategoryLabel(@Nonnull TriggerVolumeInspectorPage.EventCategoryScope var0, @Nonnull TriggerEventType var1, int var2) {
      Message var3 = Message.translation("server.customUI.triggerVolumeEffectEditor.eventCategory." + var1.name());
      if (var2 > 0) {
         var3 = var3.insert(Message.translation("server.customUI.triggerVolumeEffectEditor.eventCategoryEntrySuffix").param("entry", String.valueOf(var2 + 1)));
      }

      class="kw">return var0 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP
         ? var3.insert(Message.translation("server.customUI.triggerVolumeEffectEditor.eventCategoryInheritedSuffix"))
         : var3;
   }

   @Nonnull
   class="kw">private int[] getEventEntries(
      @Nonnull TriggerVolumeInspectorPage.EventCategoryScope var1, @Nullable TriggerVolumeInspectorDrafts.GroupDraft var2, @Nonnull TriggerEventType var3
   ) {
      if (var1 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP && var2 == null) {
         class="kw">return EMPTY_ENTRIES;
      }

      IntOpenHashSet var4 = new IntOpenHashSet();

      for (TriggerVolumeInspectorPage.EffectListKind var8 : TriggerVolumeInspectorPage.EffectListKind.values()) {
         if (var8 != TriggerVolumeInspectorPage.EffectListKind.RULE) {
            int var9 = var1 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP ? getGroupItemCount(var8, var2) : this.getItemCount(var8);

            for (int var10 = 0; var10 < var9; var10++) {
               TriggerEventType var11 = var1 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP
                  ? getGroupItemEventType(var8, var10, var2)
                  : this.getItemEventType(var8, var10);
               if (normalizeEventType(var11) == var3) {
                  var4.add(var1 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP ? getGroupItemEntry(var8, var10, var2) : this.getItemEntry(var8, var10));
               }
            }
         }
      }

      int[] var12 = var4.toIntArray();
      Arrays.sort(var12);
      class="kw">return var12;
   }

   class="kw">private int getEventCategoryItemCount(
      @Nonnull TriggerVolumeInspectorPage.EventCategoryScope var1,
      @Nullable TriggerVolumeInspectorDrafts.GroupDraft var2,
      @Nonnull TriggerEventType var3,
      int var4
   ) {
      int var5 = 0;

      for (TriggerVolumeInspectorPage.EffectListKind var9 : TriggerVolumeInspectorPage.EffectListKind.values()) {
         if (var9 != TriggerVolumeInspectorPage.EffectListKind.RULE) {
            var5 += this.getEventItemIndices(var1, var2, var3, var4, var9).size();
         }
      }

      class="kw">return var5;
   }

   @Nonnull
   class="kw">private IntList getEventItemIndices(
      @Nonnull TriggerVolumeInspectorPage.EventCategoryScope var1,
      @Nullable TriggerVolumeInspectorDrafts.GroupDraft var2,
      @Nonnull TriggerEventType var3,
      int var4,
      @Nonnull TriggerVolumeInspectorPage.EffectListKind var5
   ) {
      IntArrayList var6 = new IntArrayList();
      if (var1 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP && var2 == null) {
         class="kw">return var6;
      }

      int var7 = var1 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP ? getGroupItemCount(var5, var2) : this.getItemCount(var5);

      for (int var8 = 0; var8 < var7; var8++) {
         TriggerEventType var9 = var1 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP
            ? getGroupItemEventType(var5, var8, var2)
            : this.getItemEventType(var5, var8);
         if (normalizeEventType(var9) == var3) {
            int var10 = var1 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP ? getGroupItemEntry(var5, var8, var2) : this.getItemEntry(var5, var8);
            if (var10 == var4) {
               var6.add(var8);
            }
         }
      }

      class="kw">return var6;
   }

   class="kw">private boolean isEventCategoryCollapsed(@Nonnull TriggerVolumeInspectorPage.EventCategoryScope var1, @Nonnull TriggerEventType var2, int var3) {
      TriggerVolumeInspectorPage.EventCategoryKey var4 = new TriggerVolumeInspectorPage.EventCategoryKey(var2, var3);
      class="kw">return var1 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP
         ? !this.expandedGroupEventCategories.contains(var4)
         : this.collapsedVolumeEventCategories.contains(var4);
   }

   class="kw">private void setEventCategoryExpanded(@Nonnull TriggerVolumeInspectorPage.EventCategoryScope var1, @Nonnull TriggerEventType var2, int var3) {
      TriggerVolumeInspectorPage.EventCategoryKey var4 = new TriggerVolumeInspectorPage.EventCategoryKey(var2, var3);
      if (var1 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP) {
         this.expandedGroupEventCategories.add(var4);
      } else {
         this.collapsedVolumeEventCategories.remove(var4);
      }
   }

   class="kw">private void toggleEventCategory(@Nonnull TriggerVolumeInspectorPage.EventCategoryScope var1, @Nonnull TriggerEventType var2, int var3) {
      TriggerVolumeInspectorPage.EventCategoryKey var4 = new TriggerVolumeInspectorPage.EventCategoryKey(var2, var3);
      if (var1 == TriggerVolumeInspectorPage.EventCategoryScope.GROUP) {
         if (!this.expandedGroupEventCategories.remove(var4)) {
            this.expandedGroupEventCategories.add(var4);
         }
      } else if (!this.collapsedVolumeEventCategories.remove(var4)) {
         this.collapsedVolumeEventCategories.add(var4);
      }
   }

   @Nonnull
   class="kw">private class="kw">static TriggerEventType normalizeEventType(@Nullable TriggerEventType var0) {
      class="kw">return var0 != null ? var0 : TriggerEventType.ENTER;
   }

   class="kw">private void buildEffectDetailPanel(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      var1.clear("#EffectDetailPanel");
      Object var3 = this.getSelectedItem();
      if (var3 == null) {
         var1.set("#NoEffectSelectionLabel.Visible", true);
         var1.set("#EffectDetailPanel.Visible", false);
      } else {
         var1.set("#NoEffectSelectionLabel.Visible", false);
         var1.set("#EffectDetailPanel.Visible", true);
         int var4 = 0;
         if (var3 class="kw">instanceof TriggerRule var23) {
            String var25 = getRuleTypeId(var23);
            var4 = this.addEffectFieldRow(var1, var2, var4, var25, "Enabled", Codec.BOOLEAN, new BsonBoolean(var23.isEnabled()));
            BuilderCodec var27 = getRuleBuilderCodecFor(var25);
            if (var27 != null) {
               BsonDocument var29 = encodeRule(var27, var23);
               boolean var31 = var23 class="kw">instanceof AbstractDenyRule;

               for (Entry var37 : var27.getEntries().entrySet()) {
                  String var39 = var37.getKey();
                  if (!"Enabled".equals(var39) && !var37.getValue().isEmpty() && (!var31 || !DENY_SIGNAL_FIELD_KEY_SET.contains(var39))) {
                     BuilderField var42 = var37.getValue().getLast();
                     var4 = this.addEffectFieldRow(var1, var2, var4, var25, var39, var42.getCodec().getChildCodec(), var29.get(var39));
                  }
               }

               if (var23 class="kw">instanceof AbstractDenyRule var34) {
                  var4 = this.appendRejectionSignalSection(var1, var2, var4, var25, var27, var29, var34);
               }
            }
         } else if (var3 class="kw">instanceof ModifyRulesEffect var22) {
            this.buildModifyRulesEffectDetailPanel(var1, var2, var22);
         } else if (var3 class="kw">instanceof TriggerCondition var21) {
            String var24 = getConditionTypeId(var21);
            String var26 = var21.getEventType() != null ? var21.getEventType().name() : TriggerEventType.ENTER.name();
            var4 = this.appendBaseFieldHeader(var1, var2, var4, true, var26, String.valueOf(var21.getEntry() + 1), "0", "0");
            BuilderCodec var28 = getConditionBuilderCodecFor(var24);
            if (var28 != null) {
               BsonDocument var30 = encodeCondition(var28, var21);
               Map var32 = var28.getEntries();
               boolean var36 = var32.containsKey("RotationX") && var32.containsKey("RotationY") && var32.containsKey("RotationZ");
               TagCondition.Source var38 = var21 class="kw">instanceof TagCondition var40 ? var40.getSource() : null;

               for (Entry var43 : var32.entrySet()) {
                  String var15 = var43.getKey();
                  if (!"Event".equals(var15)
                     && !"Entry".equals(var15)
                     && !var43.getValue().isEmpty()
                     && (var38 == null || !isTagConditionFieldHidden(var15, var38))) {
                     if (var36 && ("RotationX".equals(var15) || "RotationY".equals(var15) || "RotationZ".equals(var15))) {
                        if ("RotationX".equals(var15)) {
                           var4 = this.addRotationXyzRow(
                              var1,
                              var2,
                              var4,
                              var24,
                              enumValueOrDefault(var30, "RotationX"),
                              enumValueOrDefault(var30, "RotationY"),
                              enumValueOrDefault(var30, "RotationZ")
                           );
                        }
                     } else {
                        BuilderField var16 = var43.getValue().getLast();
                        var4 = this.addEffectFieldRow(var1, var2, var4, var24, var15, var16.getCodec().getChildCodec(), var30.get(var15));
                     }
                  }
               }
            }
         } else {
            TriggerEffect var5 = (TriggerEffect)var3;
            String var6 = getTypeId(var5);
            String var7 = var5.getEventType() != null ? var5.getEventType().name() : TriggerEventType.ENTER.name();
            var4 = this.appendBaseFieldHeader(
               var1, var2, var4, false, var7, String.valueOf(var5.getEntry() + 1), String.valueOf(var5.getDelay()), String.valueOf(var5.getInterval())
            );
            BuilderCodec var8 = getBuilderCodecFor(var6);
            if (var8 != null) {
               BsonDocument var9 = encodeEffect(var8, var5);
               RemoveEntitiesEffect.Mode var10 = var5 class="kw">instanceof RemoveEntitiesEffect var11 ? var11.getMode() : null;

               for (Entry var12 : var8.getEntries().entrySet()) {
                  String var13 = var12.getKey();
                  if (!"Event".equals(var13)
                     && !"Interval".equals(var13)
                     && !"Delay".equals(var13)
                     && !"Entry".equals(var13)
                     && !var12.getValue().isEmpty()
                     && (var10 != RemoveEntitiesEffect.Mode.REMOVE || !"IncludePlayers".equals(var13) && !"IgnoreInvulnerability".equals(var13))) {
                     BuilderField var14 = var12.getValue().getLast();
                     var4 = this.addEffectFieldRow(var1, var2, var4, var6, var13, var14.getCodec().getChildCodec(), var9.get(var13));
                  }
               }
            }

            if (var5 class="kw">instanceof PastePrefabEffect) {
               this.addPastePrefabPreviewButtonRow(var1, var2, var4);
            }
         }
      }
   }

   class="kw">private void buildModifyRulesEffectDetailPanel(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull ModifyRulesEffect var3) {
      String var4 = getTypeId(var3);
      String var5 = var3.getEventType() != null ? var3.getEventType().name() : TriggerEventType.ENTER.name();
      int var6 = this.appendBaseFieldHeader(
         var1, var2, 0, false, var5, String.valueOf(var3.getEntry() + 1), String.valueOf(var3.getDelay()), String.valueOf(var3.getInterval())
      );
      BuilderCodec var7 = getBuilderCodecFor(var4);
      BsonDocument var8 = var7 != null ? encodeEffect(var7, var3) : new BsonDocument();
      ModifyRulesEffect.Operation var9 = var3.getOperation();
      var6 = this.addEffectFieldByKey(var1, var2, var6, var4, var7, var8, "Operation");
      if (var9 == ModifyRulesEffect.Operation.SET_RULES_ACTIVE) {
         var6 = this.addEffectFieldByKey(var1, var2, var6, var4, var7, var8, "Active");
         TriggerRule var10 = var3.getRule();
         var6 = this.addRuleTypeDropdownRow(var1, var2, var6, var10 != null ? getRuleTypeId(var10) : "", true);
      } else {
         TriggerRule var21 = var3.getRule();
         String var11 = var21 != null ? getRuleTypeId(var21) : "";
         var6 = this.addRuleTypeDropdownRow(var1, var2, var6, var11, false);
         BuilderCodec var12 = var21 != null ? getRuleBuilderCodecFor(var11) : null;
         if (var9 == ModifyRulesEffect.Operation.SET_FIELD) {
            String var13 = var3.getFieldKey();
            var6 = this.addRuleFieldDropdownRow(var1, var2, var6, var11, var12, var13);
            if (var12 != null && var13 != null && !var13.isBlank()) {
               List var14 = var12.getEntries().get(var13);
               if (var14 != null && !var14.isEmpty()) {
                  BuilderField var15 = var14.getLast();
                  BsonDocument var16 = encodeRule(var12, var21);
                  var6 = this.addEffectFieldRow(var1, var2, var6, var11, var13, var15.getCodec().getChildCodec(), var16.get(var13));
               }
            }
         } else if ((var9 == ModifyRulesEffect.Operation.SET || var9 == ModifyRulesEffect.Operation.APPEND) && var12 != null) {
            BsonDocument var24 = encodeRule(var12, var21);

            for (Entry var26 : var12.getEntries().entrySet()) {
               String var27 = var26.getKey();
               if (!var26.getValue().isEmpty()) {
                  Codec var17 = var26.getValue().getLast().getCodec().getChildCodec();
                  if (var9 != ModifyRulesEffect.Operation.APPEND || isAppendableFieldCodec(var17)) {
                     var6 = this.addEffectFieldRow(var1, var2, var6, var11, var27, var17, var24.get(var27));
                  }
               }
            }
         }
      }

      for (String var23 : List.of("MatchKey", "MatchValue", "Radius", "Center")) {
         var6 = this.addEffectFieldByKey(var1, var2, var6, var4, var7, var8, var23);
      }
   }

   class="kw">private class="kw">static boolean isTagConditionFieldHidden(@Nonnull String var0, @Nonnull TagCondition.Source var1) {
      if (TAG_CONDITION_RADIUS_ONLY_KEYS.contains(var0)) {
         class="kw">return var1 != TagCondition.Source.RADIUS;
      } else {
         class="kw">return !"MinimumCount".equals(var0) ? false : var1 != TagCondition.Source.GROUP && var1 != TagCondition.Source.RADIUS;
      }
   }

   class="kw">private int appendRejectionSignalSection(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      int var3,
      @Nonnull String var4,
      @Nonnull BuilderCodec<TriggerRule> var5,
      @Nonnull BsonDocument var6,
      @Nonnull AbstractDenyRule var7
   ) {
      String var8 = "#EffectDetailPanel[" + var3 + "]";
      String var9 = this.rejectionSignalExpanded ? "v" : ">";
      var1.append("#EffectDetailPanel", "Pages/TriggerVolume/TriggerVolumeInspectorEventCategoryHeader.ui");
      var1.set(var8 + ".TextSpans", Message.translation("server.customUI.triggerVolumeEffectEditor.rejectionSignalSection").param("state", var9));
      var2.addEventBinding(
         CustomUIEventBindingType.Activating, var8, new EventData().append("Action", TriggerVolumeInspectorPage.Action.ToggleRejectionSignal.name())
      );
      var3++;
      if (!this.rejectionSignalExpanded) {
         class="kw">return var3;
      }

      boolean var10 = var7.getTarget() == AbstractDenyRule.DenySignalTarget.SELF;

      for (String var12 : DENY_SIGNAL_FIELD_KEYS) {
         if (!var10 || !DENY_SIGNAL_OTHER_ONLY_KEYS.contains(var12)) {
            List var13 = var5.getEntries().get(var12);
            if (var13 != null && !var13.isEmpty()) {
               BuilderField var14 = var13.getLast();
               var3 = this.addEffectFieldRow(var1, var2, var3, var4, var12, var14.getCodec().getChildCodec(), var6.get(var12));
            }
         }
      }

      class="kw">return var3;
   }

   class="kw">private int addEffectFieldByKey(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      int var3,
      @Nonnull String var4,
      @Nullable BuilderCodec<TriggerEffect> var5,
      @Nonnull BsonDocument var6,
      @Nonnull String var7
   ) {
      if (var5 == null) {
         class="kw">return var3;
      } else {
         List var8 = var5.getEntries().get(var7);
         if (var8 != null && !var8.isEmpty()) {
            BuilderField var9 = var8.getLast();
            class="kw">return this.addEffectFieldRow(var1, var2, var3, var4, var7, var9.getCodec().getChildCodec(), var6.get(var7));
         } else {
            class="kw">return var3;
         }
      }
   }

   class="kw">private int addRuleTypeDropdownRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, boolean var5) {
      String var6 = "#EffectDetailPanel[" + var3 + "]";
      var1.append("#EffectDetailPanel", "Pages/TriggerVolume/TriggerVolumeInspectorDropdownRow.ui");
      var1.set(var6 + " #Label.Text", fieldLabel("ModifyRules", "RuleType"));
      setEffectFieldTooltip(var1, var6, "ModifyRules", "RuleType");
      ObjectArrayList var7 = new ObjectArrayList();
      if (var5) {
         var7.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.triggerVolumeEffectEditor.field.ModifyRules.RuleType.all"), "", null));
      }

      for (String var9 : getSortedRuleTypeIds()) {
         var7.add(new DropdownEntryInfo(this.ruleDropdownLabel(var9), var9, null));
      }

      var1.set(var6 + " #Input.Entries", var7);
      var1.set(var6 + " #Input.Value", var4);
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var6 + " #Input", paramEvent("RuleType", var6 + " #Input.Value"), false);
      class="kw">return var3 + 1;
   }

   class="kw">private int addRuleFieldDropdownRow(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      int var3,
      @Nonnull String var4,
      @Nullable BuilderCodec<TriggerRule> var5,
      @Nullable String var6
   ) {
      String var7 = "#EffectDetailPanel[" + var3 + "]";
      var1.append("#EffectDetailPanel", "Pages/TriggerVolume/TriggerVolumeInspectorDropdownRow.ui");
      var1.set(var7 + " #Label.Text", fieldLabel("ModifyRules", "RuleField"));
      setEffectFieldTooltip(var1, var7, "ModifyRules", "RuleField");
      ObjectArrayList var8 = new ObjectArrayList();
      if (var5 != null) {
         for (Entry var10 : var5.getEntries().entrySet()) {
            String var11 = var10.getKey();
            if (!var10.getValue().isEmpty() && !"Enabled".equals(var11)) {
               var8.add(new DropdownEntryInfo(this.fieldDropdownLabel(var4, var11), var11, null));
            }
         }
      }

      var1.set(var7 + " #Input.Entries", var8);
      var1.set(var7 + " #Input.Value", var6 != null ? var6 : "");
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var7 + " #Input", paramEvent("RuleField", var7 + " #Input.Value"), false);
      class="kw">return var3 + 1;
   }

   @Nonnull
   class="kw">private LocalizableString fieldDropdownLabel(@Nonnull String var1, @Nonnull String var2) {
      String var3 = "server.customUI.triggerVolumeEffectEditor.field." + var1 + "." + var2;
      if (messageExists(var3)) {
         class="kw">return LocalizableString.fromMessageId(var3);
      }

      String var4 = "server.customUI.triggerVolumeEffectEditor.field.common." + var2;
      class="kw">return messageExists(var4) ? LocalizableString.fromMessageId(var4) : LocalizableString.fromString(var2);
   }

   class="kw">private int appendBaseFieldHeader(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      int var3,
      boolean var4,
      @Nonnull String var5,
      @Nonnull String var6,
      @Nonnull String var7,
      @Nonnull String var8
   ) {
      String var9 = "#EffectDetailPanel[" + var3 + "]";
      var1.append("#EffectDetailPanel", "Pages/TriggerVolume/TriggerVolumeInspectorBaseHeaderGrid.ui");
      String var10 = var9 + " #EventCell";
      var1.set(var10 + " #Label.Text", Message.translation("server.customUI.triggerVolumeEffectEditor.baseField.event"));
      var1.set(var10 + " #Label.TooltipText", Message.translation("server.customUI.triggerVolumeEffectEditor.baseField.event.tooltip"));
      ObjectArrayList var11 = new ObjectArrayList();

      for (TriggerEventType var13 : TriggerEventType.values()) {
         String var14 = var13.name();
         var11.add(new DropdownEntryInfo(this.optionLabel("baseField", "Event", var14), var14, this.optionTooltip("baseField", "Event", var14)));
      }

      var1.set(var10 + " #Input.Entries", var11);
      var1.set(var10 + " #Input.Value", var5);
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var10 + " #Input", paramEvent("Event", var10 + " #Input.Value"), false);
      this.setBaseNumberCell(var1, var2, var9 + " #EntryCell", "Entry", "baseField.entry", var6);
      var2.addEventBinding(
         CustomUIEventBindingType.FocusLost,
         var9 + " #EntryCell #Input",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.CommitEntry.name()),
         false
      );
      var2.addEventBinding(
         CustomUIEventBindingType.Validating,
         var9 + " #EntryCell #Input",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.CommitEntry.name()),
         false
      );
      if (var4) {
         var1.set(var9 + " #SecondRow.Visible", false);
      } else {
         this.setBaseNumberCell(var1, var2, var9 + " #DelayCell", "Delay", "effectDelay", var7);
         this.setBaseNumberCell(var1, var2, var9 + " #IntervalCell", "Interval", "baseField.interval", var8);
      }

      class="kw">return var3 + 1;
   }

   class="kw">private void setBaseNumberCell(
      @Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, @Nonnull String var4, @Nonnull String var5, @Nonnull String var6
   ) {
      var1.set(var3 + " #Label.Text", Message.translation("server.customUI.triggerVolumeEffectEditor." + var5));
      var1.set(var3 + " #Label.TooltipText", Message.translation("server.customUI.triggerVolumeEffectEditor." + var5 + ".tooltip"));

      double var7;
      try {
         var7 = Double.parseDouble(var6);
      } catch (NumberFormatException var10) {
         var7 = 0.0;
      }

      var1.set(var3 + " #Input.Value", var7);
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var3 + " #Input", numericParamEvent(var4, var3 + " #Input.Value"), false);
   }

   class="kw">private class="kw">static boolean isAppendableFieldCodec(@Nonnull Codec<?> var0) {
      class="kw">return var0 == Codec.STRING_ARRAY || var0 == Codec.FLOAT || var0 == Codec.DOUBLE || var0 == Codec.INTEGER || var0 == Codec.LONG;
   }

   class="kw">private int addEffectFieldRow(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      int var3,
      @Nonnull String var4,
      @Nonnull String var5,
      @Nonnull Codec<?> var6,
      @Nullable BsonValue var7
   ) {
      if (var6 == Codec.BOOLEAN) {
         boolean var25 = var7 class="kw">instanceof BsonBoolean var32 && var32.getValue();
         class="kw">return this.addEffectCheckboxRow(var1, var2, var3, var4, var5, var25);
      }

      if (var6 == Codec.FLOAT) {
         String var24 = var7 class="kw">instanceof BsonDouble var31 ? String.valueOf((float)var31.getValue()) : "0.0";
         class="kw">return this.addEffectNumberRow(var1, var2, var3, var4, var5, var24, 2);
      }

      if (var6 == Codec.DOUBLE) {
         String var23 = var7 class="kw">instanceof BsonDouble var30 ? String.valueOf(var30.getValue()) : "0.0";
         class="kw">return this.addEffectNumberRow(var1, var2, var3, var4, var5, var23, 2);
      }

      if (var6 == Codec.INTEGER) {
         String var22 = var7 class="kw">instanceof BsonInt32 var29 ? String.valueOf(var29.getValue()) : "0";
         class="kw">return this.addEffectNumberRow(var1, var2, var3, var4, var5, var22, 0);
      }

      if (var6 == Codec.LONG) {
         String var21 = var7 class="kw">instanceof BsonInt64 var28 ? String.valueOf(var28.getValue()) : "0";
         class="kw">return this.addEffectNumberRow(var1, var2, var3, var4, var5, var21, 0);
      }

      if (var6 == Vector3dUtil.CODEC) {
         double var20 = 0.0;
         double var33 = 0.0;
         double var13 = 0.0;
         if (var7 class="kw">instanceof BsonDocument var15) {
            var20 = var15.get("X", new BsonDouble(0.0)).asDouble().getValue();
            var33 = var15.get("Y", new BsonDouble(0.0)).asDouble().getValue();
            var13 = var15.get("Z", new BsonDouble(0.0)).asDouble().getValue();
         }

         class="kw">return this.addEffectVec3Row(var1, var2, var3, var4, var5, var20, var33, var13);
      } else if (!(var6 class="kw">instanceof EnumCodec var8)) {
         if (var6 == Codec.STRING) {
            String var19 = var7 class="kw">instanceof BsonString var27 ? var27.getValue() : "";
            class="kw">return getAssetSourceForField(var4, var5) != null
               ? this.addAssetPickerRow(var1, var2, var3, var4, var5, var19)
               : this.addEffectTextRow(var1, var2, var3, var4, var5, var19);
         } else if (var6 == Codec.STRING_ARRAY) {
            String var18 = var7 class="kw">instanceof BsonArray var26
               ? String.join(", ", var26.stream().filter(BsonString.class::isInstance).map(BsonString.class::cast).map(BsonString::getValue).toList())
               : "";
            class="kw">return getAssetSourceForField(var4, var5) != null
               ? this.addAssetPickerRow(var1, var2, var3, var4, var5, var18)
               : this.addEffectTextRow(var1, var2, var3, var4, var5, var18);
         } else {
            String var17 = var7 != null ? bsonValueToString(var7) : "";
            class="kw">return this.addEffectTextRow(var1, var2, var3, var4, var5, var17);
         }
      } else {
         String var9 = "";
         if (var7 != null) {
            try {
               Enum var10 = var8.decode(var7, ExtraInfo.THREAD_LOCAL.get());
               var9 = var8.getEnumKeys()[var10.ordinal()];
            } catch (Exception var16) {
               var9 = var7 class="kw">instanceof BsonString var11 ? var11.getValue() : "";
            }
         }

         class="kw">return this.addEffectDropdownRow(var1, var2, var3, var4, var5, List.of(var8.getEnumKeys()), var9);
      }
   }

   class="kw">private int addEffectTextRow(
      @Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, @Nonnull String var5, @Nonnull String var6
   ) {
      String var7 = "#EffectDetailPanel[" + var3 + "]";
      var1.append("#EffectDetailPanel", "Pages/TriggerVolume/TriggerVolumeInspectorTextRow.ui");
      var1.set(var7 + " #Label.Text", fieldLabel(var4, var5));
      setEffectFieldTooltip(var1, var7, var4, var5);
      setEffectFieldPlaceholder(var1, var7, var4, var5);
      var1.set(var7 + " #Input.Value", var6);
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var7 + " #Input", paramEvent(var5, var7 + " #Input.Value"), false);
      class="kw">return var3 + 1;
   }

   class="kw">private int addEffectNumberRow(
      @Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, @Nonnull String var5, @Nonnull String var6, int var7
   ) {
      class="kw">return this.addEffectNumberRow(var1, var2, var3, var4, var5, fieldLabel(var4, var5), null, var6, var7);
   }

   class="kw">private int addEffectNumberRow(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      int var3,
      @Nonnull String var4,
      @Nonnull String var5,
      @Nonnull Object var6,
      @Nullable Message var7,
      @Nonnull String var8,
      int var9
   ) {
      String var10 = "#EffectDetailPanel[" + var3 + "]";
      var1.append(
         "#EffectDetailPanel", var9 > 0 ? "Pages/TriggerVolume/TriggerVolumeInspectorNumberRow.ui" : "Pages/TriggerVolume/TriggerVolumeInspectorIntRow.ui"
      );
      if (var6 class="kw">instanceof Message var11) {
         var1.set(var10 + " #Label.Text", var11);
      } else {
         var1.set(var10 + " #Label.Text", var6.toString());
      }

      if (var7 != null) {
         var1.set(var10 + " #Label.TooltipText", var7);
      } else {
         setEffectFieldTooltip(var1, var10, var4, var5);
      }

      if (isNonNegativeNumericField(var4, var5)) {
         var1.set(var10 + " #Input.Format.MinValue", 0.0);
      }

      try {
         var1.set(var10 + " #Input.Value", Double.parseDouble(var8));
      } catch (NumberFormatException var12) {
         var1.set(var10 + " #Input.Value", 0.0);
      }

      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var10 + " #Input", numericParamEvent(var5, var10 + " #Input.Value"), false);
      class="kw">return var3 + 1;
   }

   class="kw">private int addEffectCheckboxRow(
      @Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, @Nonnull String var5, boolean var6
   ) {
      String var7 = "#EffectDetailPanel[" + var3 + "]";
      var1.append("#EffectDetailPanel", "Pages/TriggerVolume/TriggerVolumeInspectorCheckboxRow.ui");
      var1.set(var7 + " #Label.Text", fieldLabel(var4, var5));
      setEffectFieldTooltip(var1, var7, var4, var5);
      var1.set(var7 + " #Input.Value", var6);
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var7 + " #Input", boolParamEvent(var5, var7 + " #Input.Value"), false);
      class="kw">return var3 + 1;
   }

   class="kw">private int addEffectDropdownRow(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      int var3,
      @Nonnull String var4,
      @Nonnull String var5,
      @Nonnull List<String> var6,
      @Nonnull String var7
   ) {
      String var8 = "#EffectDetailPanel[" + var3 + "]";
      var1.append("#EffectDetailPanel", "Pages/TriggerVolume/TriggerVolumeInspectorDropdownRow.ui");
      var1.set(var8 + " #Label.Text", fieldLabel(var4, var5));
      setEffectFieldTooltip(var1, var8, var4, var5);
      ObjectArrayList var9 = new ObjectArrayList();

      for (String var11 : var6) {
         var9.add(new DropdownEntryInfo(this.optionLabel(var4, var5, var11), var11, this.optionTooltip(var4, var5, var11)));
      }

      var1.set(var8 + " #Input.Entries", var9);
      var1.set(var8 + " #Input.Value", var7);
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var8 + " #Input", paramEvent(var5, var8 + " #Input.Value"), false);
      class="kw">return var3 + 1;
   }

   @Nonnull
   class="kw">private LocalizableString optionLabel(@Nonnull String var1, @Nonnull String var2, @Nonnull String var3) {
      for (String var5 : optionLangKeys(var1, var2, var3, "")) {
         if (messageExists(var5)) {
            class="kw">return LocalizableString.fromMessageId(var5);
         }
      }

      this.logMissingOptionKey(optionLangKeys(var1, var2, var3, "").getFirst());
      class="kw">return LocalizableString.fromString(humanizeEnumValue(var3));
   }

   @Nullable
   class="kw">private LocalizableString optionTooltip(@Nonnull String var1, @Nonnull String var2, @Nonnull String var3) {
      for (String var5 : optionLangKeys(var1, var2, var3, ".tooltip")) {
         if (messageExists(var5)) {
            class="kw">return LocalizableString.fromMessageId(var5);
         }
      }

      class="kw">return null;
   }

   @Nonnull
   class="kw">private class="kw">static List<String> optionLangKeys(@Nonnull String var0, @Nonnull String var1, @Nonnull String var2, @Nonnull String var3) {
      String var4 = toUpperSnake(var2);
      String var5 = var2.toUpperCase(Locale.ROOT);
      ArrayList var6 = new ArrayList<>();
      appendOptionLangKeys(var6, "server.customUI.triggerVolumeEffectEditor.field." + var0 + "." + var1 + ".option.", var2, var4, var5, var3);
      appendOptionLangKeys(var6, "server.customUI.triggerVolumeEffectEditor.field.common." + var1 + ".option.", var2, var4, var5, var3);
      class="kw">return var6;
   }

   class="kw">private class="kw">static void appendOptionLangKeys(
      @Nonnull List<String> var0, @Nonnull String var1, @Nonnull String var2, @Nonnull String var3, @Nonnull String var4, @Nonnull String var5
   ) {
      var0.add(var1 + var2 + var5);
      if (!var3.equals(var2)) {
         var0.add(var1 + var3 + var5);
      }

      if (!var4.equals(var2) && !var4.equals(var3)) {
         var0.add(var1 + var4 + var5);
      }
   }

   class="kw">private class="kw">static boolean messageExists(@Nonnull String var0) {
      I18nModule var1 = I18nModule.get();
      class="kw">return var1 != null && var1.getMessage("en-US", var0) != null;
   }

   class="kw">private void logMissingOptionKey(@Nonnull String var1) {
      if (this.missingOptionLangKeys.add(var1)) {
         LOGGER.at(Level.FINE).log("Missing trigger volume dropdown option label '%s'", var1);
      }
   }

   @Nonnull
   class="kw">private class="kw">static String humanizeEnumValue(@Nonnull String var0) {
      String var1 = toUpperSnake(var0);
      if (var1.startsWith("PERCENT") && var1.length() > "PERCENT".length()) {
         var1 = "PERCENT_" + var1.substring("PERCENT".length());
      }

      String[] var2 = var1.toLowerCase(Locale.ROOT).split("_+", 0);
      StringBuilder var3 = new StringBuilder();

      for (String var7 : var2) {
         if (!var7.isEmpty()) {
            if (!var3.isEmpty()) {
               var3.append(' ');
            }

            var3.append(Character.toUpperCase(var7.charAt(0))).append(var7.substring(1));
         }
      }

      class="kw">return var3.isEmpty() ? var0 : var3.toString();
   }

   @Nonnull
   class="kw">private class="kw">static String toUpperSnake(@Nonnull String var0) {
      StringBuilder var1 = new StringBuilder();
      char var2 = 0;

      for (int var3 = 0; var3 < var0.length(); var3++) {
         char var4 = var0.charAt(var3);
         if (var4 == '_') {
            if (!var1.isEmpty() && var1.charAt(var1.length() - 1) != '_') {
               var1.append('_');
            }
         } else {
            if (var3 > 0 && Character.isUpperCase(var4) && (Character.isLowerCase(var2) || Character.isDigit(var2))) {
               var1.append('_');
            }

            var1.append(Character.toUpperCase(var4));
         }

         var2 = var4;
      }

      class="kw">return var1.toString();
   }

   class="kw">private int addEffectVec3Row(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      int var3,
      @Nonnull String var4,
      @Nonnull String var5,
      double var6,
      double var8,
      double var10
   ) {
      String var12 = "#EffectDetailPanel[" + var3 + "]";
      var1.append("#EffectDetailPanel", "Pages/TriggerVolume/TriggerVolumeInspectorVec3Row.ui");
      var1.set(var12 + " #Label.Text", fieldLabel(var4, var5));
      setEffectFieldTooltip(var1, var12, var4, var5);
      var1.set(var12 + " #X.Value", var6);
      var1.set(var12 + " #Y.Value", var8);
      var1.set(var12 + " #Z.Value", var10);

      for (String var14 : List.of("X", "Y", "Z")) {
         var2.addEventBinding(
            CustomUIEventBindingType.ValueChanged,
            var12 + " #" + var14,
            new EventData()
               .append("Action", TriggerVolumeInspectorPage.Action.UpdateParameter.name())
               .append("ParamKey", var5)
               .append("@VecX", var12 + " #X.Value")
               .append("@VecY", var12 + " #Y.Value")
               .append("@VecZ", var12 + " #Z.Value"),
            false
         );
      }

      class="kw">return var3 + 1;
   }

   class="kw">private int addRotationXyzRow(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      int var3,
      @Nonnull String var4,
      @Nonnull String var5,
      @Nonnull String var6,
      @Nonnull String var7
   ) {
      String var8 = "#EffectDetailPanel[" + var3 + "]";
      var1.append("#EffectDetailPanel", "Pages/TriggerVolume/TriggerVolumeInspectorRotation3Row.ui");
      var1.set(var8 + " #Label.Text", fieldLabel(var4, "Rotation"));
      setEffectFieldTooltip(var1, var8, var4, "Rotation");
      this.appendRotationAxis(var1, var2, var8, "X", var4, "RotationX", var5);
      this.appendRotationAxis(var1, var2, var8, "Y", var4, "RotationY", var6);
      this.appendRotationAxis(var1, var2, var8, "Z", var4, "RotationZ", var7);
      class="kw">return var3 + 1;
   }

   class="kw">private void appendRotationAxis(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      @Nonnull String var3,
      @Nonnull String var4,
      @Nonnull String var5,
      @Nonnull String var6,
      @Nonnull String var7
   ) {
      var1.set(var3 + " #" + var4 + "Label.Text", Message.translation("server.customUI.triggerVolumeEffectEditor.field.common.rotationAxis." + var4));
      String var8 = var3 + " #" + var4;
      ObjectArrayList var9 = new ObjectArrayList();

      for (String var13 : AXIS_ROTATION_CODEC.getEnumKeys()) {
         var9.add(new DropdownEntryInfo(this.optionLabel(var5, "Rotation", var13), var13, this.optionTooltip(var5, "Rotation", var13)));
      }

      var1.set(var8 + ".Entries", var9);
      var1.set(var8 + ".Value", var7);
      var2.addEventBinding(CustomUIEventBindingType.ValueChanged, var8, paramEvent(var6, var8 + ".Value"), false);
   }

   @Nonnull
   class="kw">private class="kw">static String enumValueOrDefault(@Nonnull BsonDocument var0, @Nonnull String var1) {
      class="kw">return var0.get(var1) class="kw">instanceof BsonString var3 ? var3.getValue() : AXIS_ROTATION_CODEC.getEnumKeys()[BlockTypeCondition.AxisRotation.ANY.ordinal()];
   }

   class="kw">private int addAssetPickerRow(
      @Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull String var4, @Nonnull String var5, @Nonnull String var6
   ) {
      String var7 = "#EffectDetailPanel[" + var3 + "]";
      var1.append("#EffectDetailPanel", "Pages/TriggerVolume/TriggerVolumeInspectorAssetPickerRow.ui");
      var1.set(var7 + " #Label.Text", fieldLabel(var4, var5));
      setEffectFieldTooltip(var1, var7, var4, var5);
      if (var6.isEmpty()) {
         var1.set(var7 + " #PickerLabel.Text", Message.translation("server.customUI.triggerVolumeEffectEditor.assetPicker.none"));
      } else if (this.isUnsupportedAnimation(var4, var5, var6)) {
         var1.set(
            var7 + " #PickerLabel.Text",
            Message.translation("server.customUI.triggerVolumeEffectEditor.assetPicker.animationUnsupported").param("animation", var6)
         );
      } else if (this.isLoopingAnimation(var4, var5, var6)) {
         var1.set(
            var7 + " #PickerLabel.Text", Message.translation("server.customUI.triggerVolumeEffectEditor.assetPicker.animationLooping").param("animation", var6)
         );
      } else if (isApplyOnField(var4, var5)) {
         this.setApplyOnLabel(var1, var7 + " #PickerLabel.Text", var6);
      } else {
         var1.set(var7 + " #PickerLabel.Text", var6);
      }

      var2.addEventBinding(
         CustomUIEventBindingType.Activating,
         var7 + " #PickerButton",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.OpenAssetPicker.name()).append("ParamKey", var5)
      );
      class="kw">return var3 + 1;
   }

   class="kw">private boolean isUnsupportedAnimation(@Nonnull String var1, @Nonnull String var2, @Nonnull String var3) {
      if ("PlayAnimation".equals(var1) && "Animation".equals(var2)) {
         if (this.getSelectedItem() class="kw">instanceof PlayAnimationEffect var4) {
            String var6 = var4.getNpcType();
            class="kw">return var6.isBlank() ? false : !TriggerVolumesPlugin.get().collectAnimationIdsForApplyOn(var6).contains(var3);
         } else {
            class="kw">return false;
         }
      } else {
         class="kw">return false;
      }
   }

   class="kw">private boolean isUnsupportedApplyOn(@Nonnull String var1, @Nonnull String var2, @Nonnull String var3) {
      if ("PlayAnimation".equals(var1) && "NpcType".equals(var2) && !var3.isBlank()) {
         if (this.getSelectedItem() class="kw">instanceof PlayAnimationEffect var4) {
            String var6 = var4.getAnimation();
            class="kw">return var6 != null && !var6.isBlank() ? !TriggerVolumesPlugin.get().collectApplyOnIdsForAnimation(var6).contains(var3) : false;
         } else {
            class="kw">return false;
         }
      } else {
         class="kw">return false;
      }
   }

   class="kw">private boolean isLoopingAnimation(@Nonnull String var1, @Nonnull String var2, @Nonnull String var3) {
      if ("PlayAnimation".equals(var1) && "Animation".equals(var2)) {
         class="kw">return this.getSelectedItem() class="kw">instanceof PlayAnimationEffect var4 ? TriggerVolumesPlugin.get().isLoopingAnimation(var4.getNpcType(), var3) : false;
      } else {
         class="kw">return false;
      }
   }

   class="kw">private class="kw">static boolean isApplyOnField(@Nonnull String var0, @Nonnull String var1) {
      class="kw">return "PlayAnimation".equals(var0) && "NpcType".equals(var1);
   }

   class="kw">private class="kw">static boolean isApplyOnPseudo(@Nonnull String var0) {
      class="kw">return "Player".equals(var0) || "Everyone".equals(var0);
   }

   class="kw">private void setApplyOnLabel(@Nonnull UICommandBuilder var1, @Nonnull String var2, @Nonnull String var3) {
      boolean var4 = isApplyOnPseudo(var3);
      String var5 = "server.customUI.triggerVolumeEffectEditor.applyOn." + var3;
      if (this.isUnsupportedApplyOn("PlayAnimation", "NpcType", var3)) {
         if (var4) {
            var1.set(var2, Message.translation(var5 + "Unsupported"));
         } else {
            var1.set(var2, Message.translation("server.customUI.triggerVolumeEffectEditor.assetPicker.targetUnsupported").param("target", var3));
         }
      } else if (var4) {
         var1.set(var2, Message.translation(var5));
      } else {
         var1.set(var2, var3);
      }
   }

   class="kw">private int addPastePrefabPreviewButtonRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3) {
      String var4 = "#EffectDetailPanel[" + var3 + "]";
      var1.append("#EffectDetailPanel", "Common/TextButton.ui");
      Message var5 = this.isPreviewingSelectedEffect()
         ? Message.translation("server.customUI.triggerVolumeEffectEditor.pastePrefab.preview.hide")
         : Message.translation("server.customUI.triggerVolumeEffectEditor.pastePrefab.preview.show");
      var1.set(var4 + " #Button.Text", var5);
      var1.set(var4 + " #Button.TooltipText", Message.translation("server.customUI.triggerVolumeEffectEditor.pastePrefab.preview.tooltip"));
      var2.addEventBinding(
         CustomUIEventBindingType.Activating, var4 + " #Button", new EventData().append("Action", TriggerVolumeInspectorPage.Action.TogglePrefabPreview.name())
      );
      class="kw">return var3 + 1;
   }

   class="kw">private void onSelectEffect(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      try {
         TriggerVolumeInspectorPage.EffectListKind var2 = var1.effectListKind != null
            ? TriggerVolumeInspectorPage.EffectListKind.valueOf(var1.effectListKind)
            : TriggerVolumeInspectorPage.EffectListKind.EFFECT;
         int var3 = Integer.parseInt(var1.effectIndex);
         this.selectedKind = var2;
         this.selectedEffectIndex = var3;
         this.lastCommittedEntry = this.entryOf(this.getSelectedItem());
         this.syncAddControlsToSelectedEffect();
         this.rebuildAll();
      } catch (IllegalArgumentException var4) {
      }
   }

   class="kw">private void syncAddControlsToSelectedEffect() {
      if (this.selectedEffectIndex >= 0 && this.selectedEffectIndex < this.getItemCount(this.selectedKind)) {
         if (this.selectedKind == TriggerVolumeInspectorPage.EffectListKind.RULE) {
            this.enterRuleAddMode();
         } else {
            TriggerEventType var1;
            int var2;
            if (this.selectedKind == TriggerVolumeInspectorPage.EffectListKind.CONDITION) {
               TriggerCondition var3 = this.currentConditions().get(this.selectedEffectIndex);
               var1 = var3.getEventType();
               var2 = var3.getEntry();
            } else {
               TriggerEffect var4 = this.currentEffects(this.selectedKind).get(this.selectedEffectIndex);
               var1 = var4.getEventType();
               var2 = var4.getEntry();
            }

            this.addTargetKind = this.selectedKind;
            this.addEventType = var1;
            this.addEntry = var2;
         }
      }
   }

   class="kw">private void onAddEffect(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.effectType != null && !var1.effectType.isBlank()) {
         TriggerVolumeInspectorPage.EffectListKind var2 = var1.addTargetKind != null
            ? parseEffectListKind(var1.addTargetKind, TriggerVolumeInspectorPage.EffectListKind.EFFECT)
            : this.addTargetKind;
         if (var2 == TriggerVolumeInspectorPage.EffectListKind.RULE) {
            this.enterRuleAddMode();
            BuilderCodec var7 = getRuleBuilderCodecFor(var1.effectType);
            if (var7 == null) {
               this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeEffectEditor.unknownType"));
            } else {
               TriggerRule var8 = var7.getSupplier().get();
               materializeRuleDefaults(var7, var8);
               this.currentRules().add(var8);
               this.markSelectedDraftDirty();
               this.selectedKind = TriggerVolumeInspectorPage.EffectListKind.RULE;
               this.selectedEffectIndex = this.currentRules().size() - 1;
               this.volumeRulesCollapsed = false;
               this.rebuildAll();
            }
         } else {
            this.addTargetKind = var2;
            TriggerEventType var3 = var1.addEventType != null ? parseTriggerEventType(var1.addEventType, this.addEventType) : this.addEventType;
            this.addEventType = var3;
            int var4 = this.resolveAddEntry(var1.addEntry, var3);
            this.addEntry = var4;
            if (var2 == TriggerVolumeInspectorPage.EffectListKind.CONDITION) {
               BuilderCodec var9 = getConditionBuilderCodecFor(var1.effectType);
               if (var9 == null) {
                  this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeEffectEditor.unknownType"));
               } else {
                  TriggerCondition var10 = var9.getSupplier().get();
                  var10.setEventType(var3);
                  var10.setEntry(var4);
                  materializeConditionDefaults(var9, var10);
                  this.currentConditions().add(var10);
                  this.markSelectedDraftDirty();
                  this.selectedKind = TriggerVolumeInspectorPage.EffectListKind.CONDITION;
                  this.selectedEffectIndex = this.currentConditions().size() - 1;
                  this.setEventCategoryExpanded(TriggerVolumeInspectorPage.EventCategoryScope.VOLUME, var3, var4);
                  this.rebuildAll();
               }
            } else {
               BuilderCodec var5 = getBuilderCodecFor(var1.effectType);
               if (var5 == null) {
                  this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeEffectEditor.unknownType"));
               } else {
                  TriggerEffect var6 = var5.getSupplier().get();
                  var6.setEventType(var3);
                  var6.setEntry(var4);
                  materializeDefaults(var5, var6);
                  this.currentEffects(var2).add(var6);
                  this.markSelectedDraftDirty();
                  this.selectedKind = var2;
                  this.selectedEffectIndex = this.currentEffects(var2).size() - 1;
                  this.setEventCategoryExpanded(TriggerVolumeInspectorPage.EventCategoryScope.VOLUME, var3, var4);
                  this.rebuildAll();
               }
            }
         }
      }
   }

   class="kw">private int resolveAddEntry(@Nullable String var1, @Nonnull TriggerEventType var2) {
      if ("NEW".equals(var1)) {
         class="kw">return this.maxEntryForEvent(var2) + 1;
      } else {
         class="kw">return var1 != null && !var1.isBlank() ? parseEntry(var1) : this.addEntry;
      }
   }

   class="kw">private int maxEntryForEvent(@Nonnull TriggerEventType var1) {
      int var2 = 0;

      for (int var6 : this.getEventEntries(TriggerVolumeInspectorPage.EventCategoryScope.VOLUME, null, var1)) {
         var2 = Math.max(var2, var6);
      }

      class="kw">return var2;
   }

   class="kw">private void onRemoveEffect() {
      if (this.selectedEffectIndex >= 0 && this.selectedEffectIndex < this.getItemCount(this.selectedKind)) {
         if (this.isPreviewingSelectedEffect()) {
            this.hidePastePrefabPreview();
         }

         class="kw">switch (this.selectedKind) {
            case CONDITION:
               this.currentConditions().remove(this.selectedEffectIndex);
               break;
            case EFFECT:
            case REJECTION_EFFECT:
               this.currentEffects(this.selectedKind).remove(this.selectedEffectIndex);
               break;
            case RULE:
               this.currentRules().remove(this.selectedEffectIndex);
         }

         this.markSelectedDraftDirty();
         if (this.selectedEffectIndex >= this.getItemCount(this.selectedKind)) {
            this.selectedEffectIndex = this.getItemCount(this.selectedKind) - 1;
         }

         this.rebuildAll();
      }
   }

   class="kw">private void onDuplicateEffect() {
      if (this.selectedEffectIndex >= 0 && this.selectedEffectIndex < this.getItemCount(this.selectedKind)) {
         this.hidePastePrefabPreview();
         if (this.selectedKind == TriggerVolumeInspectorPage.EffectListKind.CONDITION) {
            List var1 = this.currentConditions();
            var1.add(this.selectedEffectIndex + 1, TriggerCondition.deepCopy(var1.get(this.selectedEffectIndex)));
         } else if (this.selectedKind == TriggerVolumeInspectorPage.EffectListKind.RULE) {
            List var2 = this.currentRules();
            var2.add(this.selectedEffectIndex + 1, TriggerRule.deepCopy(var2.get(this.selectedEffectIndex)));
         } else {
            List var3 = this.currentEffects(this.selectedKind);
            var3.add(this.selectedEffectIndex + 1, TriggerEffect.deepCopy(var3.get(this.selectedEffectIndex)));
         }

         this.markSelectedDraftDirty();
         this.selectedEffectIndex++;
         this.rebuildAll();
      }
   }

   class="kw">private void onMoveEffect(int var1) {
      if (this.selectedEffectIndex >= 0 && this.selectedEffectIndex < this.getItemCount(this.selectedKind)) {
         this.hidePastePrefabPreview();
         int var2 = this.selectedEffectIndex + var1;
         if (var2 >= 0 && var2 < this.getItemCount(this.selectedKind)) {
            class="kw">switch (this.selectedKind) {
               case CONDITION:
                  Collections.swap(this.currentConditions(), this.selectedEffectIndex, var2);
                  break;
               case EFFECT:
               case REJECTION_EFFECT:
                  Collections.swap(this.currentEffects(this.selectedKind), this.selectedEffectIndex, var2);
                  break;
               case RULE:
                  Collections.swap(this.currentRules(), this.selectedEffectIndex, var2);
            }

            this.markSelectedDraftDirty();
            this.selectedEffectIndex = var2;
            this.rebuildAll();
         }
      }
   }

   class="kw">private void onUpdateAddTarget(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.addTargetKind != null) {
         TriggerVolumeInspectorPage.EffectListKind var2 = parseEffectListKind(var1.addTargetKind, TriggerVolumeInspectorPage.EffectListKind.EFFECT);
         if (var2 == TriggerVolumeInspectorPage.EffectListKind.RULE) {
            this.enterRuleAddMode();
         } else {
            this.addTargetKind = var2;
         }

         this.rebuildAll();
      }
   }

   class="kw">private void onUpdateAddEffectType(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.effectType != null && !var1.effectType.isBlank()) {
         this.addEffectType = var1.effectType;
      }
   }

   class="kw">private void onUpdateAddEventType(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.addEventType != null) {
         if ("ALWAYS_ACTIVE".equals(var1.addEventType)) {
            this.enterRuleAddMode();
            this.rebuildAll();
         } else {
            this.leaveRuleAddMode();
            this.addEventType = parseTriggerEventType(var1.addEventType, this.addEventType);
            this.addEntry = 0;
            this.rebuildAll();
         }
      }
   }

   class="kw">private void onUpdateAddEntry(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      this.addEntry = this.resolveAddEntry(var1.addEntry, this.addEventType);
      this.rebuildAll();
   }

   class="kw">private void onToggleEventCategory(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.eventType != null && var1.eventCategoryScope != null) {
         try {
            TriggerEventType var2 = TriggerEventType.valueOf(var1.eventType);
            TriggerVolumeInspectorPage.EventCategoryScope var3 = TriggerVolumeInspectorPage.EventCategoryScope.valueOf(var1.eventCategoryScope);
            int var4 = parseEntry(var1.eventEntry);
            this.toggleEventCategory(var3, var2, var4);
            this.rebuildAll();
         } catch (IllegalArgumentException var5) {
         }
      }
   }

   class="kw">private class="kw">static int parseEntry(@Nullable String var0) {
      if (var0 != null && !var0.isBlank()) {
         try {
            class="kw">return Math.max(0, Integer.parseInt(var0.trim()));
         } catch (NumberFormatException var2) {
            class="kw">return 0;
         }
      } else {
         class="kw">return 0;
      }
   }

   class="kw">private void onUpdateParameter(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      Object var2 = this.getSelectedItem();
      if (var2 != null && var1.paramKey != null) {
         String var3 = var1.paramKey;
         if (var2 class="kw">instanceof TriggerRule var11) {
            if ("Enabled".equals(var3)) {
               if (var1.paramBool != null) {
                  var11.setEnabled(var1.paramBool);
                  this.markSelectedDraftDirty();
                  this.rebuildAll();
               }
            } else {
               BuilderCodec var16 = getRuleBuilderCodecFor(getRuleTypeId(var11));
               if (var16 != null) {
                  this.applyCodecField(var16, var11, var3, var1);
                  this.markSelectedDraftDirty();
                  if (var11 class="kw">instanceof AbstractDenyRule && "Target".equals(var3)) {
                     this.rebuildAll();
                  }
               }
            }
         } else if ("Event".equals(var3)) {
            try {
               TriggerEventType var10 = TriggerEventType.valueOf(var1.paramValue);
               int var15 = var2 class="kw">instanceof TriggerCondition var19 ? var19.getEntry() : ((TriggerEffect)var2).getEntry();
               if (var2 class="kw">instanceof TriggerCondition var20) {
                  var20.setEventType(var10);
               } else {
                  ((TriggerEffect)var2).setEventType(var10);
               }

               this.markSelectedDraftDirty();
               this.setEventCategoryExpanded(TriggerVolumeInspectorPage.EventCategoryScope.VOLUME, var10, var15);
            } catch (IllegalArgumentException var7) {
            }

            this.rebuildAll();
         } else if ("Entry".equals(var3)) {
            if (var1.paramNumericValue != null) {
               int var9 = Math.max(0, var1.paramNumericValue.intValue() - 1);
               TriggerEventType var14 = var2 class="kw">instanceof TriggerCondition var17 ? var17.getEventType() : ((TriggerEffect)var2).getEventType();
               if (var2 class="kw">instanceof TriggerCondition var18) {
                  var18.setEntry(var9);
               } else {
                  ((TriggerEffect)var2).setEntry(var9);
               }

               this.markSelectedDraftDirty();
               this.setEventCategoryExpanded(TriggerVolumeInspectorPage.EventCategoryScope.VOLUME, normalizeEventType(var14), var9);
            }
         } else if (var2 class="kw">instanceof TriggerCondition var8) {
            String var13 = getConditionTypeId(var8);
            BuilderCodec var6 = getConditionBuilderCodecFor(var13);
            if (var6 != null) {
               this.applyCodecField(var6, var8, var3, var1);
               this.markSelectedDraftDirty();
               if ("Source".equals(var3) && "TagCondition".equals(var13)) {
                  this.rebuildAll();
               }
            }
         } else {
            TriggerEffect var4 = (TriggerEffect)var2;
            if ("Interval".equals(var3)) {
               if (var1.paramNumericValue != null) {
                  var4.setInterval(var1.paramNumericValue.floatValue());
                  this.markSelectedDraftDirty();
               }
            } else if ("Delay".equals(var3)) {
               if (var1.paramNumericValue != null) {
                  var4.setDelay(var1.paramNumericValue.floatValue());
                  this.markSelectedDraftDirty();
               }
            } else if (var4 class="kw">instanceof ModifyRulesEffect var12) {
               this.applyModifyRulesParameter(var12, var3, var1);
            } else {
               BuilderCodec var5 = getBuilderCodecFor(getTypeId(var4));
               if (var5 != null) {
                  this.applyCodecField(var5, var4, var3, var1);
                  this.markSelectedDraftDirty();
                  if (var4 class="kw">instanceof RemoveEntitiesEffect && "Mode".equals(var3)) {
                     this.rebuildAll();
                     class="kw">return;
                  }
               }

               if (var4 class="kw">instanceof PastePrefabEffect && this.isPreviewingSelectedEffect()) {
                  if ("Position".equals(var3) || "Origin".equals(var3)) {
                     this.refreshActivePastePrefabPreviewPosition();
                  } else if ("Prefab".equals(var3) || "PrefabList".equals(var3)) {
                     this.refreshActivePastePrefabPreview();
                  }
               }
            }
         }
      }
   }

   class="kw">private void applyModifyRulesParameter(@Nonnull ModifyRulesEffect var1, @Nonnull String var2, @Nonnull TriggerVolumeInspectorPage.PageData var3) {
      if ("RuleType".equals(var2)) {
         this.applyRuleTypeChange(var1, var3.paramValue);
         this.markSelectedDraftDirty();
         this.rebuildAll();
      } else if ("RuleField".equals(var2)) {
         BuilderCodec var7 = getBuilderCodecFor(getTypeId(var1));
         if (var7 != null) {
            this.applyCodecField(var7, var1, "FieldKey", var3);
            this.markSelectedDraftDirty();
         }

         this.rebuildAll();
      } else {
         BuilderCodec var4 = getBuilderCodecFor(getTypeId(var1));
         if (var4 != null && var4.getEntries().containsKey(var2)) {
            this.applyCodecField(var4, var1, var2, var3);
            this.markSelectedDraftDirty();
            if ("Operation".equals(var2)) {
               this.rebuildAll();
            }
         } else {
            TriggerRule var5 = var1.getRule();
            if (var5 != null) {
               BuilderCodec var6 = getRuleBuilderCodecFor(getRuleTypeId(var5));
               if (var6 != null) {
                  this.applyCodecField(var6, var5, var2, var3);
                  this.markSelectedDraftDirty();
               }
            }
         }
      }
   }

   class="kw">private void applyRuleTypeChange(@Nonnull ModifyRulesEffect var1, @Nullable String var2) {
      if (var2 != null && !var2.isBlank()) {
         TriggerRule var3 = var1.getRule();
         if (var3 == null || !var2.equals(getRuleTypeId(var3))) {
            BuilderCodec var4 = getRuleBuilderCodecFor(var2);
            if (var4 != null) {
               TriggerRule var5 = var4.getSupplier().get();
               materializeRuleDefaults(var4, var5);
               var1.setRule(var5);
            }
         }
      } else {
         var1.setRule(null);
      }
   }

   class="kw">private void onCommitEntry() {
      Object var1 = this.getSelectedItem();
      if (var1 != null) {
         int var2 = this.entryOf(var1);
         if (var2 >= 0 && var2 != this.lastCommittedEntry) {
            this.lastCommittedEntry = var2;
            this.rebuildEffectListOnly();
         }
      }
   }

   class="kw">private int entryOf(@Nullable Object var1) {
      if (var1 class="kw">instanceof TriggerCondition var3) {
         class="kw">return var3.getEntry();
      } else {
         class="kw">return var1 class="kw">instanceof TriggerEffect var2 ? var2.getEntry() : -1;
      }
   }

   class="kw">private void onTogglePrefabPreview() {
      if (this.isPreviewingSelectedEffect()) {
         this.hidePastePrefabPreview();
         this.rebuildAll();
      } else {
         if (this.getActivePastePrefabPreviewState() != null) {
            this.hidePastePrefabPreview();
         }

         if (this.getSelectedItem() class="kw">instanceof PastePrefabEffect var2) {
            Vector3d var3 = this.getPastePrefabPreviewPosition(var2);
            if (var3 == null) {
               this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeEffectEditor.pastePrefab.preview.noPrefab"));
            } else if (this.sendPastePrefabPreview(var2, true)) {
               TriggerVolumesPlugin.get()
                  .setPastePrefabPreviewState(
                     this.playerRef.getUuid(),
                     new TriggerVolumesPlugin.PastePrefabPreviewState(
                        this.selectedWorld, this.selectedId, this.selectedIsGroup, this.selectedKind.name(), this.selectedEffectIndex, var3
                     )
                  );
               this.rebuildAll();
            }
         }
      }
   }

   class="kw">private boolean sendPastePrefabPreview(@Nonnull PastePrefabEffect var1, boolean var2) {
      Vector3d var3 = this.getPastePrefabPreviewPosition(var1);
      class="kw">return var3 == null ? false : this.sendPastePrefabPreview(var1, var3, var2);
   }

   class="kw">private boolean sendPastePrefabPreview(@Nonnull PastePrefabEffect var1, @Nonnull Vector3d var2, boolean var3) {
      ShowTriggerVolumePastePrefabPreview var4 = new ShowTriggerVolumePastePrefabPreview();
      var4.position = new Vector3f((float)var2.x(), (float)var2.y(), (float)var2.z());
      if (var3) {
         Path var5 = this.resolvePastePrefabPath(var1);
         if (var5 == null) {
            this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeEffectEditor.pastePrefab.preview.noPrefab"));
            class="kw">return false;
         }

         BlockSelection var6;
         try {
            var6 = PrefabStore.get().getPrefab(var5);
         } catch (Exception var8) {
            ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var8)).log("Failed to load PastePrefab preview '%s'", var5);
            this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeEffectEditor.pastePrefab.preview.loadFailed"));
            class="kw">return false;
         }

         if (var6 == null) {
            this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeEffectEditor.pastePrefab.preview.loadFailed"));
            class="kw">return false;
         }

         this.fillPreviewPacket(var4, var6);
      }

      this.playerRef.getPacketHandler().write(var4);
      TriggerVolumesPlugin.PastePrefabPreviewState var9 = this.getActivePastePrefabPreviewState();
      if (var9 != null) {
         var9.setLastSentPosition(var2);
      }

      class="kw">return true;
   }

   class="kw">private void fillPreviewPacket(@Nonnull ShowTriggerVolumePastePrefabPreview var1, @Nonnull BlockSelection var2) {
      EditorBlocksChange var3 = var2.toPacket();
      var1.blocksChange = var3.blocksChange;
      var1.fluidsChange = var3.fluidsChange;
      var1.entityChanges = var3.entityChanges;
      this.applyTintFromPlayerPosition(var1);
   }

   class="kw">private void applyTintFromPlayerPosition(@Nonnull ShowTriggerVolumePastePrefabPreview var1) {
      Ref var2 = this.playerRef.getReference();
      if (var2 == null) {
         var1.biomeTint = DEFAULT_BIOME_TINT;
         var1.waterTint = DEFAULT_WATER_TINT;
      } else {
         Store var3 = var2.getStore();
         World var4 = var3.getExternalData().getWorld();
         if (var4 == null) {
            var1.biomeTint = DEFAULT_BIOME_TINT;
            var1.waterTint = DEFAULT_WATER_TINT;
         } else {
            Vector3d var5 = this.playerRef.getTransform().getPosition();
            int var6 = MathUtil.floor(var5.x);
            int var7 = MathUtil.floor(var5.y);
            int var8 = MathUtil.floor(var5.z);
            long var9 = ChunkUtil.indexChunkFromBlock(var6, var8);
            WorldChunk var11 = var4.getNonTickingChunk(var9);
            if (var11 != null && var11.getBlockChunk() != null) {
               BlockChunk var12 = var11.getBlockChunk();
               var1.biomeTint = var12.getTint(var6, var8);
               int var13 = var12.getEnvironment(var6, var7, var8);
               Environment var14 = Environment.getAssetMap().getAsset(var13);
               if (var14 != null) {
                  Color var15 = var14.getWaterTint();
                  if (var15 != null) {
                     var1.waterTint = (var15.red & 255) << 16 | (var15.green & 255) << 8 | var15.blue & 255;
                     class="kw">return;
                  }
               }

               var1.waterTint = DEFAULT_WATER_TINT;
            } else {
               var1.biomeTint = DEFAULT_BIOME_TINT;
               var1.waterTint = DEFAULT_WATER_TINT;
            }
         }
      }
   }

   @Nullable
   class="kw">private Path resolvePastePrefabPath(@Nonnull PastePrefabEffect var1) {
      String var2 = var1.getPrefabRelPath();
      if (var2 != null && !var2.isBlank()) {
         class="kw">return PastePrefabEffect.resolveDirectPrefabPath(var2.trim());
      } else {
         String var3 = var1.getPrefabListId();
         if (var3 != null && !var3.isBlank()) {
            PrefabListAsset var4 = PrefabListAsset.getAssetMap().getAsset(var3);
            class="kw">return var4 != null ? var4.getRandomPrefab() : null;
         } else {
            class="kw">return null;
         }
      }
   }

   @Nullable
   class="kw">private Vector3d getPastePrefabPreviewPosition(@Nonnull PastePrefabEffect var1) {
      Vector3d var2 = this.getCurrentPreviewOrigin();
      class="kw">return var2 == null ? null : this.getPastePrefabPreviewPosition(var1, var2);
   }

   @Nonnull
   class="kw">private Vector3d getPastePrefabPreviewPosition(@Nonnull PastePrefabEffect var1, @Nonnull Vector3d var2) {
      Vector3d var3 = var1.getPosition();

      Vector3d var4 = class="kw">switch (var1.getOrigin()) {
         case WORLD_ABSOLUTE -> var3 != null ? new Vector3d(var3) : new Vector3d();
         class="kw">default -> {
            Vector3d var5 = new Vector3d(var2);
            if (var3 != null) {
               var5.add(var3);
            }

            yield var5;
         }
      };
      class="kw">return new Vector3d(Math.floor(var4.x()), Math.floor(var4.y()), Math.floor(var4.z()));
   }

   @Nullable
   class="kw">private Vector3d getCurrentPreviewOrigin() {
      if (this.selectedIsGroup) {
         TriggerVolumeInspectorDrafts.GroupDraft var2 = this.selectedGroupDraft();
         class="kw">return var2 != null ? var2.origin : null;
      } else {
         TriggerVolumeInspectorDrafts.VolumeDraft var1 = this.selectedVolumeDraft();
         class="kw">return var1 != null ? var1.position : null;
      }
   }

   @Nullable
   class="kw">private Vector3d getPreviewOriginForState(@Nonnull TriggerVolumesPlugin.PastePrefabPreviewState var1) {
      String var2 = var1.selectedId();
      if (var2 == null) {
         class="kw">return null;
      } else {
         TriggerVolumeManager var3 = getManagerForWorld(var1.worldName());
         if (var3 == null) {
            class="kw">return null;
         } else if (var1.selectedIsGroup()) {
            GroupEntry var5 = var3.getGroup(var2);
            class="kw">return var5 == null ? null : this.draftForGroup(var5).origin;
         } else {
            VolumeEntry var4 = var3.getVolume(var2);
            class="kw">return var4 == null ? null : this.draftForVolume(var4).position;
         }
      }
   }

   @Nullable
   class="kw">private PastePrefabEffect getPastePrefabEffectForState(@Nonnull TriggerVolumesPlugin.PastePrefabPreviewState var1) {
      String var2 = var1.selectedId();
      if (var2 == null) {
         class="kw">return null;
      }

      TriggerVolumeInspectorPage.EffectListKind var3;
      try {
         var3 = TriggerVolumeInspectorPage.EffectListKind.valueOf(var1.effectListKind());
      } catch (IllegalArgumentException var9) {
         class="kw">return null;
      }

      if (var3 != TriggerVolumeInspectorPage.EffectListKind.CONDITION && var3 != TriggerVolumeInspectorPage.EffectListKind.RULE) {
         TriggerVolumeManager var4 = getManagerForWorld(var1.worldName());
         if (var4 == null) {
            class="kw">return null;
         }

         List var5;
         if (var1.selectedIsGroup()) {
            GroupEntry var6 = var4.getGroup(var2);
            if (var6 == null) {
               class="kw">return null;
            }

            TriggerVolumeInspectorDrafts.GroupDraft var7 = this.draftForGroup(var6);
            var5 = var3 == TriggerVolumeInspectorPage.EffectListKind.REJECTION_EFFECT ? var7.rejectionEffects : var7.effects;
         } else {
            VolumeEntry var10 = var4.getVolume(var2);
            if (var10 == null) {
               class="kw">return null;
            }

            TriggerVolumeInspectorDrafts.VolumeDraft var12 = this.draftForVolume(var10);
            var5 = var3 == TriggerVolumeInspectorPage.EffectListKind.REJECTION_EFFECT ? var12.rejectionEffects : var12.effects;
         }

         int var11 = var1.effectIndex();
         if (var11 >= 0 && var11 < var5.size()) {
            TriggerEffect var13 = var5.get(var11);
            class="kw">return var13 class="kw">instanceof PastePrefabEffect var8 ? var8 : null;
         } else {
            class="kw">return null;
         }
      } else {
         class="kw">return null;
      }
   }

   class="kw">private void refreshActivePastePrefabPreviewPosition() {
      TriggerVolumesPlugin.PastePrefabPreviewState var1 = this.getActivePastePrefabPreviewState();
      if (var1 != null && var1.worldName().equals(this.selectedWorld)) {
         PastePrefabEffect var2 = this.getPastePrefabEffectForState(var1);
         if (var2 == null) {
            this.hidePastePrefabPreview();
         } else {
            Vector3d var3 = this.getPreviewOriginForState(var1);
            if (var3 == null) {
               this.hidePastePrefabPreview();
            } else {
               Vector3d var4 = this.getPastePrefabPreviewPosition(var2, var3);
               if (var4 == null) {
                  this.hidePastePrefabPreview();
               } else {
                  Vector3d var5 = var1.lastSentPosition();
                  if (var5 == null || !var5.equals(var4)) {
                     this.sendPastePrefabPreview(var2, var4, false);
                  }
               }
            }
         }
      }
   }

   class="kw">private void refreshActivePastePrefabPreview() {
      if (this.getActivePastePrefabPreviewState() != null && this.isPreviewingSelectedEffect()) {
         if (!(this.getSelectedItem() class="kw">instanceof PastePrefabEffect var2 && this.sendPastePrefabPreview(var2, true))) {
            this.hidePastePrefabPreview();
         }
      }
   }

   class="kw">private class="kw">static boolean isPastePrefabPreviewAssetField(@Nullable String var0) {
      class="kw">return "Prefab".equals(var0) || "PrefabList".equals(var0);
   }

   class="kw">private void hidePastePrefabPreview() {
      if (this.getActivePastePrefabPreviewState() != null) {
         this.playerRef.getPacketHandler().write(new HideTriggerVolumePastePrefabPreview());
      }

      TriggerVolumesPlugin.get().clearPastePrefabPreviewState(this.playerRef.getUuid());
   }

   class="kw">private void clearPastePrefabPreviewIfFromDifferentWorld() {
      TriggerVolumesPlugin.PastePrefabPreviewState var1 = this.getActivePastePrefabPreviewState();
      if (var1 != null && !var1.worldName().equals(this.selectedWorld)) {
         this.hidePastePrefabPreview();
      }
   }

   class="kw">private boolean isPreviewingSelectedEffect() {
      TriggerVolumesPlugin.PastePrefabPreviewState var1 = this.getActivePastePrefabPreviewState();
      class="kw">return var1 != null && var1.matches(this.selectedWorld, this.selectedId, this.selectedIsGroup, this.selectedKind.name(), this.selectedEffectIndex);
   }

   @Nullable
   class="kw">private TriggerVolumesPlugin.PastePrefabPreviewState getActivePastePrefabPreviewState() {
      class="kw">return TriggerVolumesPlugin.get().getPastePrefabPreviewState(this.playerRef.getUuid());
   }

   class="kw">private <T> void applyCodecField(@Nonnull BuilderCodec<T> var1, @Nonnull T var2, @Nonnull String var3, @Nonnull TriggerVolumeInspectorPage.PageData var4) {
      List var5 = var1.getEntries().get(var3);
      if (var5 != null && !var5.isEmpty()) {
         BuilderField var6 = var5.getLast();
         Codec var7 = var6.getCodec().getChildCodec();
         ExtraInfo var8 = ExtraInfo.THREAD_LOCAL.get();
         if (var4.vecX != null && var4.vecY != null && var4.vecZ != null) {
            BsonDocument var16 = new BsonDocument();
            var16.put("X", new BsonDouble(var4.vecX));
            var16.put("Y", new BsonDouble(var4.vecY));
            var16.put("Z", new BsonDouble(var4.vecZ));
            BsonDocument var17 = new BsonDocument();
            var17.put(var3, var16);
            var6.decode(var17, var2, var8);
         } else if (var4.paramBool != null && var7 == Codec.BOOLEAN) {
            BsonDocument var15 = new BsonDocument();
            var15.put(var3, new BsonBoolean(var4.paramBool));
            var6.decode(var15, var2, var8);
         } else if (var4.paramNumericValue != null) {
            double var14 = isNonNegativeNumericField(getCodecTypeId(var2), var3) ? Math.max(0.0, var4.paramNumericValue) : var4.paramNumericValue;
            Object var11;
            if (var7 == Codec.FLOAT || var7 == Codec.DOUBLE) {
               var11 = new BsonDouble(var14);
            } else if (var7 == Codec.INTEGER) {
               var11 = new BsonInt32((int)var14);
            } else if (var7 == Codec.LONG) {
               var11 = new BsonInt64((long)var14);
            } else if (var7 == Codec.BOOLEAN) {
               var11 = new BsonBoolean(var14 != 0.0);
            } else {
               var11 = new BsonDouble(var14);
            }

            BsonDocument var12 = new BsonDocument();
            var12.put(var3, var11);
            var6.decode(var12, var2, var8);
         } else {
            try {
               BsonValue var9 = stringToBsonValue(var7, var4.paramValue);
               if (var9 != null) {
                  BsonDocument var10 = new BsonDocument();
                  var10.put(var3, var9);
                  var6.decode(var10, var2, var8);
               }
            } catch (Exception var13) {
               ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var13)).log("Failed to parse value '%s' for field '%s'", var4.paramValue, var3);
            }
         }
      }
   }

   class="kw">private void onOpenPresetSave() {
      this.presetSaveName = "";
      UICommandBuilder var1 = new UICommandBuilder();
      var1.set("#MainPage.Visible", false);
      var1.set("#PresetSavePage.Visible", true);
      var1.set("#PresetName #Input.Value", "");
      var1.set("#IncludeVolumeSettings #Input.Value", false);
      var1.set("#IncludeVolumeSettings.Visible", !this.selectedIsGroup);
      if (this.presetPackBrowser.hasSelectedPack()) {
         var1.set("#PresetSavePage #SelectedPackLabel.Text", this.presetPackBrowser.getSelectedPackDisplayName());
      }

      this.setSavePresetButtonState(var1);
      this.sendUpdate(var1);
   }

   class="kw">private void onPresetNameChanged(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      this.presetSaveName = var1.presetName != null ? var1.presetName : "";
      UICommandBuilder var2 = new UICommandBuilder();
      this.setSavePresetButtonState(var2);
      this.sendUpdate(var2);
   }

   class="kw">private void setSavePresetButtonState(@Nonnull UICommandBuilder var1) {
      var1.set("#ConfirmSavePresetButton.Disabled", this.presetSaveName.isBlank() || !this.presetPackBrowser.hasSelectedPack());
   }

   class="kw">private void restorePresetSavePage() {
      UICommandBuilder var1 = new UICommandBuilder();
      var1.set("#PresetSavePage.Visible", true);
      this.setSavePresetButtonState(var1);
      this.sendUpdate(var1);
   }

   class="kw">private void onConfirmSavePreset(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.presetName != null && !var1.presetName.isBlank()) {
         String var2 = var1.presetName.trim();
         if (!var2.contains("..") && !var2.contains("/") && !var2.contains("\\")) {
            AssetPack var3 = this.presetPackBrowser.getSelectedPack();
            if (var3 == null) {
               this.playerRef.sendMessage(Message.translation("server.customUI.assetPackBrowser.packRequired"));
               this.restorePresetSavePage();
            } else {
               AssetStore var4 = AssetRegistry.getAssetStore(TriggerEffectAsset.class);
               if (var4 != null) {
                  TriggerEffectAsset.VolumeSettings var5 = Boolean.TRUE.equals(var1.includeVolumeSettings) && !this.selectedIsGroup
                     ? volumeSettingsFrom(this.selectedVolumeDraft())
                     : null;
                  TriggerEffectAsset var6 = TriggerEffectAsset.create(
                     var2,
                     this.currentConditions().toArray(TriggerCondition[]::new),
                     this.currentEffects(TriggerVolumeInspectorPage.EffectListKind.EFFECT).toArray(TriggerEffect[]::new),
                     this.currentEffects(TriggerVolumeInspectorPage.EffectListKind.REJECTION_EFFECT).toArray(TriggerEffect[]::new),
                     this.currentRules().toArray(TriggerRule[]::new),
                     this.currentConditionTiming(),
                     var5
                  );
                  Path var7 = var3.getRoot().resolve("Server").resolve("TriggerVolumes").resolve("Effects");
                  UICommandBuilder var8 = new UICommandBuilder();
                  var8.set("#PresetSavePage.Visible", false);
                  var8.set("#MainPage.Visible", true);
                  this.sendUpdate(var8);
                  HytaleServer.SCHEDULED_EXECUTOR
                     .execute(
                        () -> {
                           try {
                              Files.createDirectories(var7);
                              var4.writeAssetToDisk(var3, Map.of(Path.of(var2 + ".json"), var6), SingleplayerModule.isOwner(this.playerRef));
                              this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeEffectEditor.presetSaved").param("name", var2));
                           } catch (Exception var7) {
                              ((HytaleLogger.Api)LOGGER.at(Level.SEVERE).withCause(var7)).log("Failed to save effect preset '%s'", var2);
                              this.playerRef
                                 .sendMessage(
                                    Message.translation("server.customUI.triggerVolumeEffectEditor.presetSaveError").param("error", var7.getMessage())
                                 );
                           }
                        }
                     );
               }
            }
         } else {
            this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeEffectEditor.presetInvalidName"));
            this.restorePresetSavePage();
         }
      } else {
         this.restorePresetSavePage();
      }
   }

   @Nonnull
   class="kw">private class="kw">static TriggerEffectAsset.VolumeSettings volumeSettingsFrom(@Nonnull TriggerVolumeInspectorDrafts.VolumeDraft var0) {
      class="kw">return new TriggerEffectAsset.VolumeSettings(
         Set.copyOf(var0.targetTypes),
         TriggerVolumeInspectorDrafts.copyTags(var0.tags),
         var0.rejectionDelayMode,
         var0.cooldown,
         var0.cooldownMode,
         var0.activationDelay,
         var0.projectileSource,
         var0.keepLoaded,
         var0.rotateEffectsOnPaste,
         var0.cancelDelayedOnExit
      );
   }

   class="kw">private void onCancelPresetSave() {
      UICommandBuilder var1 = new UICommandBuilder();
      var1.set("#PresetSavePage.Visible", false);
      var1.set("#MainPage.Visible", true);
      this.sendUpdate(var1);
   }

   class="kw">private void onOpenPresetLoad() {
      UICommandBuilder var1 = new UICommandBuilder();
      UIEventBuilder var2 = new UIEventBuilder();
      var1.set("#MainPage.Visible", false);
      var1.set("#PresetLoadPage.Visible", true);
      var1.clear("#PresetList");
      AssetStore var3 = AssetRegistry.getAssetStore(TriggerEffectAsset.class);
      if (var3 != null) {
         int var4 = 0;

         for (String var6 : ((DefaultAssetMap)var3.getAssetMap()).getAssetMap().keySet()) {
            String var7 = "#PresetList[" + var4 + "]";
            var1.append("#PresetList", "Common/TextButton.ui");
            var1.set(var7 + " #Button.Text", var6);
            var2.addEventBinding(
               CustomUIEventBindingType.Activating,
               var7 + " #Button",
               new EventData().append("Action", TriggerVolumeInspectorPage.Action.LoadPreset.name()).append("PresetId", var6)
            );
            var4++;
         }
      }

      this.sendUpdate(var1, var2, false);
   }

   class="kw">private void onLoadPreset(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.presetId != null && !var1.presetId.isBlank()) {
         this.hidePastePrefabPreview();
         AssetStore var2 = AssetRegistry.getAssetStore(TriggerEffectAsset.class);
         if (var2 != null) {
            TriggerEffectAsset var3 = (TriggerEffectAsset)((DefaultAssetMap)var2.getAssetMap()).getAsset(var1.presetId);
            if (var3 == null) {
               this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeEffectEditor.presetNotFound").param("name", var1.presetId));
            } else {
               this.currentConditions().clear();
               this.currentConditions().addAll(TriggerCondition.deepCopyList(Arrays.asList(var3.getConditions())));
               this.currentEffects(TriggerVolumeInspectorPage.EffectListKind.EFFECT).clear();
               this.currentEffects(TriggerVolumeInspectorPage.EffectListKind.EFFECT).addAll(TriggerEffect.deepCopyList(Arrays.asList(var3.getEffects())));
               this.currentEffects(TriggerVolumeInspectorPage.EffectListKind.REJECTION_EFFECT).clear();
               this.currentEffects(TriggerVolumeInspectorPage.EffectListKind.REJECTION_EFFECT)
                  .addAll(TriggerEffect.deepCopyList(Arrays.asList(var3.getRejectionEffects())));
               this.currentRules().clear();
               this.currentRules().addAll(TriggerRule.deepCopyList(Arrays.asList(var3.getRules())));
               this.setCurrentConditionTiming(var3.getConditionTiming());
               TriggerEffectAsset.VolumeSettings var4 = var3.getVolumeSettings();
               if (var4 != null && !this.selectedIsGroup) {
                  TriggerVolumeInspectorDrafts.VolumeDraft var5 = this.selectedVolumeDraft();
                  var5.targetTypes = var4.targetTypes().isEmpty() ? EnumSet.noneOf(EntityTargetType.class) : EnumSet.copyOf(var4.targetTypes());
                  var5.tags = TriggerVolumeInspectorDrafts.copyTags(var4.tags());
                  var5.rejectionDelayMode = var4.rejectionDelayMode();
                  var5.cooldown = var4.cooldown();
                  var5.cooldownMode = var4.cooldownMode();
                  var5.activationDelay = var4.activationDelay();
                  var5.projectileSource = var4.projectileSource();
                  var5.keepLoaded = var4.keepLoaded();
                  var5.rotateEffectsOnPaste = var4.rotateEffectsOnPaste();
                  var5.cancelDelayedOnExit = var4.cancelDelayedOnExit();
               }

               this.markSelectedDraftDirty();
               this.selectedKind = !this.currentConditions().isEmpty()
                  ? TriggerVolumeInspectorPage.EffectListKind.CONDITION
                  : (
                     !this.currentEffects(TriggerVolumeInspectorPage.EffectListKind.EFFECT).isEmpty()
                        ? TriggerVolumeInspectorPage.EffectListKind.EFFECT
                        : TriggerVolumeInspectorPage.EffectListKind.REJECTION_EFFECT
                  );
               this.selectedEffectIndex = this.getItemCount(this.selectedKind) == 0 ? -1 : 0;
               this.playerRef.sendMessage(Message.translation("server.customUI.triggerVolumeEffectEditor.presetLoaded").param("name", var1.presetId));
               UICommandBuilder var6 = new UICommandBuilder();
               var6.set("#PresetLoadPage.Visible", false);
               var6.set("#MainPage.Visible", true);
               this.sendUpdate(var6);
               this.rebuildAll();
            }
         }
      }
   }

   class="kw">private void onCancelPresetLoad() {
      UICommandBuilder var1 = new UICommandBuilder();
      var1.set("#PresetLoadPage.Visible", false);
      var1.set("#MainPage.Visible", true);
      this.sendUpdate(var1);
   }

   class="kw">private void onOpenAssetPicker(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.paramKey != null) {
         Object var2 = this.getSelectedItem();
         if (var2 != null) {
            Object var3 = this.pickerTargetFor(var2, var1.paramKey);
            String var4 = getCodecTypeId(var3);
            String var5 = getAssetSourceForField(var4, var1.paramKey);
            if (var5 != null) {
               this.pendingPickerFieldKey = var1.paramKey;
               this.pendingPickerSource = var5;
               this.pendingPickerMultiSelect = this.isPickerFieldMultiSelect(var3, var1.paramKey);
               this.pendingPickerSelections.clear();
               if (this.pendingPickerMultiSelect) {
                  this.pendingPickerSelections.addAll(this.currentPickerArrayValues(var3, var1.paramKey));
               }

               UICommandBuilder var6 = new UICommandBuilder();
               UIEventBuilder var7 = new UIEventBuilder();
               var6.set("#MainPage.Visible", false);
               var6.set("#AssetPickerPage.Visible", true);
               var6.set("#AssetPickerPage #SearchInput.Value", this.assetPickerSearchQuery);
               var6.set("#ConfirmAssetPickerButton.Visible", this.pendingPickerMultiSelect);
               var6.set("#AssetPickerFieldLabel.Text", var1.paramKey);
               this.buildAssetPickerList(var6, var7);
               this.bindStaticEvents(var7);
               this.sendUpdate(var6, var7, false);
            }
         }
      }
   }

   class="kw">private void onAssetPickerSearch(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.assetPickerQuery != null) {
         this.assetPickerSearchQuery = var1.assetPickerQuery.trim();
      }

      UICommandBuilder var2 = new UICommandBuilder();
      UIEventBuilder var3 = new UIEventBuilder();
      this.buildAssetPickerList(var2, var3);
      this.bindStaticEvents(var3);
      this.sendUpdate(var2, var3, false);
   }

   class="kw">private void onAssetPickerSelect(@Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.assetPickerSelection != null && this.pendingPickerFieldKey != null) {
         if (this.pendingPickerMultiSelect) {
            if (var1.assetPickerSelection.isEmpty()) {
               this.pendingPickerSelections.clear();
            } else if (!this.pendingPickerSelections.remove(var1.assetPickerSelection)) {
               this.pendingPickerSelections.add(var1.assetPickerSelection);
            }

            UICommandBuilder var5 = new UICommandBuilder();
            UIEventBuilder var7 = new UIEventBuilder();
            this.buildAssetPickerList(var5, var7);
            this.bindStaticEvents(var7);
            this.sendUpdate(var5, var7, false);
         } else {
            Object var2 = this.getSelectedItem();
            if (var2 != null) {
               Object var3 = this.pickerTargetFor(var2, this.pendingPickerFieldKey);
               BuilderCodec var4 = getItemBuilderCodec(var3);
               if (var4 != null) {
                  this.applyPickerValue(var4, var3, this.pendingPickerFieldKey, var1.assetPickerSelection.isEmpty() ? null : var1.assetPickerSelection);
                  this.markSelectedDraftDirty();
               }
            }

            if (isPastePrefabPreviewAssetField(this.pendingPickerFieldKey)) {
               this.refreshActivePastePrefabPreview();
            }

            this.pendingPickerFieldKey = null;
            this.pendingPickerSource = null;
            UICommandBuilder var6 = new UICommandBuilder();
            var6.set("#AssetPickerPage.Visible", false);
            var6.set("#MainPage.Visible", true);
            this.sendUpdate(var6);
            this.rebuildAll();
         }
      }
   }

   class="kw">private void onConfirmAssetPicker() {
      if (this.pendingPickerMultiSelect && this.pendingPickerFieldKey != null) {
         Object var1 = this.getSelectedItem();
         if (var1 != null) {
            Object var2 = this.pickerTargetFor(var1, this.pendingPickerFieldKey);
            BuilderCodec var3 = getItemBuilderCodec(var2);
            if (var3 != null) {
               this.applyPickerValues(var3, var2, this.pendingPickerFieldKey, this.pendingPickerSelections);
               this.markSelectedDraftDirty();
            }
         }

         if (isPastePrefabPreviewAssetField(this.pendingPickerFieldKey)) {
            this.refreshActivePastePrefabPreview();
         }

         this.closeAssetPicker();
      }
   }

   class="kw">private void onPreviewSound(@Nonnull TriggerVolumeInspectorPage.PageData var1, @Nonnull Store<EntityStore> var2) {
      if ("SoundEvent".equals(this.pendingPickerSource) && var1.assetPickerSelection != null && !var1.assetPickerSelection.isBlank()) {
         int var3 = SoundEvent.getAssetMap().getIndex(var1.assetPickerSelection);
         if (var3 != Integer.MIN_VALUE && var3 != 0) {
            Ref var4 = this.playerRef.getReference();
            if (var4 != null && var4.isValid()) {
               TransformComponent var5 = var2.getComponent(var4, TransformComponent.getComponentType());
               if (var5 != null) {
                  Vector3d var6 = var5.getPosition();
                  SoundUtil.playSoundEvent3d(var3, SoundCategory.SFX, var6.x(), var6.y(), var6.z(), 1.0F, 1.0F, var2);
               }
            }
         }
      }
   }

   class="kw">private void onCancelAssetPicker() {
      this.closeAssetPicker();
   }

   class="kw">private void closeAssetPicker() {
      this.pendingPickerFieldKey = null;
      this.pendingPickerSource = null;
      this.pendingPickerMultiSelect = false;
      this.pendingPickerSelections.clear();
      UICommandBuilder var1 = new UICommandBuilder();
      var1.set("#ConfirmAssetPickerButton.Visible", false);
      var1.set("#AssetPickerPage.Visible", false);
      var1.set("#MainPage.Visible", true);
      this.sendUpdate(var1);
      this.rebuildAll();
   }

   class="kw">private void registerSelectionObserver() {
      TriggerVolumeManager var1 = getManagerForWorld(this.selectedWorld);
      if (var1 != null) {
         var1.setSelectionObserver(this.playerRef.getUuid(), this.selectionObserver);
      }
   }

   class="kw">private void registerVolumeUpdateObserver() {
      TriggerVolumeManager var1 = getManagerForWorld(this.selectedWorld);
      if (var1 != null) {
         var1.setVolumeUpdateObserver(this.playerRef.getUuid(), this.volumeUpdateObserver);
      }
   }

   class="kw">private void onExternalSelectionChanged(@Nullable String var1) {
      if (!this.suppressSelectionObserver) {
         if (!Objects.equals(this.selectedId, var1) || this.selectedIsGroup) {
            TriggerVolumeManager var2 = getManagerForWorld(this.selectedWorld);
            if (var1 == null || var2 != null && var2.getVolume(var1) != null) {
               this.selectedId = var1;
               this.selectedIsGroup = false;
               this.selectedEffectIndex = -1;
               this.lastCommittedEntry = -1;
               this.pendingScrollToSelection = true;
               this.rebuildAll();
            }
         }
      }
   }

   class="kw">private void onExternalVolumeUpdated(@Nonnull VolumeEntry var1) {
      TriggerVolumesPlugin.PastePrefabPreviewState var2 = this.getActivePastePrefabPreviewState();
      if (var2 != null) {
         if (var2.selectedId() != null && var2.worldName().equals(this.selectedWorld)) {
            if (var2.selectedIsGroup()) {
               TriggerVolumeManager var3 = getManagerForWorld(this.selectedWorld);
               GroupEntry var4 = var3 != null ? var3.getGroup(var2.selectedId()) : null;
               if (var4 == null || !var4.getMemberVolumeIds().contains(var1.getId())) {
                  class="kw">return;
               }

               TriggerVolumeInspectorDrafts.GroupDraft var5 = this.groupDrafts.get(var2.selectedId());
               if (var5 != null) {
                  var5.origin = new Vector3d(var4.getOrigin());
               }
            } else {
               if (!var2.selectedId().equals(var1.getId())) {
                  class="kw">return;
               }

               TriggerVolumeInspectorDrafts.VolumeDraft var6 = this.volumeDrafts.get(var2.selectedId());
               if (var6 != null) {
                  var6.position = new Vector3d(var1.getPosition());
               }
            }

            this.refreshActivePastePrefabPreviewPosition();
         }
      }
   }

   class="kw">private void onExternalVolumeRemoved(@Nonnull String var1) {
      TriggerVolumesPlugin.PastePrefabPreviewState var2 = this.getActivePastePrefabPreviewState();
      if (var2 != null && var2.selectedId() != null) {
         if (!var2.selectedIsGroup() && var2.selectedId().equals(var1)) {
            this.hidePastePrefabPreview();
         } else {
            if (var2.selectedIsGroup()) {
               TriggerVolumeInspectorDrafts.GroupDraft var3 = this.groupDrafts.get(var2.selectedId());
               if (var3 != null && var3.memberVolumeIds.contains(var1)) {
                  this.hidePastePrefabPreview();
               }
            }
         }
      }
   }

   class="kw">private void syncSelectionToTool() {
      TriggerVolumeToolSelection var1 = new TriggerVolumeToolSelection();
      TriggerVolumeManager var2 = getManagerForWorld(this.selectedWorld);
      if (this.selectedId != null && var2 != null) {
         if (this.selectedIsGroup) {
            GroupEntry var3 = var2.getGroup(this.selectedId);
            if (var3 == null) {
               class="kw">return;
            }

            String[] var4 = var3.getMemberVolumeIds().stream().filter(var1x -> var2.getVolume(var1x) != null).toArray(String[]::new);
            var1.volumeIds = var4;
            var1.primaryVolumeId = var4.length > 0 ? var4[0] : null;
            this.suppressSelectionObserver = true;
            var2.setPlayerSelection(this.playerRef.getUuid(), var1.primaryVolumeId);
            this.suppressSelectionObserver = false;
         } else {
            var1.primaryVolumeId = this.selectedId;
            var1.volumeIds = new String[]{this.selectedId};
            this.suppressSelectionObserver = true;
            var2.setPlayerSelection(this.playerRef.getUuid(), this.selectedId);
            this.suppressSelectionObserver = false;
         }

         this.playerRef.getPacketHandler().write(var1);
      } else {
         if (var2 != null) {
            this.suppressSelectionObserver = true;
            var2.setPlayerSelection(this.playerRef.getUuid(), null);
            this.suppressSelectionObserver = false;
         }

         this.playerRef.getPacketHandler().write(var1);
      }
   }

   class="kw">private void applyPickerValue(@Nonnull BuilderCodec<?> var1, @Nonnull Object var2, @Nonnull String var3, @Nullable String var4) {
      List var5 = var1.getEntries().get(var3);
      if (var5 != null && !var5.isEmpty()) {
         BuilderField var6 = var5.getLast();
         BsonDocument var7 = new BsonDocument();
         Codec var8 = var6.getCodec().getChildCodec();
         if (var8 == Codec.STRING_ARRAY) {
            var7.put(var3, this.pickerArrayValue(var4));
         } else if (var4 != null) {
            var7.put(var3, new BsonString(var4));
         }

         try {
            var6.decode(var7, var2, ExtraInfo.THREAD_LOCAL.get());
         } catch (Exception var10) {
            ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var10)).log("Failed to apply picker value '%s' for field '%s'", var4, var3);
         }
      }
   }

   class="kw">private void applyPickerValues(@Nonnull BuilderCodec<?> var1, @Nonnull Object var2, @Nonnull String var3, @Nonnull Collection<String> var4) {
      List var5 = var1.getEntries().get(var3);
      if (var5 != null && !var5.isEmpty()) {
         BuilderField var6 = var5.getLast();
         BsonDocument var7 = new BsonDocument();
         var7.put(var3, this.pickerArrayValue(var4));

         try {
            var6.decode(var7, var2, ExtraInfo.THREAD_LOCAL.get());
         } catch (Exception var9) {
            ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var9)).log("Failed to apply picker values for field '%s'", var3);
         }
      }
   }

   @Nullable
   class="kw">private class="kw">static BuilderCodec<?> getItemBuilderCodec(@Nonnull Object var0) {
      if (var0 class="kw">instanceof TriggerCondition var2) {
         class="kw">return getConditionBuilderCodecFor(getConditionTypeId(var2));
      } else {
         class="kw">return var0 class="kw">instanceof TriggerRule var1 ? getRuleBuilderCodecFor(getRuleTypeId(var1)) : getBuilderCodecFor(getTypeId((TriggerEffect)var0));
      }
   }

   @Nonnull
   class="kw">private Object pickerTargetFor(@Nonnull Object var1, @Nullable String var2) {
      if (var2 != null && var1 class="kw">instanceof ModifyRulesEffect var3 && var3.getRule() != null) {
         BuilderCodec var4 = getBuilderCodecFor(getTypeId(var3));
         if (var4 == null || !var4.getEntries().containsKey(var2)) {
            class="kw">return var3.getRule();
         }
      }

      class="kw">return var1;
   }

   @Nonnull
   class="kw">private BsonArray pickerArrayValue(@Nullable String var1) {
      class="kw">return var1 != null && !var1.isBlank() ? this.pickerArrayValue(List.of(var1)) : new BsonArray();
   }

   @Nonnull
   class="kw">private BsonArray pickerArrayValue(@Nonnull Collection<String> var1) {
      BsonArray var2 = new BsonArray();

      for (String var4 : var1) {
         var2.add(new BsonString(var4));
      }

      class="kw">return var2;
   }

   class="kw">private boolean isPickerFieldMultiSelect(@Nonnull Object var1, @Nonnull String var2) {
      BuilderCodec var3 = getItemBuilderCodec(var1);
      if (var3 == null) {
         class="kw">return false;
      } else {
         List var4 = var3.getEntries().get(var2);
         if (var4 != null && !var4.isEmpty()) {
            BuilderField var5 = var4.getLast();
            class="kw">return var5.getCodec().getChildCodec() == Codec.STRING_ARRAY;
         } else {
            class="kw">return false;
         }
      }
   }

   @Nonnull
   class="kw">private Collection<String> currentPickerArrayValues(@Nonnull Object var1, @Nonnull String var2) {
      BuilderCodec var3 = getItemBuilderCodec(var1);
      if (var3 == null) {
         class="kw">return List.of();
      }

      BsonDocument var4;
      try {
         var4 = ((BuilderCodec<Object>)var3).encode(var1, EmptyExtraInfo.EMPTY);
      } catch (Exception var11) {
         class="kw">return List.of();
      }

      LinkedHashSet var5 = new LinkedHashSet<>();
      BsonValue var6 = var4.get(var2);
      if (var6 class="kw">instanceof BsonArray) {
         for (BsonValue var9 : (BsonArray)var6) {
            if (var9 class="kw">instanceof BsonString var10) {
               var5.add(var10.getValue());
            }
         }
      }

      class="kw">return var5;
   }

   class="kw">private void buildAssetPickerList(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      var1.clear("#AssetPickerList");
      Collection var3 = this.resolvePickerIds();
      String var4 = this.assetPickerSearchQuery.toLowerCase(Locale.ROOT);
      List var5;
      if (!var4.isEmpty()) {
         Object2IntMap var6 = new Object2IntOpenHashMap(var3.size());

         for (String var8 : var3) {
            if (var8.toLowerCase(Locale.ROOT).contains(var4)) {
               var6.put(var8, StringCompareUtil.getFuzzyDistance(var8, var4, Locale.ROOT));
            }
         }

         var5 = var6.keySet().stream().sorted().sorted(Comparator.comparingInt(var6::getInt).reversed()).toList();
      } else if ("AnimationApplyOn".equals(this.pendingPickerSource)) {
         var5 = var3.stream().sorted(Comparator.<String, Boolean>comparing(var0 -> !isApplyOnPseudo(var0)).thenComparing(Comparator.naturalOrder())).toList();
      } else {
         var5 = var3.stream().sorted().toList();
      }

      List var12;
      if (this.pendingPickerMultiSelect && !this.pendingPickerSelections.isEmpty()) {
         ArrayList var13 = new ArrayList<>(var5.size());

         for (String var9 : var5) {
            if (this.pendingPickerSelections.contains(var9)) {
               var13.add(var9);
            }
         }

         for (String var18 : var5) {
            if (!this.pendingPickerSelections.contains(var18)) {
               var13.add(var18);
            }
         }

         var12 = var13.size() > 50 ? var13.subList(0, 50) : var13;
      } else {
         var12 = var5.size() > 50 ? var5.subList(0, 50) : var5;
      }

      var1.set("#AssetPickerNoResults.Visible", var12.isEmpty());
      var1.append("#AssetPickerList", "Common/TextButton.ui");
      var1.set("#AssetPickerList[0] #Button.Text", Message.translation("server.customUI.triggerVolumeEffectEditor.assetPicker.clearEntry"));
      var2.addEventBinding(
         CustomUIEventBindingType.Activating,
         "#AssetPickerList[0] #Button",
         new EventData().append("Action", TriggerVolumeInspectorPage.Action.AssetPickerSelect.name()).append("AssetPickerSelection", "")
      );
      boolean var14 = "SoundEvent".equals(this.pendingPickerSource);

      for (int var17 = 0; var17 < var12.size(); var17++) {
         String var19 = var12.get(var17);
         String var10 = "#AssetPickerList[" + (var17 + 1) + "]";
         String var11 = this.pendingPickerMultiSelect && this.pendingPickerSelections.contains(var19) ? "[x] " + var19 : var19;
         if (var14) {
            var1.append("#AssetPickerList", "Pages/TriggerVolume/TriggerVolumeInspectorSoundAssetRow.ui");
            var1.set(var10 + " #SelectButton.Text", var11);
            var2.addEventBinding(
               CustomUIEventBindingType.Activating,
               var10 + " #SelectButton",
               new EventData().append("Action", TriggerVolumeInspectorPage.Action.AssetPickerSelect.name()).append("AssetPickerSelection", var19)
            );
            var2.addEventBinding(
               CustomUIEventBindingType.Activating,
               var10 + " #PreviewButton",
               new EventData().append("Action", TriggerVolumeInspectorPage.Action.PreviewSound.name()).append("AssetPickerSelection", var19),
               false
            );
         } else {
            var1.append("#AssetPickerList", "Common/TextButton.ui");
            if ("AnimationApplyOn".equals(this.pendingPickerSource) && isApplyOnPseudo(var19)) {
               var1.set(var10 + " #Button.Text", Message.translation("server.customUI.triggerVolumeEffectEditor.applyOn." + var19));
            } else if ("Animation".equals(this.pendingPickerSource) && this.isLoopingAnimation("PlayAnimation", "Animation", var19)) {
               var1.set(
                  var10 + " #Button.Text",
                  Message.translation("server.customUI.triggerVolumeEffectEditor.assetPicker.animationLooping").param("animation", var19)
               );
            } else {
               var1.set(var10 + " #Button.Text", var11);
            }

            var2.addEventBinding(
               CustomUIEventBindingType.Activating,
               var10 + " #Button",
               new EventData().append("Action", TriggerVolumeInspectorPage.Action.AssetPickerSelect.name()).append("AssetPickerSelection", var19)
            );
         }
      }
   }

   class="kw">private void rebuildAll() {
      this.revertRejectedDraftIds();
      UICommandBuilder var1 = new UICommandBuilder();
      UIEventBuilder var2 = new UIEventBuilder();
      this.buildWorldDropdown(var1);
      this.buildTabs(var1, var2);
      this.buildList(var1, var2);
      this.buildSelectedPane(var1, var2);
      this.bindStaticEvents(var2);
      this.refreshActivePastePrefabPreviewPosition();
      this.sendUpdate(var1, var2, false);
   }

   class="kw">private void rebuildEffectListOnly() {
      UICommandBuilder var1 = new UICommandBuilder();
      UIEventBuilder var2 = new UIEventBuilder();
      this.buildEffectList(var1, var2);
      this.sendUpdate(var1, var2, false);
   }

   @Nullable
   class="kw">private TriggerVolumeManager getSelectedManager() {
      class="kw">return getManagerForWorld(this.selectedWorld);
   }

   @Nullable
   class="kw">private TriggerVolumeInspectorDrafts.VolumeDraft selectedVolumeDraft() {
      TriggerVolumeManager var1 = this.getSelectedManager();
      if (var1 != null && this.selectedId != null) {
         VolumeEntry var2 = var1.getVolume(this.selectedId);
         class="kw">return var2 != null ? this.draftForVolume(var2) : null;
      } else {
         class="kw">return null;
      }
   }

   @Nullable
   class="kw">private TriggerVolumeInspectorDrafts.GroupDraft selectedGroupDraft() {
      TriggerVolumeManager var1 = this.getSelectedManager();
      if (var1 != null && this.selectedId != null) {
         GroupEntry var2 = var1.getGroup(this.selectedId);
         class="kw">return var2 != null ? this.draftForGroup(var2) : null;
      } else {
         class="kw">return null;
      }
   }

   @Nullable
   class="kw">private TriggerVolumeInspectorDrafts.GroupDraft selectedInheritedGroupDraft() {
      if (this.selectedIsGroup) {
         class="kw">return null;
      } else {
         TriggerVolumeManager var1 = this.getSelectedManager();
         TriggerVolumeInspectorDrafts.VolumeDraft var2 = this.selectedVolumeDraft();
         if (var1 != null && var2 != null && var2.groupId != null) {
            GroupEntry var3 = var1.getGroup(var2.groupId);
            class="kw">return var3 != null ? this.draftForGroup(var3) : null;
         } else {
            class="kw">return null;
         }
      }
   }

   @Nonnull
   class="kw">private TriggerVolumeInspectorDrafts.VolumeDraft draftForVolume(@Nonnull VolumeEntry var1) {
      class="kw">return this.volumeDrafts.computeIfAbsent(var1.getId(), var1x -> TriggerVolumeInspectorDrafts.VolumeDraft.from(var1));
   }

   @Nonnull
   class="kw">private TriggerVolumeInspectorDrafts.GroupDraft draftForGroup(@Nonnull GroupEntry var1) {
      class="kw">return this.groupDrafts.computeIfAbsent(var1.getId(), var1x -> TriggerVolumeInspectorDrafts.GroupDraft.from(var1));
   }

   @Nonnull
   class="kw">private Map<String, String> currentTags() {
      class="kw">return this.selectedIsGroup ? this.selectedGroupDraft().tags : this.selectedVolumeDraft().tags;
   }

   @Nonnull
   class="kw">private List<TriggerCondition> currentConditions() {
      class="kw">return this.selectedIsGroup ? this.selectedGroupDraft().conditions : this.selectedVolumeDraft().conditions;
   }

   @Nonnull
   class="kw">private List<TriggerRule> currentRules() {
      class="kw">return this.selectedIsGroup ? this.selectedGroupDraft().rules : this.selectedVolumeDraft().rules;
   }

   @Nonnull
   class="kw">private List<TriggerEffect> currentEffects(@Nonnull TriggerVolumeInspectorPage.EffectListKind var1) {
      if (this.selectedIsGroup) {
         TriggerVolumeInspectorDrafts.GroupDraft var3 = this.selectedGroupDraft();
         class="kw">return var1 == TriggerVolumeInspectorPage.EffectListKind.REJECTION_EFFECT ? var3.rejectionEffects : var3.effects;
      } else {
         TriggerVolumeInspectorDrafts.VolumeDraft var2 = this.selectedVolumeDraft();
         class="kw">return var1 == TriggerVolumeInspectorPage.EffectListKind.REJECTION_EFFECT ? var2.rejectionEffects : var2.effects;
      }
   }

   @Nonnull
   class="kw">private ConditionTiming currentConditionTiming() {
      class="kw">return this.selectedIsGroup ? this.selectedGroupDraft().conditionTiming : this.selectedVolumeDraft().conditionTiming;
   }

   class="kw">private void setCurrentConditionTiming(@Nonnull ConditionTiming var1) {
      if (this.selectedIsGroup) {
         TriggerVolumeInspectorDrafts.GroupDraft var2 = this.selectedGroupDraft();
         var2.conditionTiming = var1;
         var2.markDirty();
      } else {
         TriggerVolumeInspectorDrafts.VolumeDraft var3 = this.selectedVolumeDraft();
         var3.conditionTiming = var1;
         var3.markDirty();
      }
   }

   class="kw">private void markSelectedDraftDirty() {
      if (this.selectedIsGroup) {
         TriggerVolumeInspectorDrafts.GroupDraft var1 = this.selectedGroupDraft();
         if (var1 != null) {
            var1.markDirty();
         }
      } else {
         TriggerVolumeInspectorDrafts.VolumeDraft var2 = this.selectedVolumeDraft();
         if (var2 != null) {
            var2.markDirty();
         }
      }
   }

   @Nullable
   class="kw">private Object getSelectedItem() {
      if (this.selectedId != null && this.selectedEffectIndex >= 0 && this.selectedEffectIndex < this.getItemCount(this.selectedKind)) {
         class="kw">return class="kw">switch (this.selectedKind) {
            case CONDITION -> (TriggerCondition)this.currentConditions().get(this.selectedEffectIndex);
            case EFFECT, REJECTION_EFFECT -> (TriggerEffect)this.currentEffects(this.selectedKind).get(this.selectedEffectIndex);
            case RULE -> (TriggerRule)this.currentRules().get(this.selectedEffectIndex);
         };
      } else {
         class="kw">return null;
      }
   }

   class="kw">private int getItemCount(@Nonnull TriggerVolumeInspectorPage.EffectListKind var1) {
      class="kw">return class="kw">switch (var1) {
         case CONDITION -> this.currentConditions().size();
         case EFFECT, REJECTION_EFFECT -> this.currentEffects(var1).size();
         case RULE -> this.currentRules().size();
      };
   }

   class="kw">private class="kw">static int getGroupItemCount(@Nonnull TriggerVolumeInspectorPage.EffectListKind var0, @Nonnull TriggerVolumeInspectorDrafts.GroupDraft var1) {
      class="kw">return class="kw">switch (var0) {
         case CONDITION -> var1.conditions.size();
         case EFFECT -> var1.effects.size();
         case REJECTION_EFFECT -> var1.rejectionEffects.size();
         case RULE -> var1.rules.size();
      };
   }

   @Nullable
   class="kw">private TriggerEventType getItemEventType(@Nonnull TriggerVolumeInspectorPage.EffectListKind var1, int var2) {
      class="kw">return var1 == TriggerVolumeInspectorPage.EffectListKind.CONDITION
         ? this.currentConditions().get(var2).getEventType()
         : this.currentEffects(var1).get(var2).getEventType();
   }

   @Nullable
   class="kw">private class="kw">static TriggerEventType getGroupItemEventType(
      @Nonnull TriggerVolumeInspectorPage.EffectListKind var0, int var1, @Nonnull TriggerVolumeInspectorDrafts.GroupDraft var2
   ) {
      class="kw">return class="kw">switch (var0) {
         case CONDITION -> var2.conditions.get(var1).getEventType();
         case EFFECT -> var2.effects.get(var1).getEventType();
         case REJECTION_EFFECT -> var2.rejectionEffects.get(var1).getEventType();
         case RULE -> null;
      };
   }

   class="kw">private int getItemEntry(@Nonnull TriggerVolumeInspectorPage.EffectListKind var1, int var2) {
      class="kw">return var1 == TriggerVolumeInspectorPage.EffectListKind.CONDITION
         ? this.currentConditions().get(var2).getEntry()
         : this.currentEffects(var1).get(var2).getEntry();
   }

   class="kw">private class="kw">static int getGroupItemEntry(
      @Nonnull TriggerVolumeInspectorPage.EffectListKind var0, int var1, @Nonnull TriggerVolumeInspectorDrafts.GroupDraft var2
   ) {
      class="kw">return class="kw">switch (var0) {
         case CONDITION -> var2.conditions.get(var1).getEntry();
         case EFFECT -> var2.effects.get(var1).getEntry();
         case REJECTION_EFFECT -> var2.rejectionEffects.get(var1).getEntry();
         case RULE -> 0;
      };
   }

   @Nonnull
   class="kw">private String getItemTypeId(@Nonnull TriggerVolumeInspectorPage.EffectListKind var1, int var2) {
      class="kw">return class="kw">switch (var1) {
         case CONDITION -> getConditionTypeId(this.currentConditions().get(var2));
         case EFFECT, REJECTION_EFFECT -> getTypeId(this.currentEffects(var1).get(var2));
         case RULE -> getRuleTypeId(this.currentRules().get(var2));
      };
   }

   @Nonnull
   class="kw">private class="kw">static String getGroupItemTypeId(
      @Nonnull TriggerVolumeInspectorPage.EffectListKind var0, int var1, @Nonnull TriggerVolumeInspectorDrafts.GroupDraft var2
   ) {
      class="kw">return class="kw">switch (var0) {
         case CONDITION -> getConditionTypeId(var2.conditions.get(var1));
         case EFFECT -> getTypeId(var2.effects.get(var1));
         case REJECTION_EFFECT -> getTypeId(var2.rejectionEffects.get(var1));
         case RULE -> getRuleTypeId(var2.rules.get(var1));
      };
   }

   class="kw">private boolean matchesFilter(@Nonnull String var1) {
      class="kw">return this.filterText.isEmpty() || var1.toLowerCase(Locale.ROOT).contains(this.filterText);
   }

   class="kw">private boolean matchesVolumeFilter(@Nonnull VolumeEntry var1) {
      if (this.filterText.isEmpty()) {
         class="kw">return true;
      } else {
         class="kw">return this.draftForVolume(var1).id.toLowerCase(Locale.ROOT).contains(this.filterText) ? true : this.tagsMatchFilter(this.draftForVolume(var1).tags);
      }
   }

   class="kw">private boolean matchesGroupFilter(@Nonnull String var1, @Nonnull GroupEntry var2, @Nonnull List<VolumeEntry> var3) {
      if (this.filterText.isEmpty()) {
         class="kw">return true;
      }

      if (var1.toLowerCase(Locale.ROOT).contains(this.filterText)) {
         class="kw">return true;
      }

      if (this.tagsMatchFilter(this.draftForGroup(var2).tags)) {
         class="kw">return true;
      }

      for (VolumeEntry var5 : var3) {
         if (this.matchesVolumeFilter(var5)) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">private boolean tagsMatchFilter(@Nonnull Map<String, String> var1) {
      for (Entry var3 : var1.entrySet()) {
         if (this.tagMatchesFilter(var3.getKey(), var3.getValue())) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">private boolean tagMatchesFilter(@Nonnull String var1, @Nullable String var2) {
      if (this.filterText.isEmpty()) {
         class="kw">return false;
      }

      String var3 = var1.toLowerCase(Locale.ROOT);
      String var4 = var2 != null ? var2.toLowerCase(Locale.ROOT) : "";
      class="kw">return var3.contains(this.filterText) || var4.contains(this.filterText) || (var3 + "=" + var4).contains(this.filterText);
   }

   class="kw">private int appendRowTagChips(@Nonnull UICommandBuilder var1, @Nonnull String var2, @Nonnull Map<String, String> var3, boolean var4) {
      if (var3.isEmpty()) {
         class="kw">return 0;
      }

      List var5 = this.orderedRowTags(var3);
      int var6 = var4 ? 236 : 252;
      int var7 = 0;
      int var8 = 1;
      int var9 = 0;

      for (int var10 = 0; var10 < var5.size(); var10++) {
         Entry var11 = var5.get(var10);
         String var12 = this.chipDisplay(var11.getKey(), var11.getValue());
         int var13 = chipWidth(var12);
         if (var9 > 0 && var9 + var13 > var6) {
            if (var8 == 2) {
               this.appendChip(var1, var2, var7, "+" + (var5.size() - var10), 5596014);
               class="kw">return 2;
            }

            var8++;
            var9 = 0;
         }

         this.appendChip(var1, var2, var7++, var12, tagChipColor(var11.getKey()));
         var9 += var13;
      }

      class="kw">return var8;
   }

   @Nonnull
   class="kw">private List<Entry<String, String>> orderedRowTags(@Nonnull Map<String, String> var1) {
      ArrayList var2 = new ArrayList<>(var1.entrySet());
      if (!this.filterText.isEmpty()) {
         var2.sort(
            (var1x, var2x) -> Boolean.compare(this.tagMatchesFilter(var2x.getKey(), var2x.getValue()), this.tagMatchesFilter(var1x.getKey(), var1x.getValue()))
         );
      }

      class="kw">return var2;
   }

   @Nonnull
   class="kw">private String chipDisplay(@Nonnull String var1, @Nullable String var2) {
      boolean var3 = var2 != null && !var2.isEmpty();
      boolean var4 = var3 && !this.filterText.isEmpty() && var2.toLowerCase(Locale.ROOT).contains(this.filterText);
      class="kw">return var4 ? var1 + ": " + var2 : var1;
   }

   class="kw">private class="kw">static int chipWidth(@Nonnull String var0) {
      class="kw">return (int)Math.ceil(var0.length() * 6.2) + 14;
   }

   @Nullable
   class="kw">private class="kw">static TriggerVolumeManager getManagerForWorld(@Nonnull String var0) {
      for (World var2 : Universe.get().getWorlds().values()) {
         if (var2.getName().equalsIgnoreCase(var0)) {
            class="kw">return var2.getEntityStore().getStore().getResource(TriggerVolumesPlugin.get().getManagerResourceType());
         }
      }

      class="kw">return null;
   }

   @Nonnull
   class="kw">private class="kw">static PatchStyle colorPatch(int var0) {
      class="kw">return new PatchStyle().setColor(Value.of(colorToHex(var0)));
   }

   @Nonnull
   class="kw">private class="kw">static PatchStyle tagColorPatch(int var0) {
      class="kw">return new PatchStyle().setColor(Value.of(colorToHex(var0) + "99"));
   }

   class="kw">private class="kw">static int tagChipColor(@Nonnull String var0) {
      int var1 = var0.toLowerCase(Locale.ROOT).hashCode();
      var1 ^= var1 >>> 16;
      var1 *= 2146121005;
      var1 ^= var1 >>> 15;
      var1 *= -2073254261;
      var1 ^= var1 >>> 16;
      class="kw">return TAG_CHIP_COLORS[Math.floorMod(var1, TAG_CHIP_COLORS.length)];
   }

   class="kw">private void appendChip(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull String var4, int var5) {
      String var6 = var2 + "[" + var3 + "]";
      var1.append(var2, "Pages/TriggerVolume/TriggerVolumeTagChip.ui");
      var1.setObject(var6 + ".Background", tagColorPatch(var5));
      var1.set(var6 + " #ChipLabel.Text", var4);
   }

   @Nonnull
   class="kw">private class="kw">static String colorToHex(int var0) {
      int var1 = var0 >> 16 & 0xFF;
      int var2 = var0 >> 8 & 0xFF;
      int var3 = var0 & 0xFF;
      class="kw">return String.format("#%02X%02X%02X", var1, var2, var3);
   }

   @Nonnull
   class="kw">private class="kw">static String colorToHex(@Nonnull Vector3f var0) {
      int var1 = Math.round(var0.x() * 255.0F);
      int var2 = Math.round(var0.y() * 255.0F);
      int var3 = Math.round(var0.z() * 255.0F);
      class="kw">return String.format("#%02X%02X%02X", var1, var2, var3);
   }

   @Nullable
   class="kw">private class="kw">static Vector3f parseColor(@Nullable String var0) {
      if (var0 != null && !var0.isBlank()) {
         int var1 = parsePackedColor(var0, 52428);
         class="kw">return new Vector3f((var1 >> 16 & 0xFF) / 255.0F, (var1 >> 8 & 0xFF) / 255.0F, (var1 & 0xFF) / 255.0F);
      } else {
         class="kw">return null;
      }
   }

   class="kw">private class="kw">static int parsePackedColor(@Nullable String var0, int var1) {
      if (var0 == null) {
         class="kw">return var1;
      }

      String var2 = var0.trim();
      if (var2.startsWith("#")) {
         var2 = var2.substring(1);
      }

      if (var2.length() > 6) {
         var2 = var2.substring(0, 6);
      }

      try {
         class="kw">return Integer.parseInt(var2, 16) & 16777215;
      } catch (NumberFormatException var4) {
         class="kw">return var1;
      }
   }

   class="kw">private class="kw">static void setVec(@Nonnull Vector3d var0, @Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.vecX != null && var1.vecY != null && var1.vecZ != null) {
         var0.set(var1.vecX, var1.vecY, var1.vecZ);
      }
   }

   class="kw">private class="kw">static void setBoxDimensions(@Nonnull Vector3d var0, @Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.vecX != null && var1.vecY != null && var1.vecZ != null) {
         var0.set(clampDimension(var1.vecX, 0.25), clampDimension(var1.vecY, 0.25), clampDimension(var1.vecZ, 0.25));
      }
   }

   class="kw">private class="kw">static void setSphereDimensions(@Nonnull Vector3d var0, @Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.paramNumericValue != null) {
         var0.set(clampDimension(var1.paramNumericValue, 0.25), 0.0, 0.0);
      }
   }

   class="kw">private class="kw">static void setCylinderDimensions(@Nonnull Vector3d var0, @Nonnull TriggerVolumeInspectorPage.PageData var1) {
      if (var1.vecX != null && var1.vecY != null) {
         var0.set(clampDimension(var1.vecX, 0.25), clampDimension(var1.vecY, 0.5), 0.0);
      }
   }

   class="kw">private class="kw">static double clampDimension(double var0, double var2) {
      class="kw">return Math.min(1000.0, Math.max(var2, var0));
   }

   @Nonnull
   class="kw">private class="kw">static <T class="kw">extends Enum<T>> T parseEnum(@Nonnull Class<T> var0, @Nullable String var1, @Nonnull T var2) {
      if (var1 == null) {
         class="kw">return var2;
      }

      try {
         class="kw">return Enum.valueOf(var0, var1);
      } catch (IllegalArgumentException var4) {
         class="kw">return var2;
      }
   }

   @Nonnull
   class="kw">private class="kw">static Set<EntityTargetType> parseTargetTypes(@Nullable String var0) {
      class="kw">return class="kw">switch (var0 != null ? var0 : "PLAYER") {
         case "NONE" -> EnumSet.noneOf(EntityTargetType.class);
         case "NPC" -> EnumSet.of(EntityTargetType.NPC);
         case "ITEM_DROP" -> EnumSet.of(EntityTargetType.ITEM_DROP);
         case "PROJECTILE" -> EnumSet.of(EntityTargetType.PROJECTILE);
         case "ALL" -> EnumSet.allOf(EntityTargetType.class);
         class="kw">default -> EnumSet.of(EntityTargetType.PLAYER);
      };
   }

   @Nonnull
   class="kw">private class="kw">static String targetTypesValue(@Nonnull Set<EntityTargetType> var0) {
      if (var0.containsAll(EnumSet.allOf(EntityTargetType.class))) {
         class="kw">return "ALL";
      } else if (var0.contains(EntityTargetType.PROJECTILE)) {
         class="kw">return "PROJECTILE";
      } else if (var0.contains(EntityTargetType.ITEM_DROP)) {
         class="kw">return "ITEM_DROP";
      } else if (var0.contains(EntityTargetType.NPC)) {
         class="kw">return "NPC";
      } else {
         class="kw">return var0.contains(EntityTargetType.PLAYER) ? "PLAYER" : "NONE";
      }
   }

   @Nonnull
   class="kw">private class="kw">static List<DropdownEntryInfo> targetTypeEntries() {
      class="kw">return List.of(
         option("server.customUI.triggerVolumeInspector.option.none", "NONE"),
         option("server.customUI.triggerVolumeInspector.option.player", "PLAYER"),
         option("server.customUI.triggerVolumeInspector.option.npc", "NPC"),
         option("server.customUI.triggerVolumeInspector.option.itemDrop", "ITEM_DROP"),
         option("server.customUI.triggerVolumeInspector.option.projectile", "PROJECTILE"),
         option("server.customUI.triggerVolumeInspector.option.all", "ALL")
      );
   }

   @Nonnull
   class="kw">private class="kw">static List<DropdownEntryInfo> projectileSourceEntries() {
      class="kw">return List.of(
         option(
            "server.customUI.triggerVolumeInspector.option.projectileSource.shooter",
            ProjectileSource.SHOOTER.name(),
            "server.customUI.triggerVolumeInspector.option.projectileSource.shooter.tooltip"
         ),
         option(
            "server.customUI.triggerVolumeInspector.option.projectileSource.projectile",
            ProjectileSource.PROJECTILE.name(),
            "server.customUI.triggerVolumeInspector.option.projectileSource.projectile.tooltip"
         )
      );
   }

   @Nonnull
   class="kw">private class="kw">static List<DropdownEntryInfo> shapeEntries() {
      class="kw">return List.of(
         option("server.customUI.triggerVolumeInspector.option.box", TriggerVolumeShapeType.Box.name()),
         option("server.customUI.triggerVolumeInspector.option.sphere", TriggerVolumeShapeType.Sphere.name()),
         option("server.customUI.triggerVolumeInspector.option.cylinder", TriggerVolumeShapeType.Cylinder.name())
      );
   }

   @Nonnull
   class="kw">private class="kw">static List<DropdownEntryInfo> cooldownModeEntries() {
      class="kw">return List.of(
         option(
            "server.customUI.triggerVolumeInspector.option.perEntity",
            CooldownMode.PER_ENTITY.name(),
            "server.customUI.triggerVolumeInspector.option.perEntity.tooltip"
         ),
         option("server.customUI.triggerVolumeInspector.option.total", CooldownMode.TOTAL.name(), "server.customUI.triggerVolumeInspector.option.total.tooltip")
      );
   }

   @Nonnull
   class="kw">private class="kw">static List<DropdownEntryInfo> conditionTimingEntries() {
      class="kw">return List.of(
         option(
            "server.customUI.triggerVolumeInspector.option.beforeVolumeDelay",
            ConditionTiming.BEFORE_VOLUME_DELAY.name(),
            "server.customUI.triggerVolumeInspector.option.beforeVolumeDelay.tooltip"
         ),
         option(
            "server.customUI.triggerVolumeInspector.option.afterVolumeDelay",
            ConditionTiming.AFTER_VOLUME_DELAY.name(),
            "server.customUI.triggerVolumeInspector.option.afterVolumeDelay.tooltip"
         )
      );
   }

   @Nonnull
   class="kw">private class="kw">static List<DropdownEntryInfo> rejectionDelayModeEntries() {
      class="kw">return List.of(
         option(
            "server.customUI.triggerVolumeInspector.option.rejectionImmediate",
            RejectionDelayMode.IMMEDIATE.name(),
            "server.customUI.triggerVolumeInspector.option.rejectionImmediate.tooltip"
         ),
         option(
            "server.customUI.triggerVolumeInspector.option.rejectionUseVolumeDelay",
            RejectionDelayMode.USE_VOLUME_DELAY.name(),
            "server.customUI.triggerVolumeInspector.option.rejectionUseVolumeDelay.tooltip"
         )
      );
   }

   @Nonnull
   class="kw">private class="kw">static DropdownEntryInfo option(@Nonnull String var0, @Nonnull String var1) {
      class="kw">return new DropdownEntryInfo(LocalizableString.fromMessageId(var0), var1);
   }

   @Nonnull
   class="kw">private class="kw">static DropdownEntryInfo option(@Nonnull String var0, @Nonnull String var1, @Nonnull String var2) {
      class="kw">return new DropdownEntryInfo(LocalizableString.fromMessageId(var0), var1, LocalizableString.fromMessageId(var2));
   }

   @Nonnull
   class="kw">private class="kw">static Message fieldLabel(@Nonnull String var0) {
      class="kw">return Message.translation("server.customUI.triggerVolumeInspector.field." + var0);
   }

   @Nonnull
   class="kw">private class="kw">static Message volumeFieldTooltip(@Nonnull String var0) {
      class="kw">return Message.translation("server.customUI.triggerVolumeInspector.field." + var0 + ".tooltip");
   }

   @Nonnull
   class="kw">private class="kw">static Message fieldLabel(@Nonnull String var0, @Nonnull String var1) {
      String var2 = "server.customUI.triggerVolumeEffectEditor.field." + var0 + "." + var1;
      if (messageExists(var2)) {
         class="kw">return Message.translation(var2);
      }

      String var3 = "server.customUI.triggerVolumeEffectEditor.field.common." + var1;
      class="kw">return messageExists(var3) ? Message.translation(var3) : Message.translation(var2);
   }

   @Nonnull
   class="kw">private class="kw">static Message effectFieldTooltip(@Nonnull String var0, @Nonnull String var1) {
      String var2 = "server.customUI.triggerVolumeEffectEditor.field." + var0 + "." + var1 + ".tooltip";
      if (messageExists(var2)) {
         class="kw">return Message.translation(var2);
      }

      String var3 = "server.customUI.triggerVolumeEffectEditor.field.common." + var1 + ".tooltip";
      class="kw">return messageExists(var3) ? Message.translation(var3) : Message.translation(var2);
   }

   class="kw">private class="kw">static void setEffectFieldTooltip(@Nonnull UICommandBuilder var0, @Nonnull String var1, @Nonnull String var2, @Nonnull String var3) {
      if (!var2.isEmpty()) {
         var0.set(var1 + " #Label.TooltipText", effectFieldTooltip(var2, var3));
      }
   }

   class="kw">private class="kw">static void setEffectFieldPlaceholder(@Nonnull UICommandBuilder var0, @Nonnull String var1, @Nonnull String var2, @Nonnull String var3) {
      if (!var2.isEmpty()) {
         String var4 = "server.customUI.triggerVolumeEffectEditor.field." + var2 + "." + var3 + ".placeholder";
         I18nModule var5 = I18nModule.get();
         if (var5 != null && var5.getMessage("en-US", var4) != null) {
            var0.set(var1 + " #Input.PlaceholderText", Message.translation(var4));
         }
      }
   }

   class="kw">private class="kw">static boolean isNonNegativeNumericField(@Nonnull String var0, @Nonnull String var1) {
      class="kw">return NON_NEGATIVE_NUMERIC_FIELDS.contains(var0 + "." + var1);
   }

   @Nonnull
   class="kw">private class="kw">static String getCodecTypeId(@Nonnull Object var0) {
      if (var0 class="kw">instanceof TriggerCondition var2) {
         class="kw">return getConditionTypeId(var2);
      } else {
         class="kw">return var0 class="kw">instanceof TriggerRule var1 ? getRuleTypeId(var1) : getTypeId((TriggerEffect)var0);
      }
   }

   @Nonnull
   class="kw">private class="kw">static EventData paramEvent(@Nonnull String var0, @Nonnull String var1) {
      class="kw">return new EventData().append("Action", TriggerVolumeInspectorPage.Action.UpdateParameter.name()).append("ParamKey", var0).append("@ParamValue", var1);
   }

   @Nonnull
   class="kw">private class="kw">static EventData boolParamEvent(@Nonnull String var0, @Nonnull String var1) {
      class="kw">return new EventData().append("Action", TriggerVolumeInspectorPage.Action.UpdateParameter.name()).append("ParamKey", var0).append("@ParamBool", var1);
   }

   @Nonnull
   class="kw">private class="kw">static EventData numericParamEvent(@Nonnull String var0, @Nonnull String var1) {
      class="kw">return new EventData()
         .append("Action", TriggerVolumeInspectorPage.Action.UpdateParameter.name())
         .append("ParamKey", var0)
         .append("@ParamNumericValue", var1);
   }

   @Nonnull
   class="kw">private class="kw">static TriggerVolumeInspectorPage.EffectListKind parseEffectListKind(@Nonnull String var0, @Nonnull TriggerVolumeInspectorPage.EffectListKind var1) {
      try {
         class="kw">return TriggerVolumeInspectorPage.EffectListKind.valueOf(var0);
      } catch (IllegalArgumentException var3) {
         class="kw">return var1;
      }
   }

   @Nonnull
   class="kw">private class="kw">static TriggerEventType parseTriggerEventType(@Nonnull String var0, @Nonnull TriggerEventType var1) {
      try {
         class="kw">return TriggerEventType.valueOf(var0);
      } catch (IllegalArgumentException var3) {
         class="kw">return var1;
      }
   }

   @Nonnull
   class="kw">private class="kw">static String humanizeTypeId(@Nonnull String var0) {
      if (var0.isEmpty()) {
         class="kw">return var0;
      }

      StringBuilder var1 = new StringBuilder(var0.length() + 4);
      var1.append(var0.charAt(0));

      for (int var2 = 1; var2 < var0.length(); var2++) {
         char var3 = var0.charAt(var2);
         if (Character.isUpperCase(var3) && !Character.isUpperCase(var0.charAt(var2 - 1))) {
            var1.append(' ');
         }

         var1.append(var3);
      }

      class="kw">return var1.toString();
   }

   @Nonnull
   class="kw">private class="kw">static List<String> getSortedTypeIds() {
      ArrayList var0 = new ArrayList<>(TriggerEffect.CODEC.getRegisteredIds());
      Collections.sort(var0);
      class="kw">return var0;
   }

   @Nonnull
   class="kw">private class="kw">static List<String> getSortedConditionTypeIds() {
      ArrayList var0 = new ArrayList<>(TriggerCondition.CODEC.getRegisteredIds());
      Collections.sort(var0);
      class="kw">return var0;
   }

   @Nonnull
   class="kw">private class="kw">static List<String> getSortedRuleTypeIds() {
      ArrayList var0 = new ArrayList<>(TriggerRule.CODEC.getRegisteredIds());
      Collections.sort(var0);
      class="kw">return var0;
   }

   @Nonnull
   class="kw">private class="kw">static String getTypeId(@Nonnull TriggerEffect var0) {
      String var1 = TriggerEffect.CODEC.getIdFor((Class<? class="kw">extends TriggerEffect>)var0.getClass());
      class="kw">return var1 != null ? var1 : "unknown";
   }

   @Nonnull
   class="kw">private class="kw">static String getConditionTypeId(@Nonnull TriggerCondition var0) {
      String var1 = TriggerCondition.CODEC.getIdFor((Class<? class="kw">extends TriggerCondition>)var0.getClass());
      class="kw">return var1 != null ? var1 : "unknown";
   }

   @Nonnull
   class="kw">private class="kw">static String getRuleTypeId(@Nonnull TriggerRule var0) {
      String var1 = TriggerRule.CODEC.getIdFor((Class<? class="kw">extends TriggerRule>)var0.getClass());
      class="kw">return var1 != null ? var1 : "unknown";
   }

   @Nullable
   class="kw">private class="kw">static BuilderCodec<TriggerEffect> getBuilderCodecFor(@Nonnull String var0) {
      class="kw">return (BuilderCodec<TriggerEffect>)(TriggerEffect.CODEC.getCodecFor(var0) class="kw">instanceof BuilderCodec var2 ? var2 : null);
   }

   @Nullable
   class="kw">private class="kw">static BuilderCodec<TriggerCondition> getConditionBuilderCodecFor(@Nonnull String var0) {
      class="kw">return (BuilderCodec<TriggerCondition>)(TriggerCondition.CODEC.getCodecFor(var0) class="kw">instanceof BuilderCodec var2 ? var2 : null);
   }

   @Nullable
   class="kw">private class="kw">static BuilderCodec<TriggerRule> getRuleBuilderCodecFor(@Nonnull String var0) {
      class="kw">return (BuilderCodec<TriggerRule>)(TriggerRule.CODEC.getCodecFor(var0) class="kw">instanceof BuilderCodec var2 ? var2 : null);
   }

   @Nonnull
   class="kw">private class="kw">static BsonDocument encodeEffect(@Nonnull BuilderCodec<TriggerEffect> var0, @Nonnull TriggerEffect var1) {
      try {
         class="kw">return var0.encode(var1, EmptyExtraInfo.EMPTY);
      } catch (Exception var3) {
         class="kw">return new BsonDocument();
      }
   }

   @Nonnull
   class="kw">private class="kw">static BsonDocument encodeCondition(@Nonnull BuilderCodec<TriggerCondition> var0, @Nonnull TriggerCondition var1) {
      try {
         class="kw">return var0.encode(var1, EmptyExtraInfo.EMPTY);
      } catch (Exception var3) {
         class="kw">return new BsonDocument();
      }
   }

   @Nonnull
   class="kw">private class="kw">static BsonDocument encodeRule(@Nonnull BuilderCodec<TriggerRule> var0, @Nonnull TriggerRule var1) {
      try {
         class="kw">return var0.encode(var1, EmptyExtraInfo.EMPTY);
      } catch (Exception var3) {
         class="kw">return new BsonDocument();
      }
   }

   @Nullable
   class="kw">private class="kw">static BsonValue stringToBsonValue(@Nonnull Codec<?> var0, @Nullable String var1) {
      if (var1 == null) {
         class="kw">return null;
      } else if (var0 == Codec.STRING) {
         class="kw">return new BsonString(var1);
      } else if (var0 == Codec.STRING_ARRAY) {
         class="kw">return stringsToBsonArray(var1);
      } else if (var0 == Codec.FLOAT || var0 == Codec.DOUBLE) {
         class="kw">return new BsonDouble(Double.parseDouble(var1));
      } else if (var0 == Codec.INTEGER) {
         class="kw">return new BsonInt32(Integer.parseInt(var1));
      } else if (var0 == Codec.LONG) {
         class="kw">return new BsonInt64(Long.parseLong(var1));
      } else if (var0 == Codec.BOOLEAN) {
         class="kw">return new BsonBoolean(Boolean.parseBoolean(var1));
      } else {
         class="kw">return var0 class="kw">instanceof EnumCodec ? new BsonString(var1) : new BsonString(var1);
      }
   }

   @Nonnull
   class="kw">private class="kw">static BsonArray stringsToBsonArray(@Nonnull String var0) {
      BsonArray var1 = new BsonArray();
      Arrays.stream(var0.split(",", 0)).map(String::trim).filter(var0x -> !var0x.isEmpty()).map(BsonString::new).forEach(var1::add);
      class="kw">return var1;
   }

   @Nonnull
   class="kw">private class="kw">static String bsonValueToString(@Nonnull BsonValue var0) {
      if (var0 class="kw">instanceof BsonString var5) {
         class="kw">return var5.getValue();
      } else if (var0 class="kw">instanceof BsonBoolean var4) {
         class="kw">return String.valueOf(var4.getValue());
      } else if (var0 class="kw">instanceof BsonDouble var3) {
         class="kw">return String.valueOf(var3.getValue());
      } else if (var0 class="kw">instanceof BsonInt32 var2) {
         class="kw">return String.valueOf(var2.getValue());
      } else {
         class="kw">return var0 class="kw">instanceof BsonInt64 var1 ? String.valueOf(var1.getValue()) : var0.toString();
      }
   }

   class="kw">private class="kw">static void materializeDefaults(@Nonnull BuilderCodec<TriggerEffect> var0, @Nonnull TriggerEffect var1) {
      BsonDocument var2 = encodeEffect(var0, var1);
      ExtraInfo var3 = ExtraInfo.THREAD_LOCAL.get();

      for (Entry var5 : var0.getEntries().entrySet()) {
         String var6 = var5.getKey();
         if (!"Event".equals(var6) && !"Interval".equals(var6) && !"Entry".equals(var6) && !var2.containsKey(var6) && !var5.getValue().isEmpty()) {
            BuilderField var7 = var5.getValue().getLast();
            BsonValue var8 = getDefaultBsonValue(getTypeId(var1), var6, var7.getCodec().getChildCodec());
            if (var8 != null) {
               BsonDocument var9 = new BsonDocument();
               var9.put(var6, var8);

               try {
                  var7.decode(var9, var1, var3);
               } catch (Exception var11) {
               }
            }
         }
      }
   }

   class="kw">private class="kw">static void materializeRuleDefaults(@Nonnull BuilderCodec<TriggerRule> var0, @Nonnull TriggerRule var1) {
      BsonDocument var2 = encodeRule(var0, var1);
      ExtraInfo var3 = ExtraInfo.THREAD_LOCAL.get();

      for (Entry var5 : var0.getEntries().entrySet()) {
         String var6 = var5.getKey();
         if (!var2.containsKey(var6) && !var5.getValue().isEmpty()) {
            BuilderField var7 = var5.getValue().getLast();
            BsonValue var8 = getDefaultBsonValue(getRuleTypeId(var1), var6, var7.getCodec().getChildCodec());
            if (var8 != null) {
               BsonDocument var9 = new BsonDocument();
               var9.put(var6, var8);

               try {
                  var7.decode(var9, var1, var3);
               } catch (Exception var11) {
               }
            }
         }
      }
   }

   class="kw">private class="kw">static void materializeConditionDefaults(@Nonnull BuilderCodec<TriggerCondition> var0, @Nonnull TriggerCondition var1) {
      BsonDocument var2 = encodeCondition(var0, var1);
      ExtraInfo var3 = ExtraInfo.THREAD_LOCAL.get();

      for (Entry var5 : var0.getEntries().entrySet()) {
         String var6 = var5.getKey();
         if (!"Event".equals(var6) && !"Entry".equals(var6) && !var2.containsKey(var6) && !var5.getValue().isEmpty()) {
            BuilderField var7 = var5.getValue().getLast();
            BsonValue var8 = getDefaultBsonValue(getConditionTypeId(var1), var6, var7.getCodec().getChildCodec());
            if (var8 != null) {
               BsonDocument var9 = new BsonDocument();
               var9.put(var6, var8);

               try {
                  var7.decode(var9, var1, var3);
               } catch (Exception var11) {
               }
            }
         }
      }
   }

   @Nullable
   class="kw">private class="kw">static BsonValue getDefaultBsonValue(@Nonnull String var0, @Nonnull String var1, @Nonnull Codec<?> var2) {
      BsonValue var3 = DEFAULT_FIELD_VALUES.get(var0 + "." + var1);
      class="kw">return var3 != null ? var3 : getDefaultBsonValue(var2);
   }

   @Nullable
   class="kw">private class="kw">static BsonValue getDefaultBsonValue(@Nonnull Codec<?> var0) {
      if (var0 == Codec.BOOLEAN) {
         class="kw">return new BsonBoolean(false);
      } else if (var0 == Codec.FLOAT || var0 == Codec.DOUBLE) {
         class="kw">return new BsonDouble(0.0);
      } else if (var0 == Codec.INTEGER) {
         class="kw">return new BsonInt32(0);
      } else if (var0 == Codec.LONG) {
         class="kw">return new BsonInt64(0L);
      } else if (var0 == Codec.STRING) {
         class="kw">return new BsonString("");
      } else if (var0 == Codec.STRING_ARRAY) {
         class="kw">return new BsonArray();
      } else if (var0 == Vector3dUtil.CODEC) {
         BsonDocument var1 = new BsonDocument();
         var1.put("X", new BsonDouble(0.0));
         var1.put("Y", new BsonDouble(0.0));
         var1.put("Z", new BsonDouble(0.0));
         class="kw">return var1;
      } else {
         class="kw">return null;
      }
   }

   @Nonnull
   class="kw">private class="kw">static Collection<String> getAssetIdsForSource(@Nullable String var0) {
      class="kw">return var0 == null ? List.of() : TriggerVolumesPlugin.get().getAssetIds(var0);
   }

   class="kw">private Collection<String> resolvePickerIds() {
      if (this.getSelectedItem() class="kw">instanceof PlayAnimationEffect var1) {
         if ("Animation".equals(this.pendingPickerSource)) {
            String var3 = var1.getNpcType();
            if (!var3.isBlank()) {
               class="kw">return TriggerVolumesPlugin.get().collectAnimationIdsForApplyOn(var3);
            }
         } else if ("AnimationApplyOn".equals(this.pendingPickerSource)) {
            String var4 = var1.getAnimation();
            if (var4 != null && !var4.isBlank()) {
               class="kw">return TriggerVolumesPlugin.get().collectApplyOnIdsForAnimation(var4);
            }
         }
      }

      class="kw">return getAssetIdsForSource(this.pendingPickerSource);
   }

   @Nullable
   class="kw">private class="kw">static String getAssetSourceForField(@Nonnull String var0, @Nonnull String var1) {
      class="kw">return TriggerVolumesPlugin.get().getAssetSourceForField(var0, var1);
   }

   class="kw">public enum Action {
      Select,
      ChangeWorld,
      FilterChanged,
      ChangeTab,
      UpdateVolumeField,
      CommitName,
      UpdateTag,
      RemoveTag,
      DeleteSelection,
      Save,
      Discard,
      Teleport,
      ToggleRenameSelected,
      ConfirmRenameSelected,
      CancelRenameSelected,
      SelectEffect,
      AddEffect,
      RemoveEffect,
      DuplicateEffect,
      MoveEffectUp,
      MoveEffectDown,
      UpdateAddTarget,
      UpdateAddEffectType,
      UpdateAddEventType,
      UpdateAddEntry,
      ToggleEventCategory,
      ToggleRulesCategory,
      ToggleRejectionSignal,
      UpdateParameter,
      CommitEntry,
      TogglePrefabPreview,
      OpenPresetSave,
      PresetNameChanged,
      ConfirmSavePreset,
      CancelPresetSave,
      OpenPresetLoad,
      LoadPreset,
      CancelPresetLoad,
      OpenAssetPicker,
      AssetPickerSearch,
      AssetPickerSelect,
      ConfirmAssetPicker,
      PreviewSound,
      CancelAssetPicker,
      OpenPackBrowser,
      ConfirmPackBrowser,
      CancelPackBrowser,
      OpenCreatePack,
      CreatePack,
      CancelCreatePack,
      PackSearch,
      PackSelect;

      Action() {
      }
   }

   class="kw">private enum EffectListKind {
      CONDITION,
      EFFECT,
      REJECTION_EFFECT,
      RULE;

      EffectListKind() {
      }
   }

   class="kw">private record EventCategoryKey(@Nonnull TriggerEventType eventType, int entry) {
      class="kw">private EventCategoryKey {
      }
   }

   class="kw">private enum EventCategoryScope {
      GROUP,
      VOLUME;

      EventCategoryScope() {
      }
   }

   class="kw">public enum InspectorTab {
      VOLUME("server.customUI.triggerVolumeInspector.tab.volume", "server.customUI.triggerVolumeInspector.tab.volume.tooltip"),
      EFFECTS("server.customUI.triggerVolumeInspector.tab.effects", "server.customUI.triggerVolumeInspector.tab.effects.tooltip"),
      TAGS("server.customUI.triggerVolumeInspector.tab.tags", "server.customUI.triggerVolumeInspector.tab.tags.tooltip");

      class="kw">private class="kw">final String labelKey;
      class="kw">private class="kw">final String tooltipKey;

      InspectorTab(@Nonnull String nullxx, @Nonnull String nullxxx) {
         this.labelKey = nullxx;
         this.tooltipKey = nullxxx;
      }

      @Nonnull
      Message label() {
         class="kw">return Message.translation(this.labelKey);
      }

      @Nonnull
      Message tooltip() {
         class="kw">return Message.translation(this.tooltipKey);
      }
   }

   class="kw">public class="kw">static class PageData {
      class="kw">public class="kw">static class="kw">final BuilderCodec<TriggerVolumeInspectorPage.PageData> CODEC = BuilderCodec.builder(
            TriggerVolumeInspectorPage.PageData.class, TriggerVolumeInspectorPage.PageData::new
         )
         .append(
            new KeyedCodec<>("Action", new EnumCodec<>(TriggerVolumeInspectorPage.Action.class, EnumCodec.EnumStyle.LEGACY)),
            (var0, var1) -> var0.action = var1,
            var0 -> var0.action
         )
         .add()
         .append(new KeyedCodec<>("Id", Codec.STRING, false), (var0, var1) -> var0.id = var1, var0 -> var0.id)
         .add()
         .append(new KeyedCodec<>("IsGroup", Codec.STRING, false), (var0, var1) -> var0.isGroup = var1, var0 -> var0.isGroup)
         .add()
         .append(new KeyedCodec<>("Tab", Codec.STRING, false), (var0, var1) -> var0.tab = var1, var0 -> var0.tab)
         .add()
         .append(new KeyedCodec<>("@WorldName", Codec.STRING, false), (var0, var1) -> var0.worldName = var1, var0 -> var0.worldName)
         .add()
         .append(new KeyedCodec<>("@FilterText", Codec.STRING, false), (var0, var1) -> var0.filterText = var1, var0 -> var0.filterText)
         .add()
         .append(new KeyedCodec<>("@TagKey", Codec.STRING, false), (var0, var1) -> var0.tagKey = var1, var0 -> var0.tagKey)
         .add()
         .append(new KeyedCodec<>("@TagValues", Codec.STRING, false), (var0, var1) -> var0.tagValues = var1, var0 -> var0.tagValues)
         .add()
         .append(new KeyedCodec<>("RemoveTagKey", Codec.STRING, false), (var0, var1) -> var0.removeTagKey = var1, var0 -> var0.removeTagKey)
         .add()
         .append(new KeyedCodec<>("EffectIndex", Codec.STRING, false), (var0, var1) -> var0.effectIndex = var1, var0 -> var0.effectIndex)
         .add()
         .append(new KeyedCodec<>("EffectListKind", Codec.STRING, false), (var0, var1) -> var0.effectListKind = var1, var0 -> var0.effectListKind)
         .add()
         .append(new KeyedCodec<>("@EffectType", Codec.STRING, false), (var0, var1) -> var0.effectType = var1, var0 -> var0.effectType)
         .add()
         .append(new KeyedCodec<>("@AddTargetKind", Codec.STRING, false), (var0, var1) -> var0.addTargetKind = var1, var0 -> var0.addTargetKind)
         .add()
         .append(new KeyedCodec<>("@AddEventType", Codec.STRING, false), (var0, var1) -> var0.addEventType = var1, var0 -> var0.addEventType)
         .add()
         .append(new KeyedCodec<>("@AddEntry", Codec.STRING, false), (var0, var1) -> var0.addEntry = var1, var0 -> var0.addEntry)
         .add()
         .append(new KeyedCodec<>("EventType", Codec.STRING, false), (var0, var1) -> var0.eventType = var1, var0 -> var0.eventType)
         .add()
         .append(new KeyedCodec<>("EventEntry", Codec.STRING, false), (var0, var1) -> var0.eventEntry = var1, var0 -> var0.eventEntry)
         .add()
         .append(new KeyedCodec<>("EventCategoryScope", Codec.STRING, false), (var0, var1) -> var0.eventCategoryScope = var1, var0 -> var0.eventCategoryScope)
         .add()
         .append(new KeyedCodec<>("ParamKey", Codec.STRING, false), (var0, var1) -> var0.paramKey = var1, var0 -> var0.paramKey)
         .add()
         .append(new KeyedCodec<>("@ParamValue", Codec.STRING, false), (var0, var1) -> var0.paramValue = var1, var0 -> var0.paramValue)
         .add()
         .append(new KeyedCodec<>("@ParamBool", Codec.BOOLEAN, false), (var0, var1) -> var0.paramBool = var1, var0 -> var0.paramBool)
         .add()
         .append(new KeyedCodec<>("@ParamNumericValue", Codec.DOUBLE, false), (var0, var1) -> var0.paramNumericValue = var1, var0 -> var0.paramNumericValue)
         .add()
         .append(new KeyedCodec<>("@VecX", Codec.DOUBLE, false), (var0, var1) -> var0.vecX = var1, var0 -> var0.vecX)
         .add()
         .append(new KeyedCodec<>("@VecY", Codec.DOUBLE, false), (var0, var1) -> var0.vecY = var1, var0 -> var0.vecY)
         .add()
         .append(new KeyedCodec<>("@VecZ", Codec.DOUBLE, false), (var0, var1) -> var0.vecZ = var1, var0 -> var0.vecZ)
         .add()
         .append(new KeyedCodec<>("@PresetName", Codec.STRING, false), (var0, var1) -> var0.presetName = var1, var0 -> var0.presetName)
         .add()
         .append(
            new KeyedCodec<>("@IncludeVolumeSettings", Codec.BOOLEAN, false),
            (var0, var1) -> var0.includeVolumeSettings = var1,
            var0 -> var0.includeVolumeSettings
         )
         .add()
         .append(new KeyedCodec<>("PresetId", Codec.STRING, false), (var0, var1) -> var0.presetId = var1, var0 -> var0.presetId)
         .add()
         .append(new KeyedCodec<>("@AssetPickerQuery", Codec.STRING, false), (var0, var1) -> var0.assetPickerQuery = var1, var0 -> var0.assetPickerQuery)
         .add()
         .append(
            new KeyedCodec<>("AssetPickerSelection", Codec.STRING, false), (var0, var1) -> var0.assetPickerSelection = var1, var0 -> var0.assetPickerSelection
         )
         .add()
         .append(new KeyedCodec<>("Pack", Codec.STRING, false), (var0, var1) -> var0.packBrowserData.pack = var1, var0 -> var0.packBrowserData.pack)
         .add()
         .append(new KeyedCodec<>("@PackSearch", Codec.STRING, false), (var0, var1) -> var0.packBrowserData.search = var1, var0 -> var0.packBrowserData.search)
         .add()
         .append(
            new KeyedCodec<>("@CreateName", Codec.STRING, false),
            (var0, var1) -> var0.packBrowserData.createName = var1,
            var0 -> var0.packBrowserData.createName
         )
         .add()
         .append(
            new KeyedCodec<>("@CreateGroup", Codec.STRING, false),
            (var0, var1) -> var0.packBrowserData.createGroup = var1,
            var0 -> var0.packBrowserData.createGroup
         )
         .add()
         .append(
            new KeyedCodec<>("@CreateDescription", Codec.STRING, false),
            (var0, var1) -> var0.packBrowserData.createDescription = var1,
            var0 -> var0.packBrowserData.createDescription
         )
         .add()
         .append(
            new KeyedCodec<>("@CreateVersion", Codec.STRING, false),
            (var0, var1) -> var0.packBrowserData.createVersion = var1,
            var0 -> var0.packBrowserData.createVersion
         )
         .add()
         .append(
            new KeyedCodec<>("@CreateWebsite", Codec.STRING, false),
            (var0, var1) -> var0.packBrowserData.createWebsite = var1,
            var0 -> var0.packBrowserData.createWebsite
         )
         .add()
         .append(
            new KeyedCodec<>("@CreateAuthorName", Codec.STRING, false),
            (var0, var1) -> var0.packBrowserData.createAuthorName = var1,
            var0 -> var0.packBrowserData.createAuthorName
         )
         .add()
         .append(
            new KeyedCodec<>("ValidateCreate", Codec.STRING, false),
            (var0, var1) -> var0.packBrowserData.validateCreate = var1,
            var0 -> var0.packBrowserData.validateCreate
         )
         .add()
         .append(
            new KeyedCodec<>("@CreateTargetDir", Codec.STRING, false),
            (var0, var1) -> var0.packBrowserData.createTargetDir = var1,
            var0 -> var0.packBrowserData.createTargetDir
         )
         .add()
         .append(
            new KeyedCodec<>("@DirectoryFilter", Codec.STRING, false),
            (var0, var1) -> var0.packBrowserData.directoryFilter = var1,
            var0 -> var0.packBrowserData.directoryFilter
         )
         .add()
         .build();
      class="kw">public TriggerVolumeInspectorPage.Action action;
      class="kw">public String id;
      class="kw">public String isGroup;
      class="kw">public String tab;
      class="kw">public String worldName;
      class="kw">public String filterText;
      class="kw">public String tagKey;
      class="kw">public String tagValues;
      class="kw">public String removeTagKey;
      class="kw">public String effectIndex;
      class="kw">public String effectListKind;
      class="kw">public String effectType;
      class="kw">public String addTargetKind;
      class="kw">public String addEventType;
      class="kw">public String addEntry;
      class="kw">public String eventType;
      class="kw">public String eventEntry;
      class="kw">public String eventCategoryScope;
      class="kw">public String paramKey;
      class="kw">public String paramValue;
      class="kw">public Boolean paramBool;
      class="kw">public Double paramNumericValue;
      class="kw">public Double vecX;
      class="kw">public Double vecY;
      class="kw">public Double vecZ;
      class="kw">public String presetName;
      class="kw">public Boolean includeVolumeSettings;
      class="kw">public String presetId;
      class="kw">public String assetPickerQuery;
      class="kw">public String assetPickerSelection;
      class="kw">public class="kw">final AssetPackSaveBrowserEventData packBrowserData = new AssetPackSaveBrowserEventData();

      class="kw">public PageData() {
      }
   }

   class="kw">private record RowEntry(@Nonnull String id, boolean isGroup, int listIndex) {
      class="kw">private RowEntry {
      }
   }
}