EventCategoryScope enum

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

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

Поля (1)

МодификаторыТипИмя
GROUP, VOLUME

Исходный код

Показать/скрыть
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 {
      }
   }
}