diff options
author | Noah van der Aa <[email protected]> | 2024-10-23 22:52:43 +0200 |
---|---|---|
committer | Noah van der Aa <[email protected]> | 2024-10-23 22:52:43 +0200 |
commit | cb79de80c4ae2658f5066a0d5d3e94258765dd96 (patch) | |
tree | 40782f27089e3ac040491b47251ecfd30f0ebbc3 | |
parent | 6456b5dea8a841ff96553c6189a9f919a6e76600 (diff) | |
download | Paper-cb79de80c4ae2658f5066a0d5d3e94258765dd96.tar.gz Paper-cb79de80c4ae2658f5066a0d5d3e94258765dd96.zip |
moooore
-rw-r--r-- | patches/api/0457-Fix-SpawnerEntry-Equipment-API.patch | 4 | ||||
-rw-r--r-- | patches/server/0634-Entity-powdered-snow-API.patch (renamed from patches/unapplied/server/0638-Entity-powdered-snow-API.patch) | 4 | ||||
-rw-r--r-- | patches/server/0635-Add-API-for-item-entity-health.patch (renamed from patches/unapplied/server/0639-Add-API-for-item-entity-health.patch) | 0 | ||||
-rw-r--r-- | patches/server/0636-Configurable-max-block-light-for-monster-spawning.patch (renamed from patches/unapplied/server/0640-Configurable-max-block-light-for-monster-spawning.patch) | 4 | ||||
-rw-r--r-- | patches/server/0637-Fix-sticky-pistons-and-BlockPistonRetractEvent.patch (renamed from patches/unapplied/server/0641-Fix-sticky-pistons-and-BlockPistonRetractEvent.patch) | 8 | ||||
-rw-r--r-- | patches/server/0638-Expose-isFuel-and-canSmelt-methods-to-FurnaceInvento.patch (renamed from patches/unapplied/server/0642-Expose-isFuel-and-canSmelt-methods-to-FurnaceInvento.patch) | 0 | ||||
-rw-r--r-- | patches/server/0639-Bucketable-API.patch (renamed from patches/unapplied/server/0643-Bucketable-API.patch) | 0 | ||||
-rw-r--r-- | patches/server/0640-Validate-usernames.patch (renamed from patches/unapplied/server/0644-Validate-usernames.patch) | 8 | ||||
-rw-r--r-- | patches/server/0641-Make-water-animal-spawn-height-configurable.patch (renamed from patches/unapplied/server/0645-Make-water-animal-spawn-height-configurable.patch) | 4 | ||||
-rw-r--r-- | patches/server/0642-Expose-vanilla-BiomeProvider-from-WorldInfo.patch (renamed from patches/unapplied/server/0646-Expose-vanilla-BiomeProvider-from-WorldInfo.patch) | 24 | ||||
-rw-r--r-- | patches/server/0643-Add-config-option-for-worlds-affected-by-time-cmd.patch (renamed from patches/unapplied/server/0647-Add-config-option-for-worlds-affected-by-time-cmd.patch) | 0 | ||||
-rw-r--r-- | patches/server/0644-Add-missing-IAE-check-for-PersistentDataContainer-ha.patch (renamed from patches/unapplied/server/0648-Add-missing-IAE-check-for-PersistentDataContainer-ha.patch) | 0 | ||||
-rw-r--r-- | patches/server/0645-Multiple-Entries-with-Scoreboards.patch (renamed from patches/unapplied/server/0649-Multiple-Entries-with-Scoreboards.patch) | 2 | ||||
-rw-r--r-- | patches/server/0646-Reset-placed-block-on-exception.patch (renamed from patches/unapplied/server/0650-Reset-placed-block-on-exception.patch) | 6 | ||||
-rw-r--r-- | patches/server/0647-Add-configurable-height-for-slime-spawn.patch (renamed from patches/unapplied/server/0651-Add-configurable-height-for-slime-spawn.patch) | 24 | ||||
-rw-r--r-- | patches/server/0648-Fix-xp-reward-for-baby-zombies.patch (renamed from patches/unapplied/server/0652-Fix-xp-reward-for-baby-zombies.patch) | 10 | ||||
-rw-r--r-- | patches/server/0649-Multi-Block-Change-API-Implementation.patch (renamed from patches/unapplied/server/0653-Multi-Block-Change-API-Implementation.patch) | 4 | ||||
-rw-r--r-- | patches/server/0650-Fix-NotePlayEvent.patch (renamed from patches/unapplied/server/0654-Fix-NotePlayEvent.patch) | 8 | ||||
-rw-r--r-- | patches/server/0651-Freeze-Tick-Lock-API.patch (renamed from patches/unapplied/server/0655-Freeze-Tick-Lock-API.patch) | 38 | ||||
-rw-r--r-- | patches/server/0652-More-PotionEffectType-API.patch (renamed from patches/unapplied/server/0656-More-PotionEffectType-API.patch) | 0 | ||||
-rw-r--r-- | patches/server/0653-Use-a-CHM-for-StructureTemplate.Pallete-cache.patch (renamed from patches/unapplied/server/0657-Use-a-CHM-for-StructureTemplate.Pallete-cache.patch) | 8 | ||||
-rw-r--r-- | patches/server/0654-API-for-creating-command-sender-which-forwards-feedb.patch (renamed from patches/unapplied/server/0658-API-for-creating-command-sender-which-forwards-feedb.patch) | 6 | ||||
-rw-r--r-- | patches/server/0655-Add-missing-structure-set-seed-configs.patch (renamed from patches/unapplied/server/0659-Add-missing-structure-set-seed-configs.patch) | 6 | ||||
-rw-r--r-- | patches/server/0656-Fix-cancelled-powdered-snow-bucket-placement.patch (renamed from patches/unapplied/server/0660-Fix-cancelled-powdered-snow-bucket-placement.patch) | 18 | ||||
-rw-r--r-- | patches/server/0657-Add-missing-Validate-calls-to-CraftServer-getSpawnLi.patch (renamed from patches/unapplied/server/0661-Add-missing-Validate-calls-to-CraftServer-getSpawnLi.patch) | 4 | ||||
-rw-r--r-- | patches/server/0658-Add-GameEvent-tags.patch (renamed from patches/unapplied/server/0662-Add-GameEvent-tags.patch) | 12 | ||||
-rw-r--r-- | patches/server/0659-Execute-chunk-tasks-fairly-for-worlds-while-waiting-.patch (renamed from patches/unapplied/server/0663-Execute-chunk-tasks-fairly-for-worlds-while-waiting-.patch) | 6 | ||||
-rw-r--r-- | patches/server/0660-Furnace-RecipesUsed-API.patch (renamed from patches/unapplied/server/0664-Furnace-RecipesUsed-API.patch) | 4 | ||||
-rw-r--r-- | patches/server/0661-Configurable-sculk-sensor-listener-range.patch (renamed from patches/unapplied/server/0665-Configurable-sculk-sensor-listener-range.patch) | 6 | ||||
-rw-r--r-- | patches/server/0662-Add-missing-block-data-API.patch (renamed from patches/unapplied/server/0666-Add-missing-block-data-API.patch) | 0 | ||||
-rw-r--r-- | patches/server/0663-Option-to-have-default-CustomSpawners-in-custom-worl.patch (renamed from patches/unapplied/server/0667-Option-to-have-default-CustomSpawners-in-custom-worl.patch) | 4 | ||||
-rw-r--r-- | patches/server/0664-Put-world-into-worldlist-before-initing-the-world.patch (renamed from patches/unapplied/server/0668-Put-world-into-worldlist-before-initing-the-world.patch) | 10 | ||||
-rw-r--r-- | patches/server/0665-Custom-Potion-Mixes.patch (renamed from patches/unapplied/server/0669-Custom-Potion-Mixes.patch) | 40 | ||||
-rw-r--r-- | patches/server/0666-Force-close-world-loading-screen.patch (renamed from patches/unapplied/server/0670-Force-close-world-loading-screen.patch) | 14 | ||||
-rw-r--r-- | patches/server/0667-Fix-falling-block-spawn-methods.patch (renamed from patches/unapplied/server/0671-Fix-falling-block-spawn-methods.patch) | 10 | ||||
-rw-r--r-- | patches/server/0668-Expose-furnace-minecart-push-values.patch (renamed from patches/unapplied/server/0672-Expose-furnace-minecart-push-values.patch) | 0 | ||||
-rw-r--r-- | patches/server/0669-Fix-cancelling-ProjectileHitEvent-for-piercing-arrow.patch (renamed from patches/unapplied/server/0673-Fix-cancelling-ProjectileHitEvent-for-piercing-arrow.patch) | 6 | ||||
-rw-r--r-- | patches/server/0670-More-Projectile-API.patch (renamed from patches/unapplied/server/0674-More-Projectile-API.patch) | 96 | ||||
-rw-r--r-- | patches/server/0671-Fix-swamp-hut-cat-generation-deadlock.patch (renamed from patches/unapplied/server/0675-Fix-swamp-hut-cat-generation-deadlock.patch) | 14 | ||||
-rw-r--r-- | patches/server/0672-Don-t-allow-vehicle-movement-from-players-while-tele.patch (renamed from patches/unapplied/server/0676-Don-t-allow-vehicle-movement-from-players-while-tele.patch) | 4 | ||||
-rw-r--r-- | patches/server/0673-Implement-getComputedBiome-API.patch (renamed from patches/unapplied/server/0677-Implement-getComputedBiome-API.patch) | 8 | ||||
-rw-r--r-- | patches/server/0674-Make-some-itemstacks-nonnull.patch (renamed from patches/unapplied/server/0678-Make-some-itemstacks-nonnull.patch) | 2 | ||||
-rw-r--r-- | patches/server/0675-Implement-enchantWithLevels-API.patch (renamed from patches/unapplied/server/0679-Implement-enchantWithLevels-API.patch) | 4 | ||||
-rw-r--r-- | patches/server/0676-Fix-saving-in-unloadWorld.patch (renamed from patches/unapplied/server/0680-Fix-saving-in-unloadWorld.patch) | 4 | ||||
-rw-r--r-- | patches/server/0677-Buffer-OOB-setBlock-calls.patch (renamed from patches/unapplied/server/0681-Buffer-OOB-setBlock-calls.patch) | 2 | ||||
-rw-r--r-- | patches/server/0678-Add-TameableDeathMessageEvent.patch | 24 | ||||
-rw-r--r-- | patches/server/0679-Fix-new-block-data-for-EntityChangeBlockEvent.patch (renamed from patches/unapplied/server/0683-Fix-new-block-data-for-EntityChangeBlockEvent.patch) | 104 | ||||
-rw-r--r-- | patches/server/0680-fix-player-loottables-running-when-mob-loot-gamerule.patch (renamed from patches/unapplied/server/0684-fix-player-loottables-running-when-mob-loot-gamerule.patch) | 6 | ||||
-rw-r--r-- | patches/server/0681-Ensure-entity-passenger-world-matches-ridden-entity.patch (renamed from patches/unapplied/server/0685-Ensure-entity-passenger-world-matches-ridden-entity.patch) | 4 | ||||
-rw-r--r-- | patches/server/0682-Cache-resource-keys-and-optimize-reference-Holder-ta.patch (renamed from patches/unapplied/server/0686-Cache-resource-keys-and-optimize-reference-Holder-ta.patch) | 10 | ||||
-rw-r--r-- | patches/server/0683-Allow-changing-the-EnderDragon-podium.patch (renamed from patches/unapplied/server/0687-Allow-changing-the-EnderDragon-podium.patch) | 79 | ||||
-rw-r--r-- | patches/server/0684-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch (renamed from patches/unapplied/server/0688-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch) | 6 | ||||
-rw-r--r-- | patches/server/0685-Prevent-tile-entity-copies-loading-chunks.patch (renamed from patches/unapplied/server/0689-Prevent-tile-entity-copies-loading-chunks.patch) | 4 | ||||
-rw-r--r-- | patches/server/0686-Use-username-instead-of-display-name-in-PlayerList-g.patch (renamed from patches/unapplied/server/0690-Use-username-instead-of-display-name-in-PlayerList-g.patch) | 4 | ||||
-rw-r--r-- | patches/server/0687-Expand-PlayerItemDamageEvent.patch | 23 | ||||
-rw-r--r-- | patches/server/0688-WorldCreator-keepSpawnLoaded.patch (renamed from patches/unapplied/server/0692-WorldCreator-keepSpawnLoaded.patch) | 4 | ||||
-rw-r--r-- | patches/server/0689-Fix-CME-in-CraftPersistentDataTypeRegistry.patch (renamed from patches/unapplied/server/0693-Fix-CME-in-CraftPersistentDataTypeRegistry.patch) | 0 | ||||
-rw-r--r-- | patches/unapplied/server/0682-Add-TameableDeathMessageEvent.patch | 24 | ||||
-rw-r--r-- | patches/unapplied/server/0691-Expand-PlayerItemDamageEvent.patch | 23 |
59 files changed, 372 insertions, 379 deletions
diff --git a/patches/api/0457-Fix-SpawnerEntry-Equipment-API.patch b/patches/api/0457-Fix-SpawnerEntry-Equipment-API.patch index 64ee6e4eec..201dc87c42 100644 --- a/patches/api/0457-Fix-SpawnerEntry-Equipment-API.patch +++ b/patches/api/0457-Fix-SpawnerEntry-Equipment-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix SpawnerEntry$Equipment API diff --git a/src/main/java/org/bukkit/block/spawner/SpawnerEntry.java b/src/main/java/org/bukkit/block/spawner/SpawnerEntry.java -index fc1c0435dfea121923eb1fe0182880752f321143..5cb482d42b0babd5a40598dc7fcf79c7d8c63655 100644 +index fc1c0435dfea121923eb1fe0182880752f321143..e167003cdf014e1ef4c475d1138c4462153fbc85 100644 --- a/src/main/java/org/bukkit/block/spawner/SpawnerEntry.java +++ b/src/main/java/org/bukkit/block/spawner/SpawnerEntry.java @@ -120,27 +120,29 @@ public class SpawnerEntry { @@ -22,7 +22,7 @@ index fc1c0435dfea121923eb1fe0182880752f321143..5cb482d42b0babd5a40598dc7fcf79c7 + * Set the loot table for the spawned entity's equipment slots. * <br> - * To remove a loot table use null. -+ * To remove a loot table use {@link LootTables#EMPTY}. ++ * To remove a loot table use {@link org.bukkit.loot.LootTables#EMPTY}. * * @param table this {@link org.bukkit.entity.Mob} will have. */ diff --git a/patches/unapplied/server/0638-Entity-powdered-snow-API.patch b/patches/server/0634-Entity-powdered-snow-API.patch index 8cba17f571..09c93986c1 100644 --- a/patches/unapplied/server/0638-Entity-powdered-snow-API.patch +++ b/patches/server/0634-Entity-powdered-snow-API.patch @@ -7,10 +7,10 @@ Subject: [PATCH] Entity powdered snow API public net.minecraft.world.entity.monster.Skeleton inPowderSnowTime diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 6fab713531665298d3b03e7960a17ecb1471a6d7..4ed5647101bbace0005b1ebfb824e4aed48e43cb 100644 +index 1ed01978611cddb2558e441863dadc468bc07c3d..9693656418210957000add9b6670c4bee67f8462 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1099,6 +1099,13 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1100,6 +1100,13 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { } // Paper end - raw entity serialization API diff --git a/patches/unapplied/server/0639-Add-API-for-item-entity-health.patch b/patches/server/0635-Add-API-for-item-entity-health.patch index cd2757b544..cd2757b544 100644 --- a/patches/unapplied/server/0639-Add-API-for-item-entity-health.patch +++ b/patches/server/0635-Add-API-for-item-entity-health.patch diff --git a/patches/unapplied/server/0640-Configurable-max-block-light-for-monster-spawning.patch b/patches/server/0636-Configurable-max-block-light-for-monster-spawning.patch index d0fb0003dc..8c19486a5f 100644 --- a/patches/unapplied/server/0640-Configurable-max-block-light-for-monster-spawning.patch +++ b/patches/server/0636-Configurable-max-block-light-for-monster-spawning.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable max block light for monster spawning diff --git a/src/main/java/net/minecraft/world/entity/monster/Monster.java b/src/main/java/net/minecraft/world/entity/monster/Monster.java -index f73604d762efbac400d40f536ec1782fca584efa..e7bfce0534c7ef3a1480a1082ae8514caf78778b 100644 +index c49853f25bdf1fbc7ec9700d421c6ddccabae05f..e2de074bbe7bab0e5a7aecc1fae4c5914a203dd4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Monster.java +++ b/src/main/java/net/minecraft/world/entity/monster/Monster.java -@@ -91,7 +91,7 @@ public abstract class Monster extends PathfinderMob implements Enemy { +@@ -92,7 +92,7 @@ public abstract class Monster extends PathfinderMob implements Enemy { return false; } else { DimensionType dimensionType = world.dimensionType(); diff --git a/patches/unapplied/server/0641-Fix-sticky-pistons-and-BlockPistonRetractEvent.patch b/patches/server/0637-Fix-sticky-pistons-and-BlockPistonRetractEvent.patch index 2ee001a77a..179f6e1565 100644 --- a/patches/unapplied/server/0641-Fix-sticky-pistons-and-BlockPistonRetractEvent.patch +++ b/patches/server/0637-Fix-sticky-pistons-and-BlockPistonRetractEvent.patch @@ -27,10 +27,10 @@ Co-authored-by: Zach Brown <[email protected]> Co-authored-by: Madeline Miller <[email protected]> diff --git a/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java b/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java -index 2f2c9fb65d4cc8bd40303216e03c5c1956305ff4..e6bfbe2588e0c2a1be14e38d654e889d392ad4db 100644 +index 560797552799f7874133fd4aaf6e421609a54dbf..b27cf7d27672ba9ff8ade84b5a8454b19b935607 100644 --- a/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java +++ b/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java -@@ -160,15 +160,15 @@ public class PistonBaseBlock extends DirectionalBlock { +@@ -163,15 +163,15 @@ public class PistonBaseBlock extends DirectionalBlock { } // CraftBukkit start @@ -55,7 +55,7 @@ index 2f2c9fb65d4cc8bd40303216e03c5c1956305ff4..e6bfbe2588e0c2a1be14e38d654e889d // PAIL: checkME - what happened to setTypeAndData? // CraftBukkit end world.blockEvent(pos, this, b0, enumdirection.get3DDataValue()); -@@ -245,6 +245,13 @@ public class PistonBaseBlock extends DirectionalBlock { +@@ -248,6 +248,13 @@ public class PistonBaseBlock extends DirectionalBlock { BlockState iblockdata2 = (BlockState) ((BlockState) Blocks.MOVING_PISTON.defaultBlockState().setValue(MovingPistonBlock.FACING, enumdirection)).setValue(MovingPistonBlock.TYPE, this.isSticky ? PistonType.STICKY : PistonType.DEFAULT); @@ -69,7 +69,7 @@ index 2f2c9fb65d4cc8bd40303216e03c5c1956305ff4..e6bfbe2588e0c2a1be14e38d654e889d world.setBlock(pos, iblockdata2, 20); world.setBlockEntity(MovingPistonBlock.newMovingBlockEntity(pos, iblockdata2, (BlockState) this.defaultBlockState().setValue(PistonBaseBlock.FACING, Direction.from3DDataValue(data & 7)), enumdirection, false, true)); world.blockUpdated(pos, iblockdata2.getBlock()); -@@ -271,6 +278,13 @@ public class PistonBaseBlock extends DirectionalBlock { +@@ -274,6 +281,13 @@ public class PistonBaseBlock extends DirectionalBlock { if (type == 1 && !iblockdata3.isAir() && PistonBaseBlock.isPushable(iblockdata3, world, blockposition1, enumdirection.getOpposite(), false, enumdirection) && (iblockdata3.getPistonPushReaction() == PushReaction.NORMAL || iblockdata3.is(Blocks.PISTON) || iblockdata3.is(Blocks.STICKY_PISTON))) { this.moveBlocks(world, pos, enumdirection, false); } else { diff --git a/patches/unapplied/server/0642-Expose-isFuel-and-canSmelt-methods-to-FurnaceInvento.patch b/patches/server/0638-Expose-isFuel-and-canSmelt-methods-to-FurnaceInvento.patch index 026f793541..026f793541 100644 --- a/patches/unapplied/server/0642-Expose-isFuel-and-canSmelt-methods-to-FurnaceInvento.patch +++ b/patches/server/0638-Expose-isFuel-and-canSmelt-methods-to-FurnaceInvento.patch diff --git a/patches/unapplied/server/0643-Bucketable-API.patch b/patches/server/0639-Bucketable-API.patch index 274ccde059..274ccde059 100644 --- a/patches/unapplied/server/0643-Bucketable-API.patch +++ b/patches/server/0639-Bucketable-API.patch diff --git a/patches/unapplied/server/0644-Validate-usernames.patch b/patches/server/0640-Validate-usernames.patch index 0735bfd857..74facbf238 100644 --- a/patches/unapplied/server/0644-Validate-usernames.patch +++ b/patches/server/0640-Validate-usernames.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Validate usernames diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index e0a10f1d8bf2c0df66e62bdf2a174ce6a66bbd6d..9c343b579d9735dc59c8c74fde030d981a673c4f 100644 +index 1e4b288f20153ce0c91fabf164c5c8320c90ba7d..cb5dd77892283a1aaec45434fb99bb7f08ee5394 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -90,6 +90,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, @@ -32,10 +32,10 @@ index e0a10f1d8bf2c0df66e62bdf2a174ce6a66bbd6d..9c343b579d9735dc59c8c74fde030d98 GameProfile gameprofile = this.server.getSingleplayerProfile(); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index c7dc335d6da208c224d94256eab11b2c3c63745f..cff45afb90b232a236683bd569d50aab6b701149 100644 +index 1b6540ae28d73501c59581b1864f0e01ab53e365..f34cad30c982f2bb563f0deab030111720858fa8 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -670,7 +670,7 @@ public abstract class PlayerList { +@@ -628,7 +628,7 @@ public abstract class PlayerList { for (int i = 0; i < this.players.size(); ++i) { entityplayer = (ServerPlayer) this.players.get(i); @@ -45,7 +45,7 @@ index c7dc335d6da208c224d94256eab11b2c3c63745f..cff45afb90b232a236683bd569d50aab } } diff --git a/src/main/java/net/minecraft/util/StringUtil.java b/src/main/java/net/minecraft/util/StringUtil.java -index d3fc549a08993376c76c4ebebb788fea3f4ddf69..0bd191acb9596d3aa21c337230d26f09d26f6888 100644 +index e588bd7ef0616dc88ce4c0feeeabadc29dcaa550..6c33002dc8bbb3759c3156302ab7d1f26ce5e8ee 100644 --- a/src/main/java/net/minecraft/util/StringUtil.java +++ b/src/main/java/net/minecraft/util/StringUtil.java @@ -67,6 +67,25 @@ public class StringUtil { diff --git a/patches/unapplied/server/0645-Make-water-animal-spawn-height-configurable.patch b/patches/server/0641-Make-water-animal-spawn-height-configurable.patch index 14f75d9b89..341b55b1f6 100644 --- a/patches/unapplied/server/0645-Make-water-animal-spawn-height-configurable.patch +++ b/patches/server/0641-Make-water-animal-spawn-height-configurable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make water animal spawn height configurable diff --git a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java -index ad86b129ffdb9c6358f451fbcc0ae000eb81141d..c9cabb061ebc9172647304431cc3fb2593dd47ba 100644 +index 6a8a90059dcc524a0724264c8d604bf39228a650..8c4532a250f8679d729a35c17e9b5bd339264450 100644 --- a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java +++ b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java -@@ -67,6 +67,10 @@ public abstract class WaterAnimal extends PathfinderMob { +@@ -70,6 +70,10 @@ public abstract class WaterAnimal extends PathfinderMob { ) { int i = world.getSeaLevel(); int j = i - 13; diff --git a/patches/unapplied/server/0646-Expose-vanilla-BiomeProvider-from-WorldInfo.patch b/patches/server/0642-Expose-vanilla-BiomeProvider-from-WorldInfo.patch index 0801289d71..2efeedd538 100644 --- a/patches/unapplied/server/0646-Expose-vanilla-BiomeProvider-from-WorldInfo.patch +++ b/patches/server/0642-Expose-vanilla-BiomeProvider-from-WorldInfo.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Expose vanilla BiomeProvider from WorldInfo diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 56589fee8dd09783e01f2ae290ffacb5dff3f05f..718b653a118a1c64d07efab93192f10dfcbf414e 100644 +index 7e1b74547c691de5fa2fac6e515394e267c57036..15382d7da69967c50007f136e9d17dd2f81166e3 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -611,7 +611,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa +@@ -627,7 +627,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa List<CustomSpawner> list = ImmutableList.of(new PhantomSpawner(), new PatrolSpawner(), new CatSpawner(), new VillageSiege(), new WanderingTraderSpawner(iworlddataserver)); - LevelStem worlddimension = (LevelStem) dimensions.get(dimensionKey); + LevelStem worlddimension = (LevelStem) dimensions.getValue(dimensionKey); - org.bukkit.generator.WorldInfo worldInfo = new org.bukkit.craftbukkit.generator.CraftWorldInfo(iworlddataserver, worldSession, org.bukkit.World.Environment.getEnvironment(dimension), worlddimension.type().value()); + org.bukkit.generator.WorldInfo worldInfo = new org.bukkit.craftbukkit.generator.CraftWorldInfo(iworlddataserver, worldSession, org.bukkit.World.Environment.getEnvironment(dimension), worlddimension.type().value(), worlddimension.generator(), this.registryAccess()); // Paper - Expose vanilla BiomeProvider from WorldInfo @@ -18,25 +18,25 @@ index 56589fee8dd09783e01f2ae290ffacb5dff3f05f..718b653a118a1c64d07efab93192f10d biomeProvider = gen.getDefaultBiomeProvider(worldInfo); } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index a473993ea48afd05a884e3ffcbdd15abe74580d2..a87a0c9672b53db0e06292c339b3b1e163901942 100644 +index 0fbd077c1d3dddc97c8c99effa936470562b02a4..f46393f68ce7ff45302d6aef78b33b18fd10339b 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -369,7 +369,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -359,7 +359,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.serverLevelData.setWorld(this); if (biomeProvider != null) { -- BiomeSource worldChunkManager = new CustomWorldChunkManager(this.getWorld(), biomeProvider, this.server.registryAccess().registryOrThrow(Registries.BIOME)); -+ BiomeSource worldChunkManager = new CustomWorldChunkManager(this.getWorld(), biomeProvider, this.server.registryAccess().registryOrThrow(Registries.BIOME), chunkgenerator.getBiomeSource()); // Paper - add vanillaBiomeProvider +- BiomeSource worldChunkManager = new CustomWorldChunkManager(this.getWorld(), biomeProvider, this.server.registryAccess().lookupOrThrow(Registries.BIOME)); ++ BiomeSource worldChunkManager = new CustomWorldChunkManager(this.getWorld(), biomeProvider, this.server.registryAccess().lookupOrThrow(Registries.BIOME), chunkgenerator.getBiomeSource()); // Paper - add vanillaBiomeProvider if (chunkgenerator instanceof NoiseBasedChunkGenerator cga) { chunkgenerator = new NoiseBasedChunkGenerator(worldChunkManager, cga.settings); } else if (chunkgenerator instanceof FlatLevelSource cpf) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index b638ccf0e46eeb375a59a42d6f29edd3f084fa17..bb232cd338f94b03f2add34766927ecae019e388 100644 +index f69504676d2f48f3778f489ec1e08e2b3dec85cc..d30c1e853bb2e27922a00d890dffca153cdcbe97 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1308,7 +1308,7 @@ public final class CraftServer implements Server { +@@ -1311,7 +1311,7 @@ public final class CraftServer implements Server { List<CustomSpawner> list = ImmutableList.of(new PhantomSpawner(), new PatrolSpawner(), new CatSpawner(), new VillageSiege(), new WanderingTraderSpawner(worlddata)); - LevelStem worlddimension = iregistry.get(actualDimension); + LevelStem worlddimension = iregistry.getValue(actualDimension); - WorldInfo worldInfo = new CraftWorldInfo(worlddata, worldSession, creator.environment(), worlddimension.type().value()); + WorldInfo worldInfo = new CraftWorldInfo(worlddata, worldSession, creator.environment(), worlddimension.type().value(), worlddimension.generator(), this.getHandle().getServer().registryAccess()); // Paper - Expose vanilla BiomeProvider from WorldInfo @@ -44,10 +44,10 @@ index b638ccf0e46eeb375a59a42d6f29edd3f084fa17..bb232cd338f94b03f2add34766927eca biomeProvider = generator.getDefaultBiomeProvider(worldInfo); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 838ffddba99964748dfe95d68ca93b578bc3292b..bb837f7fa46a7f5926a67ce3f725a328b9bff415 100644 +index 0e5b673cee93525c1ba87d5b5e48def351ce8db8..7dc167950021371b5cf8a7e1e38f013220e1c8a6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -212,6 +212,39 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -216,6 +216,39 @@ public class CraftWorld extends CraftRegionAccessor implements World { public int getPlayerCount() { return world.players().size(); } diff --git a/patches/unapplied/server/0647-Add-config-option-for-worlds-affected-by-time-cmd.patch b/patches/server/0643-Add-config-option-for-worlds-affected-by-time-cmd.patch index 156eacada9..156eacada9 100644 --- a/patches/unapplied/server/0647-Add-config-option-for-worlds-affected-by-time-cmd.patch +++ b/patches/server/0643-Add-config-option-for-worlds-affected-by-time-cmd.patch diff --git a/patches/unapplied/server/0648-Add-missing-IAE-check-for-PersistentDataContainer-ha.patch b/patches/server/0644-Add-missing-IAE-check-for-PersistentDataContainer-ha.patch index be0eedab93..be0eedab93 100644 --- a/patches/unapplied/server/0648-Add-missing-IAE-check-for-PersistentDataContainer-ha.patch +++ b/patches/server/0644-Add-missing-IAE-check-for-PersistentDataContainer-ha.patch diff --git a/patches/unapplied/server/0649-Multiple-Entries-with-Scoreboards.patch b/patches/server/0645-Multiple-Entries-with-Scoreboards.patch index c286ca9e4b..558cc93da5 100644 --- a/patches/unapplied/server/0649-Multiple-Entries-with-Scoreboards.patch +++ b/patches/server/0645-Multiple-Entries-with-Scoreboards.patch @@ -21,7 +21,7 @@ index 1d0c473442b5c72245c356054440323e3c5d4711..f8fe125f12a6a00899d1d6acfa448be8 this.name = buf.readUtf(); this.method = buf.readByte(); diff --git a/src/main/java/net/minecraft/server/ServerScoreboard.java b/src/main/java/net/minecraft/server/ServerScoreboard.java -index 65a206c9969d5c7eee6bd185e398244365b5a809..f180001493146ef0d54079a8b2b47ad7decc24ca 100644 +index f1e72463ca11658390f662efbaf3e551c05fe799..8fd4d8ffcc9e1a0fcf83730d26c3bb9bef0f73f2 100644 --- a/src/main/java/net/minecraft/server/ServerScoreboard.java +++ b/src/main/java/net/minecraft/server/ServerScoreboard.java @@ -106,6 +106,25 @@ public class ServerScoreboard extends Scoreboard { diff --git a/patches/unapplied/server/0650-Reset-placed-block-on-exception.patch b/patches/server/0646-Reset-placed-block-on-exception.patch index c5b6f9f135..327d98e291 100644 --- a/patches/unapplied/server/0650-Reset-placed-block-on-exception.patch +++ b/patches/server/0646-Reset-placed-block-on-exception.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Reset placed block on exception diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java -index cee3f1200af602b5dfd0b27d05eb01826c5bbb1d..7d76cdc59984b156628273c8357485eb10046007 100644 +index 407f5db0a4b3884440bc49bf4f00d9c035899e86..44cc12a3338b5f0448c88192c8674cd36531db34 100644 --- a/src/main/java/net/minecraft/world/item/BlockItem.java +++ b/src/main/java/net/minecraft/world/item/BlockItem.java -@@ -77,6 +77,7 @@ public class BlockItem extends Item { +@@ -71,6 +71,7 @@ public class BlockItem extends Item { if (this instanceof PlaceOnWaterBlockItem || this instanceof SolidBucketItem) { blockstate = org.bukkit.craftbukkit.block.CraftBlockStates.getBlockState(blockactioncontext1.getLevel(), blockactioncontext1.getClickedPos()); } @@ -16,7 +16,7 @@ index cee3f1200af602b5dfd0b27d05eb01826c5bbb1d..7d76cdc59984b156628273c8357485eb // CraftBukkit end if (iblockdata == null) { -@@ -92,8 +93,20 @@ public class BlockItem extends Item { +@@ -86,8 +87,20 @@ public class BlockItem extends Item { if (iblockdata1.is(iblockdata.getBlock())) { iblockdata1 = this.updateBlockStateFromTag(blockposition, world, itemstack, iblockdata1); diff --git a/patches/unapplied/server/0651-Add-configurable-height-for-slime-spawn.patch b/patches/server/0647-Add-configurable-height-for-slime-spawn.patch index 5ed7f1549d..dfc8ecb349 100644 --- a/patches/unapplied/server/0651-Add-configurable-height-for-slime-spawn.patch +++ b/patches/server/0647-Add-configurable-height-for-slime-spawn.patch @@ -5,31 +5,31 @@ Subject: [PATCH] Add configurable height for slime spawn diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java -index b54c30ba73b6ab069c0c7c1cd2b193090da79667..adebb66e550f805f444bec22e9a4dd575a642b43 100644 +index 129f0cbc0469cb2804db6088b53347d88d91f4eb..72346a7e5269c91e3143933ac37e65ad9639b791 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Slime.java +++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java -@@ -348,7 +348,11 @@ public class Slime extends Mob implements Enemy { - return checkMobSpawnRules(type, world, spawnReason, pos, random); - } +@@ -340,7 +340,11 @@ public class Slime extends Mob implements Enemy { + return checkMobSpawnRules(type, world, spawnReason, pos, random); + } -- if (world.getBiome(pos).is(BiomeTags.ALLOWS_SURFACE_SLIME_SPAWNS) && pos.getY() > 50 && pos.getY() < 70 && random.nextFloat() < 0.5F && random.nextFloat() < world.getMoonBrightness() && world.getMaxLocalRawBrightness(pos) <= random.nextInt(8)) { +- if (world.getBiome(pos).is(BiomeTags.ALLOWS_SURFACE_SLIME_SPAWNS) && pos.getY() > 50 && pos.getY() < 70 && random.nextFloat() < 0.5F && random.nextFloat() < world.getMoonBrightness() && world.getMaxLocalRawBrightness(pos) <= random.nextInt(8)) { + // Paper start - Replace rules for Height in Swamp Biome + final double maxHeightSwamp = world.getMinecraftWorld().paperConfig().entities.spawning.slimeSpawnHeight.surfaceBiome.maximum; + final double minHeightSwamp = world.getMinecraftWorld().paperConfig().entities.spawning.slimeSpawnHeight.surfaceBiome.minimum; + if (world.getBiome(pos).is(BiomeTags.ALLOWS_SURFACE_SLIME_SPAWNS) && pos.getY() > minHeightSwamp && pos.getY() < maxHeightSwamp && random.nextFloat() < 0.5F && random.nextFloat() < world.getMoonBrightness() && world.getMaxLocalRawBrightness(pos) <= random.nextInt(8)) { + // Paper end - Replace rules for Height in Swamp Biome - return checkMobSpawnRules(type, world, spawnReason, pos, random); - } + return checkMobSpawnRules(type, world, spawnReason, pos, random); + } -@@ -359,7 +363,10 @@ public class Slime extends Mob implements Enemy { - ChunkPos chunkcoordintpair = new ChunkPos(pos); +@@ -351,7 +355,10 @@ public class Slime extends Mob implements Enemy { + ChunkPos chunkcoordintpair = new ChunkPos(pos); boolean flag = world.getMinecraftWorld().paperConfig().entities.spawning.allChunksAreSlimeChunks || WorldgenRandom.seedSlimeChunk(chunkcoordintpair.x, chunkcoordintpair.z, ((WorldGenLevel) world).getSeed(), world.getMinecraftWorld().spigotConfig.slimeSeed).nextInt(10) == 0; // Spigot // Paper -- if (random.nextInt(10) == 0 && flag && pos.getY() < 40) { +- if (random.nextInt(10) == 0 && flag && pos.getY() < 40) { + // Paper start - Replace rules for Height in Slime Chunks + final double maxHeightSlimeChunk = world.getMinecraftWorld().paperConfig().entities.spawning.slimeSpawnHeight.slimeChunk.maximum; + if (random.nextInt(10) == 0 && flag && pos.getY() < maxHeightSlimeChunk) { + // Paper end - Replace rules for Height in Slime Chunks - return checkMobSpawnRules(type, world, spawnReason, pos, random); - } + return checkMobSpawnRules(type, world, spawnReason, pos, random); } + } diff --git a/patches/unapplied/server/0652-Fix-xp-reward-for-baby-zombies.patch b/patches/server/0648-Fix-xp-reward-for-baby-zombies.patch index a4fec4e0f2..3c16a1caf6 100644 --- a/patches/unapplied/server/0652-Fix-xp-reward-for-baby-zombies.patch +++ b/patches/server/0648-Fix-xp-reward-for-baby-zombies.patch @@ -9,21 +9,21 @@ so this resets it after each call to Zombie#getExperienceReward diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index fd304e7d8305877d56de7a38b8664e5a70bf0c33..2280004638fd19ed018cb3e77d53a018b34ec516 100644 +index 6dc9fc3451edec01f11f526c05d84138c46a3a8e..17974f85d3c1db549ea11e8809954cd9d2af063e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -176,11 +176,16 @@ public class Zombie extends Monster { +@@ -174,11 +174,16 @@ public class Zombie extends Monster { @Override - protected int getBaseExperienceReward() { + protected int getBaseExperienceReward(ServerLevel world) { + final int previousReward = this.xpReward; // Paper - store previous value to reset after calculating XP reward if (this.isBaby()) { this.xpReward = (int) ((double) this.xpReward * 2.5D); } -- return super.getBaseExperienceReward(); +- return super.getBaseExperienceReward(world); + // Paper start - store previous value to reset after calculating XP reward -+ int reward = super.getBaseExperienceReward(); ++ int reward = super.getBaseExperienceReward(world); + this.xpReward = previousReward; + return reward; + // Paper end - store previous value to reset after calculating XP reward diff --git a/patches/unapplied/server/0653-Multi-Block-Change-API-Implementation.patch b/patches/server/0649-Multi-Block-Change-API-Implementation.patch index 740aad5839..75fd9baa24 100644 --- a/patches/unapplied/server/0653-Multi-Block-Change-API-Implementation.patch +++ b/patches/server/0649-Multi-Block-Change-API-Implementation.patch @@ -24,10 +24,10 @@ index 926ff9be3d9e3f5d620e4c7ccb22b9f64865ff8c..1a37654aff9a9c86c9f7af10a1cf7213 buf.writeLong(this.sectionPos.asLong()); buf.writeVarInt(this.positions.length); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index bc0d63f90e352ad4158d1dcc0f21a34954279095..ef289dba67db65a5e43104a4ca68bc03c8c5e4cb 100644 +index b3efe7391b7e43327bcca419efe72811574c0664..2347e260780d4703cff01b84a7971861fd924b20 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -930,6 +930,32 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -943,6 +943,32 @@ public class CraftPlayer extends CraftHumanEntity implements Player { this.getHandle().connection.send(packet); } diff --git a/patches/unapplied/server/0654-Fix-NotePlayEvent.patch b/patches/server/0650-Fix-NotePlayEvent.patch index 4a601d8f1b..cdffcd6f0f 100644 --- a/patches/unapplied/server/0654-Fix-NotePlayEvent.patch +++ b/patches/server/0650-Fix-NotePlayEvent.patch @@ -7,10 +7,10 @@ Subject: [PATCH] Fix NotePlayEvent public org.bukkit.craftbukkit.block.data.CraftBlockData toNMS(Ljava/lang/Enum;Ljava/lang/Class;)Ljava/lang/Enum; diff --git a/src/main/java/net/minecraft/world/level/block/NoteBlock.java b/src/main/java/net/minecraft/world/level/block/NoteBlock.java -index 6215f096849f48843d6e25875b8b71f6827ec0a5..f77d51d10e01fc4eaf5516c05c8be0ef7a425893 100644 +index 57e13269367a82ec39c2298b20d7595f61326f47..71fd7a467a4cb89cad8d2541366fd4add9115e04 100644 --- a/src/main/java/net/minecraft/world/level/block/NoteBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NoteBlock.java -@@ -94,11 +94,12 @@ public class NoteBlock extends Block { +@@ -96,11 +96,12 @@ public class NoteBlock extends Block { private void playNote(@Nullable Entity entity, BlockState state, Level world, BlockPos pos) { if (((NoteBlockInstrument) state.getValue(NoteBlock.INSTRUMENT)).worksAboveNoteBlock() || world.getBlockState(pos.above()).isAir()) { // CraftBukkit start @@ -27,7 +27,7 @@ index 6215f096849f48843d6e25875b8b71f6827ec0a5..f77d51d10e01fc4eaf5516c05c8be0ef world.blockEvent(pos, this, 0, 0); world.gameEvent(entity, (Holder) GameEvent.NOTE_BLOCK_PLAY, pos); } -@@ -138,10 +139,14 @@ public class NoteBlock extends Block { +@@ -139,10 +140,14 @@ public class NoteBlock extends Block { @Override protected boolean triggerEvent(BlockState state, Level world, BlockPos pos, int type, int data) { NoteBlockInstrument blockpropertyinstrument = (NoteBlockInstrument) state.getValue(NoteBlock.INSTRUMENT); @@ -43,7 +43,7 @@ index 6215f096849f48843d6e25875b8b71f6827ec0a5..f77d51d10e01fc4eaf5516c05c8be0ef f = NoteBlock.getPitchFromNote(k); world.addParticle(ParticleTypes.NOTE, (double) pos.getX() + 0.5D, (double) pos.getY() + 1.2D, (double) pos.getZ() + 0.5D, (double) k / 24.0D, 0.0D, 0.0D); -@@ -160,7 +165,7 @@ public class NoteBlock extends Block { +@@ -161,7 +166,7 @@ public class NoteBlock extends Block { holder = Holder.direct(SoundEvent.createVariableRangeEvent(minecraftkey)); } else { diff --git a/patches/unapplied/server/0655-Freeze-Tick-Lock-API.patch b/patches/server/0651-Freeze-Tick-Lock-API.patch index 69adb442ee..f978617977 100644 --- a/patches/unapplied/server/0655-Freeze-Tick-Lock-API.patch +++ b/patches/server/0651-Freeze-Tick-Lock-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Freeze Tick Lock API diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 9f40cc481ded9279319d92fe5a0a9278a3f5d9c2..7d9ebc71b794d40246cbd43ff4de5795970e7ebe 100644 +index 1497c3b79e6dc9ecc270c0fd2003e606f967a56e..a41bb1d80a84f487a8fb6fdefd7ccc7631902d04 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -411,6 +411,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -414,6 +414,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess private org.bukkit.util.Vector origin; @javax.annotation.Nullable private UUID originWorld; @@ -16,16 +16,16 @@ index 9f40cc481ded9279319d92fe5a0a9278a3f5d9c2..7d9ebc71b794d40246cbd43ff4de5795 public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -751,7 +752,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - this.setRemainingFireTicks(this.remainingFireTicks - 1); - } +@@ -759,7 +760,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + this.setRemainingFireTicks(this.remainingFireTicks - 1); + } -- if (this.getTicksFrozen() > 0) { -+ if (this.getTicksFrozen() > 0 && !freezeLocked) { // Paper - Freeze Tick Lock API - this.setTicksFrozen(0); - this.level().levelEvent((Player) null, 1009, this.blockPosition, 1); - } -@@ -2312,6 +2313,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +- if (this.getTicksFrozen() > 0) { ++ if (this.getTicksFrozen() > 0 && !freezeLocked) { // Paper - Freeze Tick Lock API + this.setTicksFrozen(0); + this.level().levelEvent((Player) null, 1009, this.blockPosition, 1); + } +@@ -2428,6 +2429,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (fromNetherPortal) { nbttagcompound.putBoolean("Paper.FromNetherPortal", true); } @@ -35,7 +35,7 @@ index 9f40cc481ded9279319d92fe5a0a9278a3f5d9c2..7d9ebc71b794d40246cbd43ff4de5795 // Paper end return nbttagcompound; } catch (Throwable throwable) { -@@ -2456,6 +2460,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2573,6 +2577,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (spawnReason == null) { spawnReason = org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT; } @@ -46,23 +46,23 @@ index 9f40cc481ded9279319d92fe5a0a9278a3f5d9c2..7d9ebc71b794d40246cbd43ff4de5795 } catch (Throwable throwable) { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index ee7bb1a01bf027eb7b28e3795950a17e5f686815..01a6e91f1b8f619e99d9bccde12f6e91e6ab5eb8 100644 +index 4db8ac288e59c5f14b260686e55a7d48e2f2791d..6598f119edc5d890dcc9d065478e7c52ac5a5183 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3497,7 +3497,7 @@ public abstract class LivingEntity extends Entity implements Attackable { - - this.level().getProfiler().pop(); - this.level().getProfiler().push("freezing"); +@@ -3611,7 +3611,7 @@ public abstract class LivingEntity extends Entity implements Attackable { + this.calculateEntityAnimation(this instanceof FlyingAnimal); + gameprofilerfiller.pop(); + gameprofilerfiller.push("freezing"); - if (!this.level().isClientSide && !this.isDeadOrDying()) { + if (!this.level().isClientSide && !this.isDeadOrDying() && !this.freezeLocked) { // Paper - Freeze Tick Lock API int i = this.getTicksFrozen(); if (this.isInPowderSnow && this.canFreeze()) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 4ed5647101bbace0005b1ebfb824e4aed48e43cb..4c09f2529dd8eb7ac7d260d177f5292ff2339442 100644 +index 9693656418210957000add9b6670c4bee67f8462..4e6afa243d6108cb946a8a7cf96c4036a3c2ac0c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -323,6 +323,17 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -324,6 +324,17 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return this.getHandle().isFullyFrozen(); } diff --git a/patches/unapplied/server/0656-More-PotionEffectType-API.patch b/patches/server/0652-More-PotionEffectType-API.patch index 2773c98338..2773c98338 100644 --- a/patches/unapplied/server/0656-More-PotionEffectType-API.patch +++ b/patches/server/0652-More-PotionEffectType-API.patch diff --git a/patches/unapplied/server/0657-Use-a-CHM-for-StructureTemplate.Pallete-cache.patch b/patches/server/0653-Use-a-CHM-for-StructureTemplate.Pallete-cache.patch index 82d25835a6..027285c2b1 100644 --- a/patches/unapplied/server/0657-Use-a-CHM-for-StructureTemplate.Pallete-cache.patch +++ b/patches/server/0653-Use-a-CHM-for-StructureTemplate.Pallete-cache.patch @@ -6,15 +6,15 @@ Subject: [PATCH] Use a CHM for StructureTemplate.Pallete cache fixes a CME due to this collection being shared across threads diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java b/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java -index 02b493435509f7a84a2c26050ca0c732ecf00ca0..33564e62e3181d28b18a957e28b8ec5152d8339f 100644 +index e7900e7e8263cae131dad2427fb2bfdadf5b8d14..b120949667ae0169a667b329b3cabbd79a0a5bda 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java +++ b/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java -@@ -859,7 +859,7 @@ public class StructureTemplate { +@@ -889,7 +889,7 @@ public class StructureTemplate { public static final class Palette { private final List<StructureTemplate.StructureBlockInfo> blocks; - private final Map<Block, List<StructureTemplate.StructureBlockInfo>> cache = Maps.newHashMap(); + private final Map<Block, List<StructureTemplate.StructureBlockInfo>> cache = Maps.newConcurrentMap(); // Paper - Fix CME due to this collection being shared across threads + @Nullable + private List<StructureTemplate.JigsawBlockInfo> cachedJigsaws; - Palette(List<StructureTemplate.StructureBlockInfo> infos) { - this.blocks = infos; diff --git a/patches/unapplied/server/0658-API-for-creating-command-sender-which-forwards-feedb.patch b/patches/server/0654-API-for-creating-command-sender-which-forwards-feedb.patch index 477c1e1ddb..de6e7d2811 100644 --- a/patches/unapplied/server/0658-API-for-creating-command-sender-which-forwards-feedb.patch +++ b/patches/server/0654-API-for-creating-command-sender-which-forwards-feedb.patch @@ -122,10 +122,10 @@ index 0000000000000000000000000000000000000000..e3a5f1ec376319bdfda87fa27ae217bf + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index bb232cd338f94b03f2add34766927ecae019e388..c0eca359919c55ba7b33520277c124eb54d935d7 100644 +index d30c1e853bb2e27922a00d890dffca153cdcbe97..93811e7770546c202085487642699e0c74b9f498 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2162,6 +2162,13 @@ public final class CraftServer implements Server { +@@ -2166,6 +2166,13 @@ public final class CraftServer implements Server { return this.console.console; } @@ -153,7 +153,7 @@ index 7f22950ae61436e91a59cd29a345809c42bbe739..1e3091687735b461d3b6a313ab876112 protected ServerCommandSender() { diff --git a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java -index 98d314cd293d462ef109e952f3239e08e14dda59..2ee33c55890fa659f6d251e486264c85d9e89802 100644 +index 4e81c26fdbd089961b2577168c716bf29d504d40..a35e2d2f53e8308d51e5a07b34c56d05a707bc14 100644 --- a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java +++ b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java @@ -81,6 +81,11 @@ public final class VanillaCommandWrapper extends BukkitCommand { diff --git a/patches/unapplied/server/0659-Add-missing-structure-set-seed-configs.patch b/patches/server/0655-Add-missing-structure-set-seed-configs.patch index 94091f5e9d..2862998d84 100644 --- a/patches/unapplied/server/0659-Add-missing-structure-set-seed-configs.patch +++ b/patches/server/0655-Add-missing-structure-set-seed-configs.patch @@ -20,7 +20,7 @@ seeds/salts to the frequency reducer which has a similar effect. Co-authored-by: William Blake Galbreath <[email protected]> diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java -index c5dd3aac54aa5936da4bd9f54f0e76ecf8141d27..102de569415ef011dacdca9a6ea8134d0ef62454 100644 +index 575fa665ff9c8f52056a0e7305540ec5c3da4785..906f56d07c26ef3c2dc1a3b62e9349dd91a37742 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java @@ -573,7 +573,7 @@ public abstract class ChunkGenerator { @@ -33,7 +33,7 @@ index c5dd3aac54aa5936da4bd9f54f0e76ecf8141d27..102de569415ef011dacdca9a6ea8134d this.tryGenerateStructure((StructureSet.StructureSelectionEntry) list.get(0), structureAccessor, registryManager, randomstate, structureTemplateManager, placementCalculator.getLevelSeed(), chunk, chunkcoordintpair, sectionposition); } else { diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java -index e6c59f986ae89022bd76463209dfa550a3d4fb59..a6b6e5ea191c0e2cd7a2e4f01b89d8af40a83c1b 100644 +index ed779a03e2ce7684428600dac4f2e92ab002f29f..a20520a6bd28bae1cee82258ac49d9753faba2bd 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java @@ -50,13 +50,14 @@ public class ChunkGeneratorStructureState { @@ -148,7 +148,7 @@ index e6c59f986ae89022bd76463209dfa550a3d4fb59..a6b6e5ea191c0e2cd7a2e4f01b89d8af } } diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java b/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java -index aae73586265593ee7830fb8dd5c2e3d7560057f0..c6181e14d85d454506534f9bbe856156c0d4a062 100644 +index 953ab7638f7242b5a11dd1de8786172443a0558c..5f354b333a39b873915bedd57b647355ae5bdf56 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java +++ b/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java @@ -74,6 +74,20 @@ public class StructureCheck { diff --git a/patches/unapplied/server/0660-Fix-cancelled-powdered-snow-bucket-placement.patch b/patches/server/0656-Fix-cancelled-powdered-snow-bucket-placement.patch index 08a9dbf2e4..d43d65f169 100644 --- a/patches/unapplied/server/0660-Fix-cancelled-powdered-snow-bucket-placement.patch +++ b/patches/server/0656-Fix-cancelled-powdered-snow-bucket-placement.patch @@ -8,10 +8,10 @@ snow bucket didn't revert grass that became snowy because of the placement. diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index ad1cb11245108b5cb187b686ed7e6bc769193b52..ec3be7fb4eb4560fe0106ac127f17d7437612157 100644 +index 8c9ae9ac38def29ae4cd8944395e566e434d46d0..9289faebce6b1546af71aeadc6569d2595b486e0 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -422,7 +422,7 @@ public final class ItemStack implements DataComponentHolder { +@@ -425,7 +425,7 @@ public final class ItemStack implements DataComponentHolder { int oldCount = this.getCount(); ServerLevel world = (ServerLevel) context.getLevel(); @@ -20,12 +20,12 @@ index ad1cb11245108b5cb187b686ed7e6bc769193b52..ec3be7fb4eb4560fe0106ac127f17d74 world.captureBlockStates = true; // special case bonemeal if (item == Items.BONE_MEAL) { -@@ -482,7 +482,7 @@ public final class ItemStack implements DataComponentHolder { - world.capturedBlockStates.clear(); - if (blocks.size() > 1) { - placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockMultiPlaceEvent(world, entityhuman, enumhand, blocks, blockposition.getX(), blockposition.getY(), blockposition.getZ()); -- } else if (blocks.size() == 1) { +@@ -488,7 +488,7 @@ public final class ItemStack implements DataComponentHolder { + world.capturedBlockStates.clear(); + if (blocks.size() > 1) { + placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockMultiPlaceEvent(world, entityhuman, enumhand, blocks, blockposition.getX(), blockposition.getY(), blockposition.getZ()); +- } else if (blocks.size() == 1) { + } else if (blocks.size() == 1 && item != Items.POWDER_SNOW_BUCKET) { // Paper - Fix cancelled powdered snow bucket placement - placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(world, entityhuman, enumhand, blocks.get(0), blockposition.getX(), blockposition.getY(), blockposition.getZ()); - } + placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(world, entityhuman, enumhand, blocks.get(0), blockposition.getX(), blockposition.getY(), blockposition.getZ()); + } diff --git a/patches/unapplied/server/0661-Add-missing-Validate-calls-to-CraftServer-getSpawnLi.patch b/patches/server/0657-Add-missing-Validate-calls-to-CraftServer-getSpawnLi.patch index 604f6800ee..f3ca4340b0 100644 --- a/patches/unapplied/server/0661-Add-missing-Validate-calls-to-CraftServer-getSpawnLi.patch +++ b/patches/server/0657-Add-missing-Validate-calls-to-CraftServer-getSpawnLi.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Add missing Validate calls to CraftServer#getSpawnLimit Copies appropriate checks from CraftWorld#getSpawnLimit diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index c0eca359919c55ba7b33520277c124eb54d935d7..1a2081267e85ef5c1edd4808fbda5bb442a00252 100644 +index 93811e7770546c202085487642699e0c74b9f498..8d9816f84e551f1257972f467352e9c9ee09473e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2339,6 +2339,8 @@ public final class CraftServer implements Server { +@@ -2343,6 +2343,8 @@ public final class CraftServer implements Server { @Override public int getSpawnLimit(SpawnCategory spawnCategory) { // Paper start - Add mobcaps commands diff --git a/patches/unapplied/server/0662-Add-GameEvent-tags.patch b/patches/server/0658-Add-GameEvent-tags.patch index d545e402ae..d92210881e 100644 --- a/patches/unapplied/server/0662-Add-GameEvent-tags.patch +++ b/patches/server/0658-Add-GameEvent-tags.patch @@ -46,11 +46,11 @@ index 0000000000000000000000000000000000000000..e7d9fd2702a1ce96596580fff8f5ee4f + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 1a2081267e85ef5c1edd4808fbda5bb442a00252..8589b0218659ae5ddbaac5437316bf59265324dd 100644 +index 8d9816f84e551f1257972f467352e9c9ee09473e..b18ad8abb5e3c53b0e13544a6833198a670c1f34 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2688,6 +2688,15 @@ public final class CraftServer implements Server { - return (org.bukkit.Tag<T>) new CraftEntityTag(BuiltInRegistries.ENTITY_TYPE, entityTagKey); +@@ -2700,6 +2700,15 @@ public final class CraftServer implements Server { + return (org.bukkit.Tag<T>) new CraftDamageTag(damageRegistry, damageTagKey); } } + // Paper start @@ -65,9 +65,9 @@ index 1a2081267e85ef5c1edd4808fbda5bb442a00252..8589b0218659ae5ddbaac5437316bf59 default -> throw new IllegalArgumentException(); } -@@ -2720,6 +2729,13 @@ public final class CraftServer implements Server { - net.minecraft.core.Registry<EntityType<?>> entityTags = BuiltInRegistries.ENTITY_TYPE; - return entityTags.getTags().map(pair -> (org.bukkit.Tag<T>) new CraftEntityTag(entityTags, pair.getFirst())).collect(ImmutableList.toImmutableList()); +@@ -2737,6 +2746,13 @@ public final class CraftServer implements Server { + net.minecraft.core.Registry<DamageType> damageTags = CraftRegistry.getMinecraftRegistry(Registries.DAMAGE_TYPE); + return damageTags.getTags().map(pair -> (org.bukkit.Tag<T>) new CraftDamageTag(damageTags, pair.key())).collect(ImmutableList.toImmutableList()); } + // Paper start + case org.bukkit.Tag.REGISTRY_GAME_EVENTS -> { diff --git a/patches/unapplied/server/0663-Execute-chunk-tasks-fairly-for-worlds-while-waiting-.patch b/patches/server/0659-Execute-chunk-tasks-fairly-for-worlds-while-waiting-.patch index f73960e08f..b3d65b12d0 100644 --- a/patches/unapplied/server/0663-Execute-chunk-tasks-fairly-for-worlds-while-waiting-.patch +++ b/patches/server/0659-Execute-chunk-tasks-fairly-for-worlds-while-waiting-.patch @@ -9,10 +9,10 @@ This might result in chunks loading far slower in the nether, for example. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 718b653a118a1c64d07efab93192f10dfcbf414e..d45f234fe389ade739bb13f824a1f650709220b8 100644 +index 15382d7da69967c50007f136e9d17dd2f81166e3..af392711da61a1921be1f82396c2a04dc897d563 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1369,6 +1369,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa +@@ -1419,6 +1419,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa if (super.pollTask()) { return true; } else { @@ -20,7 +20,7 @@ index 718b653a118a1c64d07efab93192f10dfcbf414e..d45f234fe389ade739bb13f824a1f650 if (this.tickRateManager.isSprinting() || this.haveTime()) { Iterator iterator = this.getAllLevels().iterator(); -@@ -1376,12 +1377,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa +@@ -1426,12 +1427,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa ServerLevel worldserver = (ServerLevel) iterator.next(); if (worldserver.getChunkSource().pollTask()) { diff --git a/patches/unapplied/server/0664-Furnace-RecipesUsed-API.patch b/patches/server/0660-Furnace-RecipesUsed-API.patch index d8224fe839..53a44cadbf 100644 --- a/patches/unapplied/server/0664-Furnace-RecipesUsed-API.patch +++ b/patches/server/0660-Furnace-RecipesUsed-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Furnace RecipesUsed API diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java b/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java -index ddbbf977c8f536a156ff6b2462353f7be5ab5742..677d8bc8fcfbb987378b4fbe1a57935786b612fb 100644 +index 0ec30feb68efc1747e489ee4bb60e6a503cb31c4..e39fe3c848657bb75ffa510926c5d9109e523db9 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java -@@ -104,5 +104,37 @@ public abstract class CraftFurnace<T extends AbstractFurnaceBlockEntity> extends +@@ -103,5 +103,37 @@ public abstract class CraftFurnace<T extends AbstractFurnaceBlockEntity> extends snapshot.cookSpeedMultiplier = multiplier; snapshot.cookingTotalTime = AbstractFurnaceBlockEntity.getTotalCookTime(this.isPlaced() ? this.world.getHandle() : null, snapshot.recipeType, snapshot, snapshot.cookSpeedMultiplier); // Update the snapshot's current total cook time to scale with the newly set multiplier } diff --git a/patches/unapplied/server/0665-Configurable-sculk-sensor-listener-range.patch b/patches/server/0661-Configurable-sculk-sensor-listener-range.patch index 99ff902efa..3dd1324354 100644 --- a/patches/unapplied/server/0665-Configurable-sculk-sensor-listener-range.patch +++ b/patches/server/0661-Configurable-sculk-sensor-listener-range.patch @@ -32,7 +32,7 @@ index 41ccbee5fc7767a7d5e1cdca0ec7d9a17ee80a90..1d28f117965da22694b12018923a5f13 } diff --git a/src/main/java/net/minecraft/world/level/block/entity/SculkSensorBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SculkSensorBlockEntity.java -index bbaffdac7c2d3bd646133b36c5d450cba9fc0c07..a943ed46a5f593dfe612c9c797dc961e3e020506 100644 +index 070814eb011ab8e02218c91e1cf75be5501c1a0a..28849cf84afcdc0d9fc245fac1a8d769a2db3b68 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/SculkSensorBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/SculkSensorBlockEntity.java @@ -26,6 +26,7 @@ public class SculkSensorBlockEntity extends BlockEntity implements GameEventList @@ -58,8 +58,8 @@ index bbaffdac7c2d3bd646133b36c5d450cba9fc0c07..a943ed46a5f593dfe612c9c797dc961e + protected static final String PAPER_LISTENER_RANGE_NBT_KEY = "Paper.ListenerRange"; // Paper - Configurable sculk sensor listener range @Override - protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) { - super.saveAdditional(nbt, registryLookup); + protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registries) { + super.saveAdditional(nbt, registries); @@ -63,7 +72,13 @@ public class SculkSensorBlockEntity extends BlockEntity implements GameEventList .encodeStart(registryOps, this.vibrationData) .resultOrPartial(string -> LOGGER.error("Failed to encode vibration listener for Sculk Sensor: '{}'", string)) diff --git a/patches/unapplied/server/0666-Add-missing-block-data-API.patch b/patches/server/0662-Add-missing-block-data-API.patch index ace8c632a6..ace8c632a6 100644 --- a/patches/unapplied/server/0666-Add-missing-block-data-API.patch +++ b/patches/server/0662-Add-missing-block-data-API.patch diff --git a/patches/unapplied/server/0667-Option-to-have-default-CustomSpawners-in-custom-worl.patch b/patches/server/0663-Option-to-have-default-CustomSpawners-in-custom-worl.patch index 9093bae5b5..94613610ac 100644 --- a/patches/unapplied/server/0667-Option-to-have-default-CustomSpawners-in-custom-worl.patch +++ b/patches/server/0663-Option-to-have-default-CustomSpawners-in-custom-worl.patch @@ -10,10 +10,10 @@ just looking at the LevelStem key, look at the DimensionType key which is one level below that. Defaults to off to keep vanilla behavior. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d45f234fe389ade739bb13f824a1f650709220b8..413a37991d1df6314dd9938e5eb5f28f5b69efb8 100644 +index af392711da61a1921be1f82396c2a04dc897d563..7841421f00a3408e52b8d060674e6a686681210e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -631,7 +631,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa +@@ -647,7 +647,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa this.commandStorage = new CommandStorage(worldpersistentdata); } else { ChunkProgressListener worldloadlistener = this.progressListenerFactory.create(this.worldData.getGameRules().getInt(GameRules.RULE_SPAWN_CHUNK_RADIUS)); diff --git a/patches/unapplied/server/0668-Put-world-into-worldlist-before-initing-the-world.patch b/patches/server/0664-Put-world-into-worldlist-before-initing-the-world.patch index 06960bd554..b1cada3470 100644 --- a/patches/unapplied/server/0668-Put-world-into-worldlist-before-initing-the-world.patch +++ b/patches/server/0664-Put-world-into-worldlist-before-initing-the-world.patch @@ -7,10 +7,10 @@ Some parts of legacy conversion will need the overworld to get the legacy structure data storage diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 413a37991d1df6314dd9938e5eb5f28f5b69efb8..e7d6f4e6ac41b183c702d5195e4f94136c22b000 100644 +index 7841421f00a3408e52b8d060674e6a686681210e..cc162b2046c7d39d9a85bcb69fc45e53d15fe5ef 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -643,9 +643,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa +@@ -659,9 +659,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa } worlddata.setModdedInfo(this.getServerModName(), this.getModdedStatus().shouldReportAsModified()); @@ -23,17 +23,17 @@ index 413a37991d1df6314dd9938e5eb5f28f5b69efb8..e7d6f4e6ac41b183c702d5195e4f9413 if (worlddata.getCustomBossEvents() != null) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 8589b0218659ae5ddbaac5437316bf59265324dd..74d2f6df5a4cdab8a24ca1769c7b7d98ef87bcfe 100644 +index b18ad8abb5e3c53b0e13544a6833198a670c1f34..29a71a050e49f1131ce9945c4275a33909ea3091 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1334,10 +1334,11 @@ public final class CraftServer implements Server { +@@ -1337,10 +1337,11 @@ public final class CraftServer implements Server { return null; } + this.console.addLevel(internal); // Paper - Put world into worldlist before initing the world; move up this.console.initWorld(internal, worlddata, worlddata, worlddata.worldGenOptions()); - internal.setSpawnSettings(true, true); + internal.setSpawnSettings(true); - this.console.addLevel(internal); + // Paper - Put world into worldlist before initing the world; move up diff --git a/patches/unapplied/server/0669-Custom-Potion-Mixes.patch b/patches/server/0665-Custom-Potion-Mixes.patch index 22dfe4c65a..5ff6d93023 100644 --- a/patches/unapplied/server/0669-Custom-Potion-Mixes.patch +++ b/patches/server/0665-Custom-Potion-Mixes.patch @@ -96,22 +96,22 @@ index 0000000000000000000000000000000000000000..7ea357ac2f3a93db4ebdf24b5072be7d + } +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index e7d6f4e6ac41b183c702d5195e4f94136c22b000..94aa901b77b19445a33d5b2b24ba2e947d2a6aef 100644 +index cc162b2046c7d39d9a85bcb69fc45e53d15fe5ef..0b9f4541cc0d0f27e811c1a6798d6758a2687b0c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -2158,6 +2158,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa - +@@ -2239,6 +2239,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa this.worldData.setDataConfiguration(worlddataconfiguration); - this.resources.managers.updateRegistryTags(); + this.resources.managers.updateStaticRegistryTags(); + this.resources.managers.getRecipeManager().finalizeRecipeLoading(this.worldData.enabledFeatures()); + this.potionBrewing = this.potionBrewing.reload(this.worldData.enabledFeatures()); // Paper - Custom Potion Mixes this.getPlayerList().saveAll(); this.getPlayerList().reloadResources(); this.functionManager.replaceLibrary(this.resources.managers.getFunctionLibrary()); diff --git a/src/main/java/net/minecraft/world/inventory/BrewingStandMenu.java b/src/main/java/net/minecraft/world/inventory/BrewingStandMenu.java -index 302e3fba89bc0f2f36448a7be1178710f5ea4d35..68c529cb38d61cd3a0f39bef0f666057fc219c9b 100644 +index b6ae648d1fa6382bc1fa5d21e45b09ec8c4c22ca..182c87a0b7081f6a777c4c7969961c30438b0d86 100644 --- a/src/main/java/net/minecraft/world/inventory/BrewingStandMenu.java +++ b/src/main/java/net/minecraft/world/inventory/BrewingStandMenu.java -@@ -53,9 +53,11 @@ public class BrewingStandMenu extends AbstractContainerMenu { +@@ -54,9 +54,11 @@ public class BrewingStandMenu extends AbstractContainerMenu { this.brewingStandData = propertyDelegate; PotionBrewing potionbrewer = playerInventory.player.level().potionBrewing(); @@ -126,7 +126,7 @@ index 302e3fba89bc0f2f36448a7be1178710f5ea4d35..68c529cb38d61cd3a0f39bef0f666057 this.ingredientSlot = this.addSlot(new BrewingStandMenu.IngredientsSlot(potionbrewer, inventory, 3, 79, 17)); this.addSlot(new BrewingStandMenu.FuelSlot(inventory, 4, 17, 17)); this.addDataSlots(propertyDelegate); -@@ -98,7 +100,7 @@ public class BrewingStandMenu extends AbstractContainerMenu { +@@ -87,7 +89,7 @@ public class BrewingStandMenu extends AbstractContainerMenu { if (!this.moveItemStackTo(itemstack1, 3, 4, false)) { return ItemStack.EMPTY; } @@ -135,7 +135,7 @@ index 302e3fba89bc0f2f36448a7be1178710f5ea4d35..68c529cb38d61cd3a0f39bef0f666057 if (!this.moveItemStackTo(itemstack1, 0, 3, false)) { return ItemStack.EMPTY; } -@@ -147,13 +149,15 @@ public class BrewingStandMenu extends AbstractContainerMenu { +@@ -136,13 +138,15 @@ public class BrewingStandMenu extends AbstractContainerMenu { private static class PotionSlot extends Slot { @@ -153,7 +153,7 @@ index 302e3fba89bc0f2f36448a7be1178710f5ea4d35..68c529cb38d61cd3a0f39bef0f666057 } @Override -@@ -172,8 +176,8 @@ public class BrewingStandMenu extends AbstractContainerMenu { +@@ -161,8 +165,8 @@ public class BrewingStandMenu extends AbstractContainerMenu { super.onTake(player, stack); } @@ -263,10 +263,10 @@ index 50e81e3babd331077eda8daa769eb2b3f99e8ca2..ca01f3344005b295c7ae98f6d5b03f79 private final List<Ingredient> containers = new ArrayList<>(); private final List<PotionBrewing.Mix<Potion>> potionMixes = new ArrayList<>(); diff --git a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java -index c8f9972ad1c2330908cc840d426f29c20b242ca8..a2fafef89d5354e2cb02f5672810909950a57777 100644 +index e167c2834f1b7899a7d11cef782940deeb739a9c..2bafacd7bc56186d9105d2031180f8c4a6940018 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java -@@ -315,12 +315,12 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements +@@ -316,12 +316,12 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements @Override public boolean canPlaceItem(int slot, ItemStack stack) { @@ -276,16 +276,16 @@ index c8f9972ad1c2330908cc840d426f29c20b242ca8..a2fafef89d5354e2cb02f56728109099 return potionbrewer.isIngredient(stack); } else { -- return slot == 4 ? stack.is(Items.BLAZE_POWDER) : (stack.is(Items.POTION) || stack.is(Items.SPLASH_POTION) || stack.is(Items.LINGERING_POTION) || stack.is(Items.GLASS_BOTTLE)) && this.getItem(slot).isEmpty(); -+ return slot == 4 ? stack.is(Items.BLAZE_POWDER) : (stack.is(Items.POTION) || stack.is(Items.SPLASH_POTION) || stack.is(Items.LINGERING_POTION) || stack.is(Items.GLASS_BOTTLE) || potionbrewer.isCustomInput(stack)) && this.getItem(slot).isEmpty(); // Paper - Custom Potion Mixes +- return slot == 4 ? stack.is(ItemTags.BREWING_FUEL) : (stack.is(Items.POTION) || stack.is(Items.SPLASH_POTION) || stack.is(Items.LINGERING_POTION) || stack.is(Items.GLASS_BOTTLE)) && this.getItem(slot).isEmpty(); ++ return slot == 4 ? stack.is(ItemTags.BREWING_FUEL) : (stack.is(Items.POTION) || stack.is(Items.SPLASH_POTION) || stack.is(Items.LINGERING_POTION) || stack.is(Items.GLASS_BOTTLE) || potionbrewer.isCustomInput(stack)) && this.getItem(slot).isEmpty(); // Paper - Custom Potion Mixes } } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 74d2f6df5a4cdab8a24ca1769c7b7d98ef87bcfe..566ed56de6fcb4dc64e504310b46295466917eee 100644 +index 29a71a050e49f1131ce9945c4275a33909ea3091..f0eb8284b537014b591e45f034f1498e7e687e54 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -308,6 +308,7 @@ public final class CraftServer implements Server { +@@ -311,6 +311,7 @@ public final class CraftServer implements Server { private final io.papermc.paper.datapack.PaperDatapackManager datapackManager; // Paper public static Exception excessiveVelEx; // Paper - Velocity warnings private final io.papermc.paper.logging.SysoutCatcher sysoutCatcher = new io.papermc.paper.logging.SysoutCatcher(); // Paper @@ -293,7 +293,7 @@ index 74d2f6df5a4cdab8a24ca1769c7b7d98ef87bcfe..566ed56de6fcb4dc64e504310b462954 static { ConfigurationSerialization.registerClass(CraftOfflinePlayer.class); -@@ -392,6 +393,7 @@ public final class CraftServer implements Server { +@@ -395,6 +396,7 @@ public final class CraftServer implements Server { if (this.configuration.getBoolean("settings.use-map-color-cache")) { MapPalette.setMapColorCache(new CraftMapColorCache(this.logger)); } @@ -301,7 +301,7 @@ index 74d2f6df5a4cdab8a24ca1769c7b7d98ef87bcfe..566ed56de6fcb4dc64e504310b462954 datapackManager = new io.papermc.paper.datapack.PaperDatapackManager(console.getPackRepository()); // Paper } -@@ -3048,5 +3050,9 @@ public final class CraftServer implements Server { +@@ -3067,5 +3069,9 @@ public final class CraftServer implements Server { return datapackManager; } @@ -312,11 +312,11 @@ index 74d2f6df5a4cdab8a24ca1769c7b7d98ef87bcfe..566ed56de6fcb4dc64e504310b462954 // Paper end } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java -index 139dff90561ac6c51954c6289918a07aeea13a1b..6ba29875d78ede4aa7978ff689e588f7fed11528 100644 +index 6f1da5aa8714d64b8454dc79258f941ead986e46..a68e036a12b354c4f04b6596dfb9cd6e7663718b 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java -@@ -15,6 +15,11 @@ public interface CraftRecipe extends Recipe { - void addToCraftingManager(); +@@ -25,6 +25,11 @@ public interface CraftRecipe extends Recipe { + } default Ingredient toNMS(RecipeChoice bukkit, boolean requireNotEmpty) { + // Paper start diff --git a/patches/unapplied/server/0670-Force-close-world-loading-screen.patch b/patches/server/0666-Force-close-world-loading-screen.patch index 284d512115..647914a1ef 100644 --- a/patches/unapplied/server/0670-Force-close-world-loading-screen.patch +++ b/patches/server/0666-Force-close-world-loading-screen.patch @@ -10,13 +10,13 @@ so we do not need that. The client only needs the chunk it is currently in to be loaded to close the loading screen, so we just send an empty one. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index cff45afb90b232a236683bd569d50aab6b701149..e30ad8c7e85c25f3133bbd23dcbe59ae4c2f8db5 100644 +index f34cad30c982f2bb563f0deab030111720858fa8..f65b583057d37ec64a7cd9ed3ec09448064576db 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -394,6 +394,16 @@ public abstract class PlayerList { - this.sendActivePlayerEffects(player); - // Paper start - Fire PlayerJoinEvent when Player is actually ready; move vehicle into method so it can be called above - short circuit around that code - this.onPlayerJoinFinish(player, worldserver1, s1); +@@ -179,6 +179,16 @@ public abstract class PlayerList { + this.registries = registryManager; + this.maxPlayers = maxPlayers; + this.playerIo = saveHandler; + // Paper start - Send empty chunk, so players aren't stuck in the world loading screen with our chunk system not sending chunks when dead + if (player.isDeadOrDying()) { + net.minecraft.core.Holder<net.minecraft.world.level.biome.Biome> plains = worldserver1.registryAccess().registryOrThrow(net.minecraft.core.registries.Registries.BIOME) @@ -28,5 +28,5 @@ index cff45afb90b232a236683bd569d50aab6b701149..e30ad8c7e85c25f3133bbd23dcbe59ae + } + // Paper end - Send empty chunk } - private void mountSavedVehicle(ServerPlayer player, ServerLevel worldserver1, Optional<CompoundTag> optional) { - // Paper end - Fire PlayerJoinEvent when Player is actually ready + abstract public void loadAndSaveFiles(); // Paper - fix converting txt to json file; moved from DedicatedPlayerList constructor + diff --git a/patches/unapplied/server/0671-Fix-falling-block-spawn-methods.patch b/patches/server/0667-Fix-falling-block-spawn-methods.patch index 548b96559b..46c0f8edfb 100644 --- a/patches/unapplied/server/0671-Fix-falling-block-spawn-methods.patch +++ b/patches/server/0667-Fix-falling-block-spawn-methods.patch @@ -11,10 +11,10 @@ Restores the API behavior from previous versions of the server public net.minecraft.world.entity.item.FallingBlockEntity <init>(Lnet/minecraft/world/level/Level;DDDLnet/minecraft/world/level/block/state/BlockState;)V diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index ba011d3b56ed0e5019da61ccfec687042d863beb..20a954c8637c2cf9cc6c0c823e33a44f668cc4f6 100644 +index 7dc167950021371b5cf8a7e1e38f013220e1c8a6..9ea74d52112ab4feea3f4bafd82351a72088cbc5 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -1395,7 +1395,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1405,7 +1405,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { Preconditions.checkArgument(material != null, "Material cannot be null"); Preconditions.checkArgument(material.isBlock(), "Material.%s must be a block", material); @@ -28,7 +28,7 @@ index ba011d3b56ed0e5019da61ccfec687042d863beb..20a954c8637c2cf9cc6c0c823e33a44f return (FallingBlock) entity.getBukkitEntity(); } -@@ -1404,7 +1409,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1414,7 +1419,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { Preconditions.checkArgument(location != null, "Location cannot be null"); Preconditions.checkArgument(data != null, "BlockData cannot be null"); @@ -43,10 +43,10 @@ index ba011d3b56ed0e5019da61ccfec687042d863beb..20a954c8637c2cf9cc6c0c823e33a44f } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityTypes.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityTypes.java -index 481f0c62fcd4435d655cfe2f94f46262b24a7144..37527713b0afa6db19eefd57aaffcb2fe3544ce6 100644 +index 42ecef3dbb888ba716b6f63335efca6fb0f27457..b79e72a77178f755957ef391b6444a357bdefbd0 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityTypes.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityTypes.java -@@ -387,7 +387,7 @@ public final class CraftEntityTypes { +@@ -440,7 +440,7 @@ public final class CraftEntityTypes { register(new EntityTypeData<>(EntityType.TNT, TNTPrimed.class, CraftTNTPrimed::new, spawnData -> new PrimedTnt(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), null))); register(new EntityTypeData<>(EntityType.FALLING_BLOCK, FallingBlock.class, CraftFallingBlock::new, spawnData -> { BlockPos pos = BlockPos.containing(spawnData.x(), spawnData.y(), spawnData.z()); diff --git a/patches/unapplied/server/0672-Expose-furnace-minecart-push-values.patch b/patches/server/0668-Expose-furnace-minecart-push-values.patch index 6245e14b4e..6245e14b4e 100644 --- a/patches/unapplied/server/0672-Expose-furnace-minecart-push-values.patch +++ b/patches/server/0668-Expose-furnace-minecart-push-values.patch diff --git a/patches/unapplied/server/0673-Fix-cancelling-ProjectileHitEvent-for-piercing-arrow.patch b/patches/server/0669-Fix-cancelling-ProjectileHitEvent-for-piercing-arrow.patch index 4698298019..7a72849b26 100644 --- a/patches/unapplied/server/0673-Fix-cancelling-ProjectileHitEvent-for-piercing-arrow.patch +++ b/patches/server/0669-Fix-cancelling-ProjectileHitEvent-for-piercing-arrow.patch @@ -15,11 +15,11 @@ piercing arrows to avoid duplicate damage being applied. protected net.minecraft.world.entity.projectile.Projectile hitCancelled diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -index 57ebb96707748e90810dc07471f9769f1317df9d..10d30304c8c89b1f2a55be8529035311d1424e44 100644 +index 44bcb1117cfa4d66c500011489ae193a0d1e7d78..75cc3db39c974abab8510af4a633fc6812efc647 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -@@ -329,6 +329,19 @@ public abstract class AbstractArrow extends Projectile { - } +@@ -344,6 +344,19 @@ public abstract class AbstractArrow extends Projectile { + } + // Paper start - Fix cancelling ProjectileHitEvent for piercing arrows diff --git a/patches/unapplied/server/0674-More-Projectile-API.patch b/patches/server/0670-More-Projectile-API.patch index a58713f203..db5d86dec1 100644 --- a/patches/unapplied/server/0674-More-Projectile-API.patch +++ b/patches/server/0670-More-Projectile-API.patch @@ -28,10 +28,10 @@ Co-authored-by: MelnCat <[email protected]> Co-authored-by: Lulu13022002 <[email protected]> diff --git a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java -index 5b7734020b496ade3740d92908ad2d399bfd55e6..e70ca1b2e6fbbc1f20e65429298d01b4ebd2dd29 100644 +index 536196a740f607adda2a5ae7f644981ac26bef98..1f95234c0a1457050574aa0f6c4b2a8c91b1f272 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java +++ b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java -@@ -414,13 +414,18 @@ public class FishingHook extends Projectile { +@@ -419,13 +419,18 @@ public class FishingHook extends Projectile { } } else { // CraftBukkit start - logic to modify fishing wait time @@ -53,10 +53,10 @@ index 5b7734020b496ade3740d92908ad2d399bfd55e6..e70ca1b2e6fbbc1f20e65429298d01b4 public boolean calculateOpenWater(BlockPos pos) { FishingHook.OpenWaterType entityfishinghook_waterposition = FishingHook.OpenWaterType.INVALID; diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index d27e17ebf25cd842a943cf82bde05b2248c74414..06ca07edef062f21c51860146086297ca345104d 100644 +index 2cb77d0b6e6ba880a2a76488a870a20ed883b15a..846a108af8bacdcaf3a17db9fb808965ce2581bb 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -@@ -190,7 +190,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -288,7 +288,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { } // CraftBukkit start - call projectile hit event @@ -66,10 +66,10 @@ index d27e17ebf25cd842a943cf82bde05b2248c74414..06ca07edef062f21c51860146086297c this.hitCancelled = event != null && event.isCancelled(); if (movingobjectposition.getType() == HitResult.Type.BLOCK || !this.hitCancelled) { diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java -index cb34cc9443da56c0497c7a0192c8b8363c3426fe..58dc69fe319027c2b9ecfb9caf272368e81081df 100644 +index d6ac07d9d5ee0430a1d91b7084b378aac1d047e5..a486466040a646b8a5a5ff2430cdd25b95b7e20f 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java -@@ -102,6 +102,11 @@ public class ThrownPotion extends ThrowableItemProjectile implements ItemSupplie +@@ -103,8 +103,12 @@ public class ThrownPotion extends ThrowableItemProjectile { @Override protected void onHit(HitResult hitResult) { super.onHit(hitResult); @@ -78,28 +78,30 @@ index cb34cc9443da56c0497c7a0192c8b8363c3426fe..58dc69fe319027c2b9ecfb9caf272368 + } + public void splash(@Nullable HitResult hitResult) { + // Paper end - More projectile API - if (!this.level().isClientSide) { + Level world = this.level(); +- + if (world instanceof ServerLevel worldserver) { ItemStack itemstack = this.getItem(); PotionContents potioncontents = (PotionContents) itemstack.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY); -@@ -113,7 +118,7 @@ public class ThrownPotion extends ThrowableItemProjectile implements ItemSupplie +@@ -116,7 +120,7 @@ public class ThrownPotion extends ThrowableItemProjectile { if (this.isLingering()) { showParticles = this.makeAreaOfEffectCloud(potioncontents, hitResult); // CraftBukkit - Pass MovingObjectPosition // Paper } else { -- showParticles = this.applySplash(potioncontents.getAllEffects(), hitResult.getType() == HitResult.Type.ENTITY ? ((EntityHitResult) hitResult).getEntity() : null, hitResult); // CraftBukkit - Pass MovingObjectPosition // Paper -+ showParticles = this.applySplash(potioncontents.getAllEffects(), hitResult != null && hitResult.getType() == HitResult.Type.ENTITY ? ((EntityHitResult) hitResult).getEntity() : null, hitResult); // CraftBukkit - Pass MovingObjectPosition // Paper - More projectile API +- showParticles = this.applySplash(worldserver, potioncontents.getAllEffects(), hitResult.getType() == HitResult.Type.ENTITY ? ((EntityHitResult) hitResult).getEntity() : null, hitResult); // CraftBukkit - Pass MovingObjectPosition // Paper ++ showParticles = this.applySplash(worldserver, potioncontents.getAllEffects(), hitResult != null && hitResult.getType() == HitResult.Type.ENTITY ? ((EntityHitResult) hitResult).getEntity() : null, hitResult); // CraftBukkit - Pass MovingObjectPosition // Paper - More projectile API } } -@@ -175,7 +180,7 @@ public class ThrownPotion extends ThrowableItemProjectile implements ItemSupplie +@@ -178,7 +182,7 @@ public class ThrownPotion extends ThrowableItemProjectile { } -- private boolean applySplash(Iterable<MobEffectInstance> iterable, @Nullable Entity entity, HitResult position) { // CraftBukkit - Pass MovingObjectPosition // Paper - Fix potions splash events -+ private boolean applySplash(Iterable<MobEffectInstance> iterable, @Nullable Entity entity, @Nullable HitResult position) { // CraftBukkit - Pass MovingObjectPosition // Paper - Fix potions splash events & More projectile API +- private boolean applySplash(ServerLevel worldserver, Iterable<MobEffectInstance> iterable, @Nullable Entity entity, HitResult position) { // CraftBukkit - Pass MovingObjectPosition // Paper - Fix potions splash events ++ private boolean applySplash(ServerLevel worldserver, Iterable<MobEffectInstance> iterable, @Nullable Entity entity, @Nullable HitResult position) { // CraftBukkit - Pass MovingObjectPosition // Paper - Fix potions splash events & More projectile API AABB axisalignedbb = this.getBoundingBox().inflate(4.0D, 2.0D, 4.0D); - List<net.minecraft.world.entity.LivingEntity> list = this.level().getEntitiesOfClass(net.minecraft.world.entity.LivingEntity.class, axisalignedbb); + List<net.minecraft.world.entity.LivingEntity> list = worldserver.getEntitiesOfClass(net.minecraft.world.entity.LivingEntity.class, axisalignedbb); Map<LivingEntity, Double> affected = new HashMap<LivingEntity, Double>(); // CraftBukkit -@@ -253,7 +258,7 @@ public class ThrownPotion extends ThrowableItemProjectile implements ItemSupplie +@@ -256,7 +260,7 @@ public class ThrownPotion extends ThrowableItemProjectile { } @@ -179,10 +181,10 @@ index 91c2d0b40d3fca86938cd454e1415a4eea3df7c7..de4fb2654c7895cfd83ad694455ee56c + // Paper end - More projectile API } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java -index 329ca9c743a7f2feeabbfb769ff9a71f60165006..faa08ad912fa43e7a6c5a2359e23c04c059c5edf 100644 +index 0f85c1f991469b277bba8b40b087f7224b4b3a85..1f30109abd86b76af343eb5eb75ec3db83ef9417 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java -@@ -58,20 +58,7 @@ public class CraftAbstractArrow extends AbstractProjectile implements AbstractAr +@@ -59,20 +59,7 @@ public class CraftAbstractArrow extends AbstractProjectile implements AbstractAr this.getHandle().setCritArrow(critical); } @@ -204,7 +206,7 @@ index 329ca9c743a7f2feeabbfb769ff9a71f60165006..faa08ad912fa43e7a6c5a2359e23c04c @Override public boolean isInBlock() { -@@ -130,6 +117,7 @@ public class CraftAbstractArrow extends AbstractProjectile implements AbstractAr +@@ -133,6 +120,7 @@ public class CraftAbstractArrow extends AbstractProjectile implements AbstractAr @Override public ItemStack getWeapon() { @@ -212,7 +214,7 @@ index 329ca9c743a7f2feeabbfb769ff9a71f60165006..faa08ad912fa43e7a6c5a2359e23c04c return CraftItemStack.asBukkitCopy(this.getHandle().getWeaponItem()); } -@@ -149,4 +137,37 @@ public class CraftAbstractArrow extends AbstractProjectile implements AbstractAr +@@ -152,4 +140,37 @@ public class CraftAbstractArrow extends AbstractProjectile implements AbstractAr public String toString() { return "CraftArrow"; } @@ -251,7 +253,7 @@ index 329ca9c743a7f2feeabbfb769ff9a71f60165006..faa08ad912fa43e7a6c5a2359e23c04c + // Paper end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java -index 81f5e1d866128af8fb2acc13aca715580fdf9886..88f2a9f310f30a08893f3fa68af13a54cf72fa7f 100644 +index 6591513bb62226b6f85fd2ef9f6ebe376f0f7362..f9c113dc018702159345240d6d0de85767afa0c3 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java @@ -125,7 +125,7 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud @@ -275,14 +277,14 @@ index 81f5e1d866128af8fb2acc13aca715580fdf9886..88f2a9f310f30a08893f3fa68af13a54 @@ -151,7 +151,7 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud public void clearCustomEffects() { PotionContents old = this.getHandle().potionContents; - this.getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), List.of())); + this.getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), List.of(), old.customName())); - this.getHandle().updateColor(); + // this.getHandle().updateColor(); // Paper - already done above } @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java -index 5232fbef0d014edd32a5d18d4a1500ab215313f5..071be344c3265a0cd52b31ffbb02ff7a70bdf231 100644 +index 199d5836dc787cca54c6b653a4e67573f2f758a2..15d50a284cafc2eb59239ca00926836526f09e06 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java @@ -43,7 +43,7 @@ public class CraftArrow extends CraftAbstractArrow implements Arrow { @@ -297,7 +299,7 @@ index 5232fbef0d014edd32a5d18d4a1500ab215313f5..071be344c3265a0cd52b31ffbb02ff7a @@ -51,7 +51,7 @@ public class CraftArrow extends CraftAbstractArrow implements Arrow { public void clearCustomEffects() { PotionContents old = this.getHandle().getPotionContents(); - this.getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), List.of())); + this.getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), List.of(), old.customName())); - this.getHandle().updateColor(); + // this.getHandle().updateColor(); // Paper - already done above } @@ -310,7 +312,7 @@ index 5232fbef0d014edd32a5d18d4a1500ab215313f5..071be344c3265a0cd52b31ffbb02ff7a - int colorRGB = (color == null) ? -1 : color.asRGB(); + int colorRGB = (color == null) ? net.minecraft.world.entity.projectile.Arrow.NO_EFFECT_COLOR : color.asARGB(); // Paper PotionContents old = this.getHandle().getPotionContents(); - this.getHandle().setPotionContents(new PotionContents(old.potion(), Optional.of(colorRGB), old.customEffects())); + this.getHandle().setPotionContents(new PotionContents(old.potion(), Optional.of(colorRGB), old.customEffects(), old.customName())); } @Override @@ -325,18 +327,18 @@ index 5232fbef0d014edd32a5d18d4a1500ab215313f5..071be344c3265a0cd52b31ffbb02ff7a } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityTypes.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityTypes.java -index 37527713b0afa6db19eefd57aaffcb2fe3544ce6..46a4f31e2b6eee6f8dc5f8fccd7de4c48a698b61 100644 +index b79e72a77178f755957ef391b6444a357bdefbd0..39ea25d2145acaa7c7b458800adc674a3e73e7c1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityTypes.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityTypes.java -@@ -389,7 +389,7 @@ public final class CraftEntityTypes { +@@ -442,7 +442,7 @@ public final class CraftEntityTypes { BlockPos pos = BlockPos.containing(spawnData.x(), spawnData.y(), spawnData.z()); return new FallingBlockEntity(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), spawnData.world().getBlockState(pos)); // Paper - create falling block entities correctly })); - register(new EntityTypeData<>(EntityType.FIREWORK_ROCKET, Firework.class, CraftFirework::new, spawnData -> new FireworkRocketEntity(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), net.minecraft.world.item.ItemStack.EMPTY))); + register(new EntityTypeData<>(EntityType.FIREWORK_ROCKET, Firework.class, CraftFirework::new, spawnData -> new FireworkRocketEntity(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), FireworkRocketEntity.getDefaultItem()))); // Paper - pass correct default to rocket for data storage register(new EntityTypeData<>(EntityType.EVOKER_FANGS, EvokerFangs.class, CraftEvokerFangs::new, spawnData -> new net.minecraft.world.entity.projectile.EvokerFangs(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), (float) Math.toRadians(spawnData.yaw()), 0, null))); - register(new EntityTypeData<>(EntityType.COMMAND_BLOCK_MINECART, CommandMinecart.class, CraftMinecartCommand::new, spawnData -> new MinecartCommandBlock(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z()))); - register(new EntityTypeData<>(EntityType.MINECART, RideableMinecart.class, CraftMinecartRideable::new, spawnData -> new Minecart(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z()))); + register(new EntityTypeData<>(EntityType.COMMAND_BLOCK_MINECART, CommandMinecart.class, CraftMinecartCommand::new, createMinecart(net.minecraft.world.entity.EntityType.COMMAND_BLOCK_MINECART))); + register(new EntityTypeData<>(EntityType.MINECART, RideableMinecart.class, CraftMinecartRideable::new, createMinecart(net.minecraft.world.entity.EntityType.MINECART))); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java index 1b084d63bdbb24dad45d28eed1693eb6e26e24dc..43d7bea201a52cfeacf60c75caa28dfd2c4ff164 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java @@ -518,10 +520,10 @@ index 6e2f91423371ead9890095cf4b1e2299c4dcba28..9d8f4b7176e60180565e3134a14ecf19 + // Paper end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 0ed2910e64b6efdb4180c5bc23a146aced87c3d9..6350d4729fa3fbd9b15f1150cb4322f1c685044a 100644 +index e148239d4930e5cbb000beed4de386f992f28d88..14b4c3835388d957653ba34444968bb718ce7f68 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -570,8 +570,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -579,8 +579,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { } @Override @@ -538,7 +540,7 @@ index 0ed2910e64b6efdb4180c5bc23a146aced87c3d9..6350d4729fa3fbd9b15f1150cb4322f1 Preconditions.checkState(!this.getHandle().generation, "Cannot launch projectile during world generation"); net.minecraft.world.level.Level world = ((CraftWorld) this.getWorld()).getHandle(); -@@ -597,7 +604,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -606,7 +613,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { } else { launch = new net.minecraft.world.entity.projectile.Arrow(world, this.getHandle(), new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.ARROW), null); } @@ -546,8 +548,8 @@ index 0ed2910e64b6efdb4180c5bc23a146aced87c3d9..6350d4729fa3fbd9b15f1150cb4322f1 + ((net.minecraft.world.entity.projectile.AbstractArrow) launch).shootFromRotation(this.getHandle(), this.getHandle().getXRot(), this.getHandle().getYRot(), 0.0F, Trident.class.isAssignableFrom(projectile) ? net.minecraft.world.item.TridentItem.SHOOT_POWER : 3.0F, 1.0F); // ItemBow // Paper - see TridentItem } else if (ThrownPotion.class.isAssignableFrom(projectile)) { if (LingeringPotion.class.isAssignableFrom(projectile)) { - launch = new net.minecraft.world.entity.projectile.ThrownPotion(world, this.getHandle()); -@@ -656,8 +663,26 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { + launch = new net.minecraft.world.entity.projectile.ThrownPotion(world, this.getHandle(), new net.minecraft.world.item.ItemStack(Items.LINGERING_POTION)); +@@ -663,8 +670,26 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { } else if (Firework.class.isAssignableFrom(projectile)) { Location location = this.getEyeLocation(); @@ -576,7 +578,7 @@ index 0ed2910e64b6efdb4180c5bc23a146aced87c3d9..6350d4729fa3fbd9b15f1150cb4322f1 } Preconditions.checkArgument(launch != null, "Projectile (%s) not supported", projectile.getName()); -@@ -665,6 +690,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -672,6 +697,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { if (velocity != null) { ((T) launch.getBukkitEntity()).setVelocity(velocity); } @@ -765,10 +767,10 @@ index e374b9f40eddca13b30855d25a2030f8df98138f..4fc893378fb0568ddcffc7593d66df6b // Paper end } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 5fc6ef13cdc9df11b0fd2b0baf3cec862ccb5e37..eeb326a115020f571e96f3ec85408950b5eb56fb 100644 +index 376563ea6990aef558a34e4f5889125412b734df..412f5e414745123535a275d5670b35fff5b1aaec 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -843,19 +843,19 @@ public class CraftEventFactory { +@@ -841,19 +841,19 @@ public class CraftEventFactory { /** * PotionSplashEvent */ @@ -791,7 +793,7 @@ index 5fc6ef13cdc9df11b0fd2b0baf3cec862ccb5e37..eeb326a115020f571e96f3ec85408950 hitEntity = ((EntityHitResult) position).getEntity().getBukkitEntity(); } -@@ -864,20 +864,20 @@ public class CraftEventFactory { +@@ -862,20 +862,20 @@ public class CraftEventFactory { return event; } @@ -816,10 +818,10 @@ index 5fc6ef13cdc9df11b0fd2b0baf3cec862ccb5e37..eeb326a115020f571e96f3ec85408950 } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -index e8a455eb5e17bcfcae3f03664f2b47773fbdf37e..08178a88ba7d0881a6c2843eef24a846cf07adb4 100644 +index 60062ea5b18b95a14c459f2f3a0743c1e1ac0f12..502be683e8b04a9966043c9bee9d9fe793b12ef5 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -@@ -329,12 +329,23 @@ public final class CraftItemStack extends ItemStack { +@@ -341,12 +341,23 @@ public final class CraftItemStack extends ItemStack { public ItemMeta getItemMeta() { return CraftItemStack.getItemMeta(this.handle); } @@ -844,10 +846,10 @@ index e8a455eb5e17bcfcae3f03664f2b47773fbdf37e..08178a88ba7d0881a6c2843eef24a846 } diff --git a/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java b/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java -index 93b9e6b32798e32026492fa3f80de9d4a7b3d9a5..d2329ebf12dbea922fab481cd6822b36682f3461 100644 +index 642f5bf75661eb485558bc227f668e84416f3b5f..76fd4d27730d9139caa67099a6757ea33d681be9 100644 --- a/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java +++ b/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java -@@ -55,7 +55,15 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { +@@ -56,7 +56,15 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { @Override public <T extends Projectile> T launchProjectile(Class<? extends T> projectile, Vector velocity) { @@ -863,7 +865,7 @@ index 93b9e6b32798e32026492fa3f80de9d4a7b3d9a5..d2329ebf12dbea922fab481cd6822b36 // Copied from BlockDispenser.dispense() BlockSource sourceblock = new BlockSource((ServerLevel) this.dispenserBlock.getLevel(), this.dispenserBlock.getBlockPos(), this.dispenserBlock.getBlockState(), this.dispenserBlock); // Copied from DispenseBehaviorProjectile -@@ -67,7 +75,7 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { +@@ -68,7 +76,7 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { item = Items.SNOWBALL; } else if (Egg.class.isAssignableFrom(projectile)) { item = Items.EGG; @@ -872,7 +874,7 @@ index 93b9e6b32798e32026492fa3f80de9d4a7b3d9a5..d2329ebf12dbea922fab481cd6822b36 item = Items.ENDER_PEARL; } else if (ThrownExpBottle.class.isAssignableFrom(projectile)) { item = Items.EXPERIENCE_BOTTLE; -@@ -82,20 +90,20 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { +@@ -83,20 +91,20 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { item = Items.TIPPED_ARROW; } else if (SpectralArrow.class.isAssignableFrom(projectile)) { item = Items.SPECTRAL_ARROW; @@ -897,7 +899,7 @@ index 93b9e6b32798e32026492fa3f80de9d4a7b3d9a5..d2329ebf12dbea922fab481cd6822b36 ItemStack itemstack = new ItemStack(item); ProjectileItem projectileItem = (ProjectileItem) item; -@@ -104,7 +112,7 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { +@@ -105,7 +113,7 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { Position iposition = dispenseConfig.positionFunction().getDispensePosition(sourceblock, enumdirection); net.minecraft.world.entity.projectile.Projectile launch = projectileItem.asProjectile(world, iposition, itemstack, enumdirection); @@ -905,8 +907,8 @@ index 93b9e6b32798e32026492fa3f80de9d4a7b3d9a5..d2329ebf12dbea922fab481cd6822b36 + if (false && Fireball.class.isAssignableFrom(projectile)) { // Paper - more project API - dispensers cannot launch anything but fire charges. AbstractHurtingProjectile customFireball = null; if (WitherSkull.class.isAssignableFrom(projectile)) { - launch = customFireball = EntityType.WITHER_SKULL.create(world); -@@ -129,7 +137,7 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { + launch = customFireball = EntityType.WITHER_SKULL.create(world, EntitySpawnReason.TRIGGERED); +@@ -130,7 +138,7 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { } } @@ -915,7 +917,7 @@ index 93b9e6b32798e32026492fa3f80de9d4a7b3d9a5..d2329ebf12dbea922fab481cd6822b36 arrow.pickup = net.minecraft.world.entity.projectile.AbstractArrow.Pickup.ALLOWED; } launch.projectileSource = this; -@@ -138,6 +146,11 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { +@@ -139,6 +147,11 @@ public class CraftBlockProjectileSource implements BlockProjectileSource { if (velocity != null) { ((T) launch.getBukkitEntity()).setVelocity(velocity); } diff --git a/patches/unapplied/server/0675-Fix-swamp-hut-cat-generation-deadlock.patch b/patches/server/0671-Fix-swamp-hut-cat-generation-deadlock.patch index 6aa68bdd5c..24bfbc0dc7 100644 --- a/patches/unapplied/server/0675-Fix-swamp-hut-cat-generation-deadlock.patch +++ b/patches/server/0671-Fix-swamp-hut-cat-generation-deadlock.patch @@ -10,20 +10,20 @@ indefinitely. Instead of using the world state, we use the already supplied ServerLevelAccessor which will always have the chunk available. diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index f0e5428394f8de8f7ac05b8cbc34826d153eeaef..d44807c16712afd37efdbf434d1afb12a7c3d343 100644 +index f3a991aa878f3b29fdc525ecdde6766efb5e129c..5a86530c65d7d83e4608600a04ffd931bf59dc4a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -357,7 +357,7 @@ public class Cat extends TamableAnimal implements VariantHolder<Holder<CatVarian +@@ -366,7 +366,7 @@ public class Cat extends TamableAnimal implements VariantHolder<Holder<CatVarian BuiltInRegistries.CAT_VARIANT.getRandomElementOf(tagkey, world.getRandom()).ifPresent(this::setVariant); ServerLevel worldserver = world.getLevel(); - if (worldserver.structureManager().getStructureWithPieceAt(this.blockPosition(), StructureTags.CATS_SPAWN_AS_BLACK).isValid()) { + if (worldserver.structureManager().getStructureWithPieceAt(this.blockPosition(), StructureTags.CATS_SPAWN_AS_BLACK, world).isValid()) { // Paper - Fix swamp hut cat generation deadlock - this.setVariant((Holder) BuiltInRegistries.CAT_VARIANT.getHolderOrThrow(CatVariant.ALL_BLACK)); + this.setVariant((Holder) BuiltInRegistries.CAT_VARIANT.getOrThrow(CatVariant.ALL_BLACK)); this.setPersistenceRequired(); } diff --git a/src/main/java/net/minecraft/world/level/StructureManager.java b/src/main/java/net/minecraft/world/level/StructureManager.java -index ceec33ced3d0b65a3e800378e250d0166d0c195f..54972cce2314eff774250101df43a9b7074e9604 100644 +index 3d607ac74de4bc051ab68269dbab0bbd3a52dc54..03adb02297911e5a5051edac14453d7e3eeac29c 100644 --- a/src/main/java/net/minecraft/world/level/StructureManager.java +++ b/src/main/java/net/minecraft/world/level/StructureManager.java @@ -48,7 +48,12 @@ public class StructureManager { @@ -54,11 +54,11 @@ index ceec33ced3d0b65a3e800378e250d0166d0c195f..54972cce2314eff774250101df43a9b7 + + public StructureStart getStructureWithPieceAt(BlockPos pos, Predicate<Holder<Structure>> predicate, @Nullable ServerLevelAccessor levelAccessor) { + // Paper end - Fix swamp hut cat generation deadlock - Registry<Structure> registry = this.registryAccess().registryOrThrow(Registries.STRUCTURE); + Registry<Structure> registry = this.registryAccess().lookupOrThrow(Registries.STRUCTURE); for (StructureStart structureStart : this.startsForStructure( -- new ChunkPos(pos), structure -> registry.getHolder(registry.getId(structure)).map(predicate::test).orElse(false) -+ new ChunkPos(pos), structure -> registry.getHolder(registry.getId(structure)).map(predicate::test).orElse(false), levelAccessor // Paper - Fix swamp hut cat generation deadlock +- new ChunkPos(pos), structure -> registry.get(registry.getId(structure)).map(predicate::test).orElse(false) ++ new ChunkPos(pos), structure -> registry.get(registry.getId(structure)).map(predicate::test).orElse(false), levelAccessor // Paper - Fix swamp hut cat generation deadlock )) { if (this.structureHasPieceAt(pos, structureStart)) { return structureStart; diff --git a/patches/unapplied/server/0676-Don-t-allow-vehicle-movement-from-players-while-tele.patch b/patches/server/0672-Don-t-allow-vehicle-movement-from-players-while-tele.patch index 0ceb6b0ce1..b0a250292c 100644 --- a/patches/unapplied/server/0676-Don-t-allow-vehicle-movement-from-players-while-tele.patch +++ b/patches/server/0672-Don-t-allow-vehicle-movement-from-players-while-tele.patch @@ -7,10 +7,10 @@ Bring the vehicle move packet behavior in line with the regular player move packet. diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 1e806fd16ca5f90bdb4f71dea008d7936eb82562..76c9feb5e1389eb929571de74ececd4a4f384453 100644 +index 7b858178ce7d0e33fec17311f1710bead5f0837d..33f76a6df7997ecdc789004bf0b230e74ad07f5a 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -484,6 +484,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -481,6 +481,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.disconnect((Component) Component.translatable("multiplayer.disconnect.invalid_vehicle_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_VEHICLE_MOVEMENT); // Paper - kick event cause } else if (!this.updateAwaitingTeleport()) { Entity entity = this.player.getRootVehicle(); diff --git a/patches/unapplied/server/0677-Implement-getComputedBiome-API.patch b/patches/server/0673-Implement-getComputedBiome-API.patch index 41624673a7..3028eee933 100644 --- a/patches/unapplied/server/0677-Implement-getComputedBiome-API.patch +++ b/patches/server/0673-Implement-getComputedBiome-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Implement getComputedBiome API diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java -index 5d137f8c42356359701e1bea7525f82c018b502c..f6dd8665b9f6e2a8ff396deba8a021e695bedf7e 100644 +index 123824f6b8306900ed5c0b3addb884301dbcab7e..244cff4f84792fd0efe146e6faf47db0b0a0dc87 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java @@ -77,6 +77,13 @@ public abstract class CraftRegionAccessor implements RegionAccessor { @@ -23,7 +23,7 @@ index 5d137f8c42356359701e1bea7525f82c018b502c..f6dd8665b9f6e2a8ff396deba8a021e6 public void setBiome(Location location, Biome biome) { this.setBiome(location.getBlockX(), location.getBlockY(), location.getBlockZ(), biome); diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -index 068b3735b6c50a7a2053c7dc39856f728fb7218a..6d10396347b69d9243ab902ecc68ede93fa17b7d 100644 +index d5b495b5a3ca7f4411d1a700f7149042a16509f1..68fcec085334383808b2117a49220f4d8239220b 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -340,6 +340,13 @@ public class CraftBlock implements Block { @@ -41,10 +41,10 @@ index 068b3735b6c50a7a2053c7dc39856f728fb7218a..6d10396347b69d9243ab902ecc68ede9 public void setBiome(Biome bio) { this.getWorld().setBiome(this.getX(), this.getY(), this.getZ(), bio); diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java b/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java -index 7d6ee60b1d3e023e1eabc59eb591c3ae3d8ac043..eaa9ba70b0b80d86eb376a0641420093a7c9dfdb 100644 +index 2c7b64bd7071cb803a042152d497982d753e0b5d..a23269e3bdb83f85a1d08d5f7b54742025223ada 100644 --- a/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java +++ b/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java -@@ -165,6 +165,14 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe +@@ -166,6 +166,14 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe return super.getBiome(x, y, z); } diff --git a/patches/unapplied/server/0678-Make-some-itemstacks-nonnull.patch b/patches/server/0674-Make-some-itemstacks-nonnull.patch index 4679d4a859..5254271c7e 100644 --- a/patches/unapplied/server/0678-Make-some-itemstacks-nonnull.patch +++ b/patches/server/0674-Make-some-itemstacks-nonnull.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Make some itemstacks nonnull diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java -index 972fe4237461f07f78b60845b2ebfefb06698ded..9d74577af071954e1e37201a96368c1360076209 100644 +index 5e40faa88c51b0ebd76493fd1731d16ca1051f4a..46d0b324498510c73a8439611f44269edee62313 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java @@ -155,13 +155,13 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i diff --git a/patches/unapplied/server/0679-Implement-enchantWithLevels-API.patch b/patches/server/0675-Implement-enchantWithLevels-API.patch index 23f8df7503..08f1ffbe3e 100644 --- a/patches/unapplied/server/0679-Implement-enchantWithLevels-API.patch +++ b/patches/server/0675-Implement-enchantWithLevels-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement enchantWithLevels API diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -index 803a19063c03627dbea79cb1c395ae35aaef2834..fef91dbede067f1ab99a9c7d463a2c55cc6cae3a 100644 +index 237df8b37ee8cf5b15e8e6d30fa3b51ef394434d..944dcc1126c947b4c8c3b4fdd174eb57320abbba 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -@@ -302,4 +302,47 @@ public final class CraftItemFactory implements ItemFactory { +@@ -305,4 +305,47 @@ public final class CraftItemFactory implements ItemFactory { return eggItem == null ? null : new net.minecraft.world.item.ItemStack(eggItem).asBukkitMirror(); } // Paper end - old getSpawnEgg API diff --git a/patches/unapplied/server/0680-Fix-saving-in-unloadWorld.patch b/patches/server/0676-Fix-saving-in-unloadWorld.patch index 5536c9b21a..d5a0b6e7c7 100644 --- a/patches/unapplied/server/0680-Fix-saving-in-unloadWorld.patch +++ b/patches/server/0676-Fix-saving-in-unloadWorld.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix saving in unloadWorld Change savingDisabled to false to ensure ServerLevel's saving logic gets called when unloadWorld is called with save = true diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 566ed56de6fcb4dc64e504310b46295466917eee..183d9672ad60e2b7db48c283b1ca863df01ad658 100644 +index f0eb8284b537014b591e45f034f1498e7e687e54..cc08b56da8a276202da3e85315fdb2ad530c2545 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1383,7 +1383,7 @@ public final class CraftServer implements Server { +@@ -1386,7 +1386,7 @@ public final class CraftServer implements Server { try { if (save) { diff --git a/patches/unapplied/server/0681-Buffer-OOB-setBlock-calls.patch b/patches/server/0677-Buffer-OOB-setBlock-calls.patch index 7bc7bd4823..1b7ba291c4 100644 --- a/patches/unapplied/server/0681-Buffer-OOB-setBlock-calls.patch +++ b/patches/server/0677-Buffer-OOB-setBlock-calls.patch @@ -13,7 +13,7 @@ we'll also only gen a trace for the first one, I see no real pressing need to generate more, given that that would *massively* negate this patch otherwise diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java -index 421f146ea9c35b852251c0ddb29856c13e11aef3..13229388ddce668061a34c787ab9586d41854d8a 100644 +index f1725ef766c35aa623ace58fe8bf31fc9b2bb6b3..5bf438bb58833c1df3620e82d3d2b90207366372 100644 --- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java +++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java @@ -284,6 +284,7 @@ public class WorldGenRegion implements WorldGenLevel { diff --git a/patches/server/0678-Add-TameableDeathMessageEvent.patch b/patches/server/0678-Add-TameableDeathMessageEvent.patch new file mode 100644 index 0000000000..79f0ebc540 --- /dev/null +++ b/patches/server/0678-Add-TameableDeathMessageEvent.patch @@ -0,0 +1,24 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Owen1212055 <[email protected]> +Date: Mon, 21 Jun 2021 21:24:45 -0400 +Subject: [PATCH] Add TameableDeathMessageEvent + + +diff --git a/src/main/java/net/minecraft/world/entity/TamableAnimal.java b/src/main/java/net/minecraft/world/entity/TamableAnimal.java +index cd565d1a8dab8d45196e4d29cab3d93a3ca619eb..550c7f3435cc6c3180769e47f05bf693bdc380e3 100644 +--- a/src/main/java/net/minecraft/world/entity/TamableAnimal.java ++++ b/src/main/java/net/minecraft/world/entity/TamableAnimal.java +@@ -250,7 +250,12 @@ public abstract class TamableAnimal extends Animal implements OwnableEntity { + if (entityliving instanceof ServerPlayer) { + ServerPlayer entityplayer = (ServerPlayer) entityliving; + +- entityplayer.sendSystemMessage(this.getCombatTracker().getDeathMessage()); ++ // Paper start - Add TameableDeathMessageEvent ++ io.papermc.paper.event.entity.TameableDeathMessageEvent event = new io.papermc.paper.event.entity.TameableDeathMessageEvent((org.bukkit.entity.Tameable) getBukkitEntity(), io.papermc.paper.adventure.PaperAdventure.asAdventure(this.getCombatTracker().getDeathMessage())); ++ if (event.callEvent()) { ++ entityplayer.sendSystemMessage(this.getCombatTracker().getDeathMessage()); ++ } ++ // Paper end - Add TameableDeathMessageEvent + } + } + } diff --git a/patches/unapplied/server/0683-Fix-new-block-data-for-EntityChangeBlockEvent.patch b/patches/server/0679-Fix-new-block-data-for-EntityChangeBlockEvent.patch index 6dae9bf4a8..93f56e5157 100644 --- a/patches/unapplied/server/0683-Fix-new-block-data-for-EntityChangeBlockEvent.patch +++ b/patches/server/0679-Fix-new-block-data-for-EntityChangeBlockEvent.patch @@ -27,10 +27,10 @@ index 6a7052cd6ec88ed4aaea2fef0ebc750060d1dec0..2ade08d1466660ee1787fa97908002ef } // CraftBukkit } diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java -index 4253b3b1263a7ae5a2f5f3a34674dfea615a81ea..784a894688f98f9d0368a36d456c5c94e1ee3695 100644 +index e2aa6d46375cbc4f4b694888c4f9750eb26e4940..6827426e6e9706909265f84bf97b5fa7105a7fea 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java -@@ -72,7 +72,7 @@ public class BreakDoorGoal extends DoorInteractGoal { +@@ -73,7 +73,7 @@ public class BreakDoorGoal extends DoorInteractGoal { if (this.breakTime == this.getDoorBreakTime() && this.isValidDifficulty(this.mob.level().getDifficulty())) { // CraftBukkit start @@ -40,7 +40,7 @@ index 4253b3b1263a7ae5a2f5f3a34674dfea615a81ea..784a894688f98f9d0368a36d456c5c94 return; } diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java -index f4bc556e245179d0a4710e5255dd289aaafdceb7..d802985f1431be4332c07f0dab88feebedea4ce2 100644 +index dc3602002e60d64cbbe9504c22282a9e65da2c9d..9e6f946e6d2878aa3fa8abe0f6fa4770d18676d3 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java @@ -67,8 +67,9 @@ public class EatBlockGoal extends Goal { @@ -48,10 +48,10 @@ index f4bc556e245179d0a4710e5255dd289aaafdceb7..d802985f1431be4332c07f0dab88feeb BlockPos blockposition = this.mob.blockPosition(); - if (EatBlockGoal.IS_TALL_GRASS.test(this.level.getBlockState(blockposition))) { -- if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition, Blocks.AIR.defaultBlockState(), !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit +- if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition, Blocks.AIR.defaultBlockState(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit + final BlockState blockState = this.level.getBlockState(blockposition); // Paper - fix wrong block state + if (EatBlockGoal.IS_TALL_GRASS.test(blockState)) { // Paper - fix wrong block state -+ if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition, blockState.getFluidState().createLegacyBlock(), !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - fix wrong block state ++ if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition, blockState.getFluidState().createLegacyBlock(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - fix wrong block state this.level.destroyBlock(blockposition, false); } @@ -59,16 +59,16 @@ index f4bc556e245179d0a4710e5255dd289aaafdceb7..d802985f1431be4332c07f0dab88feeb BlockPos blockposition1 = blockposition.below(); if (this.level.getBlockState(blockposition1).is(Blocks.GRASS_BLOCK)) { -- if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.AIR.defaultBlockState(), !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit -+ if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.DIRT.defaultBlockState(), !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - Fix wrong block state +- if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.AIR.defaultBlockState(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit ++ if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.DIRT.defaultBlockState(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - Fix wrong block state this.level.levelEvent(2001, blockposition1, Block.getId(Blocks.GRASS_BLOCK.defaultBlockState())); this.level.setBlock(blockposition1, Blocks.DIRT.defaultBlockState(), 2); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index e5bd3039ef698fcea80a270b6111c2a663e5075c..0109c8ed8bf6a053674456fa4473934e028ca418 100644 +index a2bbb79f2999e719b8c80d33e530391ec3d1d2d2..8cc6022507c97af62fb2b4455198bc35744137c9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -@@ -581,7 +581,7 @@ public class Rabbit extends Animal implements VariantHolder<Rabbit.Variant> { +@@ -580,7 +580,7 @@ public class Rabbit extends Animal implements VariantHolder<Rabbit.Variant> { if (i == 0) { // CraftBukkit start @@ -78,10 +78,10 @@ index e5bd3039ef698fcea80a270b6111c2a663e5075c..0109c8ed8bf6a053674456fa4473934e } // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 3cd4a744c3e3aeba90f342de9dea67ef2f3de626..1b49090a466bc74d9e5f2815314955b6dfbb83dc 100644 +index b145023308e6a2823d83db97ff2d79c38b709ef9..e6b18d7f8922cb42acb9e40bef2f71a56aea8646 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -377,7 +377,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -375,7 +375,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { if (WitherBoss.canDestroy(iblockdata)) { // CraftBukkit start @@ -91,10 +91,10 @@ index 3cd4a744c3e3aeba90f342de9dea67ef2f3de626..1b49090a466bc74d9e5f2815314955b6 } // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 7caa5469a4daa5d0c569f446ff2d597a9f10e8ac..828c51477cd8f35d591367b30bf4feef6a250292 100644 +index 0e8349aa6cb23860a4dd884e730ac8f22d422205..48dcd2bc12ce1d08cc5195bff5460dc0dd9902d3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -565,7 +565,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -552,7 +552,7 @@ public class EnderMan extends Monster implements NeutralMob { boolean flag = movingobjectpositionblock.getBlockPos().equals(blockposition); if (iblockdata.is(BlockTags.ENDERMAN_HOLDABLE) && flag) { @@ -104,23 +104,23 @@ index 7caa5469a4daa5d0c569f446ff2d597a9f10e8ac..828c51477cd8f35d591367b30bf4feef world.gameEvent((Holder) GameEvent.BLOCK_DESTROY, blockposition, GameEvent.Context.of(this.enderman, iblockdata)); this.enderman.setCarriedBlock(iblockdata.getBlock().defaultBlockState()); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index aa4111eef22546f8aa630228c51ef5761c9b373b..212d341425c0f93bba0376de69bea61ffcf4dbd6 100644 +index c661ae4e5c07494c7de852cc8d01f0f9839c1590..c96fbfe448b3e7b722a8db0e1688276776abd94e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -151,7 +151,7 @@ public class Ravager extends Raider { +@@ -165,7 +165,7 @@ public class Ravager extends Raider { - if (block instanceof LeavesBlock) { - // CraftBukkit start -- if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, net.minecraft.world.level.block.Blocks.AIR.defaultBlockState())) { -+ if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state - continue; - } - // CraftBukkit end + if (block instanceof LeavesBlock) { + // CraftBukkit start +- if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, net.minecraft.world.level.block.Blocks.AIR.defaultBlockState())) { ++ if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state + continue; + } + // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java -index 9ff42b0ae2b82dc3092e38e1439d89b4ab554b17..860e385fc83f9787dca92efe35d21fd69c4dd635 100644 +index 52d8ea3e40cdb01eab428f5d3d945c0c9f6088ce..1580c8b93a4ea1a9f2d7bf9c589ef64e070e3f53 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java +++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java -@@ -162,7 +162,8 @@ public class Silverfish extends Monster { +@@ -165,7 +165,8 @@ public class Silverfish extends Monster { if (block instanceof InfestedBlock) { // CraftBukkit start @@ -131,10 +131,10 @@ index 9ff42b0ae2b82dc3092e38e1439d89b4ab554b17..860e385fc83f9787dca92efe35d21fd6 } // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java -index 58dc69fe319027c2b9ecfb9caf272368e81081df..5c6cb752f61c3f3c2960a337173fb7dfe86cc1d3 100644 +index a486466040a646b8a5a5ff2430cdd25b95b7e20f..e78eef3b6fbcd657f9dd180df4cb2eeb55d0814f 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownPotion.java -@@ -292,7 +292,7 @@ public class ThrownPotion extends ThrowableItemProjectile implements ItemSupplie +@@ -294,7 +294,7 @@ public class ThrownPotion extends ThrowableItemProjectile { if (iblockdata.is(BlockTags.FIRE)) { // CraftBukkit start @@ -144,38 +144,38 @@ index 58dc69fe319027c2b9ecfb9caf272368e81081df..5c6cb752f61c3f3c2960a337173fb7df } // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/level/block/ChorusFlowerBlock.java b/src/main/java/net/minecraft/world/level/block/ChorusFlowerBlock.java -index bb1487dd2c8e4374f75a102ab5e17ce9b2d31114..6709cb6b657a8612781c2fe4dd76ee38f329c5ba 100644 +index fae574f8617bada96469a2eb1349eaa061f0450f..6d0d13e70a82c4db7848e1007f5b6d670dd5acad 100644 --- a/src/main/java/net/minecraft/world/level/block/ChorusFlowerBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ChorusFlowerBlock.java -@@ -284,7 +284,7 @@ public class ChorusFlowerBlock extends Block { - - if (!world.isClientSide && projectile.mayInteract(world, blockposition) && projectile.mayBreak(world)) { - // CraftBukkit -- if (!CraftEventFactory.callEntityChangeBlockEvent(projectile, blockposition, Blocks.AIR.defaultBlockState())) { -+ if (!CraftEventFactory.callEntityChangeBlockEvent(projectile, blockposition, state.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state - return; - } - // CraftBukkit end +@@ -286,7 +286,7 @@ public class ChorusFlowerBlock extends Block { + if (world instanceof ServerLevel worldserver) { + if (projectile.mayInteract(worldserver, blockposition) && projectile.mayBreak(worldserver)) { + // CraftBukkit +- if (!CraftEventFactory.callEntityChangeBlockEvent(projectile, blockposition, Blocks.AIR.defaultBlockState())) { ++ if (!CraftEventFactory.callEntityChangeBlockEvent(projectile, blockposition, state.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state + return; + } + // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java b/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java -index ec9190abe3edf7c3845156bb967dddf6ae7c30ff..95cb7492ac691a8e8aa9894f701b802a7eda5446 100644 +index 48503f5ba8bccb42ae3b5324a5f65f6c23a8e479..bd38a0a73d543a85bb5c6d50219f5438ce194df3 100644 --- a/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java +++ b/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java -@@ -134,7 +134,7 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate +@@ -137,7 +137,7 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate - if (projectile.mayInteract(world, blockposition) && projectile.mayBreak(world) && projectile instanceof ThrownTrident && projectile.getDeltaMovement().length() > 0.6D) { - // CraftBukkit start -- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(projectile, blockposition, Blocks.AIR.defaultBlockState())) { -+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(projectile, blockposition, state.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state - return; - } - // CraftBukkit end + if (projectile.mayInteract(worldserver, blockposition) && projectile.mayBreak(worldserver) && projectile instanceof ThrownTrident && projectile.getDeltaMovement().length() > 0.6D) { + // CraftBukkit start +- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(projectile, blockposition, Blocks.AIR.defaultBlockState())) { ++ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(projectile, blockposition, state.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state + return; + } + // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/level/block/TntBlock.java b/src/main/java/net/minecraft/world/level/block/TntBlock.java -index 4896ddca849646135ae101236e534ab8f59bd617..a3525ae6d83591664e1456f20d9732a8de0ec326 100644 +index d256b0f3998028709334dd6c394d184f2c36efce..2cbe2053dd5d0bcdcd89de69762c77b400b8697a 100644 --- a/src/main/java/net/minecraft/world/level/block/TntBlock.java +++ b/src/main/java/net/minecraft/world/level/block/TntBlock.java @@ -158,7 +158,7 @@ public class TntBlock extends Block { - if (projectile.isOnFire() && projectile.mayInteract(world, blockposition)) { + if (projectile.isOnFire() && projectile.mayInteract(worldserver, blockposition)) { // CraftBukkit start - if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(projectile, blockposition, Blocks.AIR.defaultBlockState()) || !CraftEventFactory.callTNTPrimeEvent(world, blockposition, PrimeCause.PROJECTILE, projectile, null)) { + if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(projectile, blockposition, state.getFluidState().createLegacyBlock()) || !CraftEventFactory.callTNTPrimeEvent(world, blockposition, PrimeCause.PROJECTILE, projectile, null)) { // Paper - fix wrong block state @@ -183,12 +183,12 @@ index 4896ddca849646135ae101236e534ab8f59bd617..a3525ae6d83591664e1456f20d9732a8 } // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/level/block/WaterlilyBlock.java b/src/main/java/net/minecraft/world/level/block/WaterlilyBlock.java -index edc20745649b0837f1371c8d29e71fc0c8e5528f..932831bb5632ead5850842fc77192c841571162e 100644 +index 674d710ff88db5eced9e017284d1b7ec7a4fe7cd..72320c6099a4b26235bab68570e7b7efad84740f 100644 --- a/src/main/java/net/minecraft/world/level/block/WaterlilyBlock.java +++ b/src/main/java/net/minecraft/world/level/block/WaterlilyBlock.java @@ -37,7 +37,7 @@ public class WaterlilyBlock extends BushBlock { - if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent - if (world instanceof ServerLevel && entity instanceof Boat) { + super.entityInside(state, world, pos, entity); + if (world instanceof ServerLevel && entity instanceof AbstractBoat) { // CraftBukkit start - if (!CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState())) { + if (!CraftEventFactory.callEntityChangeBlockEvent(entity, pos, state.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state @@ -196,10 +196,10 @@ index edc20745649b0837f1371c8d29e71fc0c8e5528f..932831bb5632ead5850842fc77192c84 } // CraftBukkit end diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index eeb326a115020f571e96f3ec85408950b5eb56fb..ba1599b733946bef468a9b006411f8827844e791 100644 +index 412f5e414745123535a275d5670b35fff5b1aaec..f7e26e381c2a2fec70cc2df01a12e7dbeeab48cd 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1380,11 +1380,11 @@ public class CraftEventFactory { +@@ -1378,11 +1378,11 @@ populateFields(victim, event); // Paper - make cancellable return event; } diff --git a/patches/unapplied/server/0684-fix-player-loottables-running-when-mob-loot-gamerule.patch b/patches/server/0680-fix-player-loottables-running-when-mob-loot-gamerule.patch index ad38317db7..82df4acd2c 100644 --- a/patches/unapplied/server/0684-fix-player-loottables-running-when-mob-loot-gamerule.patch +++ b/patches/server/0680-fix-player-loottables-running-when-mob-loot-gamerule.patch @@ -5,16 +5,16 @@ Subject: [PATCH] fix player loottables running when mob loot gamerule is false diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 25ca370c0b19eca529fc2c980c50e899013f0897..f31eb944465e9011d8aad398eb60bafb44203ad5 100644 +index f72ab5e4e743cb0758ebca28e81f97c143c91b42..84f4913c06bf9068a3a4d7400055031c474a4f7e 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -959,12 +959,14 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { +@@ -1218,12 +1218,14 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { } } } + if (this.shouldDropLoot() && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { // Paper - fix player loottables running when mob loot gamerule is false // SPIGOT-5071: manually add player loot tables (SPIGOT-5195 - ignores keepInventory rule) - this.dropFromLootTable(damageSource, this.lastHurtByPlayerTime > 0); + this.dropFromLootTable(this.serverLevel(), damageSource, this.lastHurtByPlayerTime > 0); this.dropCustomDeathLoot(this.serverLevel(), damageSource, flag); loot.addAll(this.drops); diff --git a/patches/unapplied/server/0685-Ensure-entity-passenger-world-matches-ridden-entity.patch b/patches/server/0681-Ensure-entity-passenger-world-matches-ridden-entity.patch index ba6ce8567a..941971cf97 100644 --- a/patches/unapplied/server/0685-Ensure-entity-passenger-world-matches-ridden-entity.patch +++ b/patches/server/0681-Ensure-entity-passenger-world-matches-ridden-entity.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Ensure entity passenger world matches ridden entity Bad plugins doing this would cause some obvious problems... diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 7d9ebc71b794d40246cbd43ff4de5795970e7ebe..3bb7e0f6a02b9b1726b8c878271d89a9c6d56c12 100644 +index a41bb1d80a84f487a8fb6fdefd7ccc7631902d04..325c8b178dfb39727107190e74663113ebb4ab54 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2687,7 +2687,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2802,7 +2802,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean startRiding(Entity entity, boolean force) { diff --git a/patches/unapplied/server/0686-Cache-resource-keys-and-optimize-reference-Holder-ta.patch b/patches/server/0682-Cache-resource-keys-and-optimize-reference-Holder-ta.patch index ddb3a70fde..263f5852b3 100644 --- a/patches/unapplied/server/0686-Cache-resource-keys-and-optimize-reference-Holder-ta.patch +++ b/patches/server/0682-Cache-resource-keys-and-optimize-reference-Holder-ta.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Cache resource keys and optimize reference Holder tags set TagKeys are always interned, so we can use a reference hash set for them diff --git a/src/main/java/net/minecraft/core/Holder.java b/src/main/java/net/minecraft/core/Holder.java -index d7bbf60ba94ecd85f991a0c5c70c34fdb00ec9d5..4d2231868b786da9071c3dff2c073b478a486e8a 100644 +index 94671ea227b59a8f820425c401712e6aeb8b2b10..e91c4e26c25980645941ca8fbdcc3a9d02e31063 100644 --- a/src/main/java/net/minecraft/core/Holder.java +++ b/src/main/java/net/minecraft/core/Holder.java -@@ -221,7 +221,7 @@ public interface Holder<T> { +@@ -230,7 +230,7 @@ public interface Holder<T> { } void bindTags(Collection<TagKey<T>> tags) { @@ -47,10 +47,10 @@ index 95b956802f83b583a823fcd24808363775a56842..33d2e89ac40465b0c4633f9c51378b80 public static Holder<net.minecraft.world.level.biome.Biome> bukkitToMinecraftHolder(Biome bukkit) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityType.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityType.java -index fd1aaf8e18d6e3425639b60ce21c5aaf36e0b42a..266b616419a47f518a43b990cc7cbb4516beda03 100644 +index 6cf8af0c85231de9955282d4abaa0607ec9a195c..d230cbc26f61d8ac5880825aca4dfab197c20401 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityType.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntityType.java -@@ -24,11 +24,11 @@ public class CraftEntityType { +@@ -25,11 +25,11 @@ public class CraftEntityType { return bukkit; } @@ -63,4 +63,4 @@ index fd1aaf8e18d6e3425639b60ce21c5aaf36e0b42a..266b616419a47f518a43b990cc7cbb45 + .getOptional(KEY_CACHE.computeIfAbsent(bukkit, type -> net.minecraft.resources.ResourceKey.create(Registries.ENTITY_TYPE, CraftNamespacedKey.toMinecraft(type.getKey())))).orElseThrow(); } - public static String bukkitToString(EntityType bukkit) { + public static Holder<net.minecraft.world.entity.EntityType<?>> bukkitToMinecraftHolder(EntityType bukkit) { diff --git a/patches/unapplied/server/0687-Allow-changing-the-EnderDragon-podium.patch b/patches/server/0683-Allow-changing-the-EnderDragon-podium.patch index 4c615ac132..0102f94453 100644 --- a/patches/unapplied/server/0687-Allow-changing-the-EnderDragon-podium.patch +++ b/patches/server/0683-Allow-changing-the-EnderDragon-podium.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow changing the EnderDragon podium diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index a2cde7b1b316e43382cb1639ffccf29d89f5ebfc..6306f7925ac4852d8eed7508a11764c636dd7d36 100644 +index 25d2226c2a5dda411a9e35f7a0e3ab183110c227..38456d3901e495e4c401cff0de7ae38544c1b2a7 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -104,6 +104,10 @@ public class EnderDragon extends Mob implements Enemy { @@ -19,7 +19,7 @@ index a2cde7b1b316e43382cb1639ffccf29d89f5ebfc..6306f7925ac4852d8eed7508a11764c6 public EnderDragon(EntityType<? extends EnderDragon> entitytypes, Level world) { super(EntityType.ENDER_DRAGON, world); -@@ -144,6 +148,19 @@ public class EnderDragon extends Mob implements Enemy { +@@ -143,6 +147,19 @@ public class EnderDragon extends Mob implements Enemy { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D); } @@ -39,16 +39,7 @@ index a2cde7b1b316e43382cb1639ffccf29d89f5ebfc..6306f7925ac4852d8eed7508a11764c6 @Override public boolean isFlapping() { float f = Mth.cos(this.flapTime * 6.2831855F); -@@ -1009,7 +1026,7 @@ public class EnderDragon extends Mob implements Enemy { - d0 = segment2[1] - segment1[1]; - } - } else { -- BlockPos blockposition = this.level().getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EndPodiumFeature.getLocation(this.fightOrigin)); -+ BlockPos blockposition = this.level().getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, this.getPodium()); // Paper - Allow changing the EnderDragon podium - double d1 = Math.max(Math.sqrt(blockposition.distToCenterSqr(this.position())) / 4.0D, 1.0D); - - d0 = (double) segmentOffset / d1; -@@ -1036,7 +1053,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -988,7 +1005,7 @@ public class EnderDragon extends Mob implements Enemy { vec3d = this.getViewVector(tickDelta); } } else { @@ -58,67 +49,67 @@ index a2cde7b1b316e43382cb1639ffccf29d89f5ebfc..6306f7925ac4852d8eed7508a11764c6 f1 = Math.max((float) Math.sqrt(blockposition.distToCenterSqr(this.position())) / 4.0F, 1.0F); float f3 = 6.0F / f1; diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonDeathPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonDeathPhase.java -index 803d227281d70606691eed95c4b10a27ca5d1125..5663f2ff1eba4a5e00c76c9d735cb553faae6a04 100644 +index a897c994423d7d624df6ff3a67789cc2436f0417..29f4acc2943ce009088c61bb32aed330f6e2c051 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonDeathPhase.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonDeathPhase.java -@@ -43,7 +43,7 @@ public class DragonDeathPhase extends AbstractDragonPhaseInstance { +@@ -42,7 +42,7 @@ public class DragonDeathPhase extends AbstractDragonPhaseInstance { + public void doServerTick(ServerLevel world) { + this.time++; if (this.targetLocation == null) { - BlockPos blockPos = this.dragon - .level() -- .getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, EndPodiumFeature.getLocation(this.dragon.getFightOrigin())); -+ .getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, this.dragon.getPodium()); // Paper - Allow changing the EnderDragon podium +- BlockPos blockPos = world.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, EndPodiumFeature.getLocation(this.dragon.getFightOrigin())); ++ BlockPos blockPos = world.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, this.dragon.getPodium()); // Paper - Allow changing the EnderDragon podium this.targetLocation = Vec3.atBottomCenterOf(blockPos); } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonHoldingPatternPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonHoldingPatternPhase.java -index 707ef45ccd7fbcbe1947c8941846277f19ee54c9..ddf668205a7cb29b9018bf9eea49667b5fd2d471 100644 +index 2db996f3528c65f5d719cbcfb8ae587ff59c14c1..b8730a0fc759dbacc9b2e737c3e48d3ff9c5d824 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonHoldingPatternPhase.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonHoldingPatternPhase.java -@@ -54,7 +54,7 @@ public class DragonHoldingPatternPhase extends AbstractDragonPhaseInstance { +@@ -53,7 +53,7 @@ public class DragonHoldingPatternPhase extends AbstractDragonPhaseInstance { + + private void findNewTarget(ServerLevel world) { if (this.currentPath != null && this.currentPath.isDone()) { - BlockPos blockPos = this.dragon - .level() -- .getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, new BlockPos(EndPodiumFeature.getLocation(this.dragon.getFightOrigin()))); -+ .getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, new BlockPos(this.dragon.getPodium())); // Paper - Allow changing the EnderDragon podium +- BlockPos blockPos = world.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EndPodiumFeature.getLocation(this.dragon.getFightOrigin())); ++ BlockPos blockPos = world.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, new BlockPos(this.dragon.getPodium())); // Paper - Allow changing the EnderDragon podium int i = this.dragon.getDragonFight() == null ? 0 : this.dragon.getDragonFight().getCrystalsAlive(); if (this.dragon.getRandom().nextInt(i + 3) == 0) { this.dragon.getPhaseManager().setPhase(EnderDragonPhase.LANDING_APPROACH); diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonLandingApproachPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonLandingApproachPhase.java -index e731d0f74692615ce5f42f690e36bd906a39c1dd..557de8a8e21e7f049b6acf27b4ec927ef5a9f9cb 100644 +index 4c28d3c3d601b5316d79c8474d106800abc8e95b..1c4250cc61b770707ad25c0e93caeacbcb0a80b0 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonLandingApproachPhase.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonLandingApproachPhase.java -@@ -53,7 +53,7 @@ public class DragonLandingApproachPhase extends AbstractDragonPhaseInstance { +@@ -52,7 +52,7 @@ public class DragonLandingApproachPhase extends AbstractDragonPhaseInstance { + private void findNewTarget(ServerLevel world) { + if (this.currentPath == null || this.currentPath.isDone()) { int i = this.dragon.findClosestNode(); - BlockPos blockPos = this.dragon - .level() -- .getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EndPodiumFeature.getLocation(this.dragon.getFightOrigin())); -+ .getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, this.dragon.getPodium()); // Paper - Allow changing the EnderDragon podium - Player player = this.dragon - .level() - .getNearestPlayer(NEAR_EGG_TARGETING, this.dragon, (double)blockPos.getX(), (double)blockPos.getY(), (double)blockPos.getZ()); +- BlockPos blockPos = world.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EndPodiumFeature.getLocation(this.dragon.getFightOrigin())); ++ BlockPos blockPos = world.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, this.dragon.getPodium()); // Paper - Allow changing the EnderDragon podium + Player player = world.getNearestPlayer(NEAR_EGG_TARGETING, this.dragon, (double)blockPos.getX(), (double)blockPos.getY(), (double)blockPos.getZ()); + int j; + if (player != null) { diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonLandingPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonLandingPhase.java -index d913147d692e7e58bec4fac44c7e93a1822e8f65..3b960060f152d0352c2f8cdc1c71543cd7fa0dbd 100644 +index 789df0e05d0cf0df0f66bffc98f587a31770ebea..cfcd3f91517832d26c1177c3715cfa8ebe675193 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonLandingPhase.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonLandingPhase.java -@@ -41,7 +41,7 @@ public class DragonLandingPhase extends AbstractDragonPhaseInstance { - public void doServerTick() { +@@ -42,7 +42,7 @@ public class DragonLandingPhase extends AbstractDragonPhaseInstance { + public void doServerTick(ServerLevel world) { if (this.targetLocation == null) { this.targetLocation = Vec3.atBottomCenterOf( -- this.dragon.level().getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EndPodiumFeature.getLocation(this.dragon.getFightOrigin())) -+ this.dragon.level().getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, this.dragon.getPodium()) // Paper - Allow changing the EnderDragon podium +- world.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EndPodiumFeature.getLocation(this.dragon.getFightOrigin())) ++ world.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, this.dragon.getPodium()) // Paper - Allow changing the EnderDragon podium ); } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonTakeoffPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonTakeoffPhase.java -index 8d66284eb96cfc0392c211842e87875a095c3ca2..718bf877179f85ee3f0de384ca3a8aaebaa067a5 100644 +index f942ea2ad87d4ae12921578f7b869f064c8db7b0..5c5b03f612621ec4efd92b78601032b84e6f3c28 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonTakeoffPhase.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonTakeoffPhase.java -@@ -25,7 +25,7 @@ public class DragonTakeoffPhase extends AbstractDragonPhaseInstance { +@@ -24,7 +24,7 @@ public class DragonTakeoffPhase extends AbstractDragonPhaseInstance { + @Override + public void doServerTick(ServerLevel world) { if (!this.firstTick && this.currentPath != null) { - BlockPos blockPos = this.dragon - .level() -- .getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EndPodiumFeature.getLocation(this.dragon.getFightOrigin())); -+ .getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, this.dragon.getPodium()); // Paper - Allow changing the EnderDragon podium +- BlockPos blockPos = world.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EndPodiumFeature.getLocation(this.dragon.getFightOrigin())); ++ BlockPos blockPos = world.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, this.dragon.getPodium()); // Paper - Allow changing the EnderDragon podium if (!blockPos.closerToCenterThan(this.dragon.position(), 10.0)) { this.dragon.getPhaseManager().setPhase(EnderDragonPhase.HOLDING_PATTERN); } diff --git a/patches/unapplied/server/0688-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch b/patches/server/0684-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch index 265f2bbdbb..f885dbe8b4 100644 --- a/patches/unapplied/server/0688-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch +++ b/patches/server/0684-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch @@ -9,10 +9,10 @@ is not a WorldGenRegion, we can bypass the deadlock entirely. See https://bugs.mojang.com/browse/MC-246262 diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java b/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java -index 33564e62e3181d28b18a957e28b8ec5152d8339f..cf8258e8d46ca7286a66c38fa24af369bd9a279f 100644 +index b120949667ae0169a667b329b3cabbd79a0a5bda..734f511d197bc6bf2b02588069eb02c0224781f5 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java +++ b/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java -@@ -279,7 +279,11 @@ public class StructureTemplate { +@@ -303,7 +303,11 @@ public class StructureTemplate { if (definedstructure_blockinfo.nbt != null) { tileentity = world.getBlockEntity(blockposition2); @@ -25,7 +25,7 @@ index 33564e62e3181d28b18a957e28b8ec5152d8339f..cf8258e8d46ca7286a66c38fa24af369 world.setBlock(blockposition2, Blocks.BARRIER.defaultBlockState(), 20); } // CraftBukkit start -@@ -406,7 +410,11 @@ public class StructureTemplate { +@@ -430,7 +434,11 @@ public class StructureTemplate { if (pair1.getSecond() != null) { tileentity = world.getBlockEntity(blockposition6); if (tileentity != null) { diff --git a/patches/unapplied/server/0689-Prevent-tile-entity-copies-loading-chunks.patch b/patches/server/0685-Prevent-tile-entity-copies-loading-chunks.patch index 50f78f59ad..cbd52db735 100644 --- a/patches/unapplied/server/0689-Prevent-tile-entity-copies-loading-chunks.patch +++ b/patches/server/0685-Prevent-tile-entity-copies-loading-chunks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent tile entity copies loading chunks diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 76c9feb5e1389eb929571de74ececd4a4f384453..7c1a94980cf49d37be442e1b62de36d4395bcf2a 100644 +index 33f76a6df7997ecdc789004bf0b230e74ad07f5a..ffd8e7a537fd8c6276674f5e0034412bb93ca82c 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3200,7 +3200,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -3240,7 +3240,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl BlockPos blockposition = BlockEntity.getPosFromTag(customdata.getUnsafe()); if (this.player.level().isLoaded(blockposition)) { diff --git a/patches/unapplied/server/0690-Use-username-instead-of-display-name-in-PlayerList-g.patch b/patches/server/0686-Use-username-instead-of-display-name-in-PlayerList-g.patch index 951bce5a9b..d192030309 100644 --- a/patches/unapplied/server/0690-Use-username-instead-of-display-name-in-PlayerList-g.patch +++ b/patches/server/0686-Use-username-instead-of-display-name-in-PlayerList-g.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Use username instead of display name in diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 06bcc9974b4a63c174c51df332ff9ddd7eb6a159..0bded2c55d6c826e2f3dcb89995712c92348a3c7 100644 +index f65b583057d37ec64a7cd9ed3ec09448064576db..b36edfa81b504107c4225234e3a1d48984e1d241 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1394,7 +1394,7 @@ public abstract class PlayerList { +@@ -1354,7 +1354,7 @@ public abstract class PlayerList { // CraftBukkit start public ServerStatsCounter getPlayerStats(ServerPlayer entityhuman) { ServerStatsCounter serverstatisticmanager = entityhuman.getStats(); diff --git a/patches/server/0687-Expand-PlayerItemDamageEvent.patch b/patches/server/0687-Expand-PlayerItemDamageEvent.patch new file mode 100644 index 0000000000..7bcede06f4 --- /dev/null +++ b/patches/server/0687-Expand-PlayerItemDamageEvent.patch @@ -0,0 +1,23 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: HexedHero <[email protected]> +Date: Sun, 10 Apr 2022 06:26:32 +0100 +Subject: [PATCH] Expand PlayerItemDamageEvent + + +diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java +index 9289faebce6b1546af71aeadc6569d2595b486e0..fd49ff4ec22e4bdd3cd1aff0a6a2d2178d773bf2 100644 +--- a/src/main/java/net/minecraft/world/item/ItemStack.java ++++ b/src/main/java/net/minecraft/world/item/ItemStack.java +@@ -693,10 +693,11 @@ public final class ItemStack implements DataComponentHolder { + } + + public void hurtAndBreak(int amount, ServerLevel world, @Nullable LivingEntity player, Consumer<Item> breakCallback) { // Paper - Add EntityDamageItemEvent ++ int originalDamage = amount; // Paper - Expand PlayerItemDamageEvent + int j = this.processDurabilityChange(amount, world, player); + // CraftBukkit start + if (player instanceof final ServerPlayer serverPlayer) { // Paper - Add EntityDamageItemEvent +- PlayerItemDamageEvent event = new PlayerItemDamageEvent(serverPlayer.getBukkitEntity(), CraftItemStack.asCraftMirror(this), j); // Paper - Add EntityDamageItemEvent ++ PlayerItemDamageEvent event = new PlayerItemDamageEvent(serverPlayer.getBukkitEntity(), CraftItemStack.asCraftMirror(this), j, originalDamage); // Paper - Add EntityDamageItemEvent + event.getPlayer().getServer().getPluginManager().callEvent(event); + + if (j != event.getDamage() || event.isCancelled()) { diff --git a/patches/unapplied/server/0692-WorldCreator-keepSpawnLoaded.patch b/patches/server/0688-WorldCreator-keepSpawnLoaded.patch index 6369ed67aa..0e11daefe3 100644 --- a/patches/unapplied/server/0692-WorldCreator-keepSpawnLoaded.patch +++ b/patches/server/0688-WorldCreator-keepSpawnLoaded.patch @@ -5,10 +5,10 @@ Subject: [PATCH] WorldCreator#keepSpawnLoaded diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 183d9672ad60e2b7db48c283b1ca863df01ad658..cfdfb81bc81382b71131c037ebd56f24573d4e34 100644 +index cc08b56da8a276202da3e85315fdb2ad530c2545..b31f3013ff63bb6ece80a9d10e51641a7e93f3df 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1326,7 +1326,7 @@ public final class CraftServer implements Server { +@@ -1329,7 +1329,7 @@ public final class CraftServer implements Server { } // If set to not keep spawn in memory (changed from default) then adjust rule accordingly diff --git a/patches/unapplied/server/0693-Fix-CME-in-CraftPersistentDataTypeRegistry.patch b/patches/server/0689-Fix-CME-in-CraftPersistentDataTypeRegistry.patch index ed8adb4503..ed8adb4503 100644 --- a/patches/unapplied/server/0693-Fix-CME-in-CraftPersistentDataTypeRegistry.patch +++ b/patches/server/0689-Fix-CME-in-CraftPersistentDataTypeRegistry.patch diff --git a/patches/unapplied/server/0682-Add-TameableDeathMessageEvent.patch b/patches/unapplied/server/0682-Add-TameableDeathMessageEvent.patch deleted file mode 100644 index 1531307bd4..0000000000 --- a/patches/unapplied/server/0682-Add-TameableDeathMessageEvent.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Owen1212055 <[email protected]> -Date: Mon, 21 Jun 2021 21:24:45 -0400 -Subject: [PATCH] Add TameableDeathMessageEvent - - -diff --git a/src/main/java/net/minecraft/world/entity/TamableAnimal.java b/src/main/java/net/minecraft/world/entity/TamableAnimal.java -index 7b7bc1a205dfacbe5709011b6b6799e75af9e4cc..4c5b0b1a71ec5ba0e8dcd5ef52bf667e9bb30be9 100644 ---- a/src/main/java/net/minecraft/world/entity/TamableAnimal.java -+++ b/src/main/java/net/minecraft/world/entity/TamableAnimal.java -@@ -241,7 +241,12 @@ public abstract class TamableAnimal extends Animal implements OwnableEntity { - @Override - public void die(DamageSource damageSource) { - if (!this.level().isClientSide && this.level().getGameRules().getBoolean(GameRules.RULE_SHOWDEATHMESSAGES) && this.getOwner() instanceof ServerPlayer) { -- this.getOwner().sendSystemMessage(this.getCombatTracker().getDeathMessage()); -+ // Paper start - Add TameableDeathMessageEvent -+ io.papermc.paper.event.entity.TameableDeathMessageEvent event = new io.papermc.paper.event.entity.TameableDeathMessageEvent((org.bukkit.entity.Tameable) getBukkitEntity(), io.papermc.paper.adventure.PaperAdventure.asAdventure(this.getCombatTracker().getDeathMessage())); -+ if (event.callEvent()) { -+ this.getOwner().sendSystemMessage(io.papermc.paper.adventure.PaperAdventure.asVanilla(event.deathMessage())); -+ } -+ // Paper end - Add TameableDeathMessageEvent - } - - super.die(damageSource); diff --git a/patches/unapplied/server/0691-Expand-PlayerItemDamageEvent.patch b/patches/unapplied/server/0691-Expand-PlayerItemDamageEvent.patch deleted file mode 100644 index fac811b9d8..0000000000 --- a/patches/unapplied/server/0691-Expand-PlayerItemDamageEvent.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: HexedHero <[email protected]> -Date: Sun, 10 Apr 2022 06:26:32 +0100 -Subject: [PATCH] Expand PlayerItemDamageEvent - - -diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index ec3be7fb4eb4560fe0106ac127f17d7437612157..bee59df6a8f30416f94c1a4fbd5e2629336e842f 100644 ---- a/src/main/java/net/minecraft/world/item/ItemStack.java -+++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -650,10 +650,11 @@ public final class ItemStack implements DataComponentHolder { - if (this.isDamageableItem()) { - if (player == null || !player.hasInfiniteMaterials()) { - if (amount > 0) { -+ int originalDamage = amount; // Paper - Expand PlayerItemDamageEvent - amount = EnchantmentHelper.processDurabilityChange(world, this, amount); - // CraftBukkit start - if (player instanceof ServerPlayer serverPlayer) { // Paper - Add EntityDamageItemEvent -- PlayerItemDamageEvent event = new PlayerItemDamageEvent(serverPlayer.getBukkitEntity(), CraftItemStack.asCraftMirror(this), amount); // Paper - Add EntityDamageItemEvent -+ PlayerItemDamageEvent event = new PlayerItemDamageEvent(serverPlayer.getBukkitEntity(), CraftItemStack.asCraftMirror(this), amount, originalDamage); // Paper - Add EntityDamageItemEvent & Expand PlayerItemDamageEvent - event.getPlayer().getServer().getPluginManager().callEvent(event); - - if (amount != event.getDamage() || event.isCancelled()) { |