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