aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2024-12-14 10:35:04 -0800
committerJake Potrebic <[email protected]>2024-12-14 12:50:23 -0800
commitca35cc216efcfaf3421f061fd06f0b7b4e55e8ec (patch)
treeb9495152c29a440393405e2c4d4d9bb00e93ea90
parentce87e69d531c633eaafb12e9195a08514545a4ee (diff)
downloadPaper-ca35cc216efcfaf3421f061fd06f0b7b4e55e8ec.tar.gz
Paper-ca35cc216efcfaf3421f061fd06f0b7b4e55e8ec.zip
net.minecraft.world.level.levelgen.structure.structures
-rw-r--r--build.gradle.kts2
-rw-r--r--paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/DesertPyramidStructure.java.patch (renamed from paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/DesertPyramidStructure.java.patch)16
-rw-r--r--paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java.patch14
-rw-r--r--paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java.patch29
-rw-r--r--paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java.patch28
-rw-r--r--paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java.patch20
-rw-r--r--paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java.patch40
-rw-r--r--paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java.patch14
-rw-r--r--paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java.patch28
-rw-r--r--paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java.patch20
-rw-r--r--paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java.patch16
-rw-r--r--paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java.patch31
-rw-r--r--paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java.patch68
-rw-r--r--paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java.patch45
-rw-r--r--paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java.patch37
-rw-r--r--paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java.patch16
-rw-r--r--paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java.patch55
-rw-r--r--paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java.patch20
18 files changed, 202 insertions, 297 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index dd83603682..2360d32e7a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -146,7 +146,7 @@ tasks.register("checkWork") {
return Path.of(path.replaceFirst("^~".toRegex(), System.getProperty("user.home")))
}
- val input = layout.cache.resolve("last-updating-folder").readText()
+ val input = layout.cache.resolve("last-updating-folder").readText().trim()
val patchFolder = layout.projectDirectory.file("paper-server/patches/sources").convertToPath().resolve(input)
val sourceFolder = layout.projectDirectory.file("paper-server/src/vanilla/java/").convertToPath().resolve(input)
val targetFolder = expandUserHome(
diff --git a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/DesertPyramidStructure.java.patch b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/DesertPyramidStructure.java.patch
index 84696b809f..73853cb81e 100644
--- a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/DesertPyramidStructure.java.patch
+++ b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/DesertPyramidStructure.java.patch
@@ -1,18 +1,18 @@
--- a/net/minecraft/world/level/levelgen/structure/structures/DesertPyramidStructure.java
+++ b/net/minecraft/world/level/levelgen/structure/structures/DesertPyramidStructure.java
-@@ -68,6 +68,15 @@
+@@ -65,6 +_,15 @@
- private static void placeSuspiciousSand(BoundingBox box, WorldGenLevel world, BlockPos pos) {
- if (box.isInside(pos)) {
+ private static void placeSuspiciousSand(BoundingBox boundingBox, WorldGenLevel worldGenLevel, BlockPos pos) {
+ if (boundingBox.isInside(pos)) {
+ // CraftBukkit start
-+ if (world instanceof org.bukkit.craftbukkit.util.TransformerGeneratorAccess transformerAccess) {
-+ org.bukkit.craftbukkit.block.CraftBrushableBlock brushableState = (org.bukkit.craftbukkit.block.CraftBrushableBlock) org.bukkit.craftbukkit.block.CraftBlockStates.getBlockState(world, pos, Blocks.SUSPICIOUS_SAND.defaultBlockState(), null);
++ if (worldGenLevel instanceof org.bukkit.craftbukkit.util.TransformerGeneratorAccess transformerAccess) {
++ org.bukkit.craftbukkit.block.CraftBrushableBlock brushableState = (org.bukkit.craftbukkit.block.CraftBrushableBlock) org.bukkit.craftbukkit.block.CraftBlockStates.getBlockState(worldGenLevel, pos, Blocks.SUSPICIOUS_SAND.defaultBlockState(), null);
+ brushableState.setLootTable(org.bukkit.craftbukkit.CraftLootTable.minecraftToBukkit(BuiltInLootTables.DESERT_PYRAMID_ARCHAEOLOGY));
+ brushableState.setSeed(pos.asLong());
+ transformerAccess.setCraftBlock(pos, brushableState, 2);
+ return;
+ }
+ // CraftBukkit end
- world.setBlock(pos, Blocks.SUSPICIOUS_SAND.defaultBlockState(), 2);
- world.getBlockEntity(pos, BlockEntityType.BRUSHABLE_BLOCK).ifPresent((brushableblockentity) -> {
- brushableblockentity.setLootTable(BuiltInLootTables.DESERT_PYRAMID_ARCHAEOLOGY, pos.asLong());
+ worldGenLevel.setBlock(pos, Blocks.SUSPICIOUS_SAND.defaultBlockState(), 2);
+ worldGenLevel.getBlockEntity(pos, BlockEntityType.BRUSHABLE_BLOCK)
+ .ifPresent(brushableBlockEntity -> brushableBlockEntity.setLootTable(BuiltInLootTables.DESERT_PYRAMID_ARCHAEOLOGY, pos.asLong()));
diff --git a/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java.patch b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java.patch
new file mode 100644
index 0000000000..a024b0bfeb
--- /dev/null
+++ b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java.patch
@@ -0,0 +1,14 @@
+--- a/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java
++++ b/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java
+@@ -390,7 +_,10 @@
+ if (name.startsWith("Chest")) {
+ BlockPos blockPos = pos.below();
+ if (box.isInside(blockPos)) {
+- RandomizableContainer.setBlockEntityLootTable(level, random, blockPos, BuiltInLootTables.END_CITY_TREASURE);
++ // CraftBukkit start - ensure block transformation
++ // RandomizableContainer.setBlockEntityLootTable(level, random, blockPos, BuiltInLootTables.END_CITY_TREASURE);
++ this.setCraftLootTable(level, blockPos, random, BuiltInLootTables.END_CITY_TREASURE);
++ // CraftBukkit end
+ }
+ } else if (box.isInside(pos) && Level.isInSpawnableBounds(pos)) {
+ if (name.startsWith("Sentry")) {
diff --git a/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java.patch b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java.patch
new file mode 100644
index 0000000000..b94822ff02
--- /dev/null
+++ b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java.patch
@@ -0,0 +1,29 @@
+--- a/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java
++++ b/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java
+@@ -13,8 +_,6 @@
+ import net.minecraft.world.level.block.Blocks;
+ import net.minecraft.world.level.block.Mirror;
+ import net.minecraft.world.level.block.Rotation;
+-import net.minecraft.world.level.block.entity.BlockEntity;
+-import net.minecraft.world.level.block.entity.ChestBlockEntity;
+ import net.minecraft.world.level.block.state.BlockState;
+ import net.minecraft.world.level.chunk.ChunkGenerator;
+ import net.minecraft.world.level.levelgen.Heightmap;
+@@ -102,10 +_,13 @@
+ protected void handleDataMarker(String name, BlockPos pos, ServerLevelAccessor level, RandomSource random, BoundingBox box) {
+ if ("chest".equals(name)) {
+ level.setBlock(pos, Blocks.AIR.defaultBlockState(), 3);
+- BlockEntity blockEntity = level.getBlockEntity(pos.below());
+- if (blockEntity instanceof ChestBlockEntity) {
+- ((ChestBlockEntity)blockEntity).setLootTable(BuiltInLootTables.IGLOO_CHEST, random.nextLong());
+- }
++ // CraftBukkit start - ensure block transformation
++ // BlockEntity blockEntity = level.getBlockEntity(pos.below());
++ // if (blockEntity instanceof ChestBlockEntity) {
++ // ((ChestBlockEntity)blockEntity).setLootTable(BuiltInLootTables.IGLOO_CHEST, random.nextLong());
++ // }
++ this.setCraftLootTable(level, pos.below(), random, BuiltInLootTables.IGLOO_CHEST);
++ // CraftBukkit end
+ }
+ }
+
diff --git a/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java.patch b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java.patch
new file mode 100644
index 0000000000..50b84588ce
--- /dev/null
+++ b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java.patch
@@ -0,0 +1,28 @@
+--- a/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java
++++ b/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java
+@@ -8,6 +_,7 @@
+ import net.minecraft.core.Direction;
+ import net.minecraft.nbt.CompoundTag;
+ import net.minecraft.nbt.NbtOps;
++import net.minecraft.nbt.Tag;
+ import net.minecraft.resources.ResourceKey;
+ import net.minecraft.tags.BiomeTags;
+ import net.minecraft.util.RandomSource;
+@@ -401,10 +_,13 @@
+ BlockPos worldPos = this.getWorldPos(1, 0, i8);
+ if (box.isInside(worldPos) && this.isInterior(level, 1, 0, i8, box)) {
+ this.hasPlacedSpider = true;
+- level.setBlock(worldPos, Blocks.SPAWNER.defaultBlockState(), 2);
+- if (level.getBlockEntity(worldPos) instanceof SpawnerBlockEntity spawnerBlockEntity) {
+- spawnerBlockEntity.setEntityId(EntityType.CAVE_SPIDER, random);
+- }
++ // CraftBukkit start
++ // level.setBlock(worldPos, Blocks.SPAWNER.defaultBlockState(), 2);
++ // if (level.getBlockEntity(worldPos) instanceof SpawnerBlockEntity spawnerBlockEntity) {
++ // spawnerBlockEntity.setEntityId(EntityType.CAVE_SPIDER, random);
++ // }
++ this.placeCraftSpawner(level, worldPos, org.bukkit.entity.EntityType.CAVE_SPIDER, 2);
++ // CraftBukkit end
+ }
+ }
+ }
diff --git a/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java.patch b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java.patch
new file mode 100644
index 0000000000..bfd5ae0532
--- /dev/null
+++ b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java.patch
@@ -0,0 +1,20 @@
+--- a/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java
++++ b/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java
+@@ -1265,10 +_,13 @@
+ BlockPos worldPos = this.getWorldPos(3, 5, 5);
+ if (box.isInside(worldPos)) {
+ this.hasPlacedSpawner = true;
+- level.setBlock(worldPos, Blocks.SPAWNER.defaultBlockState(), 2);
+- if (level.getBlockEntity(worldPos) instanceof SpawnerBlockEntity spawnerBlockEntity) {
+- spawnerBlockEntity.setEntityId(EntityType.BLAZE, random);
+- }
++ // CraftBukkit start
++ // level.setBlock(worldPos, Blocks.SPAWNER.defaultBlockState(), 2);
++ // if (level.getBlockEntity(worldPos) instanceof SpawnerBlockEntity spawnerBlockEntity) {
++ // spawnerBlockEntity.setEntityId(EntityType.BLAZE, random);
++ // }
++ this.placeCraftSpawner(level, worldPos, org.bukkit.entity.EntityType.BLAZE, 2);
++ // CraftBukkit end
+ }
+ }
+
diff --git a/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java.patch b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java.patch
new file mode 100644
index 0000000000..7153875623
--- /dev/null
+++ b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java.patch
@@ -0,0 +1,40 @@
+--- a/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java
++++ b/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java
+@@ -25,8 +_,6 @@
+ import net.minecraft.world.level.block.ChestBlock;
+ import net.minecraft.world.level.block.Mirror;
+ import net.minecraft.world.level.block.Rotation;
+-import net.minecraft.world.level.block.entity.BlockEntity;
+-import net.minecraft.world.level.block.entity.ChestBlockEntity;
+ import net.minecraft.world.level.block.state.BlockState;
+ import net.minecraft.world.level.chunk.ChunkGenerator;
+ import net.minecraft.world.level.levelgen.Heightmap;
+@@ -314,14 +_,20 @@
+ @Override
+ protected void handleDataMarker(String name, BlockPos pos, ServerLevelAccessor level, RandomSource random, BoundingBox box) {
+ if ("chest".equals(name)) {
+- level.setBlock(
+- pos, Blocks.CHEST.defaultBlockState().setValue(ChestBlock.WATERLOGGED, Boolean.valueOf(level.getFluidState(pos).is(FluidTags.WATER))), 2
+- );
+- BlockEntity blockEntity = level.getBlockEntity(pos);
+- if (blockEntity instanceof ChestBlockEntity) {
+- ((ChestBlockEntity)blockEntity)
+- .setLootTable(this.isLarge ? BuiltInLootTables.UNDERWATER_RUIN_BIG : BuiltInLootTables.UNDERWATER_RUIN_SMALL, random.nextLong());
+- }
++ // CraftBukkit start - transform block to ensure loot table is accessible
++ // level.setBlock(
++ // pos, Blocks.CHEST.defaultBlockState().setValue(ChestBlock.WATERLOGGED, Boolean.valueOf(level.getFluidState(pos).is(FluidTags.WATER))), 2
++ // );
++ // BlockEntity blockEntity = level.getBlockEntity(pos);
++ // if (blockEntity instanceof ChestBlockEntity) {
++ // ((ChestBlockEntity)blockEntity)
++ // .setLootTable(this.isLarge ? BuiltInLootTables.UNDERWATER_RUIN_BIG : BuiltInLootTables.UNDERWATER_RUIN_SMALL, random.nextLong());
++ // }
++ org.bukkit.craftbukkit.block.CraftChest craftChest = (org.bukkit.craftbukkit.block.CraftChest) org.bukkit.craftbukkit.block.CraftBlockStates.getBlockState(level, pos, Blocks.CHEST.defaultBlockState().setValue(ChestBlock.WATERLOGGED, level.getFluidState(pos).is(FluidTags.WATER)), null);
++ craftChest.setSeed(random.nextLong());
++ craftChest.setLootTable(org.bukkit.craftbukkit.CraftLootTable.minecraftToBukkit(this.isLarge ? BuiltInLootTables.UNDERWATER_RUIN_BIG : BuiltInLootTables.UNDERWATER_RUIN_SMALL));
++ this.placeCraftBlockEntity(level, pos, craftChest, 2);
++ // CraftBukkit end
+ } else if ("drowned".equals(name)) {
+ Drowned drowned = EntityType.DROWNED.create(level.getLevel(), EntitySpawnReason.STRUCTURE);
+ if (drowned != null) {
diff --git a/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java.patch b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java.patch
new file mode 100644
index 0000000000..08c3ca9aad
--- /dev/null
+++ b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java.patch
@@ -0,0 +1,14 @@
+--- a/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java
++++ b/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java
+@@ -121,7 +_,10 @@
+ protected void handleDataMarker(String name, BlockPos pos, ServerLevelAccessor level, RandomSource random, BoundingBox box) {
+ ResourceKey<LootTable> resourceKey = ShipwreckPieces.MARKERS_TO_LOOT.get(name);
+ if (resourceKey != null) {
+- RandomizableContainer.setBlockEntityLootTable(level, random, pos.below(), resourceKey);
++ // CraftBukkit start
++ // RandomizableContainer.setBlockEntityLootTable(level, random, pos.below(), resourceKey);
++ this.setCraftLootTable(level, pos.below(), random, resourceKey);
++ // CraftBukkit end
+ }
+ }
+
diff --git a/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java.patch b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java.patch
new file mode 100644
index 0000000000..1821e06e5d
--- /dev/null
+++ b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java.patch
@@ -0,0 +1,28 @@
+--- a/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java
++++ b/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java
+@@ -7,7 +_,6 @@
+ import net.minecraft.core.Direction;
+ import net.minecraft.nbt.CompoundTag;
+ import net.minecraft.util.RandomSource;
+-import net.minecraft.world.entity.EntityType;
+ import net.minecraft.world.level.ChunkPos;
+ import net.minecraft.world.level.StructureManager;
+ import net.minecraft.world.level.WorldGenLevel;
+@@ -870,10 +_,13 @@
+ BlockPos worldPos = this.getWorldPos(5, 3, 6);
+ if (box.isInside(worldPos)) {
+ this.hasPlacedSpawner = true;
+- level.setBlock(worldPos, Blocks.SPAWNER.defaultBlockState(), 2);
+- if (level.getBlockEntity(worldPos) instanceof SpawnerBlockEntity spawnerBlockEntity) {
+- spawnerBlockEntity.setEntityId(EntityType.SILVERFISH, random);
+- }
++ // CraftBukkit start
++ // level.setBlock(worldPos, Blocks.SPAWNER.defaultBlockState(), 2);
++ // if (level.getBlockEntity(worldPos) instanceof SpawnerBlockEntity spawnerBlockEntity) {
++ // spawnerBlockEntity.setEntityId(EntityType.SILVERFISH, random);
++ // }
++ this.placeCraftSpawner(level, worldPos, org.bukkit.entity.EntityType.SILVERFISH, 2);
++ // CraftBukkit end
+ }
+ }
+ }
diff --git a/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java.patch b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java.patch
new file mode 100644
index 0000000000..fe1c847fa4
--- /dev/null
+++ b/paper-server/patches/sources/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java.patch
@@ -0,0 +1,20 @@
+--- a/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java
++++ b/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java
+@@ -97,7 +_,7 @@
+ witch.setPersistenceRequired();
+ witch.moveTo(worldPos.getX() + 0.5, worldPos.getY(), worldPos.getZ() + 0.5, 0.0F, 0.0F);
+ witch.finalizeSpawn(level, level.getCurrentDifficultyAt(worldPos), EntitySpawnReason.STRUCTURE, null);
+- level.addFreshEntityWithPassengers(witch);
++ level.addFreshEntityWithPassengers(witch, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CHUNK_GEN); // CraftBukkit - add SpawnReason
+ }
+ }
+ }
+@@ -116,7 +_,7 @@
+ cat.setPersistenceRequired();
+ cat.moveTo(worldPos.getX() + 0.5, worldPos.getY(), worldPos.getZ() + 0.5, 0.0F, 0.0F);
+ cat.finalizeSpawn(level, level.getCurrentDifficultyAt(worldPos), EntitySpawnReason.STRUCTURE, null);
+- level.addFreshEntityWithPassengers(cat);
++ level.addFreshEntityWithPassengers(cat, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CHUNK_GEN); // CraftBukkit - add SpawnReason
+ }
+ }
+ }
diff --git a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java.patch b/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java.patch
deleted file mode 100644
index 0ec21beb4f..0000000000
--- a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- a/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java
-+++ b/net/minecraft/world/level/levelgen/structure/structures/EndCityPieces.java
-@@ -285,7 +285,12 @@
- BlockPos blockposition1 = pos.below();
-
- if (boundingBox.isInside(blockposition1)) {
-- RandomizableContainer.setBlockEntityLootTable(world, random, blockposition1, BuiltInLootTables.END_CITY_TREASURE);
-+ // CraftBukkit start - ensure block transformation
-+ /*
-+ RandomizableContainer.setBlockEntityLootTable(worldaccess, randomsource, blockposition1, LootTables.END_CITY_TREASURE);
-+ */
-+ this.setCraftLootTable(world, blockposition1, random, BuiltInLootTables.END_CITY_TREASURE);
-+ // CraftBukkit end
- }
- } else if (boundingBox.isInside(pos) && Level.isInSpawnableBounds(pos)) {
- if (metadata.startsWith("Sentry")) {
diff --git a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java.patch b/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java.patch
deleted file mode 100644
index 5dc0652fc4..0000000000
--- a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java
-+++ b/net/minecraft/world/level/levelgen/structure/structures/IglooPieces.java
-@@ -14,8 +14,6 @@
- import net.minecraft.world.level.block.Blocks;
- import net.minecraft.world.level.block.Mirror;
- import net.minecraft.world.level.block.Rotation;
--import net.minecraft.world.level.block.entity.BlockEntity;
--import net.minecraft.world.level.block.entity.ChestBlockEntity;
- import net.minecraft.world.level.block.state.BlockState;
- import net.minecraft.world.level.chunk.ChunkGenerator;
- import net.minecraft.world.level.levelgen.Heightmap;
-@@ -86,11 +84,16 @@
- protected void handleDataMarker(String metadata, BlockPos pos, ServerLevelAccessor world, RandomSource random, BoundingBox boundingBox) {
- if ("chest".equals(metadata)) {
- world.setBlock(pos, Blocks.AIR.defaultBlockState(), 3);
-- BlockEntity tileentity = world.getBlockEntity(pos.below());
-+ // CraftBukkit start - ensure block transformation
-+ /*
-+ TileEntity tileentity = worldaccess.getBlockEntity(blockposition.below());
-
-- if (tileentity instanceof ChestBlockEntity) {
-- ((ChestBlockEntity) tileentity).setLootTable(BuiltInLootTables.IGLOO_CHEST, random.nextLong());
-+ if (tileentity instanceof TileEntityChest) {
-+ ((TileEntityChest) tileentity).setLootTable(LootTables.IGLOO_CHEST, randomsource.nextLong());
- }
-+ */
-+ this.setCraftLootTable(world, pos.below(), random, BuiltInLootTables.IGLOO_CHEST);
-+ // CraftBukkit end
-
- }
- }
diff --git a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java.patch b/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java.patch
deleted file mode 100644
index 32925fee48..0000000000
--- a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java.patch
+++ /dev/null
@@ -1,68 +0,0 @@
---- a/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java
-+++ b/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java
-@@ -12,6 +12,7 @@
- import net.minecraft.core.Direction;
- import net.minecraft.nbt.CompoundTag;
- import net.minecraft.nbt.NbtOps;
-+import net.minecraft.nbt.Tag;
- import net.minecraft.resources.ResourceKey;
- import net.minecraft.tags.BiomeTags;
- import net.minecraft.util.RandomSource;
-@@ -30,8 +31,6 @@
- import net.minecraft.world.level.block.FenceBlock;
- import net.minecraft.world.level.block.RailBlock;
- import net.minecraft.world.level.block.WallTorchBlock;
--import net.minecraft.world.level.block.entity.BlockEntity;
--import net.minecraft.world.level.block.entity.SpawnerBlockEntity;
- import net.minecraft.world.level.block.state.BlockState;
- import net.minecraft.world.level.block.state.properties.RailShape;
- import net.minecraft.world.level.chunk.ChunkGenerator;
-@@ -520,14 +519,19 @@
-
- if (chunkBox.isInside(blockposition_mutableblockposition) && this.isInterior(world, 1, 0, l, chunkBox)) {
- this.hasPlacedSpider = true;
-- world.setBlock(blockposition_mutableblockposition, Blocks.SPAWNER.defaultBlockState(), 2);
-- BlockEntity tileentity = world.getBlockEntity(blockposition_mutableblockposition);
--
-- if (tileentity instanceof SpawnerBlockEntity) {
-- SpawnerBlockEntity tileentitymobspawner = (SpawnerBlockEntity) tileentity;
-+ // CraftBukkit start
-+ /*
-+ generatoraccessseed.setBlock(blockposition_mutableblockposition, Blocks.SPAWNER.defaultBlockState(), 2);
-+ TileEntity tileentity = generatoraccessseed.getBlockEntity(blockposition_mutableblockposition);
-
-- tileentitymobspawner.setEntityId(EntityType.CAVE_SPIDER, random);
-+ if (tileentity instanceof TileEntityMobSpawner) {
-+ TileEntityMobSpawner tileentitymobspawner = (TileEntityMobSpawner) tileentity;
-+
-+ tileentitymobspawner.setEntityId(EntityTypes.CAVE_SPIDER, randomsource);
- }
-+ */
-+ this.placeCraftSpawner(world, blockposition_mutableblockposition, org.bukkit.entity.EntityType.CAVE_SPIDER, 2);
-+ // CraftBukkit end
- }
- }
- }
-@@ -819,11 +823,11 @@
-
- public MineShaftRoom(CompoundTag nbt) {
- super(StructurePieceType.MINE_SHAFT_ROOM, nbt);
-- DataResult dataresult = BoundingBox.CODEC.listOf().parse(NbtOps.INSTANCE, nbt.getList("Entrances", 11));
-+ DataResult<List<BoundingBox>> dataresult = BoundingBox.CODEC.listOf().parse(NbtOps.INSTANCE, nbt.getList("Entrances", 11)); // CraftBukkit - decompile error
- Logger logger = MineshaftPieces.LOGGER;
-
- Objects.requireNonNull(logger);
-- Optional optional = dataresult.resultOrPartial(logger::error);
-+ Optional<List<BoundingBox>> optional = dataresult.resultOrPartial(logger::error); // CraftBukkit - decompile error
- List list = this.childEntranceBoxes;
-
- Objects.requireNonNull(this.childEntranceBoxes);
-@@ -929,7 +933,7 @@
- @Override
- protected void addAdditionalSaveData(StructurePieceSerializationContext context, CompoundTag nbt) {
- super.addAdditionalSaveData(context, nbt);
-- DataResult dataresult = BoundingBox.CODEC.listOf().encodeStart(NbtOps.INSTANCE, this.childEntranceBoxes);
-+ DataResult<Tag> dataresult = BoundingBox.CODEC.listOf().encodeStart(NbtOps.INSTANCE, this.childEntranceBoxes); // CraftBukkit - decompile error
- Logger logger = MineshaftPieces.LOGGER;
-
- Objects.requireNonNull(logger);
diff --git a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java.patch b/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java.patch
deleted file mode 100644
index 23051dcaf5..0000000000
--- a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java.patch
+++ /dev/null
@@ -1,45 +0,0 @@
---- a/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java
-+++ b/net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces.java
-@@ -8,15 +8,12 @@
- import net.minecraft.core.Direction;
- import net.minecraft.nbt.CompoundTag;
- import net.minecraft.util.RandomSource;
--import net.minecraft.world.entity.EntityType;
- import net.minecraft.world.level.ChunkPos;
- import net.minecraft.world.level.StructureManager;
- import net.minecraft.world.level.WorldGenLevel;
- import net.minecraft.world.level.block.Blocks;
- import net.minecraft.world.level.block.FenceBlock;
- import net.minecraft.world.level.block.StairBlock;
--import net.minecraft.world.level.block.entity.BlockEntity;
--import net.minecraft.world.level.block.entity.SpawnerBlockEntity;
- import net.minecraft.world.level.block.state.BlockState;
- import net.minecraft.world.level.chunk.ChunkGenerator;
- import net.minecraft.world.level.levelgen.structure.BoundingBox;
-@@ -428,14 +425,19 @@
-
- if (chunkBox.isInside(blockposition_mutableblockposition)) {
- this.hasPlacedSpawner = true;
-- world.setBlock(blockposition_mutableblockposition, Blocks.SPAWNER.defaultBlockState(), 2);
-- BlockEntity tileentity = world.getBlockEntity(blockposition_mutableblockposition);
--
-- if (tileentity instanceof SpawnerBlockEntity) {
-- SpawnerBlockEntity tileentitymobspawner = (SpawnerBlockEntity) tileentity;
--
-- tileentitymobspawner.setEntityId(EntityType.BLAZE, random);
-+ // CraftBukkit start
-+ /*
-+ generatoraccessseed.setBlock(blockposition_mutableblockposition, Blocks.SPAWNER.defaultBlockState(), 2);
-+ TileEntity tileentity = generatoraccessseed.getBlockEntity(blockposition_mutableblockposition);
-+
-+ if (tileentity instanceof TileEntityMobSpawner) {
-+ TileEntityMobSpawner tileentitymobspawner = (TileEntityMobSpawner) tileentity;
-+
-+ tileentitymobspawner.setEntityId(EntityTypes.BLAZE, randomsource);
- }
-+ */
-+ this.placeCraftSpawner(world, blockposition_mutableblockposition, org.bukkit.entity.EntityType.BLAZE, 2);
-+ // CraftBukkit end
- }
- }
-
diff --git a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java.patch b/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java.patch
deleted file mode 100644
index 7e1e399a8b..0000000000
--- a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java.patch
+++ /dev/null
@@ -1,37 +0,0 @@
---- a/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java
-+++ b/net/minecraft/world/level/levelgen/structure/structures/OceanRuinPieces.java
-@@ -27,8 +27,6 @@
- import net.minecraft.world.level.block.ChestBlock;
- import net.minecraft.world.level.block.Mirror;
- import net.minecraft.world.level.block.Rotation;
--import net.minecraft.world.level.block.entity.BlockEntity;
--import net.minecraft.world.level.block.entity.ChestBlockEntity;
- import net.minecraft.world.level.block.state.BlockState;
- import net.minecraft.world.level.chunk.ChunkGenerator;
- import net.minecraft.world.level.levelgen.Heightmap;
-@@ -200,12 +198,20 @@
- @Override
- protected void handleDataMarker(String metadata, BlockPos pos, ServerLevelAccessor world, RandomSource random, BoundingBox boundingBox) {
- if ("chest".equals(metadata)) {
-- world.setBlock(pos, (BlockState) Blocks.CHEST.defaultBlockState().setValue(ChestBlock.WATERLOGGED, world.getFluidState(pos).is(FluidTags.WATER)), 2);
-- BlockEntity tileentity = world.getBlockEntity(pos);
--
-- if (tileentity instanceof ChestBlockEntity) {
-- ((ChestBlockEntity) tileentity).setLootTable(this.isLarge ? BuiltInLootTables.UNDERWATER_RUIN_BIG : BuiltInLootTables.UNDERWATER_RUIN_SMALL, random.nextLong());
-+ // CraftBukkit start - transform block to ensure loot table is accessible
-+ /*
-+ worldaccess.setBlock(blockposition, (IBlockData) Blocks.CHEST.defaultBlockState().setValue(BlockChest.WATERLOGGED, worldaccess.getFluidState(blockposition).is(TagsFluid.WATER)), 2);
-+ TileEntity tileentity = worldaccess.getBlockEntity(blockposition);
-+
-+ if (tileentity instanceof TileEntityChest) {
-+ ((TileEntityChest) tileentity).setLootTable(this.isLarge ? LootTables.UNDERWATER_RUIN_BIG : LootTables.UNDERWATER_RUIN_SMALL, randomsource.nextLong());
- }
-+ */
-+ org.bukkit.craftbukkit.block.CraftChest craftChest = (org.bukkit.craftbukkit.block.CraftChest) org.bukkit.craftbukkit.block.CraftBlockStates.getBlockState(world, pos, Blocks.CHEST.defaultBlockState().setValue(ChestBlock.WATERLOGGED, world.getFluidState(pos).is(FluidTags.WATER)), null);
-+ craftChest.setSeed(random.nextLong());
-+ craftChest.setLootTable(org.bukkit.craftbukkit.CraftLootTable.minecraftToBukkit(this.isLarge ? BuiltInLootTables.UNDERWATER_RUIN_BIG : BuiltInLootTables.UNDERWATER_RUIN_SMALL));
-+ this.placeCraftBlockEntity(world, pos, craftChest, 2);
-+ // CraftBukkit end
- } else if ("drowned".equals(metadata)) {
- Drowned entitydrowned = (Drowned) EntityType.DROWNED.create(world.getLevel(), EntitySpawnReason.STRUCTURE);
-
diff --git a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java.patch b/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java.patch
deleted file mode 100644
index d667e572c3..0000000000
--- a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- a/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java
-+++ b/net/minecraft/world/level/levelgen/structure/structures/ShipwreckPieces.java
-@@ -79,7 +79,12 @@
- ResourceKey<LootTable> resourcekey = (ResourceKey) ShipwreckPieces.MARKERS_TO_LOOT.get(metadata);
-
- if (resourcekey != null) {
-- RandomizableContainer.setBlockEntityLootTable(world, random, pos.below(), resourcekey);
-+ // CraftBukkit start - ensure block transformation
-+ /*
-+ RandomizableContainer.setBlockEntityLootTable(worldaccess, randomsource, blockposition.below(), resourcekey);
-+ */
-+ this.setCraftLootTable(world, pos.below(), random, resourcekey);
-+ // CraftBukkit end
- }
-
- }
diff --git a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java.patch b/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java.patch
deleted file mode 100644
index 90efca8745..0000000000
--- a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java.patch
+++ /dev/null
@@ -1,55 +0,0 @@
---- a/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java
-+++ b/net/minecraft/world/level/levelgen/structure/structures/StrongholdPieces.java
-@@ -8,7 +8,6 @@
- import net.minecraft.core.Direction;
- import net.minecraft.nbt.CompoundTag;
- import net.minecraft.util.RandomSource;
--import net.minecraft.world.entity.EntityType;
- import net.minecraft.world.level.ChunkPos;
- import net.minecraft.world.level.StructureManager;
- import net.minecraft.world.level.WorldGenLevel;
-@@ -22,8 +21,6 @@
- import net.minecraft.world.level.block.SlabBlock;
- import net.minecraft.world.level.block.StairBlock;
- import net.minecraft.world.level.block.WallTorchBlock;
--import net.minecraft.world.level.block.entity.BlockEntity;
--import net.minecraft.world.level.block.entity.SpawnerBlockEntity;
- import net.minecraft.world.level.block.state.BlockState;
- import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
- import net.minecraft.world.level.block.state.properties.SlabType;
-@@ -53,7 +50,7 @@
- public boolean doPlace(int chainLength) {
- return super.doPlace(chainLength) && chainLength > 5;
- }
-- }};
-+ } }; // CraftBukkit - fix decompile styling
- private static List<StrongholdPieces.PieceWeight> currentPieces;
- static Class<? extends StrongholdPieces.StrongholdPiece> imposedPiece;
- private static int totalWeight;
-@@ -1136,14 +1133,19 @@
-
- if (chunkBox.isInside(blockposition_mutableblockposition)) {
- this.hasPlacedSpawner = true;
-- world.setBlock(blockposition_mutableblockposition, Blocks.SPAWNER.defaultBlockState(), 2);
-- BlockEntity tileentity = world.getBlockEntity(blockposition_mutableblockposition);
--
-- if (tileentity instanceof SpawnerBlockEntity) {
-- SpawnerBlockEntity tileentitymobspawner = (SpawnerBlockEntity) tileentity;
--
-- tileentitymobspawner.setEntityId(EntityType.SILVERFISH, random);
-+ // CraftBukkit start
-+ /*
-+ generatoraccessseed.setBlock(blockposition_mutableblockposition, Blocks.SPAWNER.defaultBlockState(), 2);
-+ TileEntity tileentity = generatoraccessseed.getBlockEntity(blockposition_mutableblockposition);
-+
-+ if (tileentity instanceof TileEntityMobSpawner) {
-+ TileEntityMobSpawner tileentitymobspawner = (TileEntityMobSpawner) tileentity;
-+
-+ tileentitymobspawner.setEntityId(EntityTypes.SILVERFISH, randomsource);
- }
-+ */
-+ this.placeCraftSpawner(world, blockposition_mutableblockposition, org.bukkit.entity.EntityType.SILVERFISH, 2);
-+ // CraftBukkit end
- }
- }
-
diff --git a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java.patch b/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java.patch
deleted file mode 100644
index ad3c0e1641..0000000000
--- a/paper-server/patches/unapplied/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java
-+++ b/net/minecraft/world/level/levelgen/structure/structures/SwampHutPiece.java
-@@ -100,7 +100,7 @@
- entitywitch.setPersistenceRequired();
- entitywitch.moveTo((double) blockposition_mutableblockposition.getX() + 0.5D, (double) blockposition_mutableblockposition.getY(), (double) blockposition_mutableblockposition.getZ() + 0.5D, 0.0F, 0.0F);
- entitywitch.finalizeSpawn(world, world.getCurrentDifficultyAt(blockposition_mutableblockposition), EntitySpawnReason.STRUCTURE, (SpawnGroupData) null);
-- world.addFreshEntityWithPassengers(entitywitch);
-+ world.addFreshEntityWithPassengers(entitywitch, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CHUNK_GEN); // CraftBukkit - add SpawnReason
- }
- }
- }
-@@ -121,7 +121,7 @@
- entitycat.setPersistenceRequired();
- entitycat.moveTo((double) blockposition_mutableblockposition.getX() + 0.5D, (double) blockposition_mutableblockposition.getY(), (double) blockposition_mutableblockposition.getZ() + 0.5D, 0.0F, 0.0F);
- entitycat.finalizeSpawn(world, world.getCurrentDifficultyAt(blockposition_mutableblockposition), EntitySpawnReason.STRUCTURE, (SpawnGroupData) null);
-- world.addFreshEntityWithPassengers(entitycat);
-+ world.addFreshEntityWithPassengers(entitycat, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CHUNK_GEN); // CraftBukkit - add SpawnReason
- }
- }
- }