WorldEventInspectorPage class

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

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

extends: WorldEventPanelPage

Поля (99)

МодификаторыТипИмя
final String KIND_EVENT
yield false
yield false
return
yield true
yield true
yield true
int var1
String var1
String var1
String var10
String var10
EventCondition[] var10
String var10
EventCondition var10
boolean var11
EventCondition[] var11
boolean[] var11
boolean var11
ContextKey var11
boolean var12
boolean[] var12
boolean var12
Context var12
String var13
int var13
String var13
String var13
Fork[] var14
boolean var14
String var14
String var14
String var15
String var15
int var15
var15
var15
int var16
var16
Stage var17
EventCondition var17
boolean var18
String var18
Stage var19
WorldEvent var2
WorldEvent[] var2
BsonValue var2
boolean[] var2
EventAction[] var20
EventAction var22
var3
var3
var3
var3
var3
var3
EventCondition[] var3
WorldEvent var4
Integer var4
boolean[] var4
int var5
WorldEventStorage var5
Stage var5
WorldEventStorage var5
boolean var5
Fork[] var5
ContextEntry[] var5
WorldEvent var6
int var6
WorldEventAsset var6
int var6
var6
var6
int var6
boolean var7
String var7
String var7
int var7
var7
var7
var7
var7
var7
var7
var7
var7
var7
var7
var7
var7
var7
Fork[] var7
EventCondition[] var7
int var8
boolean[] var8
Stage var9
var9
var9
Fork var9

Методы (59)

МодификаторыВозвратСигнатура
private int appendDetailItemint appendDetailItem(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, int var4, @Nonnull String var5, @Nonnull String var6, @Nonnull String var7, boolean var8, @Nonnull Supplier<BsonValue> var9)
private int appendFieldsint appendFields(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, int var4, @Nullable BsonValue var5)
private int appendFieldsint appendFields(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, int var4, @Nullable BsonValue var5, int var6)
private int appendItemint appendItem(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull String var4, @Nullable Message var5, @Nonnull String var6)
private int appendItemint appendItem(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4, @Nullable Message var5, @Nonnull String var6)
private void appendItemBasevoid appendItemBase(@Nonnull UICommandBuilder var1, @Nonnull String var2, @Nonnull String var3, @Nonnull String var4, @Nullable Message var5)
private void appendItemFieldsvoid appendItemFields(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, @Nullable BsonValue var4)
private int appendSpineint appendSpine(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, int var4, @Nonnull WorldEvent var5, @Nonnull Stage var6, int var7)
private int buildConditionDetailsint buildConditionDetails(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull WorldEvent var4)
private void buildContextDetailsvoid buildContextDetails(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull WorldEvent var4)
private void buildDetailsvoid buildDetails(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull Store<EntityStore> var3, @Nonnull WorldEvent var4)
private void buildEventDetailsvoid buildEventDetails(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull Store<EntityStore> var3, @Nonnull WorldEvent var4)
private void buildStageDetailsvoid buildStageDetails(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull WorldEvent var3, @Nonnull Stage var4)
private void buildTimelinevoid buildTimeline(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull WorldEvent var4)
static int countMetint countMet(@Nonnull boolean[] var0)
for for(int var16 = 0; var16 < var14.length && this.graphBudget > 0; var16++)
for for(int var17 = 0; var17 < var11.length && this.graphBudget > 0; var17++)
for for(int var8 = 0; var8 < var7.length; var8++)
for for(int var16 = 0; var16 < var10.length; var16++)
for for(int var21 = 0; var21 < var20.length; var21++)
for for(int var6 = 0; var6 < var5.length; var6++)
for for(int var9 = 0; var9 < var7.length; var9++)
for for(ContextEntry var10 : var5)
for for(int var5 = 0; var5 < var3.length; var5++)
for for(boolean var5 : var0)
if if(var4 == null)
if if(var3.action == null)
if if(!var7)
if if(var6 != null)
if if(var4 == null)
if if(var0 == null)
if if(var5 == Stage.EMPTY)
if if(this.graphBudget <= 0)
if if(var12)
if if(var14.length == 1)
if if(this.graphBudget <= 0)
if if(var19 == null)
if if(!this.showFullTimeline)
if if(var9)
if if(var5 != null)
if if(this.resolvedStage != null)
if if(var7.length == 0)
if if(var11)
if if(var4 == null)
if if(var5.length == 0)
if if(var5.length == 0)
if if(var11 != null && var12 != null)
if if(var6 >= 400)
if if(var4 >= var6)
if if(var2 instanceof BsonDocument var3)
if if(var2 != null)
if if(var5)
if if(var1.root == Stage.EMPTY)
if if(this.walkRoot != var1.root)
static boolean safeTestboolean safeTest(@Nonnull EventCondition var0)
abstract super super(var1)
return switchreturn switch(var3.action)
private void updateStageWalkvoid updateStageWalk(@Nonnull WorldEvent var1)
while while(var9 != null && this.graphBudget > 0 && var7 <= 32)

Исходный код

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

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.action.EventAction;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.action.EventStopAction;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.condition.EventCondition;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.context.Context;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.context.ContextEntry;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.context.ContextKey;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.Fork;
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.lookup.CodecMapCodec;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
class="kw">import com.hypixel.hytale.server.core.Message;
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.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.Reference2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
class="kw">import java.util.HashSet;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.function.Supplier;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonValue;

class="kw">public class WorldEventInspectorPage class="kw">extends WorldEventPanelPage {
   class="kw">private class="kw">static class="kw">final String KIND_EVENT = "event";
   class="kw">private class="kw">static class="kw">final String KIND_STAGE = "stage";
   class="kw">private class="kw">static class="kw">final String KIND_FIELD = "field";
   class="kw">private class="kw">static class="kw">final String GRAPH_STAGE = "Pages/WorldEvent/WorldEventGraphStage.ui";
   class="kw">private class="kw">static class="kw">final String GRAPH_COLUMN = "Pages/WorldEvent/WorldEventGraphColumn.ui";
   class="kw">private class="kw">static class="kw">final String GRAPH_FORK = "Pages/WorldEvent/WorldEventGraphFork.ui";
   class="kw">private class="kw">static class="kw">final String GRAPH_ITEM = "Pages/WorldEvent/WorldEventGraphItem.ui";
   class="kw">private class="kw">static class="kw">final String DETAIL_FORK = "Pages/WorldEvent/WorldEventDetailFork.ui";
   class="kw">private class="kw">static class="kw">final String DETAIL_ITEM = "Pages/WorldEvent/WorldEventDetailItem.ui";
   class="kw">private class="kw">static class="kw">final Value<String> STAGE_STYLE = Value.ref("Pages/WorldEvent/WorldEventGraphStage.ui", "HeaderStyle");
   class="kw">private class="kw">static class="kw">final Value<String> STAGE_SELECTED_STYLE = Value.ref("Pages/WorldEvent/WorldEventGraphStage.ui", "SelectedHeaderStyle");
   class="kw">private class="kw">static class="kw">final int MAX_GRAPH_DEPTH = 32;
   class="kw">private class="kw">static class="kw">final String TYPE_KEY = "Type";
   @Nonnull
   class="kw">private class="kw">final UUID uuid;
   @Nonnull
   class="kw">private class="kw">final Reference2ObjectMap<Fork, boolean[]> results = new Reference2ObjectOpenHashMap();
   class="kw">private boolean showFullTimeline = false;
   @Nullable
   class="kw">private Integer selectedStageId = null;
   @Nullable
   class="kw">private Stage resolvedStage = null;
   @Nullable
   class="kw">private StageProgress.Walk stageWalk = null;
   @Nullable
   class="kw">private Stage walkRoot = null;
   @Nonnull
   class="kw">private class="kw">final Set<String> toggledItems = new HashSet<>();
   class="kw">private int graphBudget = 400;

   class="kw">public WorldEventInspectorPage(@Nonnull PlayerRef var1, @Nonnull UUID var2) {
      super(var1);
      this.uuid = var2;
   }

   @Nullable
   @Override
   class="kw">protected WorldEventPanelPage.Tab tab() {
      class="kw">return null;
   }

   @Nonnull
   @Override
   class="kw">protected String titleKey() {
      class="kw">return "server.customUI.worldEventPanel.inspector.title";
   }

   @Nonnull
   @Override
   class="kw">protected String descriptionKey() {
      class="kw">return "server.customUI.worldEventPanel.inspector.desc";
   }

   @Override
   class="kw">protected boolean supportsFilter() {
      class="kw">return false;
   }

   @Override
   class="kw">protected boolean supportsBack() {
      class="kw">return true;
   }

   @Nullable
   @Override
   class="kw">protected Message toggleLabel() {
      class="kw">return Message.translation(
         this.showFullTimeline ? "server.customUI.worldEventPanel.inspector.showCurrentStage" : "server.customUI.worldEventPanel.inspector.showTimeline"
      );
   }

   @Override
   class="kw">protected boolean onToggle() {
      this.showFullTimeline = !this.showFullTimeline;
      class="kw">return true;
   }

   @Override
   class="kw">protected void buildContent(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull Store<EntityStore> var3) {
      this.results.clear();
      this.resolvedStage = null;
      WorldEvent var4 = this.find(var3);
      if (var4 == null) {
         var1.set("#SideContainer.Visible", false);
         var1.set("#SideSpacer.Visible", false);
         this.appendText(
            var1, "#ListContainer", 0, Message.translation("server.customUI.worldEventPanel.inspector.notFound").param("uuid", this.uuid.toString())
         );
      } else {
         var1.set("#SideContainer.Visible", true);
         var1.set("#SideSpacer.Visible", true);
         var1.set("#PageTitle.Text", var4.asset);
         this.updateStageWalk(var4);
         int var5 = this.appendRow(
            var1,
            var2,
            0,
            new WorldEventPanelPage.Row("event", var4.uuid.toString())
               .label(var4.asset)
               .sub(var4.uuid.toString())
               .status(var4.failCount > 0 ? "#b04a4a" : (var4.init ? "#c08a3a" : "#4f9e63"))
               .badge(this.positionLabel(var4.stage, stageBadgeKey(var4)))
               .primary(Message.translation("server.customUI.worldEventPanel.action.cancel"), WorldEventPanelPage.Action.RowPrimary)
         );
         this.buildTimeline(var1, var2, var5, var4);
         this.buildDetails(var1, var2, var3, var4);
      }
   }

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

      class="kw">return class="kw">switch (var3.action) {
         case RowPrimary -> {
            boolean var7 = var2.getResource(WorldEventManager.getResourceType()).get(this.uuid) != null;
            EventStopAction.stopEvent(var2, this.uuid, (var0, var1x) -> var0.uuid.equals(var1x));
            if (!var7) {
               WorldEventStorage var5 = var2.getResource(WorldEventStorage.getResourceType());
               WorldEvent var6 = this.findStored(var5);
               if (var6 != null) {
                  var5.remove(var6);
               }
            }

            yield true;
         }
         case RowSelect -> {
            if ("stage".equals(var3.kind)) {
               Integer var4 = parseStageId(var3.id);
               if (var4 == null) {
                  yield false;
               } else {
                  this.selectedStageId = var4.equals(this.selectedStageId) ? null : var4;
                  this.toggledItems.clear();
                  yield true;
               }
            } else if ("field".equals(var3.kind) && var3.id != null) {
               if (!this.toggledItems.remove(var3.id)) {
                  this.toggledItems.add(var3.id);
               }

               yield true;
            } else {
               yield false;
            }
         }
         class="kw">default -> false;
      };
   }

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

      try {
         class="kw">return Integer.valueOf(var0);
      } catch (NumberFormatException var2) {
         class="kw">return null;
      }
   }

   @Nullable
   class="kw">private WorldEvent find(@Nonnull Store<EntityStore> var1) {
      WorldEvent var2 = var1.getResource(WorldEventManager.getResourceType()).get(this.uuid);
      class="kw">return var2 != null ? var2 : this.findStored(var1.getResource(WorldEventStorage.getResourceType()));
   }

   @Nullable
   class="kw">private WorldEvent findStored(@Nonnull WorldEventStorage var1) {
      WorldEvent[] var2 = new WorldEvent[1];
      var1.forEach(var2, (var1x, var2x) -> {
         if (var1x.uuid.equals(this.uuid)) {
            var2x[0] = var1x;
         }
      });
      class="kw">return var2[0];
   }

   class="kw">private void buildTimeline(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull WorldEvent var4) {
      var3 = this.appendSection(
         var1,
         "#ListContainer",
         var3,
         Message.translation(
            this.showFullTimeline ? "server.customUI.worldEventPanel.section.timeline" : "server.customUI.worldEventPanel.section.currentStage"
         )
      );
      Stage var5 = this.showFullTimeline ? StageProgress.rootOf(var4) : var4.stage;
      this.graphBudget = 400;
      if (var5 == Stage.EMPTY) {
         this.appendText(var1, "#ListContainer", var3, Message.translation("server.customUI.worldEventPanel.inspector.noStages"));
      } else {
         int var6 = this.appendSpine(var1, var2, "#ListContainer", var3, var4, var5, 0);
         if (this.graphBudget <= 0) {
            this.appendText(var1, "#ListContainer", var6, Message.translation("server.customUI.worldEventPanel.inspector.truncated"));
         }
      }
   }

   class="kw">private int appendSpine(
      @Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, int var4, @Nonnull WorldEvent var5, @Nonnull Stage var6, int var7
   ) {
      int var8 = var4;
      Stage var9 = var6;

      while (var9 != null && this.graphBudget > 0 && var7 <= 32) {
         this.trackAppend(var3, "Pages/WorldEvent/WorldEventGraphStage.ui");
         var1.append(var3, "Pages/WorldEvent/WorldEventGraphStage.ui");
         this.graphBudget--;
         String var10 = var3 + "[" + var8 + "]";
         boolean var11 = var9 == var5.stage;
         boolean var12 = this.selectedStageId != null && this.selectedStageId == var9.id();
         if (var12) {
            this.resolvedStage = var9;
         }

         var1.set(var10 + " #Header #Label.Text", this.positionLabel(var9, "server.customUI.worldEventPanel.inspector.stage"));
         var1.set(
            var10 + " #Header #Badge.Text",
            var11 ? Message.translation("server.customUI.worldEventPanel.state.current") : Message.translation("server.customUI.worldEventPanel.state.pending")
         );
         var1.setObject(var10 + " #Header #Rail.Background", colorPatch(var11 ? "#4f9e63" : "#4a5a6a"));
         var1.set(var10 + " #Header.Style", var12 ? STAGE_SELECTED_STYLE : STAGE_STYLE);
         String var13 = String.valueOf(var9.id());
         this.trackBinding(var13);
         var2.addEventBinding(
            CustomUIEventBindingType.Activating,
            var10 + " #Header",
            new EventData().append("Action", WorldEventPanelPage.Action.RowSelect.name()).append("Kind", "stage").append("Id", var13)
         );
         Fork[] var14 = var9.forks();
         var8++;
         if (var14.length == 1) {
            Stage var17 = this.appendFork(var1, var2, var10 + " #Body", 0, var5, var14[0], var11, var7, true);
            var9 = this.showFullTimeline ? var17 : null;
         } else {
            String var15 = var10 + " #Branches";

            for (int var16 = 0; var16 < var14.length && this.graphBudget > 0; var16++) {
               this.trackAppend(var15, "Pages/WorldEvent/WorldEventGraphColumn.ui");
               var1.append(var15, "Pages/WorldEvent/WorldEventGraphColumn.ui");
               this.graphBudget--;
               this.appendFork(var1, var2, var15 + "[" + var16 + "]", 0, var5, var14[var16], var11, var7, false);
            }

            var9 = null;
         }
      }

      class="kw">return var8;
   }

   @Nullable
   class="kw">private Stage appendFork(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      @Nonnull String var3,
      int var4,
      @Nonnull WorldEvent var5,
      @Nonnull Fork var6,
      boolean var7,
      int var8,
      boolean var9
   ) {
      if (this.graphBudget <= 0) {
         class="kw">return null;
      }

      this.trackAppend(var3, "Pages/WorldEvent/WorldEventGraphFork.ui");
      var1.append(var3, "Pages/WorldEvent/WorldEventGraphFork.ui");
      this.graphBudget--;
      String var10 = var3 + "[" + var4 + "]";
      EventCondition[] var11 = var6.conditions();
      boolean[] var12 = this.testAll(var6);
      int var13 = countMet(var12);
      boolean var14 = var7 && var11.length > 0 && var13 == var11.length;
      var1.set(var10 + " #Header #Label.Text", label("server.customUI.worldEventPanel.inspector.fork", var4));
      var1.set(
         var10 + " #Header #Badge.Text",
         Message.translation("server.customUI.worldEventPanel.inspector.forkProgress").param("met", var13).param("total", var11.length)
      );
      var1.setObject(var10 + " #Header #Rail.Background", colorPatch(var14 ? "#4f9e63" : (var7 ? "#4274a5" : "#4a5a6a")));
      String var15 = var10 + " #Items";
      int var16 = 0;

      for (int var17 = 0; var17 < var11.length && this.graphBudget > 0; var17++) {
         boolean var18 = var12[var17];
         var16 = this.appendItem(
            var1,
            var15,
            var16,
            conditionId(var11[var17]),
            var7
               ? Message.translation(var18 ? "server.customUI.worldEventPanel.state.met" : "server.customUI.worldEventPanel.state.waiting")
               : Message.translation("server.customUI.worldEventPanel.state.inactive"),
            var7 ? (var18 ? "#4f9e63" : "#c08a3a") : "#4a5a6a"
         );
      }

      Stage var19 = var6.next();
      if (var19 == null) {
         class="kw">return null;
      }

      if (!this.showFullTimeline) {
         this.appendItem(var1, var10 + " #Next", 0, this.positionLabel(var19, "server.customUI.worldEventPanel.inspector.nextStage"), null, "#4a5a6a");
         class="kw">return null;
      }

      if (var9) {
         class="kw">return var19;
      }

      this.appendSpine(var1, var2, var10 + " #Next", 0, var5, var19, var8 + 1);
      class="kw">return null;
   }

   class="kw">private int appendItem(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull String var4, @Nullable Message var5, @Nonnull String var6) {
      String var7 = var2 + "[" + var3 + "]";
      this.appendItemBase(var1, var2, var7, var6, var5);
      var1.set(var7 + " #Label.Text", var4);
      var1.set(var7 + " #Label.TooltipText", var4);
      class="kw">return var3 + 1;
   }

   class="kw">private int appendItem(@Nonnull UICommandBuilder var1, @Nonnull String var2, int var3, @Nonnull Message var4, @Nullable Message var5, @Nonnull String var6) {
      String var7 = var2 + "[" + var3 + "]";
      this.appendItemBase(var1, var2, var7, var6, var5);
      var1.set(var7 + " #Label.Text", var4);
      var1.set(var7 + " #Label.TooltipText", var4);
      class="kw">return var3 + 1;
   }

   class="kw">private void appendItemBase(@Nonnull UICommandBuilder var1, @Nonnull String var2, @Nonnull String var3, @Nonnull String var4, @Nullable Message var5) {
      this.trackAppend(var2, "Pages/WorldEvent/WorldEventGraphItem.ui");
      var1.append(var2, "Pages/WorldEvent/WorldEventGraphItem.ui");
      this.graphBudget--;
      var1.setObject(var3 + " #Rail.Background", colorPatch(var4));
      if (var5 != null) {
         var1.set(var3 + " #Badge.Text", var5);
      }
   }

   class="kw">private void buildDetails(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull Store<EntityStore> var3, @Nonnull WorldEvent var4) {
      if (this.resolvedStage != null) {
         this.buildStageDetails(var1, var2, var4, this.resolvedStage);
      } else {
         this.buildEventDetails(var1, var2, var3, var4);
      }
   }

   class="kw">private void buildEventDetails(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull Store<EntityStore> var3, @Nonnull WorldEvent var4) {
      WorldEventStorage var5 = var3.getResource(WorldEventStorage.getResourceType());
      WorldEventAsset var6 = WorldEventAsset.getAssetOrUnknown(var4.asset);
      int var7 = 0;
      var7 = this.appendSection(var1, "#SideContainer", var7, Message.translation("server.customUI.worldEventPanel.section.event"));
      var7 = this.appendProperty(var1, "#SideContainer", var7, Message.translation("server.customUI.worldEventPanel.field.uuid"), var4.uuid.toString());
      var7 = this.appendProperty(var1, "#SideContainer", var7, Message.translation("server.customUI.worldEventPanel.field.asset"), var4.asset);
      var7 = this.appendProperty(
         var1,
         "#SideContainer",
         var7,
         Message.translation("server.customUI.worldEventPanel.field.stage"),
         this.positionLabel(var4.stage, "server.customUI.worldEventPanel.value.stageProgress")
      );
      var7 = this.appendProperty(
         var1, "#SideContainer", var7, Message.translation("server.customUI.worldEventPanel.field.class="kw">transient"), boolLabel(var4.isTransient)
      );
      var7 = this.appendProperty(var1, "#SideContainer", var7, Message.translation("server.customUI.worldEventPanel.field.initializing"), boolLabel(var4.init));
      var7 = this.appendCount(var1, "#SideContainer", var7, Message.translation("server.customUI.worldEventPanel.field.repeatCount"), var4.repeatCount, -1);
      var7 = this.appendProperty(
         var1, "#SideContainer", var7, Message.translation("server.customUI.worldEventPanel.field.requiredPlayers"), String.valueOf(var4.requiredPlayerCount)
      );
      var7 = this.appendProperty(var1, "#SideContainer", var7, Message.translation("server.customUI.worldEventPanel.field.failCount"), var4.failCount + " / 5");
      var7 = this.appendProperty(
         var1, "#SideContainer", var7, Message.translation("server.customUI.worldEventPanel.field.persisted"), boolLabel(var5.contains(var4))
      );
      var7 = this.appendProperty(
         var1, "#SideContainer", var7, Message.translation("server.customUI.worldEventPanel.field.completed"), boolLabel(var5.isComplete(var4.uuid))
      );
      var7 = this.appendProperty(
         var1,
         "#SideContainer",
         var7,
         Message.translation("server.customUI.worldEventPanel.field.assetValid"),
         boolLabel(var6 != WorldEventAsset.UNKNOWN && var6.valid())
      );
      var7 = this.buildConditionDetails(var1, var2, var7, var4);
      this.buildContextDetails(var1, var2, var7, var4);
   }

   class="kw">private void buildStageDetails(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull WorldEvent var3, @Nonnull Stage var4) {
      boolean var5 = var4 == var3.stage;
      int var6 = 0;
      var6 = this.appendSection(var1, "#SideContainer", var6, this.positionLabel(var4, "server.customUI.worldEventPanel.inspector.stage"));
      Fork[] var7 = var4.forks();
      if (var7.length == 0) {
         var6 = this.appendText(var1, "#SideContainer", var6, Message.translation("server.customUI.worldEventPanel.inspector.noConditions"));
      }

      for (int var8 = 0; var8 < var7.length; var8++) {
         Fork var9 = var7[var8];
         EventCondition[] var10 = var9.conditions();
         boolean[] var11 = var5 ? this.testAll(var9) : null;
         boolean var12 = var5 && var10.length > 0 && countMet(var11) == var10.length;
         this.trackAppend("#SideContainer", "Pages/WorldEvent/WorldEventDetailFork.ui");
         var1.append("#SideContainer", "Pages/WorldEvent/WorldEventDetailFork.ui");
         String var13 = "#SideContainer[" + var6 + "]";
         var6++;
         var1.set(var13 + " #Header #Label.Text", label("server.customUI.worldEventPanel.inspector.fork", var8));
         var1.set(
            var13 + " #Header #Badge.Text",
            Message.translation("server.customUI.worldEventPanel.inspector.forkProgress")
               .param("met", var11 != null ? countMet(var11) : 0)
               .param("total", var10.length)
         );
         var1.setObject(var13 + " #Header #Rail.Background", colorPatch(var12 ? "#4f9e63" : (var5 ? "#4274a5" : "#4a5a6a")));
         String var14 = var13 + " #Items";
         int var15 = 0;

         for (int var16 = 0; var16 < var10.length; var16++) {
            EventCondition var17 = var10[var16];
            String var18 = var5 ? (var11[var16] ? "#4f9e63" : "#c08a3a") : "#4a5a6a";
            var15 = this.appendDetailItem(
               var1, var2, var14, var15, "c" + var8 + "_" + var16, conditionId(var17), var18, true, () -> encodedFields(EventCondition.TYPE_CODEC, var17)
            );
         }

         EventAction[] var20 = var9.actions();

         for (int var21 = 0; var21 < var20.length; var21++) {
            EventAction var22 = var20[var21];
            var15 = this.appendDetailItem(
               var1, var2, var14, var15, "a" + var8 + "_" + var21, actionId(var22), "#4a5a6a", false, () -> encodedFields(EventAction.TYPE_CODEC, var22)
            );
         }
      }

      this.buildContextDetails(var1, var2, var6, var3);
   }

   class="kw">private int appendDetailItem(
      @Nonnull UICommandBuilder var1,
      @Nonnull UIEventBuilder var2,
      @Nonnull String var3,
      int var4,
      @Nonnull String var5,
      @Nonnull String var6,
      @Nonnull String var7,
      boolean var8,
      @Nonnull Supplier<BsonValue> var9
   ) {
      this.trackAppend(var3, "Pages/WorldEvent/WorldEventDetailItem.ui");
      var1.append(var3, "Pages/WorldEvent/WorldEventDetailItem.ui");
      String var10 = var3 + "[" + var4 + "]";
      boolean var11 = var8 != this.toggledItems.contains(var5);
      var1.set(var10 + " #Head #Label.Text", var6);
      var1.setObject(var10 + " #Head #Rail.Background", colorPatch(var7));
      this.trackBinding(var5);
      var2.addEventBinding(
         CustomUIEventBindingType.Activating,
         var10 + " #Head",
         new EventData().append("Action", WorldEventPanelPage.Action.RowSelect.name()).append("Kind", "field").append("Id", var5)
      );
      if (var11) {
         this.appendItemFields(var1, var2, var10 + " #Fields", var9.get());
      }

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

   class="kw">private void appendItemFields(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, @Nullable BsonValue var4) {
      if (var4 == null) {
         this.appendText(var1, var3, 0, Message.translation("server.customUI.worldEventPanel.inspector.encodeFailed"));
      } else if (!(var4 class="kw">instanceof BsonDocument var5 && var5.isEmpty())) {
         this.appendEncoded(var1, var2, var3, 0, "", var4, 0);
      }
   }

   class="kw">private int buildConditionDetails(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull WorldEvent var4) {
      var3 = this.appendSection(var1, "#SideContainer", var3, Message.translation("server.customUI.worldEventPanel.section.conditions"));
      Fork[] var5 = var4.stage.forks();
      if (var5.length == 0) {
         class="kw">return this.appendText(var1, "#SideContainer", var3, Message.translation("server.customUI.worldEventPanel.inspector.noConditions"));
      }

      for (int var6 = 0; var6 < var5.length; var6++) {
         EventCondition[] var7 = var5[var6].conditions();
         boolean[] var8 = this.testAll(var5[var6]);
         var3 = this.appendProperty(
            var1,
            "#SideContainer",
            var3,
            label("server.customUI.worldEventPanel.inspector.fork", var6),
            Message.translation("server.customUI.worldEventPanel.inspector.forkProgress").param("met", countMet(var8)).param("total", var7.length)
         );

         for (int var9 = 0; var9 < var7.length; var9++) {
            EventCondition var10 = var7[var9];
            var3 = this.appendProperty(
               var1,
               "#SideContainer",
               var3,
               conditionId(var10),
               Message.translation(var8[var9] ? "server.customUI.worldEventPanel.state.met" : "server.customUI.worldEventPanel.state.waiting")
            );
            var3 = this.appendFields(var1, var2, "#SideContainer", var3, encodedFields(EventCondition.TYPE_CODEC, var10));
         }
      }

      class="kw">return var3;
   }

   class="kw">private void buildContextDetails(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, int var3, @Nonnull WorldEvent var4) {
      var3 = this.appendSection(var1, "#SideContainer", var3, Message.translation("server.customUI.worldEventPanel.section.context"));
      ContextEntry[] var5 = var4.context.toEntries();
      if (var5.length == 0) {
         this.appendText(var1, "#SideContainer", var3, Message.translation("server.customUI.worldEventPanel.inspector.noContext"));
      } else {
         int var6 = 0;

         for (ContextEntry var10 : var5) {
            ContextKey var11 = var10.key();
            Context var12 = var10.context();
            if (var11 != null && var12 != null) {
               if (var6 >= 400) {
                  this.appendText(var1, "#SideContainer", var3, Message.translation("server.customUI.worldEventPanel.inspector.truncated"));
                  class="kw">return;
               }

               this.trackAppend("#SideContainer", "Pages/WorldEvent/WorldEventDetailFork.ui");
               var1.append("#SideContainer", "Pages/WorldEvent/WorldEventDetailFork.ui");
               String var13 = "#SideContainer[" + var3 + "]";
               var3++;
               var6++;
               String var14 = Context.TYPE_CODEC.getIdFor((Class<? class="kw">extends Context>)var12.getClass());
               var1.set(var13 + " #Header #Label.Text", var11.getName());
               var1.set(var13 + " #Header #Badge.Text", var14 != null ? var14 : var12.getClass().getSimpleName());
               var6 += this.appendFields(var1, var2, var13 + " #Items", 0, encodedFields(Context.TYPE_CODEC, var12), 400 - var6);
            }
         }
      }
   }

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

   class="kw">private int appendFields(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2, @Nonnull String var3, int var4, @Nullable BsonValue var5, int var6) {
      if (var4 >= var6) {
         class="kw">return var4;
      } else if (var5 == null) {
         class="kw">return this.appendText(var1, var3, var4, Message.translation("server.customUI.worldEventPanel.inspector.encodeFailed"));
      } else {
         class="kw">return var5 class="kw">instanceof BsonDocument var7 && var7.isEmpty() ? var4 : this.appendEncoded(var1, var2, var3, var4, "", var5, 0, var6);
      }
   }

   @Nullable
   class="kw">private class="kw">static <T> BsonValue encodedFields(@Nonnull CodecMapCodec<T> var0, @Nonnull T var1) {
      BsonValue var2 = tryEncode(var0, var1);
      if (var2 class="kw">instanceof BsonDocument var3) {
         var3.remove("Type");
      }

      class="kw">return var2;
   }

   @Nonnull
   class="kw">private boolean[] testAll(@Nonnull Fork var1) {
      boolean[] var2 = (boolean[])this.results.get(var1);
      if (var2 != null) {
         class="kw">return var2;
      }

      EventCondition[] var3 = var1.conditions();
      boolean[] var4 = new boolean[var3.length];

      for (int var5 = 0; var5 < var3.length; var5++) {
         var4[var5] = safeTest(var3[var5]);
      }

      this.results.put(var1, var4);
      class="kw">return var4;
   }

   class="kw">private class="kw">static int countMet(@Nonnull boolean[] var0) {
      int var1 = 0;

      for (boolean var5 : var0) {
         if (var5) {
            var1++;
         }
      }

      class="kw">return var1;
   }

   class="kw">private class="kw">static boolean safeTest(@Nonnull EventCondition var0) {
      try {
         class="kw">return var0.test();
      } catch (Exception var2) {
         ((HytaleLogger.Api)((HytaleLogger.Api)LOGGER.atWarning()).withCause(var2))
            .log("World-event condition %s failed during inspection", var0.getClass().getName());
         class="kw">return false;
      }
   }

   @Nonnull
   class="kw">private class="kw">static String conditionId(@Nonnull EventCondition var0) {
      String var1 = EventCondition.TYPE_CODEC.getIdFor((Class<? class="kw">extends EventCondition>)var0.getClass());
      class="kw">return var1 != null ? var1 : var0.getClass().getSimpleName();
   }

   @Nonnull
   class="kw">private class="kw">static String actionId(@Nonnull EventAction var0) {
      String var1 = EventAction.TYPE_CODEC.getIdFor((Class<? class="kw">extends EventAction>)var0.getClass());
      class="kw">return var1 != null ? var1 : var0.getClass().getSimpleName();
   }

   @Nonnull
   class="kw">private class="kw">static Message label(@Nonnull String var0, int var1) {
      class="kw">return Message.translation(var0).param("index", var1);
   }

   class="kw">private void updateStageWalk(@Nonnull WorldEvent var1) {
      if (var1.root == Stage.EMPTY) {
         this.stageWalk = null;
         this.walkRoot = null;
      } else {
         if (this.walkRoot != var1.root) {
            this.stageWalk = new StageProgress.Walk(var1.root);
            this.walkRoot = var1.root;
         }
      }
   }

   @Nonnull
   class="kw">private Message positionLabel(@Nonnull Stage var1, @Nonnull String var2) {
      class="kw">return stageLabelFrom(this.stageWalk != null ? this.stageWalk.progressOf(var1) : null, var1, var2);
   }
}