PrefabBufferAccessor class

Пакет: com.hypixel.hytale.server.core.prefab.selection.buffer.impl

Файл: com/hypixel/hytale/server/core/prefab/selection/buffer/impl/PrefabBuffer.java

implements: IPrefabBuffer

Поля (196)

МодификаторыТипИмя
continue
private final PrefabBuffer prefabBuffer
int var10
PrefabBufferColumn var10
int var10
MemorySegment var10
int var10
int var10
int var10
int var10
int var10
MemorySegment var11
int var11
int var11
PrefabBufferColumn var11
int var11
int var11
int var11
int var11
int var12
int var12
int var12
MemorySegment var12
int var12
int var12
int var12
int var12
int var13
int var13
int var13
int var13
PrefabBufferColumn var13
int var13
int var13
var13
int var13
var13
int var14
int var14
PrefabBufferColumn var14
int var15
int var15
MemorySegment var15
int var16
int var16
MemorySegment var16
int var17
int var17
int var17
int var17
int var18
int var18
int var18
int var18
int var19
float var19
var19
int var19
int var19
var19
float var20
Holder var20
int var20
int var20
var20
var20
var20
int var21
int var21
float var21
var21
int var21
var21
int var22
var22
var22
int var22
var22
Holder var22
int var22
var22
var22
var22
int var23
var23
int var23
var23
int var23
var23
int var23
var23
int var24
int var24
int var24
var24
float var24
var24
var24
int var25
var25
int var25
int var25
int var25
var25
var25
int var26
var26
byte var26
int var26
int var26
var26
var26
int var27
Holder var27
var27
byte var28
int var28
var28
float var29
var29
var29
int var3
int var30
var30
var30
Holder[] var31
int var31
var31
var31
Holder[] var32
Holder var32
var32
Holder var33
Holder[] var33
int var33
int var34
int var35
int var36
int var37
int var38
int var39
int var4
int var4
int var4
PrefabBufferColumn var4
PrefabBufferColumn var4
PrefabBufferColumn var4
int var40
int var41
int var48
boolean var49
int var5
int var5
int var5
int var5
Int2ObjectMap var5
int var5
int var5
int var5
boolean var50
boolean var51
int var52
int var53
int var6
int var6
int var6
PrefabBufferColumn var6
int var6
ObjectIterator var6
IntOpenHashSet var6
MemorySegment var6
MemorySegment var6
MemorySegment var6
PrefabBufferColumn var7
PrefabBufferColumn var7
int var7
Holder[] var7
int var7
Entry var7
IntIterator var7
int var7
int var7
int var7
int var8
int var8
int var8
int var8
int var8
int var8
int var8
int var8
MemorySegment var9
int var9
PrefabBufferColumn var9
int var9
int var9

Методы (63)

МодификаторыВозвратСигнатура
abstract throw new UnsupportedOperationExceptionthrow new UnsupportedOperationException("Unable to access block with chance!")
public <T extends PrefabBufferCall> boolean comparepublic <T extends PrefabBufferCall> boolean compare(@Nonnull IPrefabBuffer.BlockComparingPrefabPredicate<T> var1, @Nonnull T var2, @Nonnull IPrefabBuffer var3)
for for(int var15 = 0; var15 < var12; var15++)
for for(PrefabBuffer.ChildPrefab var9 : this.prefabBuffer.childPrefabs)
for for(int var14 = 0; var14 < var11; var14++)
for for(int var16 = 0; var16 < var13; var16++)
for for(int var9 = 0; var9 < var5; var9++)
for for(int var9 = 0; var9 < var5; var9++)
for for(int var9 = 0; var9 < var5; var9++)
abstract for for(int var11 = 0; var11 < var7.getBlockCount()
public <T extends PrefabBufferCall> void forEachpublic <T extends PrefabBufferCall> void forEach(@Nonnull IPrefabBuffer.ColumnPredicate<T> var1, @Nonnull IPrefabBuffer.BlockConsumer<T> var2, @Nullable IPrefabBuffer.EntityConsumer<T> var3, @Nullable IPrefabBuffer.ChildConsumer<T> var4, @Nonnull T var5)
public <T> void forEachEntitypublic <T> void forEachEntity(@Nonnull IPrefabBuffer.EntityConsumer<T> var1, @Nullable T var2)
public <T> void forEachRawpublic <T> void forEachRaw(@Nonnull IPrefabBuffer.ColumnPredicate<T> var1, @Nonnull IPrefabBuffer.RawBlockConsumer<T> var2, @Nonnull IPrefabBuffer.FluidConsumer<T> var3, @Nullable IPrefabBuffer.EntityConsumer<T> var4, @Nullable T var5)
public <T> boolean forEachRawpublic <T> boolean forEachRaw(@Nonnull IPrefabBuffer.ColumnPredicate<T> var1, @Nonnull IPrefabBuffer.RawBlockPredicate<T> var2, @Nonnull IPrefabBuffer.FluidPredicate<T> var3, @Nullable IPrefabBuffer.EntityPredicate<T> var4, @Nullable T var5)
public int getAnchorXpublic int getAnchorX()
public int getAnchorYpublic int getAnchorY()
public int getAnchorZpublic int getAnchorZ()
public int getBlockIdpublic int getBlockId(int var1, int var2, int var3)
public PrefabBuffer.ChildPrefab[] getChildPrefabspublic PrefabBuffer.ChildPrefab[] getChildPrefabs()
public int getColumnCountpublic int getColumnCount()
public int getFillerpublic int getFiller(int var1, int var2, int var3)
public int getMaxXpublic int getMaxX(@Nonnull PrefabRotation var1)
public int getMaxYpublic int getMaxY()
public int getMaxYAtpublic int getMaxYAt(@Nonnull PrefabRotation var1, int var2, int var3)
public int getMaxZpublic int getMaxZ(@Nonnull PrefabRotation var1)
public int getMinXpublic int getMinX(@Nonnull PrefabRotation var1)
public int getMinYpublic int getMinY()
public int getMinYAtpublic int getMinYAt(@Nonnull PrefabRotation var1, int var2, int var3)
public int getMinZpublic int getMinZ(@Nonnull PrefabRotation var1)
public int getRotationIndexpublic int getRotationIndex(int var1, int var2, int var3)
if if(var7 == null)
if if(var12 > 0)
if if(var24 != 0)
if if(var32 != null && var3 != null)
if if(this.prefabBuffer.childPrefabs != null && var4 != null)
if if(var1 != null)
if if(var11 > 0)
if if(var24 != 0)
if if(var4 != null)
if if(var13 > 0)
if if(var26 != 0)
if if(var17 != 0 || var18 != 0)
if if(var17 > 0)
if if(var18 > 0)
if if(var33 < var17)
if if(var34 < var18)
if if(var20 == var22)
if if(!var51)
if if(!var50)
if if(!var49)
if if(var4 == null)
if if(var5 <= 0)
if if(var8 > var2)
if if(var8 == var2)
if if(var4 == null)
if if(var5 <= 0)
if if(var8 > var2)
if if(var8 == var2)
if if(var4 == null)
if if(var5 <= 0)
if if(var8 > var2)
if if(var8 == var2)
while while(var33 < var17 || var34 < var18)

Исходный код

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

class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
class="kw">import com.hypixel.hytale.server.core.modules.prefabspawner.PrefabSpawnerBlock;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabRotation;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabWeights;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.PrefabBufferCall;
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 com.hypixel.hytale.server.core.util.io.MemorySegmentUtil;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntIterator;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.lang.foreign.ValueLayout;
class="kw">import java.util.List;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;

class="kw">public class PrefabBuffer {
   class="kw">public class="kw">static class="kw">final float DEFAULT_CHANCE = 1.0F;
   @Nonnull
   class="kw">private class="kw">final Vector3i anchor;
   @Nonnull
   class="kw">private class="kw">final Vector3i min;
   @Nonnull
   class="kw">private class="kw">final Vector3i max;
   @Nonnull
   class="kw">private class="kw">final Int2ObjectMap<PrefabBufferColumn> columns;
   @Nonnull
   class="kw">private class="kw">final PrefabBuffer.ChildPrefab[] childPrefabs;

   class="kw">private PrefabBuffer(
      @Nonnull Vector3i var1,
      @Nonnull Vector3i var2,
      @Nonnull Vector3i var3,
      @Nonnull Int2ObjectMap<PrefabBufferColumn> var4,
      @Nonnull PrefabBuffer.ChildPrefab[] var5
   ) {
      this.anchor = var1;
      this.min = var2;
      this.max = var3;
      this.columns = var4;
      this.childPrefabs = var5;
   }

   @Nonnull
   class="kw">public class="kw">static PrefabBuffer.Builder newBuilder() {
      class="kw">return new PrefabBuffer.Builder();
   }

   class="kw">public int getAnchorX() {
      class="kw">return this.anchor.x();
   }

   class="kw">public int getAnchorY() {
      class="kw">return this.anchor.y();
   }

   class="kw">public int getAnchorZ() {
      class="kw">return this.anchor.z();
   }

   @Nonnull
   class="kw">public PrefabBuffer.PrefabBufferAccessor newAccess() {
      class="kw">return new PrefabBuffer.PrefabBufferAccessor(this);
   }

   class="kw">public class="kw">interface BlockMaskConstants {
      int ID_IS_BYTE = 1;
      int ID_IS_SHORT = 2;
      int ID_IS_INT = 3;
      int ID_MASK = 3;
      int HAS_CHANCE = 4;
      int OFFSET_IS_BYTE = 8;
      int OFFSET_IS_SHORT = 16;
      int OFFSET_IS_INT = 24;
      int OFFSET_MASK = 24;
      int HAS_COMPONENTS = 32;
      int FLUID_IS_BYTE = 64;
      int FLUID_IS_SHORT = 128;
      int FLUID_IS_INT = 192;
      int FLUID_MASK = 192;
      int SUPPORT_MASK = 3840;
      int SUPPORT_OFFSET = 8;
      int HAS_FILLER = 4096;
      int HAS_ROTATION = 8192;

      class="kw">static int getBlockMask(int var0, int var1, boolean var2, int var3, @Nullable Holder<ChunkStore> var4, byte var5, int var6, int var7) {
         int var8 = 0;

         var8 = class="kw">switch (var0) {
            case 0 -> {
            }
            case 1 -> 1;
            case 2 -> 2;
            class="kw">default -> throw new IllegalArgumentException("Unsupported amount of bytes for blocks (0, 1, 2, 4). Given: " + var0);
            case 4 -> 3;
         };
         if (var2) {
            var8 |= 4;
         }
         var8 = class="kw">switch (var3) {
            case 0 -> {
            }
            case 1 -> 8;
            case 2 -> 16;
            class="kw">default -> throw new IllegalArgumentException("Unsupported amount of bytes for offset (0, 1, 2, 4). Given: " + var3);
            case 4 -> 24;
         };
         if (var4 != null) {
            var8 |= 32;
         }
         var8 = class="kw">switch (var1) {
            case 0 -> {
            }
            case 1 -> 64;
            case 2 -> 128;
            class="kw">default -> throw new IllegalArgumentException("Unsupported amount of bytes for fluids (0, 1, 2, 4). Given: " + var1);
            case 4 -> 192;
         } | var5 << 8 & 3840;
         if (var7 != 0) {
            var8 |= 4096;
         }

         if (var6 != 0) {
            var8 |= 8192;
         }

         class="kw">return var8;
      }

      class="kw">static int getSkipBytes(int var0) {
         int var1 = 0;
         var1 += getBlockBytes(var0);
         var1 += getOffsetBytes(var0);
         if (hasChance(var0)) {
            var1 += 4;
         }

         var1 += getFluidBytes(var0);
         if (hasFiller(var0)) {
            var1 += 2;
         }

         if (hasRotation(var0)) {
            var1++;
         }

         class="kw">return var1;
      }

      class="kw">static boolean hasChance(int var0) {
         class="kw">return (var0 & 4) == 4;
      }

      class="kw">static boolean hasFiller(int var0) {
         class="kw">return (var0 & 4096) == 4096;
      }

      class="kw">static boolean hasRotation(int var0) {
         class="kw">return (var0 & 8192) == 8192;
      }

      class="kw">static int getBlockBytes(int var0) {
         class="kw">return class="kw">switch (var0 & 3) {
            case 1 -> 1;
            case 2 -> 2;
            case 3 -> 4;
            class="kw">default -> 0;
         };
      }

      class="kw">static int getOffsetBytes(int var0) {
         class="kw">return class="kw">switch (var0 & 24) {
            case 8 -> 1;
            case 16 -> 2;
            case 24 -> 4;
            class="kw">default -> 0;
         };
      }

      class="kw">static int getFluidBytes(int var0) {
         class="kw">return class="kw">switch (var0 & 192) {
            case 64 -> 2;
            case 128 -> 3;
            case 192 -> 5;
            class="kw">default -> 0;
         };
      }

      class="kw">static int getSupportValue(int var0) {
         class="kw">return (var0 & 3840) >> 8;
      }

      class="kw">static boolean hasComponents(int var0) {
         class="kw">return (var0 & 32) == 32;
      }
   }

   class="kw">public class="kw">static class Builder {
      @Nonnull
      class="kw">private class="kw">final Vector3i min = new Vector3i(Vector3iUtil.MAX);
      @Nonnull
      class="kw">private class="kw">final Vector3i max = new Vector3i(Vector3iUtil.MIN);
      @Nonnull
      class="kw">private class="kw">final Int2ObjectMap<PrefabBuffer.BuilderColumn> builderColumns = new Int2ObjectOpenHashMap();
      @Nonnull
      class="kw">private class="kw">final List<PrefabBuffer.ChildPrefab> childPrefabs = new ObjectArrayList(0);
      class="kw">private Vector3i anchor = new Vector3i();
      class="kw">private int requiredMemory;

      class="kw">private Builder() {
      }

      class="kw">public void setAnchor(@Nonnull Vector3i var1) {
         this.anchor = var1;
      }

      class="kw">public void addColumn(int var1, int var2, @Nonnull PrefabBufferBlockEntry[] var3, @Nullable Holder<EntityStore>[] var4) {
         if (var1 < -32768) {
            throw new IllegalArgumentException("x is smaller than -32768. Given: " + var1);
         }

         if (var1 > 32767) {
            throw new IllegalArgumentException("x is larger than 32767. Given: " + var1);
         }

         if (var2 < -32768) {
            throw new IllegalArgumentException("z is smaller than -32768. Given: " + var2);
         }

         if (var2 > 32767) {
            throw new IllegalArgumentException("z is larger than 32767. Given: " + var2);
         }

         if (var3.length != 0 || var4 != null && var4.length != 0) {
            int var5 = MathUtil.packInt(var1, var2);
            if (this.builderColumns.put(var5, new PrefabBuffer.BuilderColumn(var1, var2, var3, var4)) != null) {
               throw new IllegalArgumentException("Duplicate column");
            }

            int var6 = 4;
            int var7 = Integer.MIN_VALUE;

            for (int var8 = 0; var8 < var3.length; var8++) {
               PrefabBufferBlockEntry var9 = var3[var8];
               int var10 = var9.y;
               int var11 = var9.blockId;
               float var12 = var9.chance;
               Holder var13 = var9.state;
               int var14 = var9.fluidId;
               if (var10 <= var7) {
                  throw new IllegalArgumentException("Y Values are not sequential. " + var7 + " -> " + var10);
               }

               int var15 = var8 == 0 ? 0 : var10 - var7;
               if (var15 > 65535) {
                  throw new IllegalArgumentException("Offset is larger than 65535. Given: " + var15);
               }

               boolean var16 = var12 < 1.0F;
               int var17 = MathUtil.byteCount(var11);
               int var18 = var15 == 1 ? 0 : MathUtil.byteCount(var15);
               int var19 = MathUtil.byteCount(var14);
               int var20 = PrefabBuffer.BlockMaskConstants.getBlockMask(var17, var19, var16, var18, var13, var9.supportValue, var9.rotation, var9.filler);
               var6 += 2 + PrefabBuffer.BlockMaskConstants.getSkipBytes(var20);
               var7 = var10;
            }

            this.requiredMemory += var6;
         }
      }

      class="kw">private void handleBlockComponents(int var1, int var2, int var3, int var4, @Nonnull Holder<ChunkStore> var5) {
         ComponentType var6 = PrefabSpawnerBlock.getComponentType();
         PrefabSpawnerBlock var7 = var5.getComponent(var6);
         if (var7 != null) {
            String var8 = var7.getPrefabPath();
            if (var8 == null) {
               HytaleLogger.getLogger().at(Level.WARNING).log("Prefab spawner at %d, %d, %d is missing prefab path!", var2, var3, var4);
            } else {
               PrefabWeights var9 = var7.getPrefabWeights();
               PrefabRotation var10 = PrefabRotation.fromRotation(RotationTuple.get(var1).yaw());
               this.addChildPrefab(var2, var3, var4, var8, var7.isFitHeightmap(), var7.isInheritSeed(), var7.isInheritHeightCondition(), var9, var10);
            }
         }
      }

      class="kw">public void addChildPrefab(
         int var1,
         int var2,
         int var3,
         @Nonnull String var4,
         boolean var5,
         boolean var6,
         boolean var7,
         @Nullable PrefabWeights var8,
         @Nonnull PrefabRotation var9
      ) {
         this.childPrefabs.add(new PrefabBuffer.ChildPrefab(var1, var2, var3, var4, var5, var6, var7, var8, var9));
      }

      @Nonnull
      class="kw">public PrefabBufferBlockEntry newBlockEntry(int var1) {
         class="kw">return new PrefabBufferBlockEntry(var1);
      }

      class="kw">private int buildColumn(Int2ObjectMap<PrefabBufferColumn> var1, PrefabBuffer.BuilderColumn var2, MemorySegment var3, int var4) {
         PrefabBufferBlockEntry[] var5 = var2.entries;
         int var6 = var5.length;
         Int2ObjectOpenHashMap var7 = new Int2ObjectOpenHashMap();
         if (var6 != 0 || var2.entityHolders != null && var2.entityHolders.length != 0) {
            int var26 = var4;
            if (var6 > 0) {
               int var9 = var5[0].y;
               if (var9 < this.min.y) {
                  this.min.y = var9;
               }

               var3.set(ValueLayout.JAVA_INT_UNALIGNED, var26, var9 - 1);
               var26 += 4;
               var9 = Integer.MIN_VALUE;

               for (int var10 = 0; var10 < var6; var10++) {
                  PrefabBufferBlockEntry var11 = var5[var10];
                  int var12 = var11.y;
                  int var13 = var11.blockId;
                  float var14 = var11.chance;
                  Holder var15 = var11.state;
                  int var16 = var11.fluidId;
                  byte var17 = var11.fluidLevel;
                  int var18 = var10 == 0 ? 0 : var12 - var9;
                  boolean var19 = var14 < 1.0F;
                  int var20 = MathUtil.byteCount(var13);
                  int var21 = var18 == 1 ? 0 : MathUtil.byteCount(var18);
                  int var22 = MathUtil.byteCount(var16);
                  int var23 = PrefabBuffer.BlockMaskConstants.getBlockMask(var20, var22, var19, var21, var15, var11.supportValue, var11.rotation, var11.filler);
                  var3.set(ValueLayout.JAVA_SHORT_UNALIGNED, var26, (short)var23);
                  var26 += 2;
                  MemorySegmentUtil.writeNumber(var3, var26, var20, var13);
                  var26 += var20;
                  MemorySegmentUtil.writeNumber(var3, var26, var21, var18);
                  var26 += var21;
                  if (var19) {
                     var3.set(ValueLayout.JAVA_FLOAT_UNALIGNED, var26, var14);
                     var26 += 4;
                  }

                  if (var11.rotation != 0) {
                     var3.set(ValueLayout.JAVA_BYTE, var26, (byte)var11.rotation);
                     var26++;
                  }

                  if (var11.filler != 0) {
                     var3.set(ValueLayout.JAVA_SHORT_UNALIGNED, var26, (short)var11.filler);
                     var26 += 2;
                  }

                  if (var16 != 0) {
                     MemorySegmentUtil.writeNumber(var3, var26, var22, var16);
                     var26 += var22;
                     var3.set(ValueLayout.JAVA_BYTE, var26, var17);
                     var26++;
                  }

                  if (var15 != null) {
                     var7.put(var12, var15);
                     this.handleBlockComponents(var11.rotation, var2.x, var12, var2.z, var15);
                  }

                  var9 = var12;
               }

               if (var9 > this.max.y) {
                  this.max.y = var9;
               }
            }

            if (var2.x < this.min.x) {
               this.min.x = var2.x;
            }

            if (var2.x > this.max.x) {
               this.max.x = var2.x;
            }

            if (var2.z < this.min.z) {
               this.min.z = var2.z;
            }

            if (var2.z > this.max.z) {
               this.max.z = var2.z;
            }

            if (var7.isEmpty()) {
               var7 = null;
            }

            int var28 = var26 - var4;
            PrefabBufferColumn var29 = new PrefabBufferColumn(var6, var3.asSlice(var4, var28), var2.entityHolders, var7);
            var1.put(MathUtil.packInt(var2.x, var2.z), var29);
            class="kw">return var28;
         } else {
            class="kw">return 0;
         }
      }

      @Nonnull
      class="kw">public PrefabBuffer build() {
         Int2ObjectOpenHashMap var1 = new Int2ObjectOpenHashMap();
         MemorySegment var2 = MemorySegment.ofArray(new byte[this.requiredMemory]);
         int var3 = 0;
         ObjectIterator var4 = this.builderColumns.values().iterator();

         while (var4.hasNext()) {
            PrefabBuffer.BuilderColumn var5 = (PrefabBuffer.BuilderColumn)var4.next();
            var3 += this.buildColumn(var1, var5, var2, var3);
         }

         PrefabBuffer.ChildPrefab[] var6 = this.childPrefabs.toArray(PrefabBuffer.ChildPrefab[]::new);
         if (this.builderColumns.isEmpty()) {
            this.min.zero();
            this.max.zero();
         }

         class="kw">return new PrefabBuffer(this.anchor, this.min, this.max, var1, var6);
      }
   }

   class="kw">private record BuilderColumn(int x, int z, @Nonnull PrefabBufferBlockEntry[] entries, @Nullable Holder<EntityStore>[] entityHolders) {
      class="kw">private BuilderColumn {
      }
   }

   class="kw">public class="kw">static class ChildPrefab {
      class="kw">private class="kw">final int x;
      class="kw">private class="kw">final int y;
      class="kw">private class="kw">final int z;
      @Nonnull
      class="kw">private class="kw">final String path;
      class="kw">private class="kw">final boolean fitHeightmap;
      class="kw">private class="kw">final boolean inheritSeed;
      class="kw">private class="kw">final boolean inheritHeightCondition;
      @Nonnull
      class="kw">private class="kw">final PrefabWeights weights;
      @Nonnull
      class="kw">private class="kw">final PrefabRotation rotation;

      class="kw">private ChildPrefab(
         int var1,
         int var2,
         int var3,
         @Nonnull String var4,
         boolean var5,
         boolean var6,
         boolean var7,
         @Nonnull PrefabWeights var8,
         @Nonnull PrefabRotation var9
      ) {
         this.x = var1;
         this.y = var2;
         this.z = var3;
         this.path = var4;
         this.fitHeightmap = var5;
         this.inheritSeed = var6;
         this.inheritHeightCondition = var7;
         this.weights = var8;
         this.rotation = var9;
      }

      class="kw">public int getX() {
         class="kw">return this.x;
      }

      class="kw">public int getY() {
         class="kw">return this.y;
      }

      class="kw">public int getZ() {
         class="kw">return this.z;
      }

      @Nonnull
      class="kw">public String getPath() {
         class="kw">return this.path;
      }

      class="kw">public boolean isFitHeightmap() {
         class="kw">return this.fitHeightmap;
      }

      class="kw">public boolean isInheritSeed() {
         class="kw">return this.inheritSeed;
      }

      class="kw">public boolean isInheritHeightCondition() {
         class="kw">return this.inheritHeightCondition;
      }

      @Nonnull
      class="kw">public PrefabWeights getWeights() {
         class="kw">return this.weights;
      }

      @Nonnull
      class="kw">public PrefabRotation getRotation() {
         class="kw">return this.rotation;
      }
   }

   class="kw">public class="kw">static class PrefabBufferAccessor class="kw">implements IPrefabBuffer {
      @Nonnull
      class="kw">private class="kw">final PrefabBuffer prefabBuffer;

      class="kw">private PrefabBufferAccessor(@Nonnull PrefabBuffer var1) {
         this.prefabBuffer = var1;
      }

      @Override
      class="kw">public int getAnchorX() {
         class="kw">return this.prefabBuffer.getAnchorX();
      }

      @Override
      class="kw">public int getAnchorY() {
         class="kw">return this.prefabBuffer.getAnchorY();
      }

      @Override
      class="kw">public int getAnchorZ() {
         class="kw">return this.prefabBuffer.getAnchorZ();
      }

      @Override
      class="kw">public int getMinX(@Nonnull PrefabRotation var1) {
         class="kw">return Math.min(var1.getX(this.prefabBuffer.min.x(), this.prefabBuffer.min.z()), var1.getX(this.prefabBuffer.max.x(), this.prefabBuffer.max.z()));
      }

      @Override
      class="kw">public int getMinY() {
         class="kw">return this.prefabBuffer.min.y();
      }

      @Override
      class="kw">public int getMinZ(@Nonnull PrefabRotation var1) {
         class="kw">return Math.min(var1.getZ(this.prefabBuffer.min.x(), this.prefabBuffer.min.z()), var1.getZ(this.prefabBuffer.max.x(), this.prefabBuffer.max.z()));
      }

      @Override
      class="kw">public int getMaxX(@Nonnull PrefabRotation var1) {
         class="kw">return Math.max(var1.getX(this.prefabBuffer.min.x(), this.prefabBuffer.min.z()), var1.getX(this.prefabBuffer.max.x(), this.prefabBuffer.max.z()));
      }

      @Override
      class="kw">public int getMaxY() {
         class="kw">return this.prefabBuffer.max.y();
      }

      @Override
      class="kw">public int getMaxZ(@Nonnull PrefabRotation var1) {
         class="kw">return Math.max(var1.getZ(this.prefabBuffer.min.x(), this.prefabBuffer.min.z()), var1.getZ(this.prefabBuffer.max.x(), this.prefabBuffer.max.z()));
      }

      @Override
      class="kw">public int getColumnCount() {
         class="kw">return this.prefabBuffer.columns.size();
      }

      @Nonnull
      @Override
      class="kw">public PrefabBuffer.ChildPrefab[] getChildPrefabs() {
         class="kw">return this.prefabBuffer.childPrefabs;
      }

      @Override
      class="kw">public int getMinYAt(@Nonnull PrefabRotation var1, int var2, int var3) {
         int var4 = var1.getX(var2, var3);
         int var5 = var1.getZ(var2, var3);
         int var6 = MathUtil.packInt(var4, var5);
         PrefabBufferColumn var7 = (PrefabBufferColumn)this.prefabBuffer.columns.get(var6);
         class="kw">return var7 != null && var7.getBlockCount() > 0 ? var7.getMemorySegment().get(ValueLayout.JAVA_INT_UNALIGNED, 0L) + 1 : -1;
      }

      @Override
      class="kw">public int getMaxYAt(@Nonnull PrefabRotation var1, int var2, int var3) {
         int var4 = var1.getX(var2, var3);
         int var5 = var1.getZ(var2, var3);
         int var6 = MathUtil.packInt(var4, var5);
         PrefabBufferColumn var7 = (PrefabBufferColumn)this.prefabBuffer.columns.get(var6);
         if (var7 == null) {
            class="kw">return -1;
         }

         if (var7.getBlockCount() > 0) {
            int var8 = 0;
            MemorySegment var9 = var7.getMemorySegment();
            int var10 = var9.get(ValueLayout.JAVA_INT_UNALIGNED, var8);
            var8 += 4;

            for (int var11 = 0; var11 < var7.getBlockCount(); var11++) {
               int var12 = Short.toUnsignedInt(var9.get(ValueLayout.JAVA_SHORT_UNALIGNED, var8));
               var8 += 2;
               if (PrefabBuffer.BlockMaskConstants.getOffsetBytes(var12) > 0) {
                  var8 += PrefabBuffer.BlockMaskConstants.getBlockBytes(var12);
                  int var13 = PrefabBuffer.BlockMaskConstants.getOffsetBytes(var12);
                  var10 += MemorySegmentUtil.readNumber(var9, var8, var13);
                  var8 += var13;
                  if (PrefabBuffer.BlockMaskConstants.hasChance(var12)) {
                     var8 += 4;
                  }

                  if (PrefabBuffer.BlockMaskConstants.hasRotation(var12)) {
                     var8++;
                  }

                  if (PrefabBuffer.BlockMaskConstants.hasFiller(var12)) {
                     var8 += 2;
                  }

                  var8 += PrefabBuffer.BlockMaskConstants.getFluidBytes(var12);
               } else {
                  var8 += PrefabBuffer.BlockMaskConstants.getSkipBytes(var12);
                  var10++;
               }
            }

            class="kw">return var10;
         } else {
            class="kw">return -1;
         }
      }

      @Override
      class="kw">public <T class="kw">extends PrefabBufferCall> void forEach(
         @Nonnull IPrefabBuffer.ColumnPredicate<T> var1,
         @Nonnull IPrefabBuffer.BlockConsumer<T> var2,
         @Nullable IPrefabBuffer.EntityConsumer<T> var3,
         @Nullable IPrefabBuffer.ChildConsumer<T> var4,
         @Nonnull T var5
      ) {
         this.prefabBuffer.columns.int2ObjectEntrySet().forEach(var4x -> {
            int var5 = var4x.getIntKey();
            int var6 = MathUtil.unpackLeft(var5);
            int var7 = MathUtil.unpackRight(var5);
            int var8 = var5.rotation.getX(var6, var7);
            int var9 = var5.rotation.getZ(var6, var7);
            PrefabBufferColumn var10 = (PrefabBufferColumn)var4x.getValue();
            MemorySegment var11 = var10.getMemorySegment();
            int var12 = var10.getBlockCount();
            if (var1.test(var8, var9, var12, var5)) {
               if (var12 > 0) {
                  int var13 = 0;
                  int var14 = var11.get(ValueLayout.JAVA_INT_UNALIGNED, var13);
                  var13 += 4;

                  for (int var15 = 0; var15 < var12; var15++) {
                     int var16 = Short.toUnsignedInt(var11.get(ValueLayout.JAVA_SHORT_UNALIGNED, var13));
                     var13 += 2;
                     int var17 = PrefabBuffer.BlockMaskConstants.getBlockBytes(var16);
                     int var18 = MemorySegmentUtil.readNumber(var11, var13, var17);
                     var13 += var17;
                     int var19 = PrefabBuffer.BlockMaskConstants.getOffsetBytes(var16);
                     var14 += var19 == 0 ? 1 : MemorySegmentUtil.readNumber(var11, var13, var19);
                     var13 += var19;
                     if (PrefabBuffer.BlockMaskConstants.hasChance(var16)) {
                        float var20 = var11.get(ValueLayout.JAVA_FLOAT_UNALIGNED, var13);
                        var13 += 4;
                        if (var20 < var5.random.nextFloat()) {
                           var13 += 2;
                           var13 += PrefabBuffer.BlockMaskConstants.getFluidBytes(var16);
                           class="kw">continue;
                        }
                     }

                     Holder var33 = PrefabBuffer.BlockMaskConstants.hasComponents(var16) ? (Holder)var10.getBlockComponents().get(var14) : null;
                     int var21 = PrefabBuffer.BlockMaskConstants.getSupportValue(var16);
                     int var22 = 0;
                     if (PrefabBuffer.BlockMaskConstants.hasRotation(var16)) {
                        var22 = Byte.toUnsignedInt(var11.get(ValueLayout.JAVA_BYTE, var13));
                        var13++;
                     }

                     var22 = var5.rotation.getRotation(var22);
                     int var23 = 0;
                     if (PrefabBuffer.BlockMaskConstants.hasFiller(var16)) {
                        var23 = var5.rotation.getFiller(Short.toUnsignedInt(var11.get(ValueLayout.JAVA_SHORT_UNALIGNED, var13)));
                        var13 += 2;
                     }

                     int var24 = PrefabBuffer.BlockMaskConstants.getFluidBytes(var16);
                     int var25 = 0;
                     int var26 = 0;
                     if (var24 != 0) {
                        var25 = MemorySegmentUtil.readNumber(var11, var13, var24 - 1);
                        var13 += var24 - 1;
                        var26 = var11.get(ValueLayout.JAVA_BYTE, var13);
                        var13++;
                     }

                     var2.accept(var8, var14, var9, var18, var33, var21, var22, var23, var5, var25, var26);
                  }
               }

               Holder[] var32 = var10.getEntityHolders();
               if (var32 != null && var3 != null) {
                  var3.accept(var8, var9, var32, var5);
               }
            }
         });
         if (this.prefabBuffer.childPrefabs != null && var4 != null) {
            for (PrefabBuffer.ChildPrefab var9 : this.prefabBuffer.childPrefabs) {
               int var10 = var5.rotation.getX(var9.x, var9.z);
               int var11 = var5.rotation.getZ(var9.x, var9.z);
               var4.accept(var10, var9.y, var11, var9.path, var9.fitHeightmap, var9.inheritSeed, var9.inheritHeightCondition, var9.weights, var9.rotation, var5);
            }
         }
      }

      @Override
      class="kw">public <T> void forEachEntity(@Nonnull IPrefabBuffer.EntityConsumer<T> var1, @Nullable T var2) {
         this.prefabBuffer.columns.int2ObjectEntrySet().forEach(var2x -> {
            int var3 = var2x.getIntKey();
            int var4 = MathUtil.unpackLeft(var3);
            int var5 = MathUtil.unpackRight(var3);
            PrefabBufferColumn var6 = (PrefabBufferColumn)var2x.getValue();
            Holder[] var7 = var6.getEntityHolders();
            if (var1 != null) {
               var1.accept(var4, var5, var7, var2);
            }
         });
      }

      @Override
      class="kw">public <T> void forEachRaw(
         @Nonnull IPrefabBuffer.ColumnPredicate<T> var1,
         @Nonnull IPrefabBuffer.RawBlockConsumer<T> var2,
         @Nonnull IPrefabBuffer.FluidConsumer<T> var3,
         @Nullable IPrefabBuffer.EntityConsumer<T> var4,
         @Nullable T var5
      ) {
         this.prefabBuffer.columns.int2ObjectEntrySet().forEach(var5x -> {
            int var6 = var5x.getIntKey();
            int var7 = MathUtil.unpackLeft(var6);
            int var8 = MathUtil.unpackRight(var6);
            PrefabBufferColumn var9 = (PrefabBufferColumn)var5x.getValue();
            MemorySegment var10 = var9.getMemorySegment();
            int var11 = var9.getBlockCount();
            if (var1.test(var7, var8, var11, var5)) {
               if (var11 > 0) {
                  int var12 = 0;
                  int var13 = var10.get(ValueLayout.JAVA_INT_UNALIGNED, var12);
                  var12 += 4;

                  for (int var14 = 0; var14 < var11; var14++) {
                     int var15 = Short.toUnsignedInt(var10.get(ValueLayout.JAVA_SHORT_UNALIGNED, var12));
                     var12 += 2;
                     int var16 = PrefabBuffer.BlockMaskConstants.getBlockBytes(var15);
                     int var17 = MemorySegmentUtil.readNumber(var10, var12, var16);
                     var12 += var16;
                     int var18 = PrefabBuffer.BlockMaskConstants.getOffsetBytes(var15);
                     var13 += var18 == 0 ? 1 : MemorySegmentUtil.readNumber(var10, var12, var18);
                     var12 += var18;
                     float var19 = 1.0F;
                     if (PrefabBuffer.BlockMaskConstants.hasChance(var15)) {
                        var19 = var10.get(ValueLayout.JAVA_FLOAT_UNALIGNED, var12);
                        var12 += 4;
                     }

                     Holder var20 = PrefabBuffer.BlockMaskConstants.hasComponents(var15) ? (Holder)var9.getBlockComponents().get(var13) : null;
                     int var21 = PrefabBuffer.BlockMaskConstants.getSupportValue(var15);
                     int var22 = 0;
                     if (PrefabBuffer.BlockMaskConstants.hasRotation(var15)) {
                        var22 = Byte.toUnsignedInt(var10.get(ValueLayout.JAVA_BYTE, var12));
                        var12++;
                     }

                     int var23 = 0;
                     if (PrefabBuffer.BlockMaskConstants.hasFiller(var15)) {
                        var23 = Short.toUnsignedInt(var10.get(ValueLayout.JAVA_SHORT_UNALIGNED, var12));
                        var12 += 2;
                     }

                     var2.accept(var7, var13, var8, var15, var17, var19, var20, var21, var22, var23, var5);
                     int var24 = PrefabBuffer.BlockMaskConstants.getFluidBytes(var15);
                     if (var24 != 0) {
                        int var25 = MemorySegmentUtil.readNumber(var10, var12, var24 - 1);
                        var12 += var24 - 1;
                        byte var26 = var10.get(ValueLayout.JAVA_BYTE, var12);
                        var12++;
                        var3.accept(var7, var13, var8, var25, var26, var5);
                     }
                  }
               }

               Holder[] var31 = var9.getEntityHolders();
               if (var4 != null) {
                  var4.accept(var7, var8, var31, var5);
               }
            }
         });
      }

      @Override
      class="kw">public <T> boolean forEachRaw(
         @Nonnull IPrefabBuffer.ColumnPredicate<T> var1,
         @Nonnull IPrefabBuffer.RawBlockPredicate<T> var2,
         @Nonnull IPrefabBuffer.FluidPredicate<T> var3,
         @Nullable IPrefabBuffer.EntityPredicate<T> var4,
         @Nullable T var5
      ) {
         ObjectIterator var6 = this.prefabBuffer.columns.int2ObjectEntrySet().iterator();

         while (var6.hasNext()) {
            Entry var7 = (Entry<PrefabBufferColumn>)var6.next();
            int var8 = var7.getIntKey();
            int var9 = MathUtil.unpackLeft(var8);
            int var10 = MathUtil.unpackRight(var8);
            PrefabBufferColumn var11 = (PrefabBufferColumn)var7.getValue();
            MemorySegment var12 = var11.getMemorySegment();
            int var13 = var11.getBlockCount();
            if (!var1.test(var9, var10, var13, var5)) {
               class="kw">return false;
            }

            if (var13 > 0) {
               int var14 = 0;
               int var15 = var12.get(ValueLayout.JAVA_INT_UNALIGNED, var14);
               var14 += 4;

               for (int var16 = 0; var16 < var13; var16++) {
                  int var17 = Short.toUnsignedInt(var12.get(ValueLayout.JAVA_SHORT_UNALIGNED, var14));
                  var14 += 2;
                  int var18 = PrefabBuffer.BlockMaskConstants.getBlockBytes(var17);
                  int var19 = MemorySegmentUtil.readNumber(var12, var14, var18);
                  var14 += var18;
                  int var20 = PrefabBuffer.BlockMaskConstants.getOffsetBytes(var17);
                  var15 += var20 == 0 ? 1 : MemorySegmentUtil.readNumber(var12, var14, var20);
                  var14 += var20;
                  float var21 = 1.0F;
                  if (PrefabBuffer.BlockMaskConstants.hasChance(var17)) {
                     var21 = var12.get(ValueLayout.JAVA_FLOAT_UNALIGNED, var14);
                     var14 += 4;
                  }

                  Holder var22 = PrefabBuffer.BlockMaskConstants.hasComponents(var17) ? (Holder)var11.getBlockComponents().get(var15) : null;
                  int var23 = 0;
                  if (PrefabBuffer.BlockMaskConstants.hasRotation(var17)) {
                     var23 = Byte.toUnsignedInt(var12.get(ValueLayout.JAVA_BYTE, var14));
                     var14++;
                  }

                  int var24 = 0;
                  if (PrefabBuffer.BlockMaskConstants.hasFiller(var17)) {
                     var24 = Short.toUnsignedInt(var12.get(ValueLayout.JAVA_SHORT_UNALIGNED, var14));
                     var14 += 2;
                  }

                  int var25 = PrefabBuffer.BlockMaskConstants.getSupportValue(var17);
                  if (!var2.test(var9, var15, var10, var19, var21, var22, var25, var23, var24, var5)) {
                     class="kw">return false;
                  }

                  int var26 = PrefabBuffer.BlockMaskConstants.getFluidBytes(var17);
                  if (var26 != 0) {
                     int var27 = MemorySegmentUtil.readNumber(var12, var14, var26 - 1);
                     var14 += var26 - 1;
                     byte var28 = var12.get(ValueLayout.JAVA_BYTE, var14);
                     var14++;
                     if (!var3.test(var9, var15, var10, var27, var28, var5)) {
                        class="kw">return false;
                     }
                  }
               }
            }

            Holder[] var33 = var11.getEntityHolders();
            if (var4 != null && !var4.test(var9, var10, var33, var5)) {
               class="kw">return false;
            }
         }

         class="kw">return true;
      }

      @Override
      class="kw">public <T class="kw">extends PrefabBufferCall> boolean compare(
         @Nonnull IPrefabBuffer.BlockComparingPrefabPredicate<T> var1, @Nonnull T var2, @Nonnull IPrefabBuffer var3
      ) {
         if (!(var3 class="kw">instanceof PrefabBuffer.PrefabBufferAccessor var4)) {
            class="kw">return IPrefabBuffer.super.compare(var1, var2, var3);
         } else {
            Int2ObjectMap var5 = var4.prefabBuffer.columns;
            IntOpenHashSet var6 = new IntOpenHashSet(this.prefabBuffer.columns.size() + var5.size());
            var6.addAll(this.prefabBuffer.columns.keySet());
            var6.addAll(var5.keySet());
            IntIterator var7 = var6.iterator();

            while (var7.hasNext()) {
               int var8 = var7.nextInt();
               int var9 = MathUtil.unpackLeft(var8);
               int var10 = MathUtil.unpackRight(var8);
               int var11 = var2.rotation.getX(var9, var10);
               int var12 = var2.rotation.getZ(var9, var10);
               PrefabBufferColumn var13 = (PrefabBufferColumn)this.prefabBuffer.columns.get(var8);
               PrefabBufferColumn var14 = (PrefabBufferColumn)var5.get(var8);
               MemorySegment var15 = var13 != null ? var13.getMemorySegment() : null;
               MemorySegment var16 = var14 != null ? var14.getMemorySegment() : null;
               int var17 = var13 != null ? var13.getBlockCount() : 0;
               int var18 = var14 != null ? var14.getBlockCount() : 0;
               if (var17 != 0 || var18 != 0) {
                  int var19 = 0;
                  int var20;
                  if (var17 > 0) {
                     var20 = var15.get(ValueLayout.JAVA_INT_UNALIGNED, var19);
                     var19 += 4;
                  } else {
                     var20 = Integer.MAX_VALUE;
                  }

                  int var21 = 0;
                  int var22;
                  if (var18 > 0) {
                     var22 = var16.get(ValueLayout.JAVA_INT_UNALIGNED, var21);
                     var21 += 4;
                  } else {
                     var22 = Integer.MAX_VALUE;
                  }

                  int var23 = Integer.MIN_VALUE;
                  float var24 = 1.0F;
                  int var25 = 0;
                  int var26 = 0;
                  Holder var27 = null;
                  int var28 = Integer.MIN_VALUE;
                  float var29 = 1.0F;
                  int var30 = 0;
                  int var31 = 0;
                  Holder var32 = null;
                  int var33 = 0;
                  int var34 = 0;

                  while (var33 < var17 || var34 < var18) {
                     int var35 = var20;
                     int var36 = var22;
                     int var37 = var19;
                     int var38 = var21;
                     if (var33 < var17) {
                        int var39 = Short.toUnsignedInt(var15.get(ValueLayout.JAVA_SHORT_UNALIGNED, var19));
                        var19 += 2;
                        int var40 = PrefabBuffer.BlockMaskConstants.getBlockBytes(var39);
                        var23 = MemorySegmentUtil.readNumber(var15, var19, var40);
                        var19 += var40;
                        int var41 = PrefabBuffer.BlockMaskConstants.getOffsetBytes(var39);
                        var20 += var41 == 0 ? 1 : MemorySegmentUtil.readNumber(var15, var19, var41);
                        var19 += var41;
                        if (PrefabBuffer.BlockMaskConstants.hasChance(var39)) {
                           var24 = var15.get(ValueLayout.JAVA_FLOAT_UNALIGNED, var19);
                           var19 += 4;
                        } else {
                           var24 = 1.0F;
                        }

                        if (PrefabBuffer.BlockMaskConstants.hasRotation(var39)) {
                           var25 = var2.rotation.getRotation(Byte.toUnsignedInt(var15.get(ValueLayout.JAVA_BYTE, var19)));
                           var19++;
                        } else {
                           var25 = var2.rotation.getRotation(0);
                        }

                        if (PrefabBuffer.BlockMaskConstants.hasFiller(var39)) {
                           var26 = var2.rotation.getFiller(Short.toUnsignedInt(var15.get(ValueLayout.JAVA_SHORT_UNALIGNED, var19)));
                           var19 += 2;
                        } else {
                           var26 = 0;
                        }

                        var27 = PrefabBuffer.BlockMaskConstants.hasComponents(var39) ? (Holder)var13.getBlockComponents().get(var20) : null;
                        var19 += PrefabBuffer.BlockMaskConstants.getFluidBytes(var39);
                     }

                     if (var34 < var18) {
                        int var48 = Short.toUnsignedInt(var16.get(ValueLayout.JAVA_SHORT_UNALIGNED, var21));
                        var21 += 2;
                        int var52 = PrefabBuffer.BlockMaskConstants.getBlockBytes(var48);
                        var28 = MemorySegmentUtil.readNumber(var16, var21, var52);
                        var21 += var52;
                        int var53 = PrefabBuffer.BlockMaskConstants.getOffsetBytes(var48);
                        var22 += var53 == 0 ? 1 : MemorySegmentUtil.readNumber(var16, var21, var53);
                        var21 += var53;
                        if (PrefabBuffer.BlockMaskConstants.hasChance(var48)) {
                           var29 = var16.get(ValueLayout.JAVA_FLOAT_UNALIGNED, var21);
                           var21 += 4;
                        } else {
                           var29 = 1.0F;
                        }

                        if (PrefabBuffer.BlockMaskConstants.hasRotation(var48)) {
                           var30 = var2.rotation.getRotation(Byte.toUnsignedInt(var16.get(ValueLayout.JAVA_BYTE, var21)));
                           var21++;
                        } else {
                           var30 = var2.rotation.getRotation(0);
                        }

                        if (PrefabBuffer.BlockMaskConstants.hasFiller(var48)) {
                           var31 = var2.rotation.getFiller(Short.toUnsignedInt(var16.get(ValueLayout.JAVA_SHORT_UNALIGNED, var21)));
                           var21 += 2;
                        } else {
                           var31 = 0;
                        }

                        var32 = PrefabBuffer.BlockMaskConstants.hasComponents(var48) ? (Holder)var14.getBlockComponents().get(var22) : null;
                        var21 += PrefabBuffer.BlockMaskConstants.getFluidBytes(var48);
                     }

                     if (var20 == var22) {
                        var33++;
                        var34++;
                        boolean var51 = var1.test(var11, var20, var12, var23, var27, var24, var25, var26, var28, var32, var29, var30, var31, var2);
                        if (!var51) {
                           class="kw">return false;
                        }
                     } else if ((var20 >= var22 || var33 >= var17) && var34 < var18) {
                        var34++;
                        var20 = var35;
                        var19 = var37;
                        boolean var50 = var1.test(var11, var22, var12, Integer.MIN_VALUE, null, 1.0F, 0, 0, var28, var32, var29, var30, var31, var2);
                        if (!var50) {
                           class="kw">return false;
                        }
                     } else {
                        var33++;
                        var22 = var36;
                        var21 = var38;
                        boolean var49 = var1.test(var11, var20, var12, var23, var27, var24, var25, var26, Integer.MIN_VALUE, null, 1.0F, 0, 0, var2);
                        if (!var49) {
                           class="kw">return false;
                        }
                     }
                  }
               }
            }

            class="kw">return true;
         }
      }

      @Override
      class="kw">public int getBlockId(int var1, int var2, int var3) {
         PrefabBufferColumn var4 = (PrefabBufferColumn)this.prefabBuffer.columns.get(MathUtil.packInt(var1, var3));
         if (var4 == null) {
            class="kw">return 0;
         }

         int var5 = var4.getBlockCount();
         if (var5 <= 0) {
            class="kw">return 0;
         }

         MemorySegment var6 = var4.getMemorySegment();
         int var7 = 0;
         int var8 = var6.get(ValueLayout.JAVA_INT_UNALIGNED, var7);
         var7 += 4;

         for (int var9 = 0; var9 < var5; var9++) {
            int var10 = Short.toUnsignedInt(var6.get(ValueLayout.JAVA_SHORT_UNALIGNED, var7));
            var7 += 2;
            int var11 = PrefabBuffer.BlockMaskConstants.getBlockBytes(var10);
            int var12 = MemorySegmentUtil.readNumber(var6, var7, var11);
            var7 += var11;
            int var13 = PrefabBuffer.BlockMaskConstants.getOffsetBytes(var10);
            var8 += var13 == 0 ? 1 : MemorySegmentUtil.readNumber(var6, var7, var13);
            var7 += var13;
            if (var8 > var2) {
               class="kw">return 0;
            }

            if (PrefabBuffer.BlockMaskConstants.hasChance(var10)) {
               var7 += 4;
            }

            if (PrefabBuffer.BlockMaskConstants.hasRotation(var10)) {
               var7++;
            }

            if (PrefabBuffer.BlockMaskConstants.hasFiller(var10)) {
               var7 += 2;
            }

            var7 += PrefabBuffer.BlockMaskConstants.getFluidBytes(var10);
            if (var8 == var2) {
               if (PrefabBuffer.BlockMaskConstants.hasChance(var10)) {
                  throw new UnsupportedOperationException("Unable to access block with chance!");
               }

               class="kw">return var12;
            }
         }

         class="kw">return 0;
      }

      @Override
      class="kw">public int getFiller(int var1, int var2, int var3) {
         PrefabBufferColumn var4 = (PrefabBufferColumn)this.prefabBuffer.columns.get(MathUtil.packInt(var1, var3));
         if (var4 == null) {
            class="kw">return 0;
         }

         int var5 = var4.getBlockCount();
         if (var5 <= 0) {
            class="kw">return 0;
         }

         MemorySegment var6 = var4.getMemorySegment();
         int var7 = 0;
         int var8 = var6.get(ValueLayout.JAVA_INT_UNALIGNED, var7);
         var7 += 4;

         for (int var9 = 0; var9 < var5; var9++) {
            int var10 = Short.toUnsignedInt(var6.get(ValueLayout.JAVA_SHORT_UNALIGNED, var7));
            var7 += 2;
            int var11 = PrefabBuffer.BlockMaskConstants.getBlockBytes(var10);
            MemorySegmentUtil.readNumber(var6, var7, var11);
            var7 += var11;
            int var12 = PrefabBuffer.BlockMaskConstants.getOffsetBytes(var10);
            var8 += var12 == 0 ? 1 : MemorySegmentUtil.readNumber(var6, var7, var12);
            var7 += var12;
            if (var8 > var2) {
               class="kw">return 0;
            }

            if (PrefabBuffer.BlockMaskConstants.hasChance(var10)) {
               var7 += 4;
            }

            if (PrefabBuffer.BlockMaskConstants.hasRotation(var10)) {
               var7++;
            }

            int var13 = 0;
            if (PrefabBuffer.BlockMaskConstants.hasFiller(var10)) {
               var13 = Short.toUnsignedInt(var6.get(ValueLayout.JAVA_SHORT_UNALIGNED, var7));
               var7 += 2;
            }

            var7 += PrefabBuffer.BlockMaskConstants.getFluidBytes(var10);
            if (var8 == var2) {
               if (PrefabBuffer.BlockMaskConstants.hasChance(var10)) {
                  throw new UnsupportedOperationException("Unable to access block with chance!");
               }

               class="kw">return var13;
            }
         }

         class="kw">return 0;
      }

      @Override
      class="kw">public int getRotationIndex(int var1, int var2, int var3) {
         PrefabBufferColumn var4 = (PrefabBufferColumn)this.prefabBuffer.columns.get(MathUtil.packInt(var1, var3));
         if (var4 == null) {
            class="kw">return 0;
         }

         int var5 = var4.getBlockCount();
         if (var5 <= 0) {
            class="kw">return 0;
         }

         MemorySegment var6 = var4.getMemorySegment();
         int var7 = 0;
         int var8 = var6.get(ValueLayout.JAVA_INT_UNALIGNED, var7);
         var7 += 4;

         for (int var9 = 0; var9 < var5; var9++) {
            int var10 = Short.toUnsignedInt(var6.get(ValueLayout.JAVA_SHORT_UNALIGNED, var7));
            var7 += 2;
            int var11 = PrefabBuffer.BlockMaskConstants.getBlockBytes(var10);
            MemorySegmentUtil.readNumber(var6, var7, var11);
            var7 += var11;
            int var12 = PrefabBuffer.BlockMaskConstants.getOffsetBytes(var10);
            var8 += var12 == 0 ? 1 : MemorySegmentUtil.readNumber(var6, var7, var12);
            var7 += var12;
            if (var8 > var2) {
               class="kw">return 0;
            }

            if (PrefabBuffer.BlockMaskConstants.hasChance(var10)) {
               var7 += 4;
            }

            int var13 = 0;
            if (PrefabBuffer.BlockMaskConstants.hasRotation(var10)) {
               var13 = Byte.toUnsignedInt(var6.get(ValueLayout.JAVA_BYTE, var7));
               var7++;
            }

            if (PrefabBuffer.BlockMaskConstants.hasFiller(var10)) {
               var7 += 2;
            }

            var7 += PrefabBuffer.BlockMaskConstants.getFluidBytes(var10);
            if (var8 == var2) {
               if (PrefabBuffer.BlockMaskConstants.hasChance(var10)) {
                  throw new UnsupportedOperationException("Unable to access block with chance!");
               }

               class="kw">return var13;
            }
         }

         class="kw">return 0;
      }
   }
}