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() {
}
}
}