aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNoah van der Aa <[email protected]>2024-10-23 22:52:43 +0200
committerNoah van der Aa <[email protected]>2024-10-23 22:52:43 +0200
commitcb79de80c4ae2658f5066a0d5d3e94258765dd96 (patch)
tree40782f27089e3ac040491b47251ecfd30f0ebbc3
parent6456b5dea8a841ff96553c6189a9f919a6e76600 (diff)
downloadPaper-cb79de80c4ae2658f5066a0d5d3e94258765dd96.tar.gz
Paper-cb79de80c4ae2658f5066a0d5d3e94258765dd96.zip
moooore
-rw-r--r--patches/api/0457-Fix-SpawnerEntry-Equipment-API.patch4
-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.patch24
-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.patch23
-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.patch24
-rw-r--r--patches/unapplied/server/0691-Expand-PlayerItemDamageEvent.patch23
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()) {