PrefabUtil class

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

Файл: com/hypixel/hytale/server/core/util/PrefabUtil.java

Поля (132)

МодификаторыТипИмя
int ANCHOR_BLOCK
private static final PrefabUtil.PasteRegion.Column EMPTY
private static final PrefabUtil.PasteRegion.Section EMPTY
int FORCE
int NONE
final Consumer<Holder<ChunkStore>> NOOP_BLOCK_ENTITY_CONSUMER
int NO_ENTITIES
int TECHNICAL
private final Ref<ChunkStore>[] columnRefs
public final PrefabUtil.PasteRegion.Column[] columns
private final AtomicBoolean fullyLoaded
private final AtomicInteger loadCount
private final int maxX
private final int maxY
private final int maxZ
private final int minX
private final int minY
private final int minZ
private final Ref<ChunkStore>[] sectionRefs
public final PrefabUtil.PasteRegion.Section[] sections
private final int sizeX
private final int sizeY
private final int sizeZ
private final Store<ChunkStore> store
boolean var1
var1
var1
int var10
Store var10
int var10
int var10
int var10
int var11
CachedAccessor var11
int var11
int var11
int var11
Holder var11
int var11
int var11
BlockSection var12
int var12
PrefabUtil.PasteRegion var12
int var12
int var12
TransformComponent var12
var12
int var12
int var13
CompletableFuture var13
int var13
Vector3d var13
var13
ChunkStore var13
int var14
PrefabUtil.PasteRegion var14
ChunkStore var14
Vector3d var14
Store var14
BlockSection var15
Store var15
PrefabPlaceEntityEvent var15
CachedAccessor var15
CachedAccessor var16
BlockTypeAssetMap var17
int var18
PrefabRotation var19
int var19
ComponentType var2
Holder var2
int var20
int var20
PrefabPasteEvent var21
int var21
int var21
int var22
PrefabPasteEvent var22
Ref var22
int var23
FluidSection var23
Ref var24
int var24
FluidSection var25
BlockType var26
var26
var26
var26
String var27
int var28
BlockType var29
int var30
BlockType var31
BlockSection var32
RotationTuple var33
int var34
Holder var35
Holder var36
int var37
BlockType var38
ChunkStore var4
ComponentType var4
int var4
int var5
Ref var5
Store var5
ChunkStore var5
ComponentType var5
int var5
int var5
int var6
PrefabUtil.PasteRegion.Section var6
int var6
Store var6
ComponentType var6
int var6
int var7
int var7
int var7
int var7
ComponentType var7
CachedAccessor var8
int var8
Store var8
int var8
int var8
int var9
int var9
BlockComponentSection var9
int var9
int var9
int var9
ComponentType var9

Методы (91)

МодификаторыВозвратСигнатура
public record Columnpublic record Column(@Nullable WorldChunk worldChunk)
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Unknown key! Editor_Block")
public PasteRegionpublic PasteRegion(int var1, int var2, int var3, int var4, int var5, int var6, @Nonnull Store<ChunkStore> var7)
public record Sectionpublic record Section(@Nullable BlockSection blocks, @Nullable FluidSection fluids, @Nullable BlockPhysics physics, @Nullable EntitySection entities, @Nullable BlockComponentSection blockComponents)
private void awaitLoadprivate void awaitLoad(int var1, int var2, @Nonnull CompletableFuture<PrefabUtil.PasteRegion> var3, @Nonnull CompletableFuture<Ref<ChunkStore>> var4)
private void awaitLoadprivate void awaitLoad(int var1, int var2, int var3, @Nonnull CompletableFuture<PrefabUtil.PasteRegion> var4, @Nonnull CompletableFuture<Ref<ChunkStore>> var5)
static boolean canPlacePrefabboolean canPlacePrefab(@Nonnull IPrefabBuffer var0, World var1, @Nonnull Vector3ic var2, @Nonnull Rotation var3, @Nullable IntSet var4, Random var5, boolean var6)
private int columnIndexprivate int columnIndex(int var1, int var2)
private PrefabUtil.PasteRegion completeLoadprivate PrefabUtil.PasteRegion completeLoad()
public boolean containsBlockpublic boolean containsBlock(int var1, int var2, int var3)
public boolean containsColumnpublic boolean containsColumn(int var1, int var2)
public boolean containsSectionpublic boolean containsSection(int var1, int var2, int var3)
for for(int var2 = var1.minZ; var2 <= var1.maxZ; var2++)
for for(int var3 = var1.minX; var3 <= var1.maxX; var3++)
for for(int var4 = var1.minY; var4 <= var1.maxY; var4++)
for for(int var13 = var9; var13 <= var11; var13++)
for for(int var14 = var8; var14 <= var10; var14++)
for for(int var15 = var6; var15 <= var7; var15++)
for for(int var10 = var10; var10 <= var12; var10++)
for for(int var11 = var9; var11 <= var11; var11++)
for for(int var12 = var7; var12 <= var8; var12++)
for for(int var10 = 0; var10 < var8x.length; var10++)
for for(int var3 = 0; var3 < this.columnRefs.length; var3++)
for for(int var8 = 0; var8 < this.sectionRefs.length; var8++)
public int getBlockpublic int getBlock(int var1)
public PrefabUtil.PasteRegion.Column getColumnpublic PrefabUtil.PasteRegion.Column getColumn(int var1, int var2)
public PrefabUtil.PasteRegion.Column getColumnAtBlockpublic PrefabUtil.PasteRegion.Column getColumnAtBlock(int var1, int var2)
public int getFillerpublic int getFiller(int var1)
public int getFluidpublic int getFluid(int var1)
public byte getFluidLevelpublic byte getFluidLevel(int var1)
static int getNextPrefabIdint getNextPrefabId()
public int getRotationpublic int getRotation(int var1)
public PrefabUtil.PasteRegion.Section getSectionpublic PrefabUtil.PasteRegion.Section getSection(int var1, int var2, int var3)
public PrefabUtil.PasteRegion.Section getSectionAtBlockpublic PrefabUtil.PasteRegion.Section getSectionAtBlock(int var1, int var2, int var3)
private Ref<ChunkStore> getSectionRefprivate Ref<ChunkStore> getSectionRef(int var1, int var2, int var3)
public Holder<ChunkStore> getStatepublic Holder<ChunkStore> getState(int var1)
public byte getSupportpublic byte getSupport(int var1)
if if(var6 && var5x == 0 && var6x == 0 && var7x == 0)
if if(var1 != null)
if if(var9 != null)
if if(var18 == Integer.MIN_VALUE)
if if(var24 != null)
if if(var13x == 0 && var19x == 0)
if if(var17x != 0)
if if(var14x != null)
if if(var15x != 0)
if if(var14x != null)
if if(var8x != null && var8x.length != 0)
if if(var12 != null)
if if(var12 != null)
if if(var22 != null)
if if(var17 != 0)
if if(var11x != 0)
if if(var15x == 0)
if if(var4)
if if(var7)
if if(var8)
if if(!var9)
if if(var4x != null)
if if(var4x != null)
if if(this.blockComponents == null)
public boolean isFullyLoadedpublic boolean isFullyLoaded()
static void pastevoid paste(@Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3i var2, @Nonnull Rotation var3, @Nonnull Random var4, @Nonnull ComponentAccessor<EntityStore> var5)
static void pastevoid paste(@Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3i var2, @Nonnull Rotation var3, @Nonnull Random var4, int var5, int var6, @Nonnull ComponentAccessor<EntityStore> var7)
static void pastevoid paste(@Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3i var2, @Nonnull Rotation var3, @Nonnull Random var4, int var5, int var6, @Nonnull Consumer<Holder<ChunkStore>> var7, @Nonnull Consumer<Holder<EntityStore>> var8, @Nonnull ComponentAccessor<EntityStore> var9)
static void pastevoid paste(@Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3i var2, @Nonnull Rotation var3, @Nonnull Random var4, int var5, int var6, @Nullable PrefabUtil.PasteRegion var7, @Nonnull Consumer<Holder<ChunkStore>> var8, @Nonnull Consumer<Holder<EntityStore>> var9, @Nonnull ComponentAccessor<EntityStore> var10)
abstract paste paste(var0, var1, var2, var3, var4, 0, 0, NOOP_BLOCK_ENTITY_CONSUMER, NOOP_ENTITY_CONSUMER, var5)
abstract paste paste(var0, var1, var2, var3, var4, var5, var6, NOOP_BLOCK_ENTITY_CONSUMER, NOOP_ENTITY_CONSUMER, var7)
abstract paste paste(var0, var1, var2, var3, var4, var5, var6, null, var7, var8, var9)
abstract paste paste(var0, var1, var2, var3, var4, var5, 0, var6)
abstract paste paste(var0, var1, var2, var3, var4, var5, var6, false, false, false, var7)
abstract paste paste(var0, var1, var2, var3, var5, var11, var6, var10)
static boolean prefabMatchesAtPositionboolean prefabMatchesAtPosition(@Nonnull IPrefabBuffer var0, World var1, @Nonnull Vector3i var2, @Nonnull Rotation var3, Random var4)
static void preloadvoid preload(@Nonnull CachedAccessor var0, @Nullable PrefabUtil.PasteRegion var1)
abstract preload preload(var16, var7)
abstract preload preload(var15, var9)
static void removevoid remove(@Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3i var2, @Nonnull Rotation var3, @Nonnull Random var4, int var5, int var6, double var7)
static void removevoid remove(@Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3i var2, @Nonnull Rotation var3, @Nonnull Random var4, int var5, int var6, double var7, @Nullable PrefabUtil.PasteRegion var9)
abstract remove remove(var0, var1, var2, var3, var4, var5, var6, var7, null)
abstract remove remove(var0, var1, var2, var3, var4, var5, 1.0)
abstract remove remove(var0, var1, var2, Rotation.None, var3, var4, var5, var6)
abstract remove remove(var0, var1, var2, var3, var5, var9, var6, var7)
private int sectionIndexprivate int sectionIndex(int var1, int var2, int var3)
private void setprivate void set(int var1, int var2, @Nullable Ref<ChunkStore> var3)
private void setprivate void set(int var1, int var2, int var3, @Nullable Ref<ChunkStore> var4)
static void setBlockEntityvoid setBlockEntity(@Nonnull World var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, @Nonnull BlockType var5, int var6, @Nullable Holder<ChunkStore> var7)
abstract setBlockEntity setBlockEntity(var1, var24, var21, var22, var23, var26, var16x, var36)
abstract setBlockEntity setBlockEntity(var1, var24, var21, var22, var23, var26, var16x, var35)
static void setSupportValuevoid setSupportValue(@Nonnull World var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, int var5)
abstract setSupportValue setSupportValue(var1, var24, var21, var22, var23, var15x)
static boolean teststatic boolean test(int var0, int var1)

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.common.util.CompletableFutureUtil;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.Rotation;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
class="kw">import com.hypixel.hytale.server.core.blocktype.component.BlockPhysics;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockEntity;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.FromPrefab;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabCopyableComponent;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabRotation;
class="kw">import com.hypixel.hytale.server.core.prefab.event.PrefabPasteEvent;
class="kw">import com.hypixel.hytale.server.core.prefab.event.PrefabPlaceEntityEvent;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.PrefabBufferCall;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.impl.IPrefabBuffer;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.AbstractCachedAccessor;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockOperations;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.CachedAccessor;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockComponentSection;
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.EntitySection;
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.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.sneakythrow.SneakyThrow;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import java.util.Random;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.atomic.AtomicBoolean;
class="kw">import java.util.concurrent.atomic.AtomicInteger;
class="kw">import java.util.function.Consumer;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;
class="kw">import org.joml.Vector3ic;

class="kw">public class PrefabUtil {
   class="kw">public class="kw">static class="kw">final Consumer<Holder<ChunkStore>> NOOP_BLOCK_ENTITY_CONSUMER = var0 -> {};
   class="kw">public class="kw">static class="kw">final Consumer<Holder<EntityStore>> NOOP_ENTITY_CONSUMER = var0 -> {};
   class="kw">private class="kw">static class="kw">final AbstractCachedAccessor.Registry ACCESSOR_REGISTRY = new AbstractCachedAccessor.Registry();
   class="kw">private class="kw">static class="kw">final AbstractCachedAccessor.Key<BlockSection> BLOCK_SECTION = ACCESSOR_REGISTRY.forSection(BlockSection::getComponentType);
   class="kw">private class="kw">static class="kw">final AbstractCachedAccessor.Key<BlockComponentSection> BLOCK_COMPONENT_SECTION = ACCESSOR_REGISTRY.forSection(
      BlockComponentSection::getComponentType
   );
   class="kw">private class="kw">static class="kw">final AbstractCachedAccessor.InitFunction ACCESSOR = ACCESSOR_REGISTRY.oneShot();
   class="kw">protected class="kw">static class="kw">final String EDITOR_BLOCK = "Editor_Block";
   class="kw">protected class="kw">static class="kw">final String EDITOR_BLOCK_PREFAB_AIR = "Editor_Empty";
   class="kw">protected class="kw">static class="kw">final String EDITOR_BLOCK_PREFAB_ANCHOR = "Editor_Anchor";
   class="kw">private class="kw">static class="kw">final AtomicInteger PREFAB_ID_SOURCE = new AtomicInteger(0);

   class="kw">public PrefabUtil() {
   }

   class="kw">public class="kw">static boolean prefabMatchesAtPosition(@Nonnull IPrefabBuffer var0, World var1, @Nonnull Vector3i var2, @Nonnull Rotation var3, Random var4) {
      int var5 = var0.getMaxX() - var0.getMinX();
      int var6 = var0.getMaxY() - var0.getMinY();
      int var7 = var0.getMaxZ() - var0.getMinZ();
      CachedAccessor var8 = ACCESSOR.getAtBlock(var1.getChunkStore().getStore(), var2.x(), var2.y(), var2.z(), var5, var6, var7);
      class="kw">return var0.compare((var2x, var3x, var4x, var5x, var6x, var7x, var8x) -> {
         int var9 = var2.x + var2x;
         int var10 = var2.y + var3x;
         int var11 = var2.z + var4x;
         BlockSection var12 = var8.getComponentSectionAtBlock(var9, var10, var11, BLOCK_SECTION);
         class="kw">return var12 == null ? false : var12.get(var9, var10, var11) == var5x;
      }, new PrefabBufferCall(var4, PrefabRotation.fromRotation(var3)));
   }

   class="kw">public class="kw">static boolean canPlacePrefab(
      @Nonnull IPrefabBuffer var0, World var1, @Nonnull Vector3ic var2, @Nonnull Rotation var3, @Nullable IntSet var4, Random var5, boolean var6
   ) {
      int var7 = var0.getMaxX() - var0.getMinX();
      int var8 = var0.getMaxY() - var0.getMinY();
      int var9 = var0.getMaxZ() - var0.getMinZ();
      Store var10 = var1.getChunkStore().getStore();
      CachedAccessor var11 = ACCESSOR.getAtBlock(var10, var2.x(), var2.y(), var2.z(), var7, var8, var9);
      class="kw">return var0.compare(
         (var5x, var6x, var7x, var8x, var9x, var10x, var11x) -> {
            if (var6 && var5x == 0 && var6x == 0 && var7x == 0) {
               class="kw">return true;
            }

            int var12 = var2.x() + var5x;
            int var13 = var2.y() + var6x;
            int var14 = var2.z() + var7x;
            BlockSection var15 = var11.getComponentSectionAtBlock(var12, var13, var14, BLOCK_SECTION);
            class="kw">return var15 == null
               ? false
               : BlockOperations.testPlaceBlock(
                  var10,
                  var15,
                  var12,
                  var13,
                  var14,
                  BlockType.getAssetMap().getAsset(var8x),
                  var9x,
                  (var1x, var2x, var3x, var4x, var5xx, var6xx) -> var4 != null && var4.contains(BlockType.getAssetMap().getIndex(var4x.getId()))
               );
         },
         new PrefabBufferCall(var5, PrefabRotation.fromRotation(var3))
      );
   }

   class="kw">public class="kw">static int getNextPrefabId() {
      class="kw">return PREFAB_ID_SOURCE.getAndIncrement();
   }

   class="kw">private class="kw">static void preload(@Nonnull CachedAccessor var0, @Nullable PrefabUtil.PasteRegion var1) {
      if (var1 != null) {
         for (int var2 = var1.minZ; var2 <= var1.maxZ; var2++) {
            for (int var3 = var1.minX; var3 <= var1.maxX; var3++) {
               for (int var4 = var1.minY; var4 <= var1.maxY; var4++) {
                  Ref var5 = var1.getSectionRef(var3, var4, var2);
                  if (var5 != null && var5.isValid()) {
                     PrefabUtil.PasteRegion.Section var6 = var1.getSection(var3, var4, var2);
                     var0.insertSection(var5, var3, var4, var2);
                     if (var6.blocks() != null) {
                        var0.insertSectionComponent(BLOCK_SECTION, var6.blocks(), var3, var4, var2);
                     }

                     if (var6.blockComponents() != null) {
                        var0.insertSectionComponent(BLOCK_COMPONENT_SECTION, var6.blockComponents(), var3, var4, var2);
                     }
                  }
               }
            }
         }
      }
   }

   class="kw">private class="kw">static void setBlockEntity(
      @Nonnull World var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, @Nonnull BlockType var5, int var6, @Nullable Holder<ChunkStore> var7
   ) {
      if (!var0.isInThread()) {
         CompletableFutureUtil._catch(CompletableFuture.runAsync(() -> setBlockEntity(var0, var1, var2, var3, var4, var5, var6, var7), var0));
      } else if (var1.isValid()) {
         Store var8 = var0.getChunkStore().getStore();
         BlockComponentSection var9 = var8.getComponent(var1, BlockComponentSection.getComponentType());
         if (var9 != null) {
            BlockEntity.setBlockEntity(var8, var1, var9, var2, var3, var4, var5, var6, var7);
         }
      }
   }

   class="kw">private class="kw">static void setSupportValue(@Nonnull World var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, int var5) {
      if (!var0.isInThread()) {
         CompletableFutureUtil._catch(CompletableFuture.runAsync(() -> setSupportValue(var0, var1, var2, var3, var4, var5), var0));
      } else if (var1.isValid()) {
         BlockPhysics.setSupportValue(var0.getChunkStore().getStore(), var1, var2, var3, var4, var5);
      }
   }

   @Nonnull
   class="kw">public class="kw">static PrefabUtil.PasteRegion loadPasteRegionIfInMemory(
      @Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3ic var2, @Nonnull PrefabRotation var3
   ) {
      ChunkStore var4 = var1.getChunkStore();
      Store var5 = var4.getStore();
      int var6 = ChunkUtil.chunkCoordinate(var2.y() + var0.getMinY());
      int var7 = ChunkUtil.chunkCoordinate(var2.y() + var0.getMaxY());
      int var8 = ChunkUtil.chunkCoordinate(var2.x() + var0.getMinX(var3));
      int var9 = ChunkUtil.chunkCoordinate(var2.z() + var0.getMinZ(var3));
      int var10 = ChunkUtil.chunkCoordinate(var2.x() + var0.getMaxX(var3));
      int var11 = ChunkUtil.chunkCoordinate(var2.z() + var0.getMaxZ(var3));
      PrefabUtil.PasteRegion var12 = new PrefabUtil.PasteRegion(var8, var6, var9, var10, var7, var11, var5);

      for (int var13 = var9; var13 <= var11; var13++) {
         for (int var14 = var8; var14 <= var10; var14++) {
            var12.set(var14, var13, var4.getChunkReference(ChunkUtil.indexChunk(var14, var13)));

            for (int var15 = var6; var15 <= var7; var15++) {
               var12.set(var14, var15, var13, var4.getChunkSectionReference(var14, var15, var13));
            }
         }
      }

      class="kw">return var12.completeLoad();
   }

   @Nonnull
   class="kw">public class="kw">static CompletableFuture<PrefabUtil.PasteRegion> loadPasteRegionAsync(
      @Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3ic var2, @Nonnull PrefabRotation var3, int var4
   ) {
      ChunkStore var5 = var1.getChunkStore();
      Store var6 = var5.getStore();
      int var7 = ChunkUtil.chunkCoordinate(var2.y() + var0.getMinY());
      int var8 = ChunkUtil.chunkCoordinate(var2.y() + var0.getMaxY());
      int var9 = ChunkUtil.chunkCoordinate(var2.x() + var0.getMinX(var3));
      int var10 = ChunkUtil.chunkCoordinate(var2.z() + var0.getMinZ(var3));
      int var11 = ChunkUtil.chunkCoordinate(var2.x() + var0.getMaxX(var3));
      int var12 = ChunkUtil.chunkCoordinate(var2.z() + var0.getMaxZ(var3));
      CompletableFuture var13 = new CompletableFuture<>();
      PrefabUtil.PasteRegion var14 = new PrefabUtil.PasteRegion(var9, var7, var10, var11, var8, var12, var6);
      var1.execute(SneakyThrow.sneakyRunnable(() -> {
         for (int var10 = var10; var10 <= var12; var10++) {
            for (int var11 = var9; var11 <= var11; var11++) {
               var14.awaitLoad(var11, var10, var13, var5.getChunkReferenceAsync(ChunkUtil.indexChunk(var11, var10), var4));

               for (int var12 = var7; var12 <= var8; var12++) {
                  var14.awaitLoad(var11, var12, var10, var13, var5.getChunkSectionReferenceAsync(var11, var12, var10, var4));
               }
            }
         }
      }));
      class="kw">return var13.thenApplyAsync(PrefabUtil.PasteRegion::completeLoad, var1);
   }

   class="kw">public class="kw">static void paste(
      @Nonnull IPrefabBuffer var0,
      @Nonnull World var1,
      @Nonnull Vector3i var2,
      @Nonnull Rotation var3,
      @Nonnull Random var4,
      @Nonnull ComponentAccessor<EntityStore> var5
   ) {
      paste(var0, var1, var2, var3, var4, 0, 0, NOOP_BLOCK_ENTITY_CONSUMER, NOOP_ENTITY_CONSUMER, var5);
   }

   class="kw">public class="kw">static void paste(
      @Nonnull IPrefabBuffer var0,
      @Nonnull World var1,
      @Nonnull Vector3i var2,
      @Nonnull Rotation var3,
      @Nonnull Random var4,
      int var5,
      int var6,
      @Nonnull ComponentAccessor<EntityStore> var7
   ) {
      paste(var0, var1, var2, var3, var4, var5, var6, NOOP_BLOCK_ENTITY_CONSUMER, NOOP_ENTITY_CONSUMER, var7);
   }

   class="kw">public class="kw">static void paste(
      @Nonnull IPrefabBuffer var0,
      @Nonnull World var1,
      @Nonnull Vector3i var2,
      @Nonnull Rotation var3,
      @Nonnull Random var4,
      int var5,
      int var6,
      @Nonnull Consumer<Holder<ChunkStore>> var7,
      @Nonnull Consumer<Holder<EntityStore>> var8,
      @Nonnull ComponentAccessor<EntityStore> var9
   ) {
      paste(var0, var1, var2, var3, var4, var5, var6, null, var7, var8, var9);
   }

   class="kw">public class="kw">static void paste(
      @Nonnull IPrefabBuffer var0,
      @Nonnull World var1,
      @Nonnull Vector3i var2,
      @Nonnull Rotation var3,
      @Nonnull Random var4,
      int var5,
      int var6,
      @Nullable PrefabUtil.PasteRegion var7,
      @Nonnull Consumer<Holder<ChunkStore>> var8,
      @Nonnull Consumer<Holder<EntityStore>> var9,
      @Nonnull ComponentAccessor<EntityStore> var10
   ) {
      int var11 = var0.getMaxX() - var0.getMinX();
      int var12 = var0.getMaxY() - var0.getMinY();
      int var13 = var0.getMaxZ() - var0.getMinZ();
      ChunkStore var14 = var1.getChunkStore();
      Store var15 = var14.getStore();
      CachedAccessor var16 = ACCESSOR.getAtBlock(var15, var2.x(), var2.y(), var2.z(), var11, var12, var13);
      preload(var16, var7);
      BlockTypeAssetMap var17 = BlockType.getAssetMap();
      int var18 = var17.getIndex("Editor_Block");
      if (var18 == Integer.MIN_VALUE) {
         throw new IllegalArgumentException("Unknown key! Editor_Block");
      }

      PrefabRotation var19 = PrefabRotation.fromRotation(var3);
      int var20 = getNextPrefabId();
      PrefabPasteEvent var21 = new PrefabPasteEvent(var20, true);
      var10.invoke(var21);
      if (!var21.isCancelled()) {
         var0.forEach(IPrefabBuffer.iterateAllColumns(), (var10x, var11x, var12x, var13x, var14x, var15x, var16x, var17x, var18x, var19x, var20x) -> {
            int var21 = var2.x + var10x;
            int var22 = var2.y + var11x;
            int var23 = var2.z + var12x;
            Ref var24 = var16.getSectionAtBlock(var21, var22, var23);
            if (var24 != null) {
               FluidSection var25 = var15.ensureAndGetComponent(var24, FluidSection.getComponentType());
               var25.setFluid(var21, var22, var23, var19x, (byte)var20x);
               BlockType var26;
               if (PrefabUtil.Flags.test(var5, 2)) {
                  if (var13x == 0 && var19x == 0) {
                     var26 = var17.getAsset("Editor_Empty");
                  } else {
                     var26 = var17.getAsset(var13x);
                  }
               } else {
                  var26 = var17.getAsset(var13x);
               }

               String var27 = var26.getId();
               if (var17x != 0) {
                  if (var14x != null) {
                     Holder var36 = var14x.clone();
                     var8.accept(var36);
                     setBlockEntity(var1, var24, var21, var22, var23, var26, var16x, var36);
                  }
               } else {
                  if (PrefabUtil.Flags.test(var5, 6) && var10x == var0.getAnchorX() && var11x == var0.getAnchorY() && var12x == var0.getAnchorZ()) {
                     int var34 = var17.getIndex("Editor_Anchor");
                     BlockType var38 = var17.getAsset(var34);
                     BlockOperations.setBlock(var14, var24, var21, var22, var23, var34, var38, var16x, var17x, var6);
                  } else if (PrefabUtil.Flags.test(var5, 1)) {
                     int var28 = var17.getIndex(var27);
                     BlockType var29 = var17.getAsset(var28);
                     BlockOperations.setBlock(var14, var24, var21, var22, var23, var28, var29, var16x, var17x, var6);
                  } else {
                     RotationTuple var33 = RotationTuple.get(var16x);
                     int var37 = RotationTuple.of(var33.yaw(), var33.pitch(), var33.roll()).index();
                     int var30 = var17.getIndex(var27);
                     BlockType var31 = var17.getAsset(var30);
                     BlockSection var32 = var16.getComponentSectionAtBlock(var21, var22, var23, BLOCK_SECTION);
                     if (var32 != null && BlockOperations.testPlaceBlock(var15, var32, var21, var22, var23, var31, var37)) {
                        BlockOperations.setBlock(var14, var24, var21, var22, var23, var30, var31, var37, 0, 0);
                     }
                  }

                  if (var15x != 0) {
                     setSupportValue(var1, var24, var21, var22, var23, var15x);
                  }

                  if (var14x != null) {
                     Holder var35 = var14x.clone();
                     var8.accept(var35);
                     setBlockEntity(var1, var24, var21, var22, var23, var26, var16x, var35);
                  }
               }
            }
         }, (var6x, var7x, var8x, var9x) -> {
            if (!PrefabUtil.Flags.test(var5, 8)) {
               if (var8x != null && var8x.length != 0) {
                  for (int var10 = 0; var10 < var8x.length; var10++) {
                     Holder var11 = var8x[var10].clone();
                     TransformComponent var12 = var11.getComponent(TransformComponent.getComponentType());
                     if (var12 != null) {
                        Vector3d var13 = new Vector3d(var12.getPosition());
                        var19.rotate(var13);
                        Vector3d var14 = var13.add(var2.x, var2.y, var2.z);
                        var12 = var11.getComponent(TransformComponent.getComponentType());
                        if (var12 != null) {
                           var13 = var12.getPosition();
                           var13.x = var14.x;
                           var13.y = var14.y;
                           var13.z = var14.z;
                           PrefabPlaceEntityEvent var15 = new PrefabPlaceEntityEvent(var20, var11);
                           var10.invoke(var15);
                           if (!var15.isCancelled()) {
                              var11.ensureComponent(FromPrefab.getComponentType());
                              if (PrefabUtil.Flags.test(var5, 2)) {
                                 var11.ensureComponent(PrefabCopyableComponent.getComponentType());
                              }

                              var9.accept(var11);
                              var10.addEntity(var11, AddReason.LOAD);
                           }
                        }
                     }
                  }
               }
            }
         }, (var0x, var1x, var2x, var3x, var4x, var5x, var6x, var7x, var8x, var9x) -> {}, new PrefabBufferCall(var4, var19));
         PrefabPasteEvent var22 = new PrefabPasteEvent(var20, false);
         var10.invoke(var22);
      }
   }

   class="kw">public class="kw">static void remove(
      @Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3i var2, @Nonnull Rotation var3, @Nonnull Random var4, int var5, int var6, double var7
   ) {
      remove(var0, var1, var2, var3, var4, var5, var6, var7, null);
   }

   class="kw">public class="kw">static void remove(
      @Nonnull IPrefabBuffer var0,
      @Nonnull World var1,
      @Nonnull Vector3i var2,
      @Nonnull Rotation var3,
      @Nonnull Random var4,
      int var5,
      int var6,
      double var7,
      @Nullable PrefabUtil.PasteRegion var9
   ) {
      int var10 = var0.getMaxX() - var0.getMinX();
      int var11 = var0.getMaxY() - var0.getMinY();
      int var12 = var0.getMaxZ() - var0.getMinZ();
      ChunkStore var13 = var1.getChunkStore();
      Store var14 = var13.getStore();
      CachedAccessor var15 = ACCESSOR.getAtBlock(var14, var2.x(), var2.y(), var2.z(), var10, var11, var12);
      preload(var15, var9);
      var0.forEach(
         IPrefabBuffer.iterateAllColumns(),
         (var8, var9x, var10x, var11x, var12x, var13x, var14x, var15x, var16, var17, var18) -> {
            int var19 = var2.x + var8;
            int var20 = var2.y + var9x;
            int var21 = var2.z + var10x;
            Ref var22 = var15.getSectionAtBlock(var19, var20, var21);
            if (var22 != null) {
               if (var17 != 0) {
                  FluidSection var23 = var14.ensureAndGetComponent(var22, FluidSection.getComponentType());
                  var23.setFluid(var19, var20, var21, 0, (byte)0);
               }

               if (var11x != 0) {
                  if (var15x == 0) {
                     int var24 = var6;
                     if ((var6 & 4) != 4 && var4.nextDouble() > var7) {
                        var24 |= 4;
                     }

                     BlockOperations.setBlock(var13, var22, var19, var20, var21, 0, BlockType.EMPTY, 0, 0, var24);
                  }
               }
            }
         },
         (var0x, var1x, var2x, var3x) -> {},
         (var0x, var1x, var2x, var3x, var4x, var5x, var6x, var7x, var8, var9x) -> {},
         new PrefabBufferCall(var4, PrefabRotation.fromRotation(var3))
      );
   }

   @Deprecated(forRemoval = true, since = "2026-06-16")
   class="kw">public class="kw">static void paste(
      @Nonnull IPrefabBuffer var0,
      @Nonnull World var1,
      @Nonnull Vector3i var2,
      @Nonnull Rotation var3,
      boolean var4,
      Random var5,
      @Nonnull ComponentAccessor<EntityStore> var6
   ) {
      paste(var0, var1, var2, var3, var4, var5, 0, var6);
   }

   @Deprecated(forRemoval = true, since = "2026-06-16")
   class="kw">public class="kw">static void paste(
      @Nonnull IPrefabBuffer var0,
      @Nonnull World var1,
      @Nonnull Vector3i var2,
      @Nonnull Rotation var3,
      boolean var4,
      Random var5,
      int var6,
      @Nonnull ComponentAccessor<EntityStore> var7
   ) {
      paste(var0, var1, var2, var3, var4, var5, var6, false, false, false, var7);
   }

   @Deprecated(forRemoval = true, since = "2026-06-16")
   class="kw">public class="kw">static void paste(
      @Nonnull IPrefabBuffer var0,
      @Nonnull World var1,
      @Nonnull Vector3i var2,
      @Nonnull Rotation var3,
      boolean var4,
      Random var5,
      int var6,
      boolean var7,
      boolean var8,
      boolean var9,
      @Nonnull ComponentAccessor<EntityStore> var10
   ) {
      int var11 = 0;
      if (var4) {
         var11 |= 1;
      }

      if (var7) {
         var11 |= 2;
      }

      if (var8) {
         var11 |= 4;
      }

      if (!var9) {
         var11 |= 8;
      }

      paste(var0, var1, var2, var3, var5, var11, var6, var10);
   }

   @Deprecated(forRemoval = true, since = "2026-06-16")
   class="kw">public class="kw">static void remove(@Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3i var2, boolean var3, @Nonnull Random var4, int var5) {
      remove(var0, var1, var2, var3, var4, var5, 1.0);
   }

   @Deprecated(forRemoval = true, since = "2026-06-16")
   class="kw">public class="kw">static void remove(
      @Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3i var2, boolean var3, @Nonnull Random var4, int var5, double var6
   ) {
      remove(var0, var1, var2, Rotation.None, var3, var4, var5, var6);
   }

   @Deprecated(forRemoval = true, since = "2026-06-16")
   class="kw">public class="kw">static void remove(
      @Nonnull IPrefabBuffer var0, @Nonnull World var1, @Nonnull Vector3i var2, Rotation var3, boolean var4, @Nonnull Random var5, int var6, double var7
   ) {
      int var9 = var4 ? 1 : 0;
      remove(var0, var1, var2, var3, var5, var9, var6, var7);
   }

   class="kw">public class="kw">interface Flags {
      int NONE = 0;
      int FORCE = 1;
      int TECHNICAL = 2;
      int ANCHOR_BLOCK = 4;
      int NO_ENTITIES = 8;

      class="kw">static boolean test(int var0, int var1) {
         class="kw">return (var0 & var1) == var1;
      }
   }

   class="kw">public class="kw">static class="kw">final class PasteRegion {
      class="kw">private class="kw">final int minX;
      class="kw">private class="kw">final int minY;
      class="kw">private class="kw">final int minZ;
      class="kw">private class="kw">final int maxX;
      class="kw">private class="kw">final int maxY;
      class="kw">private class="kw">final int maxZ;
      class="kw">private class="kw">final int sizeX;
      class="kw">private class="kw">final int sizeY;
      class="kw">private class="kw">final int sizeZ;
      class="kw">private class="kw">final Ref<ChunkStore>[] columnRefs;
      class="kw">private class="kw">final Ref<ChunkStore>[] sectionRefs;
      @Nonnull
      class="kw">public class="kw">final PrefabUtil.PasteRegion.Column[] columns;
      @Nonnull
      class="kw">public class="kw">final PrefabUtil.PasteRegion.Section[] sections;
      @Nonnull
      class="kw">private class="kw">final Store<ChunkStore> store;
      class="kw">private class="kw">final AtomicInteger loadCount = new AtomicInteger();
      class="kw">private class="kw">final AtomicBoolean fullyLoaded = new AtomicBoolean(false);

      class="kw">public PasteRegion(int var1, int var2, int var3, int var4, int var5, int var6, @Nonnull Store<ChunkStore> var7) {
         this.minX = var1;
         this.minY = var2;
         this.minZ = var3;
         this.maxX = var4;
         this.maxY = var5;
         this.maxZ = var6;
         this.store = var7;
         this.sizeX = var4 - var1 + 1;
         this.sizeY = var5 - var2 + 1;
         this.sizeZ = var6 - var3 + 1;
         this.columnRefs = new Ref[this.sizeX * this.sizeZ];
         this.sectionRefs = new Ref[this.sizeX * this.sizeY * this.sizeZ];
         this.columns = new PrefabUtil.PasteRegion.Column[this.sizeX * this.sizeZ];
         this.sections = new PrefabUtil.PasteRegion.Section[this.sizeX * this.sizeY * this.sizeZ];
         this.loadCount.set(this.columnRefs.length + this.sectionRefs.length);
      }

      class="kw">public boolean containsColumn(int var1, int var2) {
         class="kw">return var1 >= this.minX && var1 <= this.maxX && var2 >= this.minZ && var2 <= this.maxZ;
      }

      class="kw">public boolean containsSection(int var1, int var2, int var3) {
         class="kw">return var2 >= this.minY && var2 <= this.maxY && this.containsColumn(var1, var3);
      }

      class="kw">public boolean containsBlock(int var1, int var2, int var3) {
         class="kw">return this.containsSection(ChunkUtil.chunkCoordinate(var1), ChunkUtil.chunkCoordinate(var2), ChunkUtil.chunkCoordinate(var3));
      }

      @Nonnull
      class="kw">public PrefabUtil.PasteRegion.Column getColumn(int var1, int var2) {
         assert this.containsColumn(var1, var2);
         class="kw">return this.columns[this.columnIndex(var1, var2)];
      }

      @Nonnull
      class="kw">public PrefabUtil.PasteRegion.Section getSection(int var1, int var2, int var3) {
         assert this.containsSection(var1, var2, var3);
         class="kw">return this.sections[this.sectionIndex(var1, var2, var3)];
      }

      @Nonnull
      class="kw">public PrefabUtil.PasteRegion.Column getColumnAtBlock(int var1, int var2) {
         class="kw">return this.getColumn(ChunkUtil.chunkCoordinate(var1), ChunkUtil.chunkCoordinate(var2));
      }

      @Nonnull
      class="kw">public PrefabUtil.PasteRegion.Section getSectionAtBlock(int var1, int var2, int var3) {
         class="kw">return this.getSection(ChunkUtil.chunkCoordinate(var1), ChunkUtil.chunkCoordinate(var2), ChunkUtil.chunkCoordinate(var3));
      }

      @Nullable
      class="kw">private Ref<ChunkStore> getSectionRef(int var1, int var2, int var3) {
         assert this.containsSection(var1, var2, var3);
         class="kw">return this.sectionRefs[this.sectionIndex(var1, var2, var3)];
      }

      class="kw">public boolean isFullyLoaded() {
         class="kw">return this.fullyLoaded.get();
      }

      class="kw">private PrefabUtil.PasteRegion completeLoad() {
         this.store.assertThread();
         boolean var1 = true;
         ComponentType var2 = WorldChunk.getComponentType();

         for (int var3 = 0; var3 < this.columnRefs.length; var3++) {
            if (this.columnRefs[var3] != null && this.columnRefs[var3].isValid()) {
               this.columns[var3] = new PrefabUtil.PasteRegion.Column(this.store.getComponent(this.columnRefs[var3], var2));
            } else {
               this.columns[var3] = PrefabUtil.PasteRegion.Column.EMPTY;
               var1 = false;
            }
         }

         ComponentType var9 = BlockSection.getComponentType();
         ComponentType var4 = FluidSection.getComponentType();
         ComponentType var5 = BlockPhysics.getComponentType();
         ComponentType var6 = EntitySection.getComponentType();
         ComponentType var7 = BlockComponentSection.getComponentType();

         for (int var8 = 0; var8 < this.sectionRefs.length; var8++) {
            if (this.sectionRefs[var8] != null && this.sectionRefs[var8].isValid()) {
               this.sections[var8] = new PrefabUtil.PasteRegion.Section(
                  this.store.getComponent(this.sectionRefs[var8], var9),
                  this.store.getComponent(this.sectionRefs[var8], var4),
                  this.store.getComponent(this.sectionRefs[var8], var5),
                  this.store.getComponent(this.sectionRefs[var8], var6),
                  this.store.getComponent(this.sectionRefs[var8], var7)
               );
            } else {
               this.sections[var8] = PrefabUtil.PasteRegion.Section.EMPTY;
               var1 = false;
            }
         }

         this.fullyLoaded.set(var1);
         class="kw">return this;
      }

      class="kw">private void set(int var1, int var2, @Nullable Ref<ChunkStore> var3) {
         int var4 = this.columnIndex(var1, var2);
         this.columnRefs[var4] = var3;
      }

      class="kw">private void set(int var1, int var2, int var3, @Nullable Ref<ChunkStore> var4) {
         int var5 = this.sectionIndex(var1, var2, var3);
         this.sectionRefs[var5] = var4;
      }

      class="kw">private void awaitLoad(int var1, int var2, @Nonnull CompletableFuture<PrefabUtil.PasteRegion> var3, @Nonnull CompletableFuture<Ref<ChunkStore>> var4) {
         int var5 = this.columnIndex(var1, var2);
         var4.whenComplete((var3x, var4x) -> {
            if (!var3.isDone()) {
               if (var4x != null) {
                  var3.completeExceptionally(var4x);
               } else {
                  this.columnRefs[var5] = (Ref<ChunkStore>)var3x;
                  if (this.loadCount.decrementAndGet() == 0) {
                     var3.complete(this);
                  }
               }
            }
         });
      }

      class="kw">private void awaitLoad(
         int var1, int var2, int var3, @Nonnull CompletableFuture<PrefabUtil.PasteRegion> var4, @Nonnull CompletableFuture<Ref<ChunkStore>> var5
      ) {
         int var6 = this.sectionIndex(var1, var2, var3);
         var5.whenComplete((var3x, var4x) -> {
            if (!var4.isDone()) {
               if (var4x != null) {
                  var4.completeExceptionally(var4x);
               } else {
                  this.sectionRefs[var6] = (Ref<ChunkStore>)var3x;
                  if (this.loadCount.decrementAndGet() == 0) {
                     var4.complete(this);
                  }
               }
            }
         });
      }

      class="kw">private int columnIndex(int var1, int var2) {
         class="kw">return var1 - this.minX + (var2 - this.minZ) * this.sizeX;
      }

      class="kw">private int sectionIndex(int var1, int var2, int var3) {
         class="kw">return var2 - this.minY + (var1 - this.minX) * this.sizeY + (var3 - this.minZ) * this.sizeY * this.sizeX;
      }

      class="kw">public record Column(@Nullable WorldChunk worldChunk) {
         class="kw">private class="kw">static class="kw">final PrefabUtil.PasteRegion.Column EMPTY = new PrefabUtil.PasteRegion.Column(null);

         class="kw">public Column {
         }
      }

      class="kw">public record Section(
         @Nullable BlockSection blocks,
         @Nullable FluidSection fluids,
         @Nullable BlockPhysics physics,
         @Nullable EntitySection entities,
         @Nullable BlockComponentSection blockComponents
      ) {
         class="kw">private class="kw">static class="kw">final PrefabUtil.PasteRegion.Section EMPTY = new PrefabUtil.PasteRegion.Section(null, null, null, null, null);

         class="kw">public Section {
         }

         class="kw">public int getBlock(int var1) {
            class="kw">return this.blocks == null ? 0 : this.blocks.get(var1);
         }

         class="kw">public int getFiller(int var1) {
            class="kw">return this.blocks == null ? 0 : this.blocks.getFiller(var1);
         }

         class="kw">public int getRotation(int var1) {
            class="kw">return this.blocks == null ? 0 : this.blocks.getRotationIndex(var1);
         }

         class="kw">public byte getSupport(int var1) {
            class="kw">return this.physics == null ? 0 : (byte)this.physics.get(var1);
         }

         class="kw">public int getFluid(int var1) {
            class="kw">return this.fluids == null ? 0 : this.fluids.getFluidId(var1);
         }

         class="kw">public byte getFluidLevel(int var1) {
            class="kw">return this.fluids == null ? 0 : this.fluids.getFluidLevel(var1);
         }

         @Nullable
         class="kw">public Holder<ChunkStore> getState(int var1) {
            if (this.blockComponents == null) {
               class="kw">return null;
            }

            Holder var2 = this.blockComponents.getBlockHolder(var1);
            class="kw">return var2 == null ? null : var2.clone();
         }
      }
   }
}