DidNotMount enum

Пакет: com.hypixel.hytale.builtin.mounts

Файл: com/hypixel/hytale/builtin/mounts/BlockMountAPI.java

implements: BlockMountAPI.BlockMountResult

Поля (1)

МодификаторыТипИмя
CHUNK_NOT_FOUND, CHUNK_REF_NOT_FOUND, BLOCK_REF_NOT_FOUND, INVALID_BLOCK, ALREADY_MOUNTED, UNKNOWN_BLOCKMOUNT_TYPE, NO_MOUNT_POINT_FOUND

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.mounts;

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.protocol.BlockMountType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.mountpoints.BlockMountPoint;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockComponentSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
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 javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3f;
class="kw">import org.joml.Vector3i;

class="kw">public class="kw">final class BlockMountAPI {
   class="kw">private BlockMountAPI() {
   }

   @Nonnull
   class="kw">public class="kw">static BlockMountAPI.BlockMountResult mountOnBlock(
      @Nonnull Ref<EntityStore> var0, @Nonnull CommandBuffer<EntityStore> var1, @Nonnull Vector3i var2, @Nonnull Vector3d var3
   ) {
      MountedComponent var4 = var1.getComponent(var0, MountedComponent.getComponentType());
      if (var4 != null) {
         class="kw">return BlockMountAPI.DidNotMount.ALREADY_MOUNTED;
      }

      ChunkStore var5 = var0.getStore().getExternalData().getWorld().getChunkStore();
      Store var6 = var5.getStore();
      Ref var7 = var5.getChunkSectionReferenceAtBlock(var2.x, var2.y, var2.z);
      if (var7 == null) {
         class="kw">return BlockMountAPI.DidNotMount.CHUNK_NOT_FOUND;
      }

      BlockComponentSection var8 = var6.getComponent(var7, BlockComponentSection.getComponentType());
      if (var8 == null) {
         class="kw">return BlockMountAPI.DidNotMount.CHUNK_REF_NOT_FOUND;
      }

      BlockSection var9 = var6.getComponent(var7, BlockSection.getComponentType());
      if (var9 == null) {
         class="kw">return BlockMountAPI.DidNotMount.INVALID_BLOCK;
      }

      BlockType var10 = BlockType.getAssetMap().getAsset(var9.get(var2.x, var2.y, var2.z));
      if (var10 == null) {
         class="kw">return BlockMountAPI.DidNotMount.INVALID_BLOCK;
      }

      int var11 = var9.getRotationIndex(var2.x, var2.y, var2.z);
      int var12 = ChunkUtil.indexBlock(var2.x, var2.y, var2.z);
      Ref var13 = var8.getBlockReference(var12);
      if (var13 == null || !var13.isValid()) {
         Holder var14 = ChunkStore.REGISTRY.newHolder();
         var14.putComponent(BlockModule.BlockStateInfo.getComponentType(), new BlockModule.BlockStateInfo(var12, var7));
         var13 = var6.addEntity(var14, AddReason.SPAWN);
         if (var13 == null || !var13.isValid()) {
            class="kw">return BlockMountAPI.DidNotMount.BLOCK_REF_NOT_FOUND;
         }
      }

      BlockMountType var21 = null;
      BlockMountPoint[] var15 = null;
      if (var10.getSeats() != null) {
         var21 = BlockMountType.Seat;
         var15 = var10.getSeats().getRotated(var11);
      } else {
         if (var10.getBeds() == null) {
            class="kw">return BlockMountAPI.DidNotMount.UNKNOWN_BLOCKMOUNT_TYPE;
         }

         var21 = BlockMountType.Bed;
         var15 = var10.getBeds().getRotated(var11);
      }

      BlockMountComponent var16 = var6.getComponent(var13, BlockMountComponent.getComponentType());
      if (var16 == null) {
         var16 = new BlockMountComponent(var21, var2, var10, var11);
         var6.addComponent(var13, BlockMountComponent.getComponentType(), var16);
      }

      if (var15 != null && var15.length != 0) {
         BlockMountPoint var17 = var16.findAvailableSeat(var2, var15, var3);
         if (var17 == null) {
            class="kw">return BlockMountAPI.DidNotMount.NO_MOUNT_POINT_FOUND;
         }

         TransformComponent var18 = var1.getComponent(var0, TransformComponent.getComponentType());
         if (var18 != null) {
            Vector3d var19 = var17.computeWorldSpacePosition(var16.getBlockPos());
            Rotation3f var20 = var17.computeRotationEuler(var16.getExpectedRotation());
            var18.setPosition(var19);
            var18.setRotation(var20);
         }

         MountedComponent var24 = new MountedComponent(var13, new Vector3f(), var21);
         var1.addComponent(var0, MountedComponent.getComponentType(), var24);
         var16.putSeatedEntity(var17, var0);
         class="kw">return new BlockMountAPI.Mounted(var10, var24);
      } else {
         class="kw">return BlockMountAPI.DidNotMount.NO_MOUNT_POINT_FOUND;
      }
   }

   class="kw">public sealed class="kw">interface BlockMountResult permits BlockMountAPI.Mounted, BlockMountAPI.DidNotMount {
   }

   class="kw">public enum DidNotMount class="kw">implements BlockMountAPI.BlockMountResult {
      CHUNK_NOT_FOUND,
      CHUNK_REF_NOT_FOUND,
      BLOCK_REF_NOT_FOUND,
      INVALID_BLOCK,
      ALREADY_MOUNTED,
      UNKNOWN_BLOCKMOUNT_TYPE,
      NO_MOUNT_POINT_FOUND;

      DidNotMount() {
      }
   }

   class="kw">public record Mounted(BlockType blockType, MountedComponent component) class="kw">implements BlockMountAPI.BlockMountResult {
      class="kw">public Mounted {
      }
   }
}