--- a/net/minecraft/world/level/levelgen/structure/StructureStart.java +++ b/net/minecraft/world/level/levelgen/structure/StructureStart.java @@ -31,6 +31,7 @@ private int references; @Nullable private volatile StructureBoundingBox cachedBoundingBox; + public org.bukkit.event.world.AsyncStructureGenerateEvent.Cause generationEventCause = org.bukkit.event.world.AsyncStructureGenerateEvent.Cause.WORLD_GENERATION; // CraftBukkit public StructureStart(Structure structure, ChunkCoordIntPair chunkcoordintpair, int i, PiecesContainer piecescontainer) { this.structure = structure; @@ -91,6 +92,8 @@ StructureBoundingBox structureboundingbox1 = ((StructurePiece) list.get(0)).boundingBox; BlockPosition blockposition = structureboundingbox1.getCenter(); BlockPosition blockposition1 = new BlockPosition(blockposition.getX(), structureboundingbox1.minY(), blockposition.getZ()); + // CraftBukkit start + /* Iterator iterator = list.iterator(); while (iterator.hasNext()) { @@ -100,6 +103,18 @@ structurepiece.postProcess(generatoraccessseed, structuremanager, chunkgenerator, randomsource, structureboundingbox, chunkcoordintpair, blockposition1); } } + */ + List pieces = list.stream().filter(piece -> piece.getBoundingBox().intersects(structureboundingbox)).toList(); + if (!pieces.isEmpty()) { + org.bukkit.craftbukkit.util.TransformerGeneratorAccess transformerAccess = new org.bukkit.craftbukkit.util.TransformerGeneratorAccess(); + transformerAccess.setHandle(generatoraccessseed); + transformerAccess.setStructureTransformer(new org.bukkit.craftbukkit.util.CraftStructureTransformer(generationEventCause, generatoraccessseed, structuremanager, structure, structureboundingbox, chunkcoordintpair)); + for (StructurePiece piece : pieces) { + piece.postProcess(transformerAccess, structuremanager, chunkgenerator, randomsource, structureboundingbox, chunkcoordintpair, blockposition1); + } + transformerAccess.getStructureTransformer().discard(); + } + // CraftBukkit end this.structure.afterPlace(generatoraccessseed, structuremanager, chunkgenerator, randomsource, structureboundingbox, chunkcoordintpair, this.pieceContainer); }