FillerPlacementUtil class
Пакет: com.hypixel.hytale.builtin.buildertools.utils
Файл: com/hypixel/hytale/builtin/buildertools/utils/FillerPlacementUtil.java
Поля (30)
| Модификаторы | Тип | Имя |
|---|---|---|
|
int |
var10 |
|
int |
var10 |
|
boolean |
var10 |
|
int |
var10 |
|
BlockBoundingBoxes.RotatedVariantBoxes |
var11 |
|
Holder |
var11 |
|
WorldChunk |
var11 |
|
int |
var11 |
|
int |
var11 |
|
boolean |
var12 |
|
int |
var12 |
|
BlockSelection.BlockHolder |
var12 |
|
int |
var13 |
|
int |
var13 |
|
|
var13 |
|
|
var13 |
|
int |
var14 |
|
|
var14 |
|
|
var14 |
|
WorldChunk |
var15 |
|
BlockBoundingBoxes.RotatedVariantBoxes |
var16 |
|
WorldChunk |
var5 |
|
WorldChunk |
var6 |
|
BlockSelection.BlockHolder |
var7 |
|
WorldChunk |
var7 |
|
int |
var8 |
|
int |
var8 |
|
WorldChunk |
var9 |
|
int |
var9 |
|
int |
var9 |
Методы (22)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
void |
addBlockWithFillervoid addBlockWithFiller(@Nonnull ChunkAccessor var0, @Nonnull BlockSelection var1, @Nonnull BlockSelection var2, int var3, int var4, int var5, int var6, int var7) |
static |
void |
addBlockWithFillervoid addBlockWithFiller(@Nonnull ChunkAccessor var0,
@Nonnull BlockSelection var1,
@Nonnull BlockSelection var2,
int var3,
int var4,
int var5,
int var6,
int var7,
@Nullable BlockBoundingBoxes.RotatedVariantBoxes var8) |
abstract |
|
addBlockWithFiller addBlockWithFiller(var0, var1, var2, var4, var5, var6, var7, var8, var11) |
static |
void |
captureAndClearCellvoid captureAndClearCell(@Nonnull ChunkAccessor var0, @Nonnull BlockSelection var1, @Nonnull BlockSelection var2, int var3, int var4, int var5) |
abstract |
|
captureAndClearCell captureAndClearCell(var0, var1, var2, var9, var10, var11) |
static |
void |
captureAndClearFootprintvoid captureAndClearFootprint(@Nonnull ChunkAccessor var0, @Nonnull BlockSelection var1, @Nonnull BlockSelection var2, int var3, int var4, int var5) |
static |
void |
captureAndClearFootprintvoid captureAndClearFootprint(@Nonnull ChunkAccessor var0, @Nonnull BlockSelection var1, @Nonnull BlockSelection var2, int var3, int var4, int var5, @Nullable BlockSelection var6) |
abstract |
|
captureAndClearFootprint captureAndClearFootprint(var0, var1, var2, var4, var5, var6, var10) |
abstract |
|
captureAndClearFootprint captureAndClearFootprint(var0, var1, var2, var3, var4, var5, null) |
|
|
if if(var3 != null) |
|
|
if if(!var12) |
|
|
if if(var11 != null) |
|
|
if if(var3 != null) |
|
|
if if(var11 != null) |
|
|
if if(var8 == null) |
|
|
if if(var12 != null) |
|
|
if if(var16 == null) |
|
|
if if(var4 == null) |
static |
boolean |
isFootprintWorldEmptyboolean isFootprintWorldEmpty(@Nonnull ChunkAccessor var0, int var1, int var2, int var3, @Nullable BlockBoundingBoxes.RotatedVariantBoxes var4) |
static |
boolean |
stampBlockWithFillerboolean stampBlockWithFiller(@Nonnull ChunkAccessor var0,
@Nonnull BlockSelection var1,
@Nonnull BlockSelection var2,
@Nullable LongOpenHashSet var3,
int var4,
int var5,
int var6,
int var7,
int var8,
boolean var9) |
static |
boolean |
stampBlockWithFillerboolean stampBlockWithFiller(@Nonnull ChunkAccessor var0,
@Nonnull BlockSelection var1,
@Nonnull BlockSelection var2,
@Nullable LongOpenHashSet var3,
int var4,
int var5,
int var6,
int var7,
int var8,
boolean var9,
@Nullable BlockSelection var10) |
abstract |
return |
stampBlockWithFillerreturn stampBlockWithFiller(var0, var1, var2, var3, var4, var5, var6, var7, var8, var9, null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.utils;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsPlugin;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.math.block.BlockUtil;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.standard.BlockSelection;
class="kw">import com.hypixel.hytale.server.core.universe.world.accessor.ChunkAccessor;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
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 it.unimi.dsi.fastutil.longs.LongOpenHashSet;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class="kw">final class FillerPlacementUtil {
class="kw">private FillerPlacementUtil() {
}
class="kw">public class="kw">static boolean stampBlockWithFiller(
@Nonnull ChunkAccessor var0,
@Nonnull BlockSelection var1,
@Nonnull BlockSelection var2,
@Nullable LongOpenHashSet var3,
int var4,
int var5,
int var6,
int var7,
int var8,
boolean var9
) {
class="kw">return stampBlockWithFiller(var0, var1, var2, var3, var4, var5, var6, var7, var8, var9, null);
}
class="kw">public class="kw">static boolean stampBlockWithFiller(
@Nonnull ChunkAccessor var0,
@Nonnull BlockSelection var1,
@Nonnull BlockSelection var2,
@Nullable LongOpenHashSet var3,
int var4,
int var5,
int var6,
int var7,
int var8,
boolean var9,
@Nullable BlockSelection var10
) {
BlockBoundingBoxes.RotatedVariantBoxes var11 = FillerBlockUtil.multiCellFootprint(var7, var8);
if (var3 != null) {
boolean var12 = var11 != null ? FillerBlockUtil.isFootprintFree(var3, var4, var5, var6, var11) : !var3.contains(BlockUtil.pack(var4, var5, var6));
if (!var12) {
class="kw">return false;
}
}
if (var9 && !isFootprintWorldEmpty(var0, var4, var5, var6, var11)) {
class="kw">return false;
}
if (var11 != null) {
FillerBlockUtil.forEachFillerBlock(
var11, (var7x, var8x, var9x) -> captureAndClearFootprint(var0, var1, var2, var4 + var7x, var5 + var8x, var6 + var9x, var10)
);
} else {
captureAndClearFootprint(var0, var1, var2, var4, var5, var6, var10);
}
addBlockWithFiller(var0, var1, var2, var4, var5, var6, var7, var8, var11);
if (var3 != null) {
if (var11 != null) {
FillerBlockUtil.markFootprint(var3, var4, var5, var6, var11);
} else {
var3.add(BlockUtil.pack(var4, var5, var6));
}
}
class="kw">return true;
}
class="kw">public class="kw">static void addBlockWithFiller(
@Nonnull ChunkAccessor var0, @Nonnull BlockSelection var1, @Nonnull BlockSelection var2, int var3, int var4, int var5, int var6, int var7
) {
addBlockWithFiller(var0, var1, var2, var3, var4, var5, var6, var7, FillerBlockUtil.multiCellFootprint(var6, var7));
}
class="kw">public class="kw">static void addBlockWithFiller(
@Nonnull ChunkAccessor var0,
@Nonnull BlockSelection var1,
@Nonnull BlockSelection var2,
int var3,
int var4,
int var5,
int var6,
int var7,
@Nullable BlockBoundingBoxes.RotatedVariantBoxes var8
) {
WorldChunk var9 = var0.getChunk(ChunkUtil.indexChunkFromBlock(var3, var5));
int var10 = var9.getBlock(var3, var4, var5);
Holder var11 = BuilderToolsPlugin.createBlockComponent(var9, var3, var4, var5, var6, var10, var9.getBlockComponentHolder(var3, var4, var5), false);
if (var8 == null) {
if (!var1.hasBlockAtWorldPos(var3, var4, var5)) {
var1.addBlockAtWorldPos(
var3,
var4,
var5,
var10,
var9.getRotationIndex(var3, var4, var5),
var9.getFiller(var3, var4, var5),
var9.getSupportValue(var3, var4, var5),
var9.getBlockComponentHolder(var3, var4, var5)
);
}
var2.addBlockAtWorldPos(var3, var4, var5, var6, var7, 0, 0, var11);
} else {
FillerBlockUtil.forEachFillerBlock(
var8,
(var5x, var6x, var7x) -> {
int var8 = var3 + var5x;
int var9 = var4 + var6x;
int var10 = var5 + var7x;
if (!var1.hasBlockAtWorldPos(var8, var9, var10)) {
WorldChunk var11 = var0.getChunk(ChunkUtil.indexChunkFromBlock(var8, var10));
var1.addBlockAtWorldPos(
var8,
var9,
var10,
var11.getBlock(var8, var9, var10),
var11.getRotationIndex(var8, var9, var10),
var11.getFiller(var8, var9, var10),
var11.getSupportValue(var8, var9, var10),
var11.getBlockComponentHolder(var8, var9, var10)
);
}
}
);
FillerBlockUtil.forEachFillerBlock(var8, (var7x, var8x, var9x) -> {
boolean var10 = var7x == 0 && var8x == 0 && var9x == 0;
int var11 = var3 + var7x;
int var12 = var4 + var8x;
int var13 = var5 + var9x;
var2.addBlockAtWorldPos(var11, var12, var13, var6, var7, var10 ? 0 : FillerBlockUtil.pack(var7x, var8x, var9x), 0, var10 ? var11 : null);
});
}
}
class="kw">public class="kw">static void captureAndClearFootprint(
@Nonnull ChunkAccessor var0, @Nonnull BlockSelection var1, @Nonnull BlockSelection var2, int var3, int var4, int var5
) {
captureAndClearFootprint(var0, var1, var2, var3, var4, var5, null);
}
class="kw">public class="kw">static void captureAndClearFootprint(
@Nonnull ChunkAccessor var0, @Nonnull BlockSelection var1, @Nonnull BlockSelection var2, int var3, int var4, int var5, @Nullable BlockSelection var6
) {
BlockSelection.BlockHolder var7 = var6 != null ? resolveHolder(var2, var6, var3, var4, var5) : null;
int var8 = var7 != null ? var7.filler() : var0.getChunk(ChunkUtil.indexChunkFromBlock(var3, var5)).getFiller(var3, var4, var5);
int var9 = var3 - FillerBlockUtil.unpackX(var8);
int var10 = var4 - FillerBlockUtil.unpackY(var8);
int var11 = var5 - FillerBlockUtil.unpackZ(var8);
BlockSelection.BlockHolder var12 = var6 != null ? resolveHolder(var2, var6, var9, var10, var11) : null;
int var13;
int var14;
if (var12 != null) {
var13 = var12.blockId();
var14 = var12.rotation();
} else {
WorldChunk var15 = var0.getChunk(ChunkUtil.indexChunkFromBlock(var9, var11));
var13 = var15.getBlock(var9, var10, var11);
var14 = var15.getRotationIndex(var9, var10, var11);
}
BlockBoundingBoxes.RotatedVariantBoxes var16 = FillerBlockUtil.multiCellFootprint(var13, var14);
if (var16 == null) {
captureAndClearCell(var0, var1, var2, var9, var10, var11);
} else {
FillerBlockUtil.forEachFillerBlock(var16, (var6x, var7x, var8x) -> captureAndClearCell(var0, var1, var2, var9 + var6x, var10 + var7x, var11 + var8x));
}
}
@Nullable
class="kw">private class="kw">static BlockSelection.BlockHolder resolveHolder(@Nonnull BlockSelection var0, @Nonnull BlockSelection var1, int var2, int var3, int var4) {
if (var0.hasBlockAtWorldPos(var2, var3, var4)) {
class="kw">return var0.getBlockHolderAtWorldPos(var2, var3, var4);
} else {
class="kw">return var1.hasBlockAtWorldPos(var2, var3, var4) ? var1.getBlockHolderAtWorldPos(var2, var3, var4) : null;
}
}
class="kw">private class="kw">static void captureAndClearCell(
@Nonnull ChunkAccessor var0, @Nonnull BlockSelection var1, @Nonnull BlockSelection var2, int var3, int var4, int var5
) {
if (!var1.hasBlockAtWorldPos(var3, var4, var5)) {
WorldChunk var6 = var0.getChunk(ChunkUtil.indexChunkFromBlock(var3, var5));
var1.addBlockAtWorldPos(
var3,
var4,
var5,
var6.getBlock(var3, var4, var5),
var6.getRotationIndex(var3, var4, var5),
var6.getFiller(var3, var4, var5),
var6.getSupportValue(var3, var4, var5),
var6.getBlockComponentHolder(var3, var4, var5)
);
}
var2.addBlockAtWorldPos(var3, var4, var5, 0, 0, 0, 0);
}
class="kw">private class="kw">static boolean isFootprintWorldEmpty(
@Nonnull ChunkAccessor var0, int var1, int var2, int var3, @Nullable BlockBoundingBoxes.RotatedVariantBoxes var4
) {
if (var4 == null) {
WorldChunk var5 = var0.getChunk(ChunkUtil.indexChunkFromBlock(var1, var3));
class="kw">return var5.getBlock(var1, var2, var3) == 0;
} else {
class="kw">return FillerBlockUtil.testFillerBlocks(var4, (var4x, var5x, var6) -> {
WorldChunk var7 = var0.getChunk(ChunkUtil.indexChunkFromBlock(var1 + var4x, var3 + var6));
class="kw">return var7.getBlock(var1 + var4x, var2 + var5x, var3 + var6) == 0;
});
}
}
}