PageEventData class

Пакет: com.hypixel.hytale.builtin.adventure.memories.page

Файл: com/hypixel/hytale/builtin/adventure/memories/page/MemoriesPage.java

Поля (7)

МодификаторыТипИмя
public static final BuilderCodec<MemoriesPage.PageEventData> CODEC
public static final String KEY_ACTION
public static final String KEY_CATEGORY
public static final String KEY_MEMORY_ID
public MemoriesPage.PageAction action
public String category
public String memoryId

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.adventure.memories.MemoriesGameplayConfig;
class="kw">import com.hypixel.hytale.builtin.adventure.memories.MemoriesPlugin;
class="kw">import com.hypixel.hytale.builtin.adventure.memories.component.PlayerMemories;
class="kw">import com.hypixel.hytale.builtin.adventure.memories.memories.Memory;
class="kw">import com.hypixel.hytale.builtin.adventure.memories.memories.npc.NPCMemory;
class="kw">import com.hypixel.hytale.codec.Codec;
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.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.protocol.BlockPosition;
class="kw">import com.hypixel.hytale.protocol.SoundCategory;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
class="kw">import com.hypixel.hytale.protocol.packets.player.UpdateMemoriesCount;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.GameplayConfig;
class="kw">import com.hypixel.hytale.server.core.asset.type.soundevent.config.SoundEvent;
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.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.ui.Anchor;
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.ParticleUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.SoundUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectListIterator;
class="kw">import java.time.Instant;
class="kw">import java.time.ZoneOffset;
class="kw">import java.util.Comparator;
class="kw">import java.util.Iterator;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class MemoriesPage class="kw">extends InteractiveCustomUIPage<MemoriesPage.PageEventData> {
   @Nullable
   class="kw">private String currentCategory;
   @Nullable
   class="kw">private Memory selectedMemory;
   @Nonnull
   class="kw">private class="kw">final Vector3d recordMemoriesParticlesPosition;

   class="kw">public MemoriesPage(@Nonnull PlayerRef var1, @Nonnull BlockPosition var2) {
      super(var1, CustomPageLifetime.CanDismissOrCloseThroughInteraction, MemoriesPage.PageEventData.CODEC);
      this.recordMemoriesParticlesPosition = new Vector3d(var2.x, var2.y, var2.z);
   }

   @Override
   class="kw">public void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
      MemoriesPlugin var5 = MemoriesPlugin.get();
      if (this.currentCategory == null) {
         var2.append("Pages/Memories/MemoriesCategoryPanel.ui");
         Map var6 = var5.getAllMemories();
         Set var7 = var5.getRecordedMemories();
         int var8 = 0;

         for (Set var10 : var6.values()) {
            var8 += var10.size();
         }

         var2.set("#MemoriesProgressBar.Value", (float)var7.size() / var8);
         var2.set("#MemoriesProgressBarTexture.Value", (float)var7.size() / var8);
         var2.set("#TotalCollected.TextSpans", Message.translation("server.memories.general.totalCollected").param("current", var7.size()).param("max", var8));
         var3.addEventBinding(
            CustomUIEventBindingType.Activating, "#MemoriesInfoButton", new EventData().append("Action", MemoriesPage.PageAction.MemoriesInfo)
         );
         GameplayConfig var25 = var4.getExternalData().getWorld().getGameplayConfig();
         PlayerMemories var27 = var4.getComponent(var1, PlayerMemories.getComponentType());
         int var11 = 0;

         for (Entry var13 : var6.entrySet()) {
            String var14 = var13.getKey();
            Set var15 = var13.getValue();
            String var16 = "#IconList[" + var11++ + "] ";
            int var17 = 0;

            for (Memory var19 : var15) {
               if (var7.contains(var19)) {
                  var17++;
               }
            }

            var2.append("#IconList", "Pages/Memories/MemoriesCategory.ui");
            var2.set(var16 + "#Button.Text", Message.translation("server.memories.categories." + var14 + ".title"));
            var2.set(var16 + "#CurrentMemoryCountNotComplete.Text", String.valueOf(var17));
            var2.set(var16 + "#CurrentMemoryCountComplete.Text", String.valueOf(var17));
            var2.set(var16 + "#TotalMemoryCountNotComplete.Text", String.valueOf(var15.size()));
            var2.set(var16 + "#TotalMemoryCountComplete.Text", String.valueOf(var15.size()));
            boolean var37 = var17 == var15.size();
            if (var37) {
               var2.set(var16 + "#CategoryIcon.AssetPath", "UI/Custom/Pages/Memories/categories/" + var14 + "Complete.png");
               var2.set(var16 + "#CompleteCategoryBackground.Visible", true);
               var2.set(var16 + "#CompleteCategoryCounter.Visible", true);
            } else {
               var2.set(var16 + "#CategoryIcon.AssetPath", "UI/Custom/Pages/Memories/categories/" + var14 + ".png");
               var2.set(var16 + "#NotCompleteCategoryCounter.Visible", true);
            }

            if (var27 != null) {
               Set var38 = var27.getRecordedMemories();

               for (Memory var21 : var15) {
                  if (var38.contains(var21)) {
                     var2.set(var16 + "#NewMemoryIndicator.Visible", true);
                     break;
                  }
               }
            }

            var3.addEventBinding(
               CustomUIEventBindingType.Activating,
               var16 + "#Button",
               new EventData().append("Action", MemoriesPage.PageAction.ViewCategory).append("Category", var14)
            );
         }

         var2.set("#RecordButton.Visible", true);
         var2.set("#RecordButton.Disabled", var27 == null || !var27.hasMemories());
         buildChestMarkers(var2, var25, var8);
         if (var27 != null && var27.hasMemories()) {
            var2.set("#RecordButton.Text", Message.translation("server.memories.general.recordNum").param("count", var27.getRecordedMemories().size()));
         }

         var3.addEventBinding(CustomUIEventBindingType.Activating, "#RecordButton", new EventData().append("Action", MemoriesPage.PageAction.Record));
      } else {
         var2.append("Pages/Memories/MemoriesPanel.ui");
         Set var22 = var5.getAllMemories().get(this.currentCategory);
         ObjectArrayList var23 = new ObjectArrayList(var22);
         var23.sort(Comparator.comparing(Memory::getTitle));
         Set var24 = var5.getRecordedMemories();
         int var26 = 0;
         ObjectListIterator var28 = var23.iterator();

         while (var28.hasNext()) {
            Memory var30 = (Memory)var28.next();
            if (var24.contains(var30)) {
               var26++;
            }
         }

         var2.set("#CategoryTitle.Text", Message.translation("server.memories.categories." + this.currentCategory + ".title"));
         var2.set("#CategoryCount.Text", var26 + "/" + var23.size());

         for (int var29 = 0; var29 < var23.size(); var29++) {
            Memory var31 = (Memory)var23.get(var29);
            String var32 = "#IconList[" + var29 + "] ";
            var2.append("#IconList", "Pages/Memories/Memory.ui");
            boolean var33 = var24.contains(var31);
            boolean var34 = this.selectedMemory != null && this.selectedMemory.equals(var31);
            String var35 = var34 ? var32 + "#ButtonSelected" : var32 + "#ButtonNotSelected";
            if (var33) {
               var2.set(var35 + ".Visible", true);
               var2.set(var35 + ".TooltipText", var31.getTooltipText());
               var2.setNull(var35 + ".Background");
               String var36 = var31.getIconPath();
               if (var36 != null && !var36.isEmpty()) {
                  var2.set(var32 + "#Icon.AssetPath", var36);
               }

               var3.addEventBinding(
                  CustomUIEventBindingType.Activating,
                  var35,
                  new EventData().append("Action", MemoriesPage.PageAction.SelectMemory).append("MemoryId", var31.getId())
               );
            } else {
               var2.set(var32 + "#EmptyBackground.Visible", true);
            }
         }

         if (this.selectedMemory != null && var24.contains(this.selectedMemory)) {
            updateMemoryDetailsPanel(var2, this.selectedMemory);
         }

         var3.addEventBinding(CustomUIEventBindingType.Activating, "#BackButton", new EventData().append("Action", MemoriesPage.PageAction.Back));
      }
   }

   class="kw">private class="kw">static void buildChestMarkers(@Nonnull UICommandBuilder var0, @Nonnull GameplayConfig var1, int var2) {
      MemoriesGameplayConfig var3 = MemoriesGameplayConfig.get(var1);
      if (var3 != null) {
         int[] var4 = var3.getMemoriesAmountPerLevel();
         if (var4 != null && var4.length > 1) {
            MemoriesPlugin var5 = MemoriesPlugin.get();
            int var6 = var5.getRecordedMemories().size();
            int var7 = 18;
            int var8 = 1018;
            int var9 = 1000;

            for (int var10 = 0; var10 < var4.length; var10++) {
               int var11 = var4[var10];
               boolean var12 = var6 >= var11;
               String var13 = "#ChestMarkers[" + var10 + "]";
               Anchor var14 = new Anchor();
               int var15 = var11 * 1000 / var2;
               var0.append("#ChestMarkers", "Pages/Memories/ChestMarker.ui");
               var14.setLeft(Value.of(var15));
               var0.setObject(var13 + ".Anchor", var14);
               Message var16 = Message.translation("server.memories.general.chestActive.level" + (var10 + 1) + ".rewards");
               if (var12) {
                  Message var17 = Message.translation("server.memories.general.chestActive.tooltipText").param("count", var11);
                  Message var18 = var17.insert("\n").insert(var16);
                  var0.set(var13 + " #Arrow.Visible", true);
                  var0.set(var13 + " #ChestActive.Visible", true);
                  var0.set(var13 + " #ChestActive.TooltipTextSpans", var18);
               } else {
                  var0.set(var13 + " #ChestDisabled.Visible", true);
                  Message var19 = Message.translation("server.memories.general.chestLocked.tooltipText").param("count", var11);
                  Message var20 = var19.insert("\n").insert(var16);
                  var0.set(var13 + " #ChestDisabled.TooltipTextSpans", var20);
               }
            }
         }
      }
   }

   class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull MemoriesPage.PageEventData var3) {
      Player var4 = var2.getComponent(var1, Player.getComponentType());
      assert var4 != null;
      TransformComponent var5 = var2.getComponent(var1, TransformComponent.getComponentType());
      assert var5 != null;
      class="kw">switch (var3.action) {
         case Record:
            PlayerMemories var14 = var2.getComponent(var1, PlayerMemories.getComponentType());
            if (var14 == null) {
               this.sendUpdate();
               class="kw">return;
            }

            if (!MemoriesPlugin.get().recordPlayerMemories(var14)) {
               this.rebuild();
               class="kw">return;
            }

            PlayerRef var15 = var2.getComponent(var1, PlayerRef.getComponentType());
            if (var15 != null) {
               var15.getPacketHandler().writeNoCache(new UpdateMemoriesCount(0));
            }

            MemoriesGameplayConfig var16 = MemoriesGameplayConfig.get(var2.getExternalData().getWorld().getGameplayConfig());
            if (var16 != null) {
               SpatialResource var17 = var2.getResource(EntityModule.get().getPlayerSpatialResourceType());
               List var19 = SpatialResource.getThreadLocalReferenceList();
               var17.getSpatialStructure().collect(this.recordMemoriesParticlesPosition, 75.0, var19);
               ParticleUtil.spawnParticleEffect(var16.getMemoriesRecordParticles(), this.recordMemoriesParticlesPosition, var19, var2);
               String var22 = var16.getMemoriesRestoreSoundEventId();
               if (var22 != null) {
                  int var12 = SoundEvent.getAssetMap().getIndex(var22);
                  if (var12 != 0) {
                     SoundUtil.playSoundEvent3d(var12, SoundCategory.SFX, this.recordMemoriesParticlesPosition, var2);
                  }
               }
            }

            this.close();
            break;
         case ViewCategory:
            this.currentCategory = var3.category;
            this.selectedMemory = null;
            this.rebuild();
            break;
         case Back:
            this.currentCategory = null;
            this.selectedMemory = null;
            this.rebuild();
            break;
         case MemoriesInfo:
            BlockPosition var13 = new BlockPosition(
               (int)this.recordMemoriesParticlesPosition.x, (int)this.recordMemoriesParticlesPosition.y, (int)this.recordMemoriesParticlesPosition.z
            );
            var4.getPageManager().openCustomPage(var1, var2, new MemoriesUnlockedPage(this.playerRef, var13));
            break;
         case SelectMemory:
            if (var3.memoryId == null || this.currentCategory == null) {
               class="kw">return;
            }

            Set var6 = MemoriesPlugin.get().getAllMemories().get(this.currentCategory);
            if (var6 == null) {
               class="kw">return;
            }

            ObjectArrayList var7 = new ObjectArrayList(var6);
            var7.sort(Comparator.comparing(Memory::getTitle));
            Set var8 = MemoriesPlugin.get().getRecordedMemories();
            if (var8 == null) {
               class="kw">return;
            }

            Memory var9 = null;
            Iterator var10 = var8.iterator();

            while (true) {
               if (var10.hasNext()) {
                  Memory var11 = (Memory)var10.next();
                  if (!var11.getId().equals(var3.memoryId)) {
                     class="kw">continue;
                  }

                  var9 = var11;
               }

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

               if (!var7.contains(var9) || var9.equals(this.selectedMemory)) {
                  class="kw">return;
               }

               UICommandBuilder var18 = new UICommandBuilder();
               if (this.selectedMemory != null && var8.contains(this.selectedMemory)) {
                  int var20 = var7.indexOf(this.selectedMemory);
                  if (var20 >= 0) {
                     updateMemoryButtonSelection(var18, var20, this.selectedMemory, false);
                  }
               }

               int var21 = var7.indexOf(var9);
               if (var21 >= 0) {
                  updateMemoryButtonSelection(var18, var21, var9, true);
               }

               updateMemoryDetailsPanel(var18, var9);
               this.selectedMemory = var9;
               this.sendUpdate(var18);
               break;
            }
      }
   }

   class="kw">private class="kw">static void updateMemoryButtonSelection(@Nonnull UICommandBuilder var0, int var1, @Nonnull Memory var2, boolean var3) {
      String var4 = "#IconList[" + var1 + "] ";
      if (var3) {
         var0.set(var4 + "#ButtonNotSelected.Visible", false);
         var0.set(var4 + "#ButtonSelected.Visible", true);
         var0.setNull(var4 + "#ButtonSelected.Background");
         var0.set(var4 + "#ButtonSelected.TooltipText", var2.getTooltipText());
      } else {
         var0.set(var4 + "#ButtonSelected.Visible", false);
         var0.set(var4 + "#ButtonNotSelected.Visible", true);
         var0.setNull(var4 + "#ButtonNotSelected.Background");
         var0.set(var4 + "#ButtonNotSelected.TooltipText", var2.getTooltipText());
      }
   }

   class="kw">private class="kw">static void updateMemoryDetailsPanel(@Nonnull UICommandBuilder var0, @Nonnull Memory var1) {
      var0.set("#MemoryName.Text", Message.translation(var1.getTitle()));
      var0.set("#MemoryTimeLocation.Text", "");
      if (var1 class="kw">instanceof NPCMemory var2) {
         Message var3 = var2.getLocationMessage();
         long var4 = var2.getCapturedTimestamp();
         Message var6 = Message.translation("server.memories.general.foundIn")
            .param("location", var3)
            .param("dateValue", Instant.ofEpochMilli(var4).atZone(ZoneOffset.UTC).toString());
         var0.set("#MemoryTimeLocation.TextSpans", var6);
      }

      Message var7 = var1.getDescription();
      if (var7 != null) {
         var0.set("#MemoryDescription.TextSpans", var7);
      }

      var0.set("#MemoryDescription.Visible", var7 != null);
      String var8 = var1.getIconPath();
      if (var8 != null && !var8.isEmpty()) {
         var0.set("#MemoryIcon.AssetPath", var8);
      } else {
         var0.setNull("#MemoryIcon.AssetPath");
      }
   }

   class="kw">public enum PageAction {
      Record,
      ViewCategory,
      Back,
      MemoriesInfo,
      SelectMemory;

      @Nonnull
      class="kw">public class="kw">static class="kw">final Codec<MemoriesPage.PageAction> CODEC = new EnumCodec<>(MemoriesPage.PageAction.class);

      PageAction() {
      }
   }

   class="kw">public class="kw">static class PageEventData {
      @Nonnull
      class="kw">public class="kw">static class="kw">final String KEY_ACTION = "Action";
      @Nonnull
      class="kw">public class="kw">static class="kw">final String KEY_CATEGORY = "Category";
      @Nonnull
      class="kw">public class="kw">static class="kw">final String KEY_MEMORY_ID = "MemoryId";
      @Nonnull
      class="kw">public class="kw">static class="kw">final BuilderCodec<MemoriesPage.PageEventData> CODEC = BuilderCodec.builder(
            MemoriesPage.PageEventData.class, MemoriesPage.PageEventData::new
         )
         .append(new KeyedCodec<>("Action", MemoriesPage.PageAction.CODEC), (var0, var1) -> var0.action = var1, var0 -> var0.action)
         .add()
         .append(new KeyedCodec<>("Category", Codec.STRING), (var0, var1) -> var0.category = var1, var0 -> var0.category)
         .add()
         .append(new KeyedCodec<>("MemoryId", Codec.STRING), (var0, var1) -> var0.memoryId = var1, var0 -> var0.memoryId)
         .add()
         .build();
      class="kw">public MemoriesPage.PageAction action;
      class="kw">public String category;
      class="kw">public String memoryId;

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