WorldUtil class

Пакет: com.hypixel.hytale.server.core.modules.collision

Файл: com/hypixel/hytale/server/core/modules/collision/WorldUtil.java

Поля (64)

МодификаторыТипИмя
break
break
continue
continue
int var10
BlockMaterial var10
FluidSection var10
FluidSection var10
ChunkColumn var11
BlockSection var11
BlockSection var11
BlockChunk var12
int var12
int var12
BlockSection var13
int var13
int var13
int var14
var14
var14
int var14
int var14
Ref var15
BlockType var15
BlockType var15
FluidSection var16
int var16
int var16
Fluid var17
double var18
BlockMaterial var20
int var21
int var22
BlockBoundingBoxes var23
BlockBoundingBoxes.RotatedVariantBoxes var24
int var25
int var26
int var27
int var28
BlockType var29
double var30
BlockBoundingBoxes var31
BlockBoundingBoxes.RotatedVariantBoxes var32
var4
var4
var4
Ref var5
var5
FluidSection var6
BlockSection var6
BlockSection var7
int var7
BlockTypeAssetMap var7
BlockTypeAssetMap var7
int var8
int var8
BlockType var8
int var8
int var8
int var9
BlockType var9
int var9
Ref var9
Ref var9

Методы (36)

МодификаторыВозвратСигнатура
static int findFarthestEmptySpaceAboveint findFarthestEmptySpaceAbove(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull ChunkColumn var1, @Nonnull BlockChunk var2, int var3, int var4, int var5, int var6)
static int findFarthestEmptySpaceBelowint findFarthestEmptySpaceBelow(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull ChunkColumn var1, @Nonnull BlockChunk var2, int var3, int var4, int var5, int var6)
static int findFluidBlockint findFluidBlock(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull ChunkColumn var1, @Nonnull BlockChunk var2, int var3, int var4, int var5, boolean var6)
static int getFluidIdAtPositionint getFluidIdAtPosition(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull ChunkColumn var1, int var2, int var3, int var4)
static long getPackedMaterialAndFluidAtPositionlong getPackedMaterialAndFluidAtPosition(@Nonnull Ref<ChunkStore> var0, @Nonnull ComponentAccessor<ChunkStore> var1, double var2, double var4, double var6)
static int getWaterLevelint getWaterLevel(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull ChunkColumn var1, @Nonnull BlockChunk var2, int var3, int var4, int var5)
if if(var3 >= 0 && var3 < 320)
if if(var11 == null)
if if(var12 == null)
if if(var16 != null)
if if(var14 != 0)
if if(var17 != null)
if if(var28 == 0)
if if(var21 != 0 && var20 == BlockMaterial.Solid)
if if(var31 == null)
if if(var23 == null)
if if(var4 >= 0 && var4 < 320)
if if(var4 != 320 && var6)
if if(var5 == -1)
if if(var8 == null)
if if(var4 < 0)
if if(var4 >= 320)
if if(var13 != 0 || var14 != 0)
if if(var4 <= 0)
if if(var4 >= 320)
if if(var4 < 0)
if if(var13 != 0 || var14 != 0)
if if(var4 >= 320)
static boolean isEmptyOnlyBlockboolean isEmptyOnlyBlock(@Nonnull BlockType var0, int var1)
static boolean isFluidOnlyBlockboolean isFluidOnlyBlock(@Nonnull BlockType var0, int var1)
static boolean isSolidOnlyBlockboolean isSolidOnlyBlock(@Nonnull BlockType var0, int var1)
while while(var5 + 1 < 320)
while while(var8 >= 0)
while while(var4 >= var12)
while while(var8 < 10)
while while(var4 < var12)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.collision;

class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.protocol.BlockMaterial;
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.asset.type.fluid.Fluid;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.ChunkColumn;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.FluidSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.util.FillerBlockUtil;
class="kw">import javax.annotation.Nonnull;

class="kw">public class="kw">final class WorldUtil {
   class="kw">public WorldUtil() {
   }

   class="kw">public class="kw">static boolean isFluidOnlyBlock(@Nonnull BlockType var0, int var1) {
      class="kw">return var0.getMaterial() == BlockMaterial.Empty && var1 != 0;
   }

   class="kw">public class="kw">static boolean isSolidOnlyBlock(@Nonnull BlockType var0, int var1) {
      class="kw">return var0.getMaterial() == BlockMaterial.Solid && var1 == 0;
   }

   class="kw">public class="kw">static boolean isEmptyOnlyBlock(@Nonnull BlockType var0, int var1) {
      class="kw">return var0.getMaterial() == BlockMaterial.Empty && var1 == 0;
   }

   class="kw">public class="kw">static int getFluidIdAtPosition(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull ChunkColumn var1, int var2, int var3, int var4) {
      if (var3 >= 0 && var3 < 320) {
         Ref var5 = var1.getSection(ChunkUtil.chunkCoordinate(var3));
         if (var5 != null && var5.isValid()) {
            FluidSection var6 = var0.getComponent(var5, FluidSection.getComponentType());
            class="kw">return var6 == null ? 0 : var6.getFluidId(var2, var3, var4);
         } else {
            class="kw">return 0;
         }
      } else {
         class="kw">return 0;
      }
   }

   class="kw">public class="kw">static long getPackedMaterialAndFluidAtPosition(
      @Nonnull Ref<ChunkStore> var0, @Nonnull ComponentAccessor<ChunkStore> var1, double var2, double var4, double var6
   ) {
      if (!(var4 < 0.0) && !(var4 >= 320.0)) {
         int var8 = MathUtil.floor(var2);
         int var9 = MathUtil.floor(var4);
         int var10 = MathUtil.floor(var6);
         ChunkColumn var11 = var1.getComponent(var0, ChunkColumn.getComponentType());
         if (var11 == null) {
            class="kw">return MathUtil.packLong(BlockMaterial.Empty.ordinal(), 0);
         }

         BlockChunk var12 = var1.getComponent(var0, BlockChunk.getComponentType());
         if (var12 == null) {
            class="kw">return MathUtil.packLong(BlockMaterial.Empty.ordinal(), 0);
         }

         BlockSection var13 = var12.getSectionAtBlockY(var9);
         int var14 = 0;
         Ref var15 = var11.getSection(ChunkUtil.chunkCoordinate(var4));
         if (var15 != null && var15.isValid()) {
            FluidSection var16 = var1.getComponent(var15, FluidSection.getComponentType());
            if (var16 != null) {
               var14 = var16.getFluidId(var8, var9, var10);
               if (var14 != 0) {
                  Fluid var17 = Fluid.getAssetMap().getAsset(var14);
                  if (var17 != null) {
                     double var18 = var4 - var9;
                     if (var18 > (double)var16.getFluidLevel(var8, var9, var10) / var17.getMaxFluidLevel()) {
                        var14 = 0;
                     }
                  }
               }
            }
         }

         int var28 = var13.get(var8, var9, var10);
         if (var28 == 0) {
            class="kw">return MathUtil.packLong(BlockMaterial.Empty.ordinal(), var14);
         }

         BlockType var29 = BlockType.getAssetMap().getAsset(var28);
         if (var29 != null && !var29.isUnknown()) {
            double var30 = var4 - var9;
            BlockMaterial var20 = var29.getMaterial();
            int var21 = var13.getFiller(var8, var9, var10);
            int var22 = var13.getRotationIndex(var8, var9, var10);
            if (var21 != 0 && var20 == BlockMaterial.Solid) {
               BlockBoundingBoxes var31 = BlockBoundingBoxes.getAssetMap().getAsset(var29.getHitboxTypeIndex());
               if (var31 == null) {
                  class="kw">return MathUtil.packLong(BlockMaterial.Empty.ordinal(), var14);
               }

               BlockBoundingBoxes.RotatedVariantBoxes var32 = var31.get(var22);
               int var25 = FillerBlockUtil.unpackX(var21);
               int var26 = FillerBlockUtil.unpackY(var21);
               int var27 = FillerBlockUtil.unpackZ(var21);
               if (var32.containsPosition(var2 - var8 + var25, var30 + var26, var6 - var10 + var27)) {
                  class="kw">return MathUtil.packLong(BlockMaterial.Solid.ordinal(), var14);
               }
            } else if (var20 == BlockMaterial.Solid) {
               BlockBoundingBoxes var23 = BlockBoundingBoxes.getAssetMap().getAsset(var29.getHitboxTypeIndex());
               if (var23 == null) {
                  class="kw">return MathUtil.packLong(BlockMaterial.Empty.ordinal(), var14);
               }

               BlockBoundingBoxes.RotatedVariantBoxes var24 = var23.get(var22);
               if (var24.containsPosition(var2 - var8, var30, var6 - var10)) {
                  class="kw">return MathUtil.packLong(BlockMaterial.Solid.ordinal(), var14);
               }
            }

            class="kw">return MathUtil.packLong(BlockMaterial.Empty.ordinal(), var14);
         } else {
            class="kw">return MathUtil.packLong(BlockMaterial.Empty.ordinal(), var14);
         }
      } else {
         class="kw">return MathUtil.packLong(BlockMaterial.Empty.ordinal(), 0);
      }
   }

   class="kw">public class="kw">static int findFluidBlock(
      @Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull ChunkColumn var1, @Nonnull BlockChunk var2, int var3, int var4, int var5, boolean var6
   ) {
      if (var4 >= 0 && var4 < 320) {
         if (getFluidIdAtPosition(var0, var1, var3, var4++, var5) != 0) {
            class="kw">return var4;
         }

         if (var4 != 320 && var6) {
            BlockSection var7 = var2.getSectionAtBlockY(var4);
            int var8 = var7.get(var3, var4++, var5);
            BlockType var9 = BlockType.getAssetMap().getAsset(var8);
            BlockMaterial var10 = var9 != null ? var9.getMaterial() : BlockMaterial.Empty;
            if (getFluidIdAtPosition(var0, var1, var3, var4++, var5) != 0) {
               class="kw">return var4;
            } else if (var10 == BlockMaterial.Solid && var4 != 320) {
               class="kw">return getFluidIdAtPosition(var0, var1, var3, var4++, var5) != 0 ? var4 : -1;
            } else {
               class="kw">return -1;
            }
         } else {
            class="kw">return -1;
         }
      } else {
         class="kw">return -1;
      }
   }

   class="kw">public class="kw">static int getWaterLevel(
      @Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull ChunkColumn var1, @Nonnull BlockChunk var2, int var3, int var4, int var5
   ) {
      var5 = findFluidBlock(var0, var1, var2, var3, var5, var4, true);
      if (var5 == -1) {
         class="kw">return -1;
      }

      while (var5 + 1 < 320) {
         BlockSection var6 = var2.getSectionAtBlockY(var5 + 1);
         int var7 = var6.get(var3, var5 + 1, var4);
         BlockType var8 = BlockType.getAssetMap().getAsset(var7);
         if (var8 == null) {
            break;
         }

         int var9 = getFluidIdAtPosition(var0, var1, var3, var5 + 1, var4);
         if (!isFluidOnlyBlock(var8, var9)) {
            break;
         }

         var5++;
      }

      class="kw">return var5;
   }

   class="kw">public class="kw">static int findFarthestEmptySpaceBelow(
      @Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull ChunkColumn var1, @Nonnull BlockChunk var2, int var3, int var4, int var5, int var6
   ) {
      if (var4 < 0) {
         class="kw">return var6;
      }

      if (var4 >= 320) {
         var4 = 319;
      }

      BlockTypeAssetMap var7 = BlockType.getAssetMap();
      int var8 = ChunkUtil.indexSection(var4);

      while (var8 >= 0) {
         Ref var9 = var1.getSection(var8);
         FluidSection var10 = var0.getComponent(var9, FluidSection.getComponentType());
         BlockSection var11 = var2.getSectionAtIndex(var8);
         if (!var11.isSolidAir() || var10 == null || !var10.isEmpty()) {
            int var12 = 32 * var8--;

            while (var4 >= var12) {
               int var13 = var11.get(var3, var4--, var5);
               int var14 = var10 != null ? var10.getFluidId(var3, var4, var5) : 0;
               if (var13 != 0 || var14 != 0) {
                  BlockType var15 = var7.getAsset(var13);
                  if (var15 != null && !var15.isUnknown()) {
                     int var16 = var11.getFiller(var3, var4, var5);
                     if (var16 == 0 && isEmptyOnlyBlock(var15, var14)) {
                        class="kw">continue;
                     }

                     class="kw">return var4 + 2;
                  }

                  class="kw">return var4 + 2;
               }
            }
         } else {
            var4 = 32 * var8 - 1;
            if (var4 <= 0) {
               class="kw">return 0;
            }

            var8--;
         }
      }

      class="kw">return 0;
   }

   class="kw">public class="kw">static int findFarthestEmptySpaceAbove(
      @Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull ChunkColumn var1, @Nonnull BlockChunk var2, int var3, int var4, int var5, int var6
   ) {
      if (var4 >= 320) {
         class="kw">return Integer.MAX_VALUE;
      }

      if (var4 < 0) {
         class="kw">return var6;
      }

      BlockTypeAssetMap var7 = BlockType.getAssetMap();
      int var8 = ChunkUtil.indexSection(var4);

      while (var8 < 10) {
         Ref var9 = var1.getSection(var8);
         FluidSection var10 = var0.getComponent(var9, FluidSection.getComponentType());
         BlockSection var11 = var2.getSectionAtIndex(var8);
         if (!var11.isSolidAir() || var10 == null || !var10.isEmpty()) {
            int var12 = 32 * ++var8;

            while (var4 < var12) {
               int var13 = var11.get(var3, var4++, var5);
               int var14 = var10 != null ? var10.getFluidId(var3, var4, var5) : 0;
               if (var13 != 0 || var14 != 0) {
                  BlockType var15 = var7.getAsset(var13);
                  if (var15 != null && !var15.isUnknown()) {
                     int var16 = var11.getFiller(var3, var4, var5);
                     if (var16 == 0 && isEmptyOnlyBlock(var15, var14)) {
                        class="kw">continue;
                     }

                     class="kw">return var4 - 1;
                  }

                  class="kw">return var4 - 1;
               }
            }
         } else {
            var4 = 32 * ++var8;
            if (var4 >= 320) {
               class="kw">return 319;
            }
         }
      }

      class="kw">return Integer.MAX_VALUE;
   }
}