MemoriesPage class

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

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

extends: InteractiveCustomUIPage<MemoriesPage.PageEventData>

Поля (91)

МодификаторыТипИмя
public static final Codec<MemoriesPage.PageAction> CODEC
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
Record, ViewCategory, Back, MemoriesInfo, SelectMemory
public MemoriesPage.PageAction action
break
break
break
break
break
break
public String category
continue
public String memoryId
return
return
return
return
return
return
return
Iterator var10
int var11
int var11
Memory var11
boolean var12
int var12
String var13
BlockPosition var13
String var14
Anchor var14
PlayerMemories var14
Set var15
int var15
PlayerRef var15
String var16
Message var16
MemoriesGameplayConfig var16
int var17
Message var17
SpatialResource var17
Message var18
UICommandBuilder var18
Message var19
List var19
Message var20
int var20
int var21
Set var22
String var22
ObjectArrayList var23
Set var24
GameplayConfig var25
int var26
PlayerMemories var27
ObjectListIterator var28
MemoriesGameplayConfig var3
Message var3
Memory var30
Memory var31
String var32
boolean var33
boolean var34
String var35
String var36
boolean var37
Set var38
int[] var4
Player var4
String var4
long var4
MemoriesPlugin var5
MemoriesPlugin var5
TransformComponent var5
Map var6
int var6
Set var6
Message var6
Set var7
int var7
ObjectArrayList var7
Message var7
int var8
int var8
Set var8
String var8
int var9
Memory var9
var9

Методы (39)

МодификаторыВозвратСигнатура
PageAction PageAction()
public PageEventDatapublic PageEventData()
static void buildChestMarkersvoid buildChestMarkers(@Nonnull UICommandBuilder var0, @Nonnull GameplayConfig var1, int var2)
abstract buildChestMarkers buildChestMarkers(var2, var25, var8)
for for(Memory var19 : var15)
for for(Memory var21 : var15)
for for(int var10 = 0; var10 < var4.length; var10++)
abstract for for(int var29 = 0; var29 < var23.size()
public void handleDataEventvoid handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull MemoriesPage.PageEventData var3)
if if(this.currentCategory == null)
if if(var37)
if if(var27 != null)
if if(var33)
if if(var3 != null)
if if(var4 != null && var4.length > 1)
if if(var12)
if if(var14 == null)
if if(var15 != null)
if if(var16 != null)
if if(var22 != null)
if if(var12 != 0)
if if(var3.memoryId == null || this.currentCategory == null)
if if(var6 == null)
if if(var8 == null)
if if(var9 == null)
if if(var20 >= 0)
if if(var21 >= 0)
if if(var3)
if if(var1 instanceof NPCMemory var2)
if if(var7 != null)
abstract super super(var1, CustomPageLifetime.CanDismissOrCloseThroughInteraction, MemoriesPage.PageEventData.CODEC)
switch switch(var3.action)
static void updateMemoryButtonSelectionvoid updateMemoryButtonSelection(@Nonnull UICommandBuilder var0, int var1, @Nonnull Memory var2, boolean var3)
abstract updateMemoryButtonSelection updateMemoryButtonSelection(var18, var20, this.selectedMemory, false)
abstract updateMemoryButtonSelection updateMemoryButtonSelection(var18, var21, var9, true)
static void updateMemoryDetailsPanelvoid updateMemoryDetailsPanel(@Nonnull UICommandBuilder var0, @Nonnull Memory var1)
abstract updateMemoryDetailsPanel updateMemoryDetailsPanel(var2, this.selectedMemory)
abstract updateMemoryDetailsPanel updateMemoryDetailsPanel(var18, var9)
while while(true)

Исходный код

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