RespawnPage class
Пакет: com.hypixel.hytale.server.core.entity.entities.player.pages
Файл: com/hypixel/hytale/server/core/entity/entities/player/pages/RespawnPage.java
extends: InteractiveCustomUIPage<RespawnPage.RespawnPageEventData>
Поля (20)
| Модификаторы | Тип | Имя |
|---|---|---|
|
static final String |
ACTION_CONFIRM |
|
public static final BuilderCodec<RespawnPage.RespawnPageEventData> |
CODEC |
|
static final String |
KEY_ACTION |
|
private String |
action |
|
ArrayList |
var1 |
|
HashMap |
var2 |
|
Ref |
var3 |
|
Player |
var3 |
|
boolean |
var3 |
|
CompletableFuture |
var4 |
|
Player |
var4 |
|
DecimalFormat |
var5 |
|
PlayerRef |
var5 |
|
UICommandBuilder |
var6 |
|
String |
var7 |
|
ItemStack |
var7 |
|
int |
var8 |
|
String |
var8 |
|
ItemStack |
var9 |
|
String |
var9 |
Методы (17)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
RespawnPageEventDatapublic RespawnPageEventData() |
private |
void |
closePagevoid closePage(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) |
|
|
for for(ItemStack var6 : var0) |
|
|
for for(int var6 = 0; var6 < this.itemsLostOnDeath.length; var6++) |
public |
void |
handleDataEventvoid handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull RespawnPage.RespawnPageEventData var3) |
|
|
if if(var0 == null) |
|
|
if if(var9 != null) |
|
|
if if(this.permadeathMessage != null) |
|
|
if if(!this.displayDataOnDeathScreen) |
|
|
if if(this.itemsLostOnDeath != null && this.itemsLostOnDeath.length != 0) |
|
|
if if(this.permadeathMessage != null) |
|
|
if if(var4 != null) |
|
|
if if(this.permadeathMessage == null) |
|
|
if if(var3) |
static |
void |
setNotevoid setNote(@Nonnull UICommandBuilder var0, @Nonnull Message var1) |
abstract |
|
setNote setNote(var2, this.permadeathMessage) |
abstract |
|
super super(var1, var5 != null ? CustomPageLifetime.CanDismiss : CustomPageLifetime.CantClose, RespawnPage.RespawnPageEventData.CODEC) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.entity.entities.player.pages;
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.common.util.CompletableFutureUtil;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
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.interface_.Page;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.DeathConfig;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathItemLoss;
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 java.text.DecimalFormat;
class="kw">import java.util.ArrayList;
class="kw">import java.util.HashMap;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class RespawnPage class="kw">extends InteractiveCustomUIPage<RespawnPage.RespawnPageEventData> {
@Nonnull
class="kw">private class="kw">static class="kw">final String UI_RESPAWN_PAGE = "Pages/RespawnPage.ui";
@Nonnull
class="kw">private class="kw">static class="kw">final String ELEMENT_BUTTON_RESPAWN = "#RespawnButton";
@Nonnull
class="kw">private class="kw">static class="kw">final String ELEMENT_BUTTON_SPECTATE = "#SpectateButton";
@Nonnull
class="kw">private class="kw">static class="kw">final String ELEMENT_LABEL_DEATH_REASON_TEXT_SPANS = "#DeathReason.TextSpans";
@Nullable
class="kw">private class="kw">final Message deathReason;
class="kw">private class="kw">final boolean displayDataOnDeathScreen;
class="kw">private class="kw">final DeathItemLoss deathItemLoss;
class="kw">private class="kw">final ItemStack[] itemsLostOnDeath;
@Nullable
class="kw">private class="kw">final Message permadeathMessage;
class="kw">private class="kw">final int livesRemaining;
class="kw">private RespawnPage(@Nonnull PlayerRef var1, @Nullable Message var2, boolean var3, DeathItemLoss var4, @Nullable Message var5, int var6) {
super(var1, var5 != null ? CustomPageLifetime.CanDismiss : CustomPageLifetime.CantClose, RespawnPage.RespawnPageEventData.CODEC);
this.deathReason = var2;
this.displayDataOnDeathScreen = var3;
this.deathItemLoss = var4;
this.permadeathMessage = var5;
this.livesRemaining = var6;
this.itemsLostOnDeath = combineSimilarItemStacks(var4.getItemsLost());
}
@Nonnull
class="kw">public class="kw">static RespawnPage forRespawn(@Nonnull PlayerRef var0, @Nullable Message var1, boolean var2, DeathItemLoss var3, int var4) {
class="kw">return new RespawnPage(var0, var1, var2, var3, null, var4);
}
@Nonnull
class="kw">public class="kw">static RespawnPage forPermadeath(@Nonnull PlayerRef var0, @Nullable Message var1, boolean var2, DeathItemLoss var3, @Nonnull Message var4) {
class="kw">return new RespawnPage(var0, var1, var2, var3, var4, 0);
}
@Nullable
class="kw">private class="kw">static ItemStack[] combineSimilarItemStacks(@Nullable ItemStack[] var0) {
if (var0 == null) {
class="kw">return null;
}
ArrayList var1 = new ArrayList<>();
HashMap var2 = new HashMap<>();
for (ItemStack var6 : var0) {
if (var6.getItem().getMaxStack() <= 1) {
var1.add(var6);
} else {
String var7 = var6.getItemId();
int var8 = var6.getQuantity();
ItemStack var9 = var2.get(var7);
if (var9 != null) {
var8 += var9.getQuantity();
}
var2.put(var7, var6.withQuantity(var8));
}
}
var1.addAll(var2.values());
class="kw">return var1.toArray(ItemStack[]::new);
}
@Override
class="kw">public void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
var2.append("Pages/RespawnPage.ui");
var2.set("#DeathReason.TextSpans", this.deathReason != null ? this.deathReason : Message.empty());
if (this.permadeathMessage != null) {
var2.set("#RespawnButton.Visible", false);
var2.set("#SpectateButton.Visible", true);
setNote(var2, this.permadeathMessage);
} else if (this.livesRemaining > 0) {
setNote(var2, Message.translation("server.customUI.respawnPage.livesRemaining").param("remaining", this.livesRemaining));
}
if (!this.displayDataOnDeathScreen) {
var2.set("#DeathData.Visible", false);
} else {
DecimalFormat var5 = new DecimalFormat("#.##");
var5.setDecimalSeparatorAlwaysShown(false);
if (this.deathItemLoss.getLossMode() == DeathConfig.ItemsLossMode.NONE) {
var2.set("#ItemsLossStatus.TextSpans", Message.translation("server.general.itemsLossPrevented"));
} else {
var2.set(
"#ItemsLossStatus.TextSpans",
Message.translation("server.general.itemsDurabilityLoss").param("percentage", var5.format(this.deathItemLoss.getDurabilityLossPercentage()))
);
}
if (this.itemsLostOnDeath != null && this.itemsLostOnDeath.length != 0) {
var2.set("#ItemsAmountLoss.TextSpans", Message.translation("server.general.itemsAmountLoss"));
var2.set("#DroppedItemsContainer.Visible", true);
var2.clear("#DroppedItemsContainer");
for (int var6 = 0; var6 < this.itemsLostOnDeath.length; var6++) {
ItemStack var7 = this.itemsLostOnDeath[var6];
String var8 = "#DroppedItemsContainer[" + var6 + "] ";
var2.append("#DroppedItemsContainer", "Pages/DroppedItemSlot.ui");
var2.set(var8 + "#ItemIcon.ItemId", var7.getItemId());
var2.set(var8 + "#ItemIcon.Quantity", var7.getQuantity());
if (var7.getQuantity() > 1) {
var2.set(var8 + "#QuantityLabel.Text", String.valueOf(var7.getQuantity()));
} else {
var2.set(var8 + "#QuantityLabel.Visible", false);
}
}
} else {
var2.set("#ItemsAmountLoss.Visible", false);
var2.set("#DroppedItemsContainer.Visible", false);
}
}
String var9 = this.permadeathMessage != null ? "#SpectateButton" : "#RespawnButton";
var3.addEventBinding(CustomUIEventBindingType.Activating, var9, EventData.of("Action", "Confirm"));
}
class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull RespawnPage.RespawnPageEventData var3) {
if ("Confirm".equals(var3.action)) {
if (this.permadeathMessage != null) {
this.closePage(var1, var2);
} else {
CompletableFuture var4 = DeathComponent.respawn(var2, var1);
if (var4 != null) {
PlayerRef var5 = var2.getComponent(var1, PlayerRef.getComponentType());
assert var5 != null;
UICommandBuilder var6 = new UICommandBuilder();
var6.set("#RespawnButton.Disabled", true);
this.sendUpdate(var6);
CompletableFutureUtil._catch(var4.thenCompose(var2x -> {
Ref var3 = var5.getReference();
class="kw">return var3 != null && var3.isValid() ? CompletableFuture.runAsync(() -> {
if (var3.isValid()) {
this.closePage(var3, var3.getStore());
}
}, var3.getStore().getExternalData().getWorld()) : CompletableFuture.completedFuture(null);
}));
}
}
}
}
class="kw">private class="kw">static void setNote(@Nonnull UICommandBuilder var0, @Nonnull Message var1) {
var0.set("#DeathScreenNote.Visible", true);
var0.set("#DeathScreenNoteText.TextSpans", var1);
}
class="kw">private void closePage(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
Player var3 = var2.getComponent(var1, Player.getComponentType());
assert var3 != null;
if (var3.getPageManager().getCustomPage() == this) {
var3.getPageManager().setPage(var1, var2, Page.None);
}
}
@Override
class="kw">public void onDismiss(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
super.onDismiss(var1, var2);
if (this.permadeathMessage == null) {
boolean var3 = var2.getArchetype(var1).contains(DeathComponent.getComponentType());
if (var3) {
Player var4 = var2.getComponent(var1, Player.getComponentType());
assert var4 != null;
DeathComponent.respawn(var2, var1);
}
}
}
class="kw">public class="kw">static class RespawnPageEventData {
class="kw">static class="kw">final String KEY_ACTION = "Action";
class="kw">static class="kw">final String ACTION_CONFIRM = "Confirm";
class="kw">public class="kw">static class="kw">final BuilderCodec<RespawnPage.RespawnPageEventData> CODEC = BuilderCodec.builder(
RespawnPage.RespawnPageEventData.class, RespawnPage.RespawnPageEventData::new
)
.addField(new KeyedCodec<>("Action", Codec.STRING), (var0, var1) -> var0.action = var1, var0 -> var0.action)
.build();
class="kw">private String action;
class="kw">public RespawnPageEventData() {
}
}
}