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;
      }
   }
}