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