RespawnPointPage class
Пакет: com.hypixel.hytale.builtin.beds.respawn
Файл: com/hypixel/hytale/builtin/beds/respawn/RespawnPointPage.java
extends: InteractiveCustomUIPage<RespawnPointPage.RespawnPointEventData>
Поля (48)
| Модификаторы | Тип | Имя |
|---|---|---|
|
static final String |
ACTION_CANCEL |
|
public static final BuilderCodec<RespawnPointPage.RespawnPointEventData> |
CODEC |
|
static final String |
KEY_ACTION |
|
static final String |
KEY_INDEX |
|
static final String |
KEY_RESPAWN_POINT_NAME |
|
private String |
action |
|
|
break |
|
private int |
index |
|
private String |
indexStr |
|
private String |
respawnPointName |
|
|
return |
|
|
return |
|
|
var1 |
|
UUID |
var10 |
|
RespawnBlock |
var10 |
|
World |
var11 |
|
BlockModule.BlockStateInfo |
var11 |
|
long |
var12 |
|
Vector3i |
var12 |
|
Ref |
var13 |
|
ChunkStore |
var14 |
|
Ref |
var15 |
|
Store |
var16 |
|
WorldChunk |
var17 |
|
BlockType |
var18 |
|
BlockChunk |
var19 |
|
var1, |
var2 |
|
UICommandBuilder |
var2 |
|
BlockSection |
var20 |
|
int |
var21 |
|
BlockBoundingBoxes |
var22 |
|
Box |
var23 |
|
double |
var24 |
|
double |
var26 |
|
Vector3d |
var28 |
|
PlayerRespawnPointData |
var29 |
|
ChunkStore |
var3 |
|
PlayerWorldData |
var30 |
|
PlayerRespawnPointData[] |
var31 |
|
PlayerRespawnPointData |
var33 |
|
|
var5 |
|
PlayerRespawnPointData |
var5 |
|
Player |
var7 |
|
PlayerRespawnPointData |
var7 |
|
RespawnBlock |
var8 |
|
Store |
var8 |
|
UUID |
var9 |
|
Ref |
var9 |
Методы (22)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
RespawnPointEventDatapublic RespawnPointEventData() |
protected |
void |
displayErrorvoid displayError(@Nonnull Message var1) |
|
|
for for(int var32 = 0; var32 < var31.length; var32++) |
|
|
for for(int var4 = 0; var4 < var2.length; var4++) |
|
|
for for(int var6 = 0; var6 < var1.length; var6++) |
|
public String |
getActionpublic String getAction() |
|
public int |
getIndexpublic int getIndex() |
|
public String |
getRespawnPointNamepublic String getRespawnPointName() |
|
|
if if(var7 != null) |
|
|
if if(var7 != null) |
|
|
if if(var17 != null) |
|
|
if if(var18 != null) |
|
|
if if(var19 != null) |
|
|
if if(var22 != null) |
|
|
if if(var31 != null) |
|
|
if if(var6 == null || var6.length == 0) |
|
|
if if(var2 == null) |
|
|
if if(var9 != null) |
|
|
if if(var10 != null) |
|
|
if if(var11 != null) |
protected |
void |
setRespawnPointForPlayervoid setRespawnPointForPlayer(@Nonnull Ref<EntityStore> var1,
@Nonnull Store<EntityStore> var2,
@Nonnull Vector3i var3,
@Nonnull Ref<ChunkStore> var4,
@Nonnull String var5,
@Nullable PlayerRespawnPointData... var6) |
abstract |
|
super super(var1,
var2 == InteractionType.Use ? CustomPageLifetime.CanDismissOrCloseThroughInteraction : CustomPageLifetime.CanDismiss,
RespawnPointPage.RespawnPointEventData.CODEC) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.beds.respawn;
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.ArrayUtil;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime;
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.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.data.PlayerRespawnPointData;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.data.PlayerWorldData;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
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.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.meta.state.RespawnBlock;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;
class="kw">public class="kw">abstract class RespawnPointPage class="kw">extends InteractiveCustomUIPage<RespawnPointPage.RespawnPointEventData> {
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_SERVER_CUSTOM_UI_NEED_TO_SET_NAME = Message.translation("server.customUI.needToSetName");
@Nonnull
class="kw">private class="kw">static class="kw">final Message MESSAGE_SERVER_CUSTOM_UI_RESPAWN_POINT_CLAIMED = Message.translation("server.customUI.respawnPointClaimed");
class="kw">private class="kw">static class="kw">final int RESPAWN_NAME_MAX_LENGTH = 32;
class="kw">public RespawnPointPage(@Nonnull PlayerRef var1, @Nonnull InteractionType var2) {
super(
var1,
var2 == InteractionType.Use ? CustomPageLifetime.CanDismissOrCloseThroughInteraction : CustomPageLifetime.CanDismiss,
RespawnPointPage.RespawnPointEventData.CODEC
);
}
@Override
class="kw">public class="kw">abstract void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4);
class="kw">protected void setRespawnPointForPlayer(
@Nonnull Ref<EntityStore> var1,
@Nonnull Store<EntityStore> var2,
@Nonnull Vector3i var3,
@Nonnull Ref<ChunkStore> var4,
@Nonnull String var5,
@Nullable PlayerRespawnPointData... var6
) {
var5 = var5.trim();
if (var5.isEmpty()) {
this.displayError(MESSAGE_SERVER_CUSTOM_UI_NEED_TO_SET_NAME);
} else if (var5.length() > 32) {
this.displayError(Message.translation("server.customUI.respawnNameTooLong").param("maxLength", 32));
} else {
Player var7 = var2.getComponent(var1, Player.getComponentType());
RespawnBlock var8 = var4.isValid() ? var4.getStore().getComponent(var4, RespawnBlock.getComponentType()) : null;
UUID var9 = var8 != null ? var8.getOwnerUUID() : null;
UUID var10 = this.playerRef.getUuid();
if (var9 != null && !var9.equals(var10)) {
this.playerRef.sendMessage(MESSAGE_SERVER_CUSTOM_UI_RESPAWN_POINT_CLAIMED);
if (var7 != null) {
var7.getPageManager().setPage(var1, var2, Page.None);
}
} else {
World var11 = var2.getExternalData().getWorld();
if (var7 != null) {
long var12 = ChunkUtil.indexChunkFromBlock(var3.x, var3.z);
ChunkStore var14 = var11.getChunkStore();
Ref var15 = var14.getChunkReference(var12);
if (var15 != null && var15.isValid()) {
Store var16 = var14.getStore();
WorldChunk var17 = var16.getComponent(var15, WorldChunk.getComponentType());
if (var17 != null) {
var17.markNeedsSaving();
BlockType var18 = var17.getBlockType(var3.x(), var3.y(), var3.z());
if (var18 != null) {
BlockChunk var19 = var16.getComponent(var15, BlockChunk.getComponentType());
if (var19 != null) {
BlockSection var20 = var19.getSectionAtBlockY(var3.y);
int var21 = var20.getRotationIndex(var3.x, var3.y, var3.z);
BlockBoundingBoxes var22 = BlockBoundingBoxes.getAssetMap().getAsset(var18.getHitboxTypeIndex());
if (var22 != null) {
Box var23 = var22.get(var21).getBoundingBox();
var14.getStore().replaceComponent(var4, RespawnBlock.getComponentType(), new RespawnBlock(var10));
double var24 = var23.min.x + var23.width() / 2.0;
double var26 = var23.min.z + var23.depth() / 2.0;
Vector3d var28 = new Vector3d(var3.x() + var24, var3.y() + var23.height(), var3.z() + var26);
PlayerRespawnPointData var29 = new PlayerRespawnPointData(var3, var28, var5);
PlayerWorldData var30 = var7.getPlayerConfigData().getPerWorldData(var11.getName());
PlayerRespawnPointData[] var31 = handleRespawnPointsToRemove(var11, var30.getRespawnPoints(), var6);
if (var31 != null) {
if (ArrayUtil.contains(var31, var29)) {
class="kw">return;
}
if (var6 == null || var6.length == 0) {
for (int var32 = 0; var32 < var31.length; var32++) {
PlayerRespawnPointData var33 = var31[var32];
if (var33.getBlockPosition().equals(var3)) {
var33.setName(var5);
this.playerRef.sendMessage(Message.translation("server.customUI.updatedRespawnPointName").param("name", var5));
var7.getPageManager().setPage(var1, var2, Page.None);
class="kw">return;
}
}
}
}
var30.setRespawnPoints(ArrayUtil.append(var31, var29));
this.playerRef.sendMessage(Message.translation("server.customUI.respawnPointSet").param("name", var5));
var7.getPageManager().setPage(var1, var2, Page.None);
}
}
}
}
}
}
}
}
}
@Nonnull
class="kw">private class="kw">static PlayerRespawnPointData[] handleRespawnPointsToRemove(
@Nonnull World var0, @Nonnull PlayerRespawnPointData[] var1, @Nullable PlayerRespawnPointData[] var2
) {
if (var2 == null) {
class="kw">return var1;
}
ChunkStore var3 = var0.getChunkStore();
for (int var4 = 0; var4 < var2.length; var4++) {
PlayerRespawnPointData var5 = var2[var4];
for (int var6 = 0; var6 < var1.length; var6++) {
PlayerRespawnPointData var7 = var1[var6];
if (var7.getBlockPosition().equals(var5.getBlockPosition())) {
var1 = ArrayUtil.remove(var1, var6);
break;
}
}
Vector3i var12 = var5.getBlockPosition();
Ref var13 = var3.getChunkSectionReferenceAtBlock(var12.x, var12.y, var12.z);
if (var13 != null && var13.isValid()) {
Store var8 = var3.getStore();
Ref var9 = BlockModule.getBlockEntity(var8, var13, var12.x, var12.y, var12.z);
if (var9 != null) {
RespawnBlock var10 = var8.getComponent(var9, RespawnBlock.getComponentType());
if (var10 != null) {
var10.setOwnerUUID(null);
BlockModule.BlockStateInfo var11 = var8.getComponent(var9, BlockModule.BlockStateInfo.getComponentType());
if (var11 != null) {
var11.markNeedsSaving();
}
}
}
}
}
class="kw">return var1;
}
class="kw">protected void displayError(@Nonnull Message var1) {
UICommandBuilder var2 = new UICommandBuilder();
var2.set("#Error.Visible", true);
var2.set("#Error.Text", var1);
this.sendUpdate(var2);
}
class="kw">public class="kw">static class RespawnPointEventData {
@Nonnull
class="kw">static class="kw">final String KEY_ACTION = "Action";
@Nonnull
class="kw">static class="kw">final String ACTION_CANCEL = "Cancel";
@Nonnull
class="kw">static class="kw">final String KEY_INDEX = "Index";
@Nonnull
class="kw">static class="kw">final String KEY_RESPAWN_POINT_NAME = "@RespawnPointName";
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<RespawnPointPage.RespawnPointEventData> CODEC = BuilderCodec.builder(
RespawnPointPage.RespawnPointEventData.class, RespawnPointPage.RespawnPointEventData::new
)
.append(new KeyedCodec<>("Action", Codec.STRING), (var0, var1) -> var0.action = var1, var0 -> var0.action)
.add()
.append(new KeyedCodec<>("Index", Codec.STRING), (var0, var1) -> {
var0.indexStr = var1;
var0.index = Integer.parseInt(var1);
}, var0 -> var0.indexStr)
.add()
.append(new KeyedCodec<>("@RespawnPointName", Codec.STRING), (var0, var1) -> var0.respawnPointName = var1, var0 -> var0.respawnPointName)
.add()
.build();
class="kw">private String action;
class="kw">private String indexStr;
class="kw">private int index = -1;
class="kw">private String respawnPointName;
class="kw">public RespawnPointEventData() {
}
class="kw">public String getAction() {
class="kw">return this.action;
}
class="kw">public int getIndex() {
class="kw">return this.index;
}
class="kw">public String getRespawnPointName() {
class="kw">return this.respawnPointName;
}
}
}