WorldEventPanelPage class

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

Файл: com/hypixel/hytale/builtin/adventure/worldevents/ui/WorldEventPanelPage.java

extends: InteractiveCustomUIPage<WorldEventPanelPage.PageData>

Поля (99)

МодификаторыТипИмя
public static final BuilderCodec<WorldEventPanelPage.PageData> CODEC
final String PAGE
Navigate, Filter, Refresh, Toggle, Back, Close, ResetAll, ConfirmAccept, ConfirmCancel, RowSelect, RowPrimary, RowSecondary, Teleport
public WorldEventPanelPage.Action action
private Message badge
break
break
break
break
break
break
break
break
break
break
private final String descriptionKey
public String filter
public String id
private final String id
private final String id
public String kind
private final String kind
private String label
private WorldEventPanelPage.Action primaryAction
private Message primaryText
return
private WorldEventPanelPage.Action secondaryAction
private Message secondaryText
private WorldEventPanelPage.Action selectAction
private boolean selected
private String statusColor
private String sub
private Message subMessage
private final String titleKey
int var0
ScheduledFuture var1
ScheduledFuture var1
Ref var1
long var1
var1
var1
var1
var1
Double var1
double var1
int var1
String[] var1
String var12
Message var13
double[] var14
boolean var14
String var15
String var16
Store var2
Double var2
String var2
var2
double var2
String var2
boolean var3
Player var3
long var3
WorldEventPanelPage.Tab var3
WorldEventManager var3
Double var3
int var3
WorldEventPanelPage.CachedProgress var3
var3
Message var4
WorldEventPanelPage.Tab var4
World var4
Vector3d var4
int var4
WorldEventStorage var4
var4
var4
double var4
Player var4
HeadRotation var5
WorldEventPanelPage.ValueOnlyCommandBuilder var5
World var5
String var5
boolean var6
long var6
int[] var6
String var6
String var6
String var6
String var6
Value var6
double var6
UIEventBuilder var7
int var7
var7
var7
var7
var7
UICommandBuilder var8
String var9

Методы (98)

МодификаторыВозвратСигнатура
Action Action()
private record CachedProgressrecord CachedProgress(@Nonnull Stage stage, @Nullable StageProgress progress)
public PageDatapublic PageData()
public Rowpublic Row(@Nonnull String var1, @Nonnull String var2)
abstract STORAGE STORAGE("storage", "server.customUI.worldEventPanel.tab.storage", "server.customUI.worldEventPanel.tab.storage.desc")
Tab Tab(@Nonnull final String nullxx, @Nonnull final String nullxxx, @Nonnull final String nullxxxx)
private ValueOnlyCommandBuilderprivate ValueOnlyCommandBuilder()
public UICommandBuilder appendpublic UICommandBuilder append(String var1)
public UICommandBuilder appendpublic UICommandBuilder append(String var1, String var2)
protected int appendCoordinateint appendCoordinate(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, int var4, @Nonnull String var5, double var6, double var8, double var10)
protected int appendCountint appendCount(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4, int var5, int var6)
protected int appendEncodedint appendEncoded(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, int var4, @Nonnull String var5, @Nullable BsonValue var6, int var7)
protected int appendEncodedint appendEncoded(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, int var4, @Nonnull String var5, @Nullable BsonValue var6, int var7, int var8)
public UICommandBuilder appendInlinepublic UICommandBuilder appendInline(String var1, String var2)
protected int appendPropertyint appendProperty(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4, @Nonnull String var5)
protected int appendPropertyint appendProperty(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4, @Nonnull Message var5)
protected int appendPropertyint appendProperty(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull String var4, @Nonnull String var5)
protected int appendPropertyint appendProperty(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull String var4, @Nonnull Message var5)
protected int appendRowint appendRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull WorldEventPanelPage.Row var4)
protected int appendSectionint appendSection(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4)
private int appendSummaryint appendSummary(@Nonnull UICommandBuilder var1, int var2, @Nonnull Message var3)
protected int appendTextint appendText(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4)
static int assetCountint assetCount()
public WorldEventPanelPage.Row badgepublic WorldEventPanelPage.Row badge(@Nonnull Message var1)
private void bindRowButtonvoid bindRowButton(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, @Nullable Message var4, @Nullable WorldEventPanelPage.Action var5, @Nonnull String var6, @Nonnull String var7)
private void bindShellEventsvoid bindShellEvents(@Nonnull UIEventBuilder var1)
private void buildConfirmvoid buildConfirm(@Nonnull UICommandBuilder var1)
abstract abstract void buildContentvoid buildContent(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull Store<EntityStore> var3)
private void buildNavvoid buildNav(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2)
private void buildSummaryvoid buildSummary(@Nonnull UICommandBuilder var1, @Nonnull Store<EntityStore> var2)
public UICommandBuilder clearpublic UICommandBuilder clear(String var1)
public WorldEventPanelPage createpublic WorldEventPanelPage create(@Nonnull PlayerRef var1)
public String descriptionKeypublic String descriptionKey()
for for(CustomUICommand var6 : var0)
for for(String var6 : var1)
abstract for for(int var10 = 0; var10 < var9.size()
public static WorldEventPanelPage.Tab fromIdpublic static WorldEventPanelPage.Tab fromId(@Nullable String var0)
protected boolean handleActionboolean handleAction(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull WorldEventPanelPage.PageData var3)
public void handleDataEventvoid handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull WorldEventPanelPage.PageData var3)
private void handleTeleportvoid handleTeleport(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull WorldEventPanelPage.PageData var3)
public String idpublic String id()
if if(var4 != null)
if if(var3.action != null)
if if(!var3)
if if(var4x != null)
if if(var4 != null && var5 != null)
if if(!var6)
if if(var1 != null)
if if(this.structureHash != var3)
if if(var2 || var6 != this.lastValueHash)
if if(this.pendingConfirm)
if if(var2 != WorldEventAsset.UNKNOWN)
if if(var4.subMessage != null)
if if(var4.badge != null)
if if(var4.selectAction != null)
if if(var4 != null && var5 != null)
if if(var6 == null || var4 >= var8)
if if(var7 < 6 && var6 instanceof BsonDocument var13)
if if(var14 != null)
if if(var14)
if if(var3 >= 0)
if if(var0 == null)
if if(var1.length != 3)
if if(var4 != null)
if if(var0 == null)
public UICommandBuilder insertBeforepublic UICommandBuilder insertBefore(String var1, String var2)
public UICommandBuilder insertBeforeInlinepublic UICommandBuilder insertBeforeInline(String var1, String var2)
static boolean isInWorldboolean isInWorld(double var0, double var2, double var4)
static boolean isPositionboolean isPosition(@Nonnull String var0)
public WorldEventPanelPage.Row labelpublic WorldEventPanelPage.Row label(@Nonnull String var1)
protected boolean matchesFilterboolean matchesFilter(@Nonnull String... var1)
private void onConfirmAcceptvoid onConfirmAccept(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2)
private void onRefreshTickvoid onRefreshTick()
protected boolean onToggleboolean onToggle()
protected void openPagevoid openPage(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull WorldEventPanelPage var3)
private void paintvoid paint(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull Store<EntityStore> var3)
public WorldEventPanelPage.Row primarypublic WorldEventPanelPage.Row primary(@Nonnull Message var1, @Nonnull WorldEventPanelPage.Action var2)
public UICommandBuilder removepublic UICommandBuilder remove(String var1)
protected boolean removeEldestEntryprotected boolean removeEldestEntry(@Nonnull Entry<UUID, WorldEventPanelPage.CachedProgress> var1)
public WorldEventPanelPage.Row secondarypublic WorldEventPanelPage.Row secondary(@Nonnull Message var1, @Nonnull WorldEventPanelPage.Action var2)
public WorldEventPanelPage.Row selectpublic WorldEventPanelPage.Row select(@Nonnull WorldEventPanelPage.Action var1)
public WorldEventPanelPage.Row selectedpublic WorldEventPanelPage.Row selected(boolean var1)
private void startLiveRefreshvoid startLiveRefresh()
public WorldEventPanelPage.Row statuspublic WorldEventPanelPage.Row status(@Nonnull String var1)
private void stopLiveRefreshvoid stopLiveRefresh()
public WorldEventPanelPage.Row subpublic WorldEventPanelPage.Row sub(@Nonnull String var1)
public WorldEventPanelPage.Row subpublic WorldEventPanelPage.Row sub(@Nonnull Message var1)
abstract super super(var1, CustomPageLifetime.CanDismiss, WorldEventPanelPage.PageData.CODEC)
protected boolean supportsBackboolean supportsBack()
protected boolean supportsFilterboolean supportsFilter()
switch switch(var3.action)
return switchreturn switch(this)
public String titleKeypublic String titleKey()
protected void trackAppendvoid trackAppend(@Nonnull String var1, @Nonnull String var2)
protected void trackBindingvoid trackBinding(@Nullable String var1)
private void trackBindingvoid trackBinding(@Nullable Enum<?> var1)
private void updatevoid update(@Nonnull Store<EntityStore> var1, boolean var2)
static long valueHashlong valueHash(@Nonnull CustomUICommand[] var0)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.GlobalWorldEventManager;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.WorldEventManager;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.WorldEventStorage;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.WorldEventsConfig;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.command.ResetCommand;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.Stage;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.WorldEvent;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.WorldEventAsset;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.EmptyExtraInfo;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
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.vector.Rotation3f;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomUICommand;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
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.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.PendingTeleport;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
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.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.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.LinkedHashMap;
class="kw">import java.util.Locale;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.ScheduledFuture;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.concurrent.atomic.AtomicReference;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonArray;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonValue;
class="kw">import org.joml.Vector3d;

class="kw">public class="kw">abstract class WorldEventPanelPage class="kw">extends InteractiveCustomUIPage<WorldEventPanelPage.PageData> {
   class="kw">protected class="kw">static class="kw">final String PAGE = "Pages/WorldEvent/WorldEventPanelPage.ui";
   class="kw">protected class="kw">static class="kw">final String NAV_BUTTON = "Pages/WorldEvent/WorldEventNavButton.ui";
   class="kw">protected class="kw">static class="kw">final String LIST_ROW = "Pages/WorldEvent/WorldEventListRow.ui";
   class="kw">protected class="kw">static class="kw">final String PROPERTY_ROW = "Pages/WorldEvent/WorldEventPropertyRow.ui";
   class="kw">protected class="kw">static class="kw">final String COORDINATE_ROW = "Pages/WorldEvent/WorldEventCoordinateRow.ui";
   class="kw">protected class="kw">static class="kw">final String SECTION_LABEL = "Pages/WorldEvent/WorldEventSectionLabel.ui";
   class="kw">protected class="kw">static class="kw">final String TEXT_ROW = "Pages/WorldEvent/WorldEventTextRow.ui";
   class="kw">protected class="kw">static class="kw">final String SUMMARY_ROW = "Pages/WorldEvent/WorldEventSummaryRow.ui";
   class="kw">protected class="kw">static class="kw">final String LIST = "#ListContainer";
   class="kw">protected class="kw">static class="kw">final String SIDE = "#SideContainer";
   class="kw">protected class="kw">static class="kw">final String SUMMARY = "#Summary";
   class="kw">protected class="kw">static class="kw">final Value<String> NAV_STYLE = Value.ref("Pages/WorldEvent/WorldEventNavButton.ui", "LabelStyle");
   class="kw">protected class="kw">static class="kw">final Value<String> NAV_SELECTED_STYLE = Value.ref("Pages/WorldEvent/WorldEventNavButton.ui", "SelectedLabelStyle");
   class="kw">protected class="kw">static class="kw">final Value<String> ROW_STYLE = Value.ref("Pages/WorldEvent/WorldEventListRow.ui", "NormalRowStyle");
   class="kw">protected class="kw">static class="kw">final Value<String> ROW_SELECTED_STYLE = Value.ref("Pages/WorldEvent/WorldEventListRow.ui", "SelectedRowStyle");
   class="kw">protected class="kw">static class="kw">final Value<String> ROW_STATIC_STYLE = Value.ref("Pages/WorldEvent/WorldEventListRow.ui", "StaticRowStyle");
   class="kw">protected class="kw">static class="kw">final String COLOR_OK = "#4f9e63";
   class="kw">protected class="kw">static class="kw">final String COLOR_PENDING = "#c08a3a";
   class="kw">protected class="kw">static class="kw">final String COLOR_FAIL = "#b04a4a";
   class="kw">protected class="kw">static class="kw">final String COLOR_IDLE = "#4a5a6a";
   class="kw">protected class="kw">static class="kw">final String COLOR_INFO = "#4274a5";
   class="kw">protected class="kw">static class="kw">final int MAX_ROWS = 400;
   class="kw">protected class="kw">static class="kw">final int MAX_BSON_DEPTH = 6;
   class="kw">private class="kw">static class="kw">final Set<String> POSITION_KEYS = Set.of("position", "pos", "location", "origin", "destination", "target", "spawn", "center", "block");
   class="kw">private class="kw">static class="kw">final double MAX_TELEPORT_HORIZONTAL = 2.147483616E9;
   class="kw">private class="kw">static class="kw">final double MIN_TELEPORT_Y = -32.0;
   class="kw">private class="kw">static class="kw">final double MAX_TELEPORT_Y = 320.0;
   class="kw">private class="kw">static class="kw">final long REFRESH_INTERVAL_MS = 1000L;
   class="kw">private class="kw">static class="kw">final long VALUE_HASH_UNSET = Long.MIN_VALUE;
   class="kw">private class="kw">static class="kw">final long STRUCTURE_HASH_SEED = 1125899906842597L;
   class="kw">protected class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">protected class="kw">volatile boolean pendingConfirm = false;
   @Nonnull
   class="kw">protected String filterText = "";
   class="kw">private class="kw">final AtomicReference<ScheduledFuture<?>> refreshTask = new AtomicReference<>();
   class="kw">private long structureHash = 1125899906842597L;
   class="kw">private long lastValueHash = Long.MIN_VALUE;
   class="kw">private class="kw">final Map<UUID, WorldEventPanelPage.CachedProgress> progressCache = new LinkedHashMap<UUID, WorldEventPanelPage.CachedProgress>(16, 0.75F, true) {
      @Override
      class="kw">protected boolean removeEldestEntry(@Nonnull Entry<UUID, WorldEventPanelPage.CachedProgress> var1) {
         class="kw">return this.size() > 400;
      }
   };

   class="kw">protected WorldEventPanelPage(@Nonnull PlayerRef var1) {
      super(var1, CustomPageLifetime.CanDismiss, WorldEventPanelPage.PageData.CODEC);
   }

   @Nullable
   class="kw">protected class="kw">abstract WorldEventPanelPage.Tab tab();

   @Nonnull
   class="kw">protected class="kw">abstract String titleKey();

   @Nonnull
   class="kw">protected class="kw">abstract String descriptionKey();

   class="kw">protected class="kw">abstract void buildContent(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull Store<EntityStore> var3);

   class="kw">protected boolean handleAction(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull WorldEventPanelPage.PageData var3) {
      class="kw">return false;
   }

   class="kw">protected boolean supportsFilter() {
      class="kw">return true;
   }

   class="kw">protected boolean supportsBack() {
      class="kw">return false;
   }

   @Nullable
   class="kw">protected Message toggleLabel() {
      class="kw">return null;
   }

   class="kw">protected boolean onToggle() {
      class="kw">return false;
   }

   @Override
   class="kw">public class="kw">final void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
      var2.append("Pages/WorldEvent/WorldEventPanelPage.ui");
      this.buildNav(var2, var3);
      this.bindShellEvents(var3);
      var2.set("#FilterField.Value", this.filterText);
      this.paint(var2, var3, var4);
      this.lastValueHash = Long.MIN_VALUE;
      this.startLiveRefresh();
   }

   class="kw">private void paint(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull Store<EntityStore> var3) {
      this.structureHash = 1125899906842597L;
      var1.set("#PageTitle.Text", Message.translation(this.titleKey()));
      var1.set("#PageDescription.Text", Message.translation(this.descriptionKey()));
      var1.set("#FilterField.Visible", this.supportsFilter());
      var1.set("#BackButton.Visible", this.supportsBack());
      Message var4 = this.toggleLabel();
      var1.set("#ToggleButton.Visible", var4 != null);
      if (var4 != null) {
         var1.set("#ToggleButton.Text", var4);
      }

      this.buildSummary(var1, var3);
      this.buildConfirm(var1);
      var1.clear("#ListContainer");
      var1.clear("#SideContainer");
      this.buildContent(var1, var2, var3);
   }

   @Override
   class="kw">public void onDismiss(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
      this.stopLiveRefresh();
   }

   class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull WorldEventPanelPage.PageData var3) {
      if (var3.action != null) {
         class="kw">switch (var3.action) {
            case Navigate:
               WorldEventPanelPage.Tab var4 = WorldEventPanelPage.Tab.fromId(var3.id);
               if (var4 != null && var4 != this.tab()) {
                  this.openPage(var1, var2, var4.create(this.playerRef));
               }
               break;
            case Filter:
               this.filterText = var3.filter != null ? var3.filter : "";
               break;
            case Refresh:
               this.update(var2, true);
               break;
            case Toggle:
               if (this.onToggle()) {
                  this.update(var2, true);
               }
               break;
            case Back:
               this.openPage(var1, var2, WorldEventPanelPage.Tab.ACTIVE.create(this.playerRef));
               break;
            case Close:
               this.close();
               break;
            case ResetAll:
               this.pendingConfirm = true;
               this.update(var2, true);
               break;
            case ConfirmAccept:
               this.onConfirmAccept(var1, var2);
               break;
            case ConfirmCancel:
               this.pendingConfirm = false;
               this.update(var2, true);
               break;
            case RowSelect:
            case RowPrimary:
            case RowSecondary:
            class="kw">default:
               if (this.handleAction(var1, var2, var3)) {
                  this.update(var2, true);
               }
               break;
            case Teleport:
               this.handleTeleport(var1, var2, var3);
         }
      }
   }

   class="kw">private void onConfirmAccept(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
      boolean var3 = this.pendingConfirm;
      this.pendingConfirm = false;
      if (!var3) {
         this.update(var2, true);
      } else {
         World var4 = var2.getExternalData().getWorld();
         ResetCommand.execute(var4).whenCompleteAsync((var3x, var4x) -> {
            if (var4x != null) {
               ((HytaleLogger.Api)((HytaleLogger.Api)LOGGER.atWarning()).withCause(var4x)).log("Failed to reset world-events from the admin panel");
            }

            if (var1.isValid()) {
               this.update(var2, true);
            }
         }, var4);
      }
   }

   class="kw">private void handleTeleport(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull WorldEventPanelPage.PageData var3) {
      Vector3d var4 = parseCoordinateId(var3.id);
      HeadRotation var5 = var2.getComponent(var1, HeadRotation.getComponentType());
      boolean var6 = var2.getComponent(var1, Teleport.getComponentType()) != null || var2.getComponent(var1, PendingTeleport.getComponentType()) != null;
      if (var4 != null && var5 != null) {
         if (!var6) {
            var2.addComponent(var1, Teleport.getComponentType(), Teleport.createForPlayer(var4, new Rotation3f(var5.getRotation())));
            this.close();
            class="kw">return;
         }

         this.playerRef.sendMessage(Message.translation("server.customUI.worldEventPanel.teleport.busy"));
      } else {
         ((HytaleLogger.Api)LOGGER.atWarning()).log("Discarded a world-event panel teleport to id '%s', headRotation=%s", var3.id, var5 != null);
         this.playerRef.sendMessage(Message.translation("server.customUI.worldEventPanel.teleport.unavailable"));
      }

      this.update(var2, true);
   }

   class="kw">private void startLiveRefresh() {
      if (this.refreshTask.get() == null) {
         ScheduledFuture var1 = HytaleServer.SCHEDULED_EXECUTOR.scheduleAtFixedRate(this::onRefreshTick, 1000L, 1000L, TimeUnit.MILLISECONDS);
         if (!this.refreshTask.compareAndSet(null, var1)) {
            var1.cancel(false);
         }
      }
   }

   class="kw">private void stopLiveRefresh() {
      ScheduledFuture var1 = this.refreshTask.getAndSet(null);
      if (var1 != null) {
         var1.cancel(false);
      }
   }

   class="kw">private void onRefreshTick() {
      Ref var1 = this.playerRef.getReference();
      if (var1 == null || !var1.isValid()) {
         this.stopLiveRefresh();
      } else if (!this.pendingConfirm) {
         Store var2 = var1.getStore();

         try {
            var2.getExternalData().getWorld().execute(() -> {
               if (!var1.isValid()) {
                  this.stopLiveRefresh();
               } else {
                  Player var3 = var2.getComponent(var1, Player.getComponentType());
                  if (var3 != null && var3.getPageManager().getCustomPage() == this) {
                     try {
                        this.update(var2, false);
                     } catch (Exception var5) {
                        ((HytaleLogger.Api)((HytaleLogger.Api)LOGGER.atWarning()).withCause(var5)).log("World-event panel refresh failed");
                     }
                  } else {
                     this.stopLiveRefresh();
                  }
               }
            });
         } catch (Exception var4) {
            this.stopLiveRefresh();
         }
      }
   }

   class="kw">private void update(@Nonnull Store<EntityStore> var1, boolean var2) {
      long var3 = this.structureHash;
      WorldEventPanelPage.ValueOnlyCommandBuilder var5 = new WorldEventPanelPage.ValueOnlyCommandBuilder();
      this.paint(var5, new UIEventBuilder(), var1);
      if (this.structureHash != var3) {
         UICommandBuilder var8 = new UICommandBuilder();
         UIEventBuilder var7 = new UIEventBuilder();
         this.paint(var8, var7, var1);
         this.lastValueHash = Long.MIN_VALUE;
         this.sendUpdate(var8, var7, false);
      } else {
         long var6 = valueHash(var5.getCommands());
         if (var2 || var6 != this.lastValueHash) {
            this.lastValueHash = var6;
            this.sendUpdate(var5, null, false);
         }
      }
   }

   class="kw">protected void trackAppend(@Nonnull String var1, @Nonnull String var2) {
      this.structureHash = this.structureHash * 31L + var1.hashCode();
      this.structureHash = this.structureHash * 31L + var2.hashCode();
   }

   class="kw">protected void trackBinding(@Nullable String var1) {
      this.structureHash = this.structureHash * 31L + (var1 != null ? var1.hashCode() : 0);
   }

   class="kw">private void trackBinding(@Nullable Enum<?> var1) {
      this.structureHash = this.structureHash * 31L + (var1 != null ? var1.ordinal() + 1 : 0);
   }

   class="kw">private class="kw">static long valueHash(@Nonnull CustomUICommand[] var0) {
      long var1 = 1125899906842597L;

      for (CustomUICommand var6 : var0) {
         var1 = var1 * 31L + var6.type.ordinal();
         var1 = var1 * 31L + (var6.selector != null ? var6.selector.hashCode() : 0);
         var1 = var1 * 31L + (var6.data != null ? var6.data.hashCode() : 0);
         var1 = var1 * 31L + (var6.text != null ? var6.text.hashCode() : 0);
      }

      class="kw">return var1;
   }

   class="kw">private void buildNav(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      var1.clear("#NavList");
      WorldEventPanelPage.Tab var3 = this.tab();
      int var4 = 0;

      for (WorldEventPanelPage.Tab var8 : WorldEventPanelPage.Tab.values()) {
         String var9 = "#NavList[" + var4 + "]";
         var1.append("#NavList", "Pages/WorldEvent/WorldEventNavButton.ui");
         var1.set(var9 + ".Text", Message.translation(var8.titleKey()));
         var1.set(var9 + ".TooltipText", Message.translation(var8.descriptionKey()));
         var1.set(var9 + ".Style", var8 == var3 ? NAV_SELECTED_STYLE : NAV_STYLE);
         var2.addEventBinding(
            CustomUIEventBindingType.Activating, var9, new EventData().append("Action", WorldEventPanelPage.Action.Navigate.name()).append("Id", var8.id())
         );
         var4++;
      }
   }

   class="kw">private void bindShellEvents(@Nonnull UIEventBuilder var1) {
      var1.addEventBinding(
         CustomUIEventBindingType.ValueChanged,
         "#FilterField",
         new EventData().append("Action", WorldEventPanelPage.Action.Filter.name()).append("@Filter", "#FilterField.Value"),
         false
      );
      var1.addEventBinding(CustomUIEventBindingType.Activating, "#RefreshButton", new EventData().append("Action", WorldEventPanelPage.Action.Refresh.name()));
      var1.addEventBinding(CustomUIEventBindingType.Activating, "#BackButton", new EventData().append("Action", WorldEventPanelPage.Action.Back.name()));
      var1.addEventBinding(CustomUIEventBindingType.Activating, "#ToggleButton", new EventData().append("Action", WorldEventPanelPage.Action.Toggle.name()));
      var1.addEventBinding(CustomUIEventBindingType.Activating, "#CloseButton", new EventData().append("Action", WorldEventPanelPage.Action.Close.name()));
      var1.addEventBinding(CustomUIEventBindingType.Activating, "#ResetAllButton", new EventData().append("Action", WorldEventPanelPage.Action.ResetAll.name()));
      var1.addEventBinding(
         CustomUIEventBindingType.Activating, "#ConfirmButton", new EventData().append("Action", WorldEventPanelPage.Action.ConfirmAccept.name())
      );
      var1.addEventBinding(
         CustomUIEventBindingType.Activating, "#CancelConfirmButton", new EventData().append("Action", WorldEventPanelPage.Action.ConfirmCancel.name())
      );
   }

   class="kw">private void buildConfirm(@Nonnull UICommandBuilder var1) {
      var1.set("#ConfirmPage.Visible", this.pendingConfirm);
      if (this.pendingConfirm) {
         var1.set("#ConfirmMessage.Text", Message.translation("server.customUI.worldEventPanel.confirm.resetAll"));
      }
   }

   class="kw">private void buildSummary(@Nonnull UICommandBuilder var1, @Nonnull Store<EntityStore> var2) {
      var1.clear("#Summary");
      WorldEventManager var3 = var2.getResource(WorldEventManager.getResourceType());
      WorldEventStorage var4 = var2.getResource(WorldEventStorage.getResourceType());
      World var5 = var2.getExternalData().getWorld();
      int[] var6 = new int[1];
      var3.forEach(var6, (var0, var1x) -> var1x[0]++);
      int var7 = 0;
      var7 = this.appendSummary(var1, var7, Message.translation("server.customUI.worldEventPanel.summary.world").param("world", var5.getName()));
      var7 = this.appendSummary(var1, var7, Message.translation("server.customUI.worldEventPanel.summary.running").param("count", var6[0]));
      var7 = this.appendSummary(var1, var7, Message.translation("server.customUI.worldEventPanel.summary.assets").param("count", assetCount()));
      var7 = this.appendSummary(
         var1, var7, Message.translation("server.customUI.worldEventPanel.summary.global").param("count", GlobalWorldEventManager.INSTANCE.activeCount())
      );
      this.appendSummary(var1, var7, Message.translation("server.customUI.worldEventPanel.summary.completed").param("count", var4.completeCount()));
   }

   class="kw">protected class="kw">static int assetCount() {
      int var0 = 0;

      for (WorldEventAsset var2 : WorldEventAsset.ASSET_MAP.getAssetMap().values()) {
         if (var2 != WorldEventAsset.UNKNOWN) {
            var0++;
         }
      }

      class="kw">return var0;
   }

   class="kw">private int appendSummary(@Nonnull UICommandBuilder var1, int var2, @Nonnull Message var3) {
      this.trackAppend("#Summary", "Pages/WorldEvent/WorldEventSummaryRow.ui");
      var1.append("#Summary", "Pages/WorldEvent/WorldEventSummaryRow.ui");
      var1.set("#Summary[" + var2 + "].Text", var3);
      class="kw">return var2 + 1;
   }

   class="kw">protected int appendSection(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4) {
      this.trackAppend(var2, "Pages/WorldEvent/WorldEventSectionLabel.ui");
      var1.append(var2, "Pages/WorldEvent/WorldEventSectionLabel.ui");
      var1.set(var2 + "[" + var3 + "].Text", var4);
      class="kw">return var3 + 1;
   }

   class="kw">protected int appendText(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4) {
      this.trackAppend(var2, "Pages/WorldEvent/WorldEventTextRow.ui");
      var1.append(var2, "Pages/WorldEvent/WorldEventTextRow.ui");
      var1.set(var2 + "[" + var3 + "].Text", var4);
      class="kw">return var3 + 1;
   }

   class="kw">protected int appendProperty(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4, @Nonnull String var5) {
      String var6 = var2 + "[" + var3 + "]";
      this.trackAppend(var2, "Pages/WorldEvent/WorldEventPropertyRow.ui");
      var1.append(var2, "Pages/WorldEvent/WorldEventPropertyRow.ui");
      var1.set(var6 + " #Key.Text", var4);
      var1.set(var6 + " #Key.TooltipText", var4);
      var1.set(var6 + " #Value.Text", var5);
      class="kw">return var3 + 1;
   }

   class="kw">protected int appendProperty(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4, @Nonnull Message var5) {
      String var6 = var2 + "[" + var3 + "]";
      this.trackAppend(var2, "Pages/WorldEvent/WorldEventPropertyRow.ui");
      var1.append(var2, "Pages/WorldEvent/WorldEventPropertyRow.ui");
      var1.set(var6 + " #Key.Text", var4);
      var1.set(var6 + " #Key.TooltipText", var4);
      var1.set(var6 + " #Value.Text", var5);
      class="kw">return var3 + 1;
   }

   class="kw">protected int appendProperty(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull String var4, @Nonnull String var5) {
      String var6 = var2 + "[" + var3 + "]";
      this.trackAppend(var2, "Pages/WorldEvent/WorldEventPropertyRow.ui");
      var1.append(var2, "Pages/WorldEvent/WorldEventPropertyRow.ui");
      var1.set(var6 + " #Key.Text", var4);
      var1.set(var6 + " #Key.TooltipText", var4);
      var1.set(var6 + " #Value.Text", var5);
      class="kw">return var3 + 1;
   }

   class="kw">protected int appendProperty(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull String var4, @Nonnull Message var5) {
      String var6 = var2 + "[" + var3 + "]";
      this.trackAppend(var2, "Pages/WorldEvent/WorldEventPropertyRow.ui");
      var1.append(var2, "Pages/WorldEvent/WorldEventPropertyRow.ui");
      var1.set(var6 + " #Key.Text", var4);
      var1.set(var6 + " #Key.TooltipText", var4);
      var1.set(var6 + " #Value.Text", var5);
      class="kw">return var3 + 1;
   }

   class="kw">protected int appendRow(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull WorldEventPanelPage.Row var4) {
      String var5 = "#ListContainer[" + var3 + "]";
      this.trackAppend("#ListContainer", "Pages/WorldEvent/WorldEventListRow.ui");
      this.trackBinding(var4.kind);
      this.trackBinding(var4.id);
      this.trackBinding(var4.selectAction);
      this.trackBinding(var4.primaryAction);
      this.trackBinding(var4.secondaryAction);
      var1.append("#ListContainer", "Pages/WorldEvent/WorldEventListRow.ui");
      var1.set(var5 + " #Label.Text", var4.label);
      if (var4.subMessage != null) {
         var1.set(var5 + " #Sub.Text", var4.subMessage);
      } else {
         var1.set(var5 + " #Sub.Text", var4.sub);
      }

      Value var6 = var4.selectAction == null ? ROW_STATIC_STYLE : ROW_STYLE;
      var1.set(var5 + " #SelectButton.Style", var4.selected ? ROW_SELECTED_STYLE : var6);
      var1.setObject(var5 + " #StatusBar.Background", colorPatch(var4.statusColor));
      if (var4.badge != null) {
         var1.set(var5 + " #Badge.Text", var4.badge);
      }

      if (var4.selectAction != null) {
         var2.addEventBinding(CustomUIEventBindingType.Activating, var5 + " #SelectButton", rowEvent(var4.selectAction, var4.kind, var4.id));
      }

      this.bindRowButton(var1, var2, var5 + " #ActionA", var4.primaryText, var4.primaryAction, var4.kind, var4.id);
      this.bindRowButton(var1, var2, var5 + " #ActionB", var4.secondaryText, var4.secondaryAction, var4.kind, var4.id);
      class="kw">return var3 + 1;
   }

   class="kw">private void bindRowButton(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      @Nonnull String var3,
      @Nullable Message var4,
      @Nullable WorldEventPanelPage.Action var5,
      @Nonnull String var6,
      @Nonnull String var7
   ) {
      if (var4 != null && var5 != null) {
         var1.set(var3 + ".Visible", true);
         var1.set(var3 + ".Text", var4);
         var2.addEventBinding(CustomUIEventBindingType.Activating, var3, rowEvent(var5, var6, var7));
      }
   }

   @Nonnull
   class="kw">private class="kw">static EventData rowEvent(@Nonnull WorldEventPanelPage.Action var0, @Nonnull String var1, @Nonnull String var2) {
      class="kw">return new EventData().append("Action", var0.name()).append("Kind", var1).append("Id", var2);
   }

   class="kw">protected int appendEncoded(
      @Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, int var4, @Nonnull String var5, @Nullable BsonValue var6, int var7
   ) {
      class="kw">return this.appendEncoded(var1, var2, var3, var4, var5, var6, var7, 400);
   }

   class="kw">protected int appendEncoded(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      @Nonnull String var3,
      int var4,
      @Nonnull String var5,
      @Nullable BsonValue var6,
      int var7,
      int var8
   ) {
      if (var6 == null || var4 >= var8) {
         class="kw">return var4;
      }

      if (var7 < 6 && var6 class="kw">instanceof BsonDocument var13) {
         double[] var14 = coordinateOf(var13);
         if (var14 != null) {
            class="kw">return this.appendCoordinate(var1, var2, var3, var4, var5, var14[0], var14[1], var14[2]);
         }

         for (Entry var12 : var13.entrySet()) {
            var4 = this.appendEncoded(var1, var2, var3, var4, join(var5, var12.getKey()), var12.getValue(), var7 + 1, var8);
         }

         class="kw">return var4;
      } else if (var7 < 6 && var6 class="kw">instanceof BsonArray var9) {
         if (var9.isEmpty()) {
            class="kw">return this.appendProperty(var1, var3, var4, var5, "[]");
         }

         for (int var10 = 0; var10 < var9.size(); var10++) {
            var4 = this.appendEncoded(var1, var2, var3, var4, var5 + "[" + var10 + "]", var9.get(var10), var7 + 1, var8);
         }

         class="kw">return var4;
      } else {
         class="kw">return this.appendProperty(var1, var3, var4, var5, scalar(var6));
      }
   }

   @Nullable
   class="kw">private class="kw">static double[] coordinateOf(@Nonnull BsonDocument var0) {
      if (var0.size() != 3) {
         class="kw">return null;
      }

      Double var1 = finiteNumberOf(var0.get("X"));
      Double var2 = finiteNumberOf(var0.get("Y"));
      Double var3 = finiteNumberOf(var0.get("Z"));
      class="kw">return var1 != null && var2 != null && var3 != null ? new double[]{var1, var2, var3} : null;
   }

   @Nullable
   class="kw">private class="kw">static Double finiteNumberOf(@Nullable BsonValue var0) {
      if (var0 != null && var0.isNumber()) {
         double var1 = var0.asNumber().doubleValue();
         class="kw">return Double.isFinite(var1) ? var1 : null;
      } else {
         class="kw">return null;
      }
   }

   class="kw">protected int appendCoordinate(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      @Nonnull String var3,
      int var4,
      @Nonnull String var5,
      double var6,
      double var8,
      double var10
   ) {
      String var12 = var3 + "[" + var4 + "]";
      this.trackAppend(var3, "Pages/WorldEvent/WorldEventCoordinateRow.ui");
      var1.append(var3, "Pages/WorldEvent/WorldEventCoordinateRow.ui");
      if (var5.isEmpty()) {
         Message var13 = Message.translation("server.customUI.worldEventPanel.inspector.unnamedCoordinate");
         var1.set(var12 + " #Key.Text", var13);
         var1.set(var12 + " #Key.TooltipText", var13);
      } else {
         var1.set(var12 + " #Key.Text", var5);
         var1.set(var12 + " #Key.TooltipText", var5);
      }

      String var16 = "(" + formatDouble(var6) + ", " + formatDouble(var8) + ", " + formatDouble(var10) + ")";
      var1.set(var12 + " #Value.Text", var16);
      var1.set(var12 + " #Value.TooltipText", var16);
      boolean var14 = isPosition(var5) && isInWorld(var6, var8, var10);
      var1.set(var12 + " #TeleportButton.Visible", var14);
      this.trackBinding(String.valueOf(var14));
      if (var14) {
         var1.set(var12 + " #TeleportButton.Text", Message.translation("server.customUI.worldEventPanel.action.teleport"));
         String var15 = coordinateId(var6, var8, var10);
         this.trackBinding(var15);
         var2.addEventBinding(
            CustomUIEventBindingType.Activating,
            var12 + " #TeleportButton",
            new EventData().append("Action", WorldEventPanelPage.Action.Teleport.name()).append("Id", var15)
         );
      }

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

   class="kw">private class="kw">static boolean isPosition(@Nonnull String var0) {
      int var1 = var0.lastIndexOf(46);
      String var2 = var1 < 0 ? var0 : var0.substring(var1 + 1);
      int var3 = var2.indexOf(91);
      if (var3 >= 0) {
         var2 = var2.substring(0, var3);
      }

      class="kw">return POSITION_KEYS.contains(var2.toLowerCase(Locale.ROOT));
   }

   class="kw">private class="kw">static boolean isInWorld(double var0, double var2, double var4) {
      class="kw">return Math.abs(var0) <= 2.147483616E9 && Math.abs(var4) <= 2.147483616E9 && var2 >= -32.0 && var2 <= 320.0;
   }

   @Nonnull
   class="kw">private class="kw">static String coordinateId(double var0, double var2, double var4) {
      class="kw">return var0 + "," + var2 + "," + var4;
   }

   @Nullable
   class="kw">private class="kw">static Vector3d parseCoordinateId(@Nullable String var0) {
      if (var0 == null) {
         class="kw">return null;
      }

      String[] var1 = var0.split(",", -1);
      if (var1.length != 3) {
         class="kw">return null;
      }

      try {
         double var2 = Double.parseDouble(var1[0]);
         double var4 = Double.parseDouble(var1[1]);
         double var6 = Double.parseDouble(var1[2]);
         class="kw">return !isInWorld(var2, var4, var6) ? null : new Vector3d(var2, var4, var6);
      } catch (NumberFormatException var8) {
         class="kw">return null;
      }
   }

   @Nonnull
   class="kw">private class="kw">static String join(@Nonnull String var0, @Nonnull String var1) {
      class="kw">return var0.isEmpty() ? var1 : var0 + "." + var1;
   }

   @Nonnull
   class="kw">protected class="kw">static String scalar(@Nonnull BsonValue var0) {
      class="kw">return class="kw">switch (var0.getBsonType()) {
         case STRING -> var0.asString().getValue();
         case BOOLEAN -> String.valueOf(var0.asBoolean().getValue());
         case INT32 -> String.valueOf(var0.asInt32().getValue());
         case INT64 -> String.valueOf(var0.asInt64().getValue());
         case DOUBLE -> formatDouble(var0.asDouble().getValue());
         case NULL -> "null";
         class="kw">default -> var0.toString();
      };
   }

   @Nonnull
   class="kw">protected class="kw">static String formatDouble(double var0) {
      class="kw">return var0 == Math.rint(var0) && !Double.isInfinite(var0) ? String.valueOf((long)var0) : String.format(Locale.ROOT, "%.3f", var0);
   }

   @Nullable
   class="kw">protected class="kw">static <T> BsonValue tryEncode(@Nonnull Codec<T> var0, @Nonnull T var1) {
      try {
         class="kw">return var0.encode(var1, EmptyExtraInfo.EMPTY);
      } catch (Exception var3) {
         ((HytaleLogger.Api)((HytaleLogger.Api)LOGGER.atWarning()).withCause(var3))
            .log("Failed to encode %s for the world-event panel", var1.getClass().getName());
         class="kw">return null;
      }
   }

   class="kw">protected int appendCount(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4, int var5, int var6) {
      class="kw">return var5 == var6
         ? this.appendProperty(var1, var2, var3, var4, Message.translation("server.customUI.worldEventPanel.value.unlimited"))
         : this.appendProperty(var1, var2, var3, var4, String.valueOf(var5));
   }

   @Nonnull
   class="kw">protected class="kw">static Message boolLabel(boolean var0) {
      class="kw">return Message.translation(var0 ? "server.customUI.worldEventPanel.value.yes" : "server.customUI.worldEventPanel.value.no");
   }

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

   class="kw">protected boolean matchesFilter(@Nonnull String... var1) {
      if (this.filterText.isEmpty()) {
         class="kw">return true;
      }

      String var2 = this.filterText.toLowerCase(Locale.ROOT);

      for (String var6 : var1) {
         if (var6.toLowerCase(Locale.ROOT).contains(var2)) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   @Nullable
   class="kw">protected class="kw">static WorldEventsConfig config(@Nonnull World var0) {
      class="kw">return var0.getGameplayConfig().getPluginConfig().get(WorldEventsConfig.class);
   }

   class="kw">protected void openPage(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull WorldEventPanelPage var3) {
      Player var4 = var2.getComponent(var1, Player.getComponentType());
      if (var4 != null) {
         var4.getPageManager().openCustomPage(var1, var2, var3);
      }
   }

   @Nullable
   class="kw">protected class="kw">static UUID parseUuid(@Nullable String var0) {
      if (var0 != null && !var0.isEmpty()) {
         try {
            class="kw">return UUID.fromString(var0);
         } catch (IllegalArgumentException var2) {
            class="kw">return null;
         }
      } else {
         class="kw">return null;
      }
   }

   @Nonnull
   class="kw">protected Message stageLabel(@Nonnull WorldEvent var1, @Nonnull String var2) {
      WorldEventPanelPage.CachedProgress var3 = this.progressCache.get(var1.uuid);
      if (var3 == null || var3.stage() != var1.stage) {
         var3 = new WorldEventPanelPage.CachedProgress(var1.stage, StageProgress.of(var1));
         this.progressCache.put(var1.uuid, var3);
      }

      class="kw">return stageLabelFrom(var3.progress(), var1.stage, var2);
   }

   @Nonnull
   class="kw">protected class="kw">static Message stageLabelFrom(@Nullable StageProgress var0, @Nonnull Stage var1, @Nonnull String var2) {
      class="kw">return var0 != null ? var0.label(var2, var1.id()) : Message.translation(var2 + ".unknownStage").param("id", stageIdText(var1));
   }

   @Nonnull
   class="kw">protected Message stageBadge(@Nonnull WorldEvent var1) {
      class="kw">return this.stageLabel(var1, stageBadgeKey(var1));
   }

   @Nonnull
   class="kw">protected class="kw">static String stageBadgeKey(@Nonnull WorldEvent var0) {
      class="kw">return var0.isTransient ? "server.customUI.worldEventPanel.active.badge.class="kw">transient" : "server.customUI.worldEventPanel.active.badge.persistent";
   }

   @Nonnull
   class="kw">protected class="kw">static String stageIdText(@Nonnull Stage var0) {
      class="kw">return var0.id() == -1 ? "-" : String.valueOf(var0.id());
   }

   class="kw">public enum Action {
      Navigate,
      Filter,
      Refresh,
      Toggle,
      Back,
      Close,
      ResetAll,
      ConfirmAccept,
      ConfirmCancel,
      RowSelect,
      RowPrimary,
      RowSecondary,
      Teleport;

      Action() {
      }
   }

   class="kw">private record CachedProgress(@Nonnull Stage stage, @Nullable StageProgress progress) {
      class="kw">private CachedProgress {
      }
   }

   class="kw">public class="kw">static class PageData {
      class="kw">public class="kw">static class="kw">final BuilderCodec<WorldEventPanelPage.PageData> CODEC = BuilderCodec.builder(
            WorldEventPanelPage.PageData.class, WorldEventPanelPage.PageData::new
         )
         .append(new KeyedCodec<>("Action", new EnumCodec<>(WorldEventPanelPage.Action.class), false), (var0, var1) -> var0.action = var1, var0 -> var0.action)
         .add()
         .append(new KeyedCodec<>("Kind", Codec.STRING, false), (var0, var1) -> var0.kind = var1, var0 -> var0.kind)
         .add()
         .append(new KeyedCodec<>("Id", Codec.STRING, false), (var0, var1) -> var0.id = var1, var0 -> var0.id)
         .add()
         .append(new KeyedCodec<>("@Filter", Codec.STRING, false), (var0, var1) -> var0.filter = var1, var0 -> var0.filter)
         .add()
         .build();
      @Nullable
      class="kw">public WorldEventPanelPage.Action action;
      @Nullable
      class="kw">public String kind;
      @Nullable
      class="kw">public String id;
      @Nullable
      class="kw">public String filter;

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

   class="kw">protected class="kw">static class="kw">final class Row {
      @Nonnull
      class="kw">private class="kw">final String kind;
      @Nonnull
      class="kw">private class="kw">final String id;
      @Nonnull
      class="kw">private String label = "";
      @Nonnull
      class="kw">private String sub = "";
      @Nullable
      class="kw">private Message subMessage = null;
      @Nonnull
      class="kw">private String statusColor = "#4a5a6a";
      @Nullable
      class="kw">private Message badge = null;
      @Nullable
      class="kw">private WorldEventPanelPage.Action selectAction = null;
      @Nullable
      class="kw">private Message primaryText = null;
      @Nullable
      class="kw">private WorldEventPanelPage.Action primaryAction = null;
      @Nullable
      class="kw">private Message secondaryText = null;
      @Nullable
      class="kw">private WorldEventPanelPage.Action secondaryAction = null;
      class="kw">private boolean selected = false;

      class="kw">public Row(@Nonnull String var1, @Nonnull String var2) {
         this.kind = var1;
         this.id = var2;
      }

      @Nonnull
      class="kw">public WorldEventPanelPage.Row label(@Nonnull String var1) {
         this.label = var1;
         class="kw">return this;
      }

      @Nonnull
      class="kw">public WorldEventPanelPage.Row sub(@Nonnull String var1) {
         this.sub = var1;
         class="kw">return this;
      }

      @Nonnull
      class="kw">public WorldEventPanelPage.Row sub(@Nonnull Message var1) {
         this.subMessage = var1;
         class="kw">return this;
      }

      @Nonnull
      class="kw">public WorldEventPanelPage.Row status(@Nonnull String var1) {
         this.statusColor = var1;
         class="kw">return this;
      }

      @Nonnull
      class="kw">public WorldEventPanelPage.Row badge(@Nonnull Message var1) {
         this.badge = var1;
         class="kw">return this;
      }

      @Nonnull
      class="kw">public WorldEventPanelPage.Row select(@Nonnull WorldEventPanelPage.Action var1) {
         this.selectAction = var1;
         class="kw">return this;
      }

      @Nonnull
      class="kw">public WorldEventPanelPage.Row primary(@Nonnull Message var1, @Nonnull WorldEventPanelPage.Action var2) {
         this.primaryText = var1;
         this.primaryAction = var2;
         class="kw">return this;
      }

      @Nonnull
      class="kw">public WorldEventPanelPage.Row secondary(@Nonnull Message var1, @Nonnull WorldEventPanelPage.Action var2) {
         this.secondaryText = var1;
         this.secondaryAction = var2;
         class="kw">return this;
      }

      @Nonnull
      class="kw">public WorldEventPanelPage.Row selected(boolean var1) {
         this.selected = var1;
         class="kw">return this;
      }
   }

   class="kw">public enum Tab {
      ACTIVE("active", "server.customUI.worldEventPanel.tab.active", "server.customUI.worldEventPanel.tab.active.desc"),
      ASSETS("assets", "server.customUI.worldEventPanel.tab.assets", "server.customUI.worldEventPanel.tab.assets.desc"),
      CONFIG("config", "server.customUI.worldEventPanel.tab.config", "server.customUI.worldEventPanel.tab.config.desc"),
      GLOBAL("global", "server.customUI.worldEventPanel.tab.global", "server.customUI.worldEventPanel.tab.global.desc"),
      STORAGE("storage", "server.customUI.worldEventPanel.tab.storage", "server.customUI.worldEventPanel.tab.storage.desc");

      @Nonnull
      class="kw">private class="kw">final String id;
      @Nonnull
      class="kw">private class="kw">final String titleKey;
      @Nonnull
      class="kw">private class="kw">final String descriptionKey;

      Tab(@Nonnull class="kw">final String nullxx, @Nonnull class="kw">final String nullxxx, @Nonnull class="kw">final String nullxxxx) {
         this.id = nullxx;
         this.titleKey = nullxxx;
         this.descriptionKey = nullxxxx;
      }

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

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

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

      @Nonnull
      class="kw">public WorldEventPanelPage create(@Nonnull PlayerRef var1) {
         class="kw">return class="kw">switch (this) {
            case ACTIVE -> new WorldEventActivePage(var1);
            case ASSETS -> new WorldEventAssetsPage(var1);
            case CONFIG -> new WorldEventConfigPage(var1);
            case GLOBAL -> new WorldEventGlobalPage(var1);
            case STORAGE -> new WorldEventStoragePage(var1);
         };
      }

      @Nullable
      class="kw">public class="kw">static WorldEventPanelPage.Tab fromId(@Nullable String var0) {
         if (var0 == null) {
            class="kw">return null;
         }

         for (WorldEventPanelPage.Tab var4 : values()) {
            if (var4.id.equals(var0)) {
               class="kw">return var4;
            }
         }

         class="kw">return null;
      }
   }

   class="kw">private class="kw">static class="kw">final class ValueOnlyCommandBuilder class="kw">extends UICommandBuilder {
      class="kw">private ValueOnlyCommandBuilder() {
      }

      @Nonnull
      @Override
      class="kw">public UICommandBuilder clear(String var1) {
         class="kw">return this;
      }

      @Nonnull
      @Override
      class="kw">public UICommandBuilder remove(String var1) {
         class="kw">return this;
      }

      @Nonnull
      @Override
      class="kw">public UICommandBuilder append(String var1) {
         class="kw">return this;
      }

      @Nonnull
      @Override
      class="kw">public UICommandBuilder append(String var1, String var2) {
         class="kw">return this;
      }

      @Nonnull
      @Override
      class="kw">public UICommandBuilder appendInline(String var1, String var2) {
         class="kw">return this;
      }

      @Nonnull
      @Override
      class="kw">public UICommandBuilder insertBefore(String var1, String var2) {
         class="kw">return this;
      }

      @Nonnull
      @Override
      class="kw">public UICommandBuilder insertBeforeInline(String var1, String var2) {
         class="kw">return this;
      }
   }
}