aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBjarne Koll <[email protected]>2024-10-23 19:46:06 +0200
committerBjarne Koll <[email protected]>2024-10-23 19:46:06 +0200
commit2810f50ca27ee3477a79628dc5d2295a0989cc8a (patch)
treeebcf593e746eeb16a411f9c768ed5fe83ee86f23
parentf5177aa12138b4341241c73aab85782f2512ba58 (diff)
downloadPaper-2810f50ca27ee3477a79628dc5d2295a0989cc8a.tar.gz
Paper-2810f50ca27ee3477a79628dc5d2295a0989cc8a.zip
503
-rw-r--r--patches/server/0464-Remove-stale-POIs.patch (renamed from patches/unapplied/server/0468-Remove-stale-POIs.patch)4
-rw-r--r--patches/server/0465-Fix-villager-boat-exploit.patch (renamed from patches/unapplied/server/0469-Fix-villager-boat-exploit.patch)4
-rw-r--r--patches/server/0466-Add-sendOpLevel-API.patch (renamed from patches/unapplied/server/0470-Add-sendOpLevel-API.patch)10
-rw-r--r--patches/server/0467-Add-RegistryAccess-for-managing-Registries.patch (renamed from patches/unapplied/server/0471-Add-RegistryAccess-for-managing-Registries.patch)90
-rw-r--r--patches/server/0468-Add-StructuresLocateEvent.patch (renamed from patches/unapplied/server/0472-Add-StructuresLocateEvent.patch)2
-rw-r--r--patches/server/0469-Collision-option-for-requiring-a-player-participant.patch (renamed from patches/unapplied/server/0473-Collision-option-for-requiring-a-player-participant.patch)32
-rw-r--r--patches/server/0470-Return-chat-component-with-empty-text-instead-of-thr.patch (renamed from patches/unapplied/server/0474-Return-chat-component-with-empty-text-instead-of-thr.patch)4
-rw-r--r--patches/server/0471-Make-schedule-command-per-world.patch (renamed from patches/unapplied/server/0475-Make-schedule-command-per-world.patch)8
-rw-r--r--patches/server/0472-Configurable-max-leash-distance.patch (renamed from patches/unapplied/server/0476-Configurable-max-leash-distance.patch)8
-rw-r--r--patches/server/0473-Add-BlockPreDispenseEvent.patch (renamed from patches/unapplied/server/0477-Add-BlockPreDispenseEvent.patch)8
-rw-r--r--patches/server/0474-Add-PlayerChangeBeaconEffectEvent.patch (renamed from patches/unapplied/server/0478-Add-PlayerChangeBeaconEffectEvent.patch)4
-rw-r--r--patches/server/0475-Add-toggle-for-always-placing-the-dragon-egg.patch (renamed from patches/unapplied/server/0479-Add-toggle-for-always-placing-the-dragon-egg.patch)4
-rw-r--r--patches/server/0476-Add-PlayerStonecutterRecipeSelectEvent.patch (renamed from patches/unapplied/server/0480-Add-PlayerStonecutterRecipeSelectEvent.patch)23
-rw-r--r--patches/server/0477-Expand-EntityUnleashEvent.patch (renamed from patches/unapplied/server/0481-Expand-EntityUnleashEvent.patch)35
-rw-r--r--patches/server/0478-Reset-shield-blocking-on-dimension-change.patch (renamed from patches/unapplied/server/0482-Reset-shield-blocking-on-dimension-change.patch)4
-rw-r--r--patches/server/0479-Add-DragonEggFormEvent.patch (renamed from patches/unapplied/server/0483-Add-DragonEggFormEvent.patch)4
-rw-r--r--patches/server/0480-Add-EntityMoveEvent.patch (renamed from patches/unapplied/server/0484-Add-EntityMoveEvent.patch)22
-rw-r--r--patches/server/0481-added-option-to-disable-pathfinding-updates-on-block.patch (renamed from patches/unapplied/server/0485-added-option-to-disable-pathfinding-updates-on-block.patch)6
-rw-r--r--patches/server/0482-Inline-shift-direction-fields.patch (renamed from patches/unapplied/server/0486-Inline-shift-direction-fields.patch)10
-rw-r--r--patches/server/0483-Allow-adding-items-to-BlockDropItemEvent.patch (renamed from patches/unapplied/server/0487-Allow-adding-items-to-BlockDropItemEvent.patch)4
-rw-r--r--patches/server/0484-Add-getMainThreadExecutor-to-BukkitScheduler.patch (renamed from patches/unapplied/server/0488-Add-getMainThreadExecutor-to-BukkitScheduler.patch)2
-rw-r--r--patches/server/0485-living-entity-allow-attribute-registration.patch (renamed from patches/unapplied/server/0489-living-entity-allow-attribute-registration.patch)8
-rw-r--r--patches/server/0486-fix-dead-slime-setSize-invincibility.patch (renamed from patches/unapplied/server/0490-fix-dead-slime-setSize-invincibility.patch)0
-rw-r--r--patches/server/0487-Merchant-getRecipes-should-return-an-immutable-list.patch (renamed from patches/unapplied/server/0491-Merchant-getRecipes-should-return-an-immutable-list.patch)0
-rw-r--r--patches/server/0488-Expose-Tracked-Players.patch (renamed from patches/unapplied/server/0492-Expose-Tracked-Players.patch)4
-rw-r--r--patches/server/0489-Improve-ServerGUI.patch (renamed from patches/unapplied/server/0493-Improve-ServerGUI.patch)0
-rw-r--r--patches/server/0490-fix-converting-txt-to-json-file.patch (renamed from patches/unapplied/server/0494-fix-converting-txt-to-json-file.patch)10
-rw-r--r--patches/server/0491-Add-worldborder-events.patch (renamed from patches/unapplied/server/0495-Add-worldborder-events.patch)10
-rw-r--r--patches/server/0492-Add-PlayerNameEntityEvent.patch (renamed from patches/unapplied/server/0496-Add-PlayerNameEntityEvent.patch)4
-rw-r--r--patches/server/0493-Add-recipe-to-cook-events.patch (renamed from patches/unapplied/server/0497-Add-recipe-to-cook-events.patch)20
-rw-r--r--patches/server/0494-Add-Block-isValidTool.patch (renamed from patches/unapplied/server/0498-Add-Block-isValidTool.patch)2
-rw-r--r--patches/server/0495-Allow-using-signs-inside-spawn-protection.patch (renamed from patches/unapplied/server/0499-Allow-using-signs-inside-spawn-protection.patch)11
-rw-r--r--patches/server/0496-Expand-world-key-API.patch (renamed from patches/unapplied/server/0500-Expand-world-key-API.patch)12
-rw-r--r--patches/server/0497-Add-fast-alternative-constructor-for-Rotations.patch (renamed from patches/unapplied/server/0501-Add-fast-alternative-constructor-for-Rotations.patch)0
-rw-r--r--patches/server/0498-Drop-carried-item-when-player-has-disconnected.patch (renamed from patches/unapplied/server/0502-Drop-carried-item-when-player-has-disconnected.patch)4
-rw-r--r--patches/server/0499-forced-whitelist-use-configurable-kick-message.patch (renamed from patches/unapplied/server/0503-forced-whitelist-use-configurable-kick-message.patch)4
-rw-r--r--patches/server/0500-Don-t-ignore-result-of-PlayerEditBookEvent.patch (renamed from patches/unapplied/server/0504-Don-t-ignore-result-of-PlayerEditBookEvent.patch)4
-rw-r--r--patches/server/0501-Expose-protocol-version.patch (renamed from patches/unapplied/server/0505-Expose-protocol-version.patch)2
-rw-r--r--patches/server/0502-Enhance-console-tab-completions-for-brigadier-comman.patch (renamed from patches/unapplied/server/0506-Enhance-console-tab-completions-for-brigadier-comman.patch)6
-rw-r--r--patches/server/0503-Fix-PlayerItemConsumeEvent-cancelling-properly.patch (renamed from patches/unapplied/server/0507-Fix-PlayerItemConsumeEvent-cancelling-properly.patch)8
40 files changed, 200 insertions, 197 deletions
diff --git a/patches/unapplied/server/0468-Remove-stale-POIs.patch b/patches/server/0464-Remove-stale-POIs.patch
index 15a12eff2d..70792fa6b3 100644
--- a/patches/unapplied/server/0468-Remove-stale-POIs.patch
+++ b/patches/server/0464-Remove-stale-POIs.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Remove stale POIs
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index fdcc744cd210535067a69362411305e23f0e4273..85c83c900c33d139072d17e1850e95d86da324a7 100644
+index a3ce6feff0826dcfb2a11b0f6cd01a5368c2de3a..d62d6a345837e1b63c1a1393f18e367ac0ef4c30 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -1743,6 +1743,11 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1805,6 +1805,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
});
optional1.ifPresent((holder) -> {
this.getServer().execute(() -> {
diff --git a/patches/unapplied/server/0469-Fix-villager-boat-exploit.patch b/patches/server/0465-Fix-villager-boat-exploit.patch
index 5856a8c32b..f35fe8a11e 100644
--- a/patches/unapplied/server/0469-Fix-villager-boat-exploit.patch
+++ b/patches/server/0465-Fix-villager-boat-exploit.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Fix villager boat exploit
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 98eb00a8ee23543714d424d3ff5ca19887d6db19..9436a9614dea81d14c4f77cc21ca91f85ca87152 100644
+index 4975b4222d52eddbb42e9c9cd08eef56859080c8..70b7871091ab9b64d2a5503620a71c3d5585c25d 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -595,6 +595,14 @@ public abstract class PlayerList {
+@@ -545,6 +545,14 @@ public abstract class PlayerList {
PlayerList.LOGGER.debug("Removing player mount");
entityplayer.stopRiding();
entity.getPassengersAndSelf().forEach((entity1) -> {
diff --git a/patches/unapplied/server/0470-Add-sendOpLevel-API.patch b/patches/server/0466-Add-sendOpLevel-API.patch
index 77f057bbd2..e37d133769 100644
--- a/patches/unapplied/server/0470-Add-sendOpLevel-API.patch
+++ b/patches/server/0466-Add-sendOpLevel-API.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add sendOpLevel API
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 9436a9614dea81d14c4f77cc21ca91f85ca87152..9b94ca912f99a3a465f30130b24347fc9aca72ff 100644
+index 70b7871091ab9b64d2a5503620a71c3d5585c25d..7676dbe55b4bf6e0472dc0190c01e6ecfcbb464e 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1066,6 +1066,11 @@ public abstract class PlayerList {
+@@ -1026,6 +1026,11 @@ public abstract class PlayerList {
}
private void sendPlayerPermissionLevel(ServerPlayer player, int permissionLevel) {
@@ -20,7 +20,7 @@ index 9436a9614dea81d14c4f77cc21ca91f85ca87152..9b94ca912f99a3a465f30130b24347fc
if (player.connection != null) {
byte b0;
-@@ -1080,8 +1085,10 @@ public abstract class PlayerList {
+@@ -1040,8 +1045,10 @@ public abstract class PlayerList {
player.connection.send(new ClientboundEntityEventPacket(player, b0));
}
@@ -32,10 +32,10 @@ index 9436a9614dea81d14c4f77cc21ca91f85ca87152..9b94ca912f99a3a465f30130b24347fc
public boolean isWhiteListed(GameProfile profile) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 73fde8be0098238582fb3661ae67d4139be417dc..7de53f6750d478a052bc8ade6edac056565fe068 100644
+index 786b8c10a647d777b951b760e4c51eef057b2edd..678099cdcf418b9e3eafed965384e6dcdd9404e3 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-@@ -677,6 +677,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -690,6 +690,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
// Paper end
diff --git a/patches/unapplied/server/0471-Add-RegistryAccess-for-managing-Registries.patch b/patches/server/0467-Add-RegistryAccess-for-managing-Registries.patch
index 54c9cc8744..2dfbc6b560 100644
--- a/patches/unapplied/server/0471-Add-RegistryAccess-for-managing-Registries.patch
+++ b/patches/server/0467-Add-RegistryAccess-for-managing-Registries.patch
@@ -707,22 +707,22 @@ index 0000000000000000000000000000000000000000..4396982af55872fafbfeaf8161ad6f39
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.checkerframework.framework.qual.DefaultQualifier;
diff --git a/src/main/java/net/minecraft/core/registries/BuiltInRegistries.java b/src/main/java/net/minecraft/core/registries/BuiltInRegistries.java
-index cbc1658e0df4070605a6b2fbe99167b3bc001223..44b7927081b476813505cab6b3a2da2ec2942c54 100644
+index 3f72e30b57fb2a4231e22a2234729408c1240af4..4638ba98dbbdb0f880337347be85a6e0fbed2191 100644
--- a/src/main/java/net/minecraft/core/registries/BuiltInRegistries.java
+++ b/src/main/java/net/minecraft/core/registries/BuiltInRegistries.java
-@@ -315,6 +315,7 @@ public class BuiltInRegistries {
+@@ -323,6 +323,7 @@ public class BuiltInRegistries {
ResourceKey<? extends Registry<T>> key, R registry, BuiltInRegistries.RegistryBootstrap<T> initializer
) {
- Bootstrap.checkBootstrapCalled(() -> "registry " + key);
+ Bootstrap.checkBootstrapCalled(() -> "registry " + key.location());
+ io.papermc.paper.registry.PaperRegistryAccess.instance().registerRegistry(registry.key(), registry); // Paper - initialize API registry
ResourceLocation resourceLocation = key.location();
LOADERS.put(resourceLocation, () -> initializer.run(registry));
WRITABLE_REGISTRY.register((ResourceKey)key, registry, RegistrationInfo.BUILT_IN); // Paper - decompile fix
diff --git a/src/main/java/net/minecraft/resources/RegistryDataLoader.java b/src/main/java/net/minecraft/resources/RegistryDataLoader.java
-index deaf62913850a0e0fdffd3d52fd383bcdda979af..abadf4abe08dc3bb6612b42cbb3f7df3ffa28ce9 100644
+index f4f1a99d53ffb953beb2a944f54d28fa6349fa29..144a6f5b0c53110804d6d099fe857d25f107d938 100644
--- a/src/main/java/net/minecraft/resources/RegistryDataLoader.java
+++ b/src/main/java/net/minecraft/resources/RegistryDataLoader.java
-@@ -299,6 +299,7 @@ public class RegistryDataLoader {
+@@ -351,6 +351,7 @@ public class RegistryDataLoader {
RegistryDataLoader.Loader<T> create(Lifecycle lifecycle, Map<ResourceKey<?>, Exception> errors) {
WritableRegistry<T> writableRegistry = new MappedRegistry<>(this.key, lifecycle);
@@ -731,19 +731,19 @@ index deaf62913850a0e0fdffd3d52fd383bcdda979af..abadf4abe08dc3bb6612b42cbb3f7df3
}
diff --git a/src/main/java/net/minecraft/server/ReloadableServerRegistries.java b/src/main/java/net/minecraft/server/ReloadableServerRegistries.java
-index 1dd22f11b7e2983a3069dea94c0f02b43ff1f736..397bdacab9517354875ebc0bc68d35059b3c318b 100644
+index 8e8d6214adbd21a221147f0fc0d91cd9c06a080c..6fddef967b6314ca0158f5bd4b8898670ea5e9ec 100644
--- a/src/main/java/net/minecraft/server/ReloadableServerRegistries.java
+++ b/src/main/java/net/minecraft/server/ReloadableServerRegistries.java
-@@ -60,6 +60,7 @@ public class ReloadableServerRegistries {
- return CompletableFuture.supplyAsync(
- () -> {
- WritableRegistry<T> writableRegistry = new MappedRegistry<>(type.registryKey(), Lifecycle.experimental());
-+ io.papermc.paper.registry.PaperRegistryAccess.instance().registerReloadableRegistry(type.registryKey(), writableRegistry); // Paper - register reloadable registry
- Map<ResourceLocation, JsonElement> map = new HashMap<>();
- String string = Registries.elementsDirPath(type.registryKey());
- SimpleJsonResourceReloadListener.scanDirectory(resourceManager, string, GSON, map);
+@@ -64,6 +64,7 @@ public class ReloadableServerRegistries {
+ ) {
+ return CompletableFuture.supplyAsync(() -> {
+ WritableRegistry<T> writableRegistry = new MappedRegistry<>(type.registryKey(), Lifecycle.experimental());
++ io.papermc.paper.registry.PaperRegistryAccess.instance().registerReloadableRegistry(type.registryKey(), writableRegistry); // Paper - register reloadable registry
+ Map<ResourceLocation, T> map = new HashMap<>();
+ String string = Registries.elementsDirPath(type.registryKey());
+ SimpleJsonResourceReloadListener.scanDirectory(resourceManager, string, ops, type.codec(), map);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java b/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java
-index 6216db1811565e0d25b0d63f579f0a5ba69876a7..3dbdfc2fb973c3c9aecc6582451071e8a939f5f0 100644
+index b4ed857f2437759b71b75d7ab36c986a2fd71dbc..09929f580164abcd1c04061d04c6aa992767e256 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java
@@ -122,81 +122,12 @@ public class CraftRegistry<B extends Keyed, M> implements Registry<B> {
@@ -759,64 +759,64 @@ index 6216db1811565e0d25b0d63f579f0a5ba69876a7..3dbdfc2fb973c3c9aecc6582451071e8
- */
- public static <B extends Keyed> Registry<?> createRegistry(Class<? super B> bukkitClass, RegistryAccess registryHolder) {
- if (bukkitClass == Enchantment.class) {
-- return new CraftRegistry<>(Enchantment.class, registryHolder.registryOrThrow(Registries.ENCHANTMENT), CraftEnchantment::new, FieldRename.ENCHANTMENT_RENAME);
+- return new CraftRegistry<>(Enchantment.class, registryHolder.lookupOrThrow(Registries.ENCHANTMENT), CraftEnchantment::new, FieldRename.ENCHANTMENT_RENAME);
- }
- if (bukkitClass == GameEvent.class) {
-- return new CraftRegistry<>(GameEvent.class, registryHolder.registryOrThrow(Registries.GAME_EVENT), CraftGameEvent::new, FieldRename.NONE);
+- return new CraftRegistry<>(GameEvent.class, registryHolder.lookupOrThrow(Registries.GAME_EVENT), CraftGameEvent::new, FieldRename.NONE);
- }
- if (bukkitClass == MusicInstrument.class) {
-- return new CraftRegistry<>(MusicInstrument.class, registryHolder.registryOrThrow(Registries.INSTRUMENT), CraftMusicInstrument::new, FieldRename.NONE);
+- return new CraftRegistry<>(MusicInstrument.class, registryHolder.lookupOrThrow(Registries.INSTRUMENT), CraftMusicInstrument::new, FieldRename.NONE);
- }
- if (bukkitClass == MenuType.class) {
-- return new CraftRegistry<>(MenuType.class, registryHolder.registryOrThrow(Registries.MENU), CraftMenuType::new, FieldRename.NONE);
+- return new CraftRegistry<>(MenuType.class, registryHolder.lookupOrThrow(Registries.MENU), CraftMenuType::new, FieldRename.NONE);
- }
- if (bukkitClass == PotionEffectType.class) {
-- return new CraftRegistry<>(PotionEffectType.class, registryHolder.registryOrThrow(Registries.MOB_EFFECT), CraftPotionEffectType::new, FieldRename.NONE);
+- return new CraftRegistry<>(PotionEffectType.class, registryHolder.lookupOrThrow(Registries.MOB_EFFECT), CraftPotionEffectType::new, FieldRename.NONE);
- }
- if (bukkitClass == Structure.class) {
-- return new CraftRegistry<>(Structure.class, registryHolder.registryOrThrow(Registries.STRUCTURE), CraftStructure::new, FieldRename.NONE);
+- return new CraftRegistry<>(Structure.class, registryHolder.lookupOrThrow(Registries.STRUCTURE), CraftStructure::new, FieldRename.NONE);
- }
- if (bukkitClass == StructureType.class) {
-- return new CraftRegistry<>(StructureType.class, registryHolder.registryOrThrow(Registries.STRUCTURE_TYPE), CraftStructureType::new, FieldRename.NONE);
+- return new CraftRegistry<>(StructureType.class, registryHolder.lookupOrThrow(Registries.STRUCTURE_TYPE), CraftStructureType::new, FieldRename.NONE);
- }
- if (bukkitClass == Villager.Type.class) {
-- return new CraftRegistry<>(Villager.Type.class, registryHolder.registryOrThrow(Registries.VILLAGER_TYPE), CraftVillager.CraftType::new, FieldRename.NONE);
+- return new CraftRegistry<>(Villager.Type.class, registryHolder.lookupOrThrow(Registries.VILLAGER_TYPE), CraftVillager.CraftType::new, FieldRename.NONE);
- }
- if (bukkitClass == Villager.Profession.class) {
-- return new CraftRegistry<>(Villager.Profession.class, registryHolder.registryOrThrow(Registries.VILLAGER_PROFESSION), CraftVillager.CraftProfession::new, FieldRename.NONE);
+- return new CraftRegistry<>(Villager.Profession.class, registryHolder.lookupOrThrow(Registries.VILLAGER_PROFESSION), CraftVillager.CraftProfession::new, FieldRename.NONE);
- }
- if (bukkitClass == TrimMaterial.class) {
-- return new CraftRegistry<>(TrimMaterial.class, registryHolder.registryOrThrow(Registries.TRIM_MATERIAL), CraftTrimMaterial::new, FieldRename.NONE);
+- return new CraftRegistry<>(TrimMaterial.class, registryHolder.lookupOrThrow(Registries.TRIM_MATERIAL), CraftTrimMaterial::new, FieldRename.NONE);
- }
- if (bukkitClass == TrimPattern.class) {
-- return new CraftRegistry<>(TrimPattern.class, registryHolder.registryOrThrow(Registries.TRIM_PATTERN), CraftTrimPattern::new, FieldRename.NONE);
+- return new CraftRegistry<>(TrimPattern.class, registryHolder.lookupOrThrow(Registries.TRIM_PATTERN), CraftTrimPattern::new, FieldRename.NONE);
- }
- if (bukkitClass == DamageType.class) {
-- return new CraftRegistry<>(DamageType.class, registryHolder.registryOrThrow(Registries.DAMAGE_TYPE), CraftDamageType::new, FieldRename.NONE);
+- return new CraftRegistry<>(DamageType.class, registryHolder.lookupOrThrow(Registries.DAMAGE_TYPE), CraftDamageType::new, FieldRename.NONE);
- }
- if (bukkitClass == JukeboxSong.class) {
-- return new CraftRegistry<>(JukeboxSong.class, registryHolder.registryOrThrow(Registries.JUKEBOX_SONG), CraftJukeboxSong::new, FieldRename.NONE);
+- return new CraftRegistry<>(JukeboxSong.class, registryHolder.lookupOrThrow(Registries.JUKEBOX_SONG), CraftJukeboxSong::new, FieldRename.NONE);
- }
- if (bukkitClass == Wolf.Variant.class) {
-- return new CraftRegistry<>(Wolf.Variant.class, registryHolder.registryOrThrow(Registries.WOLF_VARIANT), CraftWolf.CraftVariant::new, FieldRename.NONE);
+- return new CraftRegistry<>(Wolf.Variant.class, registryHolder.lookupOrThrow(Registries.WOLF_VARIANT), CraftWolf.CraftVariant::new, FieldRename.NONE);
- }
- if (bukkitClass == BlockType.class) {
-- return new CraftRegistry<>(BlockType.class, registryHolder.registryOrThrow(Registries.BLOCK), CraftBlockType::new, FieldRename.NONE);
+- return new CraftRegistry<>(BlockType.class, registryHolder.lookupOrThrow(Registries.BLOCK), CraftBlockType::new, FieldRename.NONE);
- }
- if (bukkitClass == ItemType.class) {
-- return new CraftRegistry<>(ItemType.class, registryHolder.registryOrThrow(Registries.ITEM), CraftItemType::new, FieldRename.NONE);
+- return new CraftRegistry<>(ItemType.class, registryHolder.lookupOrThrow(Registries.ITEM), CraftItemType::new, FieldRename.NONE);
- }
- if (bukkitClass == Frog.Variant.class) {
-- return new CraftRegistry<>(Frog.Variant.class, registryHolder.registryOrThrow(Registries.FROG_VARIANT), CraftFrog.CraftVariant::new, FieldRename.NONE);
+- return new CraftRegistry<>(Frog.Variant.class, registryHolder.lookupOrThrow(Registries.FROG_VARIANT), CraftFrog.CraftVariant::new, FieldRename.NONE);
- }
- if (bukkitClass == Cat.Type.class) {
-- return new CraftRegistry<>(Cat.Type.class, registryHolder.registryOrThrow(Registries.CAT_VARIANT), CraftCat.CraftType::new, FieldRename.NONE);
+- return new CraftRegistry<>(Cat.Type.class, registryHolder.lookupOrThrow(Registries.CAT_VARIANT), CraftCat.CraftType::new, FieldRename.NONE);
- }
- if (bukkitClass == MapCursor.Type.class) {
-- return new CraftRegistry<>(MapCursor.Type.class, registryHolder.registryOrThrow(Registries.MAP_DECORATION_TYPE), CraftMapCursor.CraftType::new, FieldRename.NONE);
+- return new CraftRegistry<>(MapCursor.Type.class, registryHolder.lookupOrThrow(Registries.MAP_DECORATION_TYPE), CraftMapCursor.CraftType::new, FieldRename.NONE);
- }
- if (bukkitClass == PatternType.class) {
-- return new CraftRegistry<>(PatternType.class, registryHolder.registryOrThrow(Registries.BANNER_PATTERN), CraftPatternType::new, FieldRename.NONE);
+- return new CraftRegistry<>(PatternType.class, registryHolder.lookupOrThrow(Registries.BANNER_PATTERN), CraftPatternType::new, FieldRename.NONE);
- }
-
- return null;
@@ -861,10 +861,10 @@ index 6216db1811565e0d25b0d63f579f0a5ba69876a7..3dbdfc2fb973c3c9aecc6582451071e8
@Override
public B get(NamespacedKey namespacedKey) {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index 25bfb93568ea0a6c0b827c6d6a736f950981144e..f402ef662779e096ee354b9edd66cca785b85f33 100644
+index dd3940c2aacfa835b528a882f3ec5dd4d98bd59f..ee231d93d216571a45b11b49663b2ea91c47a1c7 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -281,7 +281,7 @@ public final class CraftServer implements Server {
+@@ -284,7 +284,7 @@ public final class CraftServer implements Server {
protected final DedicatedServer console;
protected final DedicatedPlayerList playerList;
private final Map<String, World> worlds = new LinkedHashMap<String, World>();
@@ -873,7 +873,7 @@ index 25bfb93568ea0a6c0b827c6d6a736f950981144e..f402ef662779e096ee354b9edd66cca7
private YamlConfiguration configuration;
private YamlConfiguration commandsConfiguration;
private final Yaml yaml = new Yaml(new SafeConstructor(new LoaderOptions()));
-@@ -429,6 +429,7 @@ public final class CraftServer implements Server {
+@@ -432,6 +432,7 @@ public final class CraftServer implements Server {
}
private void loadCompatibilities() {
@@ -881,7 +881,7 @@ index 25bfb93568ea0a6c0b827c6d6a736f950981144e..f402ef662779e096ee354b9edd66cca7
ConfigurationSection compatibilities = this.configuration.getConfigurationSection("settings.compatibility");
if (compatibilities == null) {
this.activeCompatibilities = Collections.emptySet();
-@@ -2728,7 +2729,7 @@ public final class CraftServer implements Server {
+@@ -2745,7 +2746,7 @@ public final class CraftServer implements Server {
@Override
public <T extends Keyed> Registry<T> getRegistry(Class<T> aClass) {
@@ -891,7 +891,7 @@ index 25bfb93568ea0a6c0b827c6d6a736f950981144e..f402ef662779e096ee354b9edd66cca7
@Deprecated
diff --git a/src/main/java/org/bukkit/craftbukkit/legacy/FieldRename.java b/src/main/java/org/bukkit/craftbukkit/legacy/FieldRename.java
-index 1f58b92c17d28e14621e8dc28042a5368f1f4a1f..ef80e6b4dff557daaab1b9fde4d8d40171017e6c 100644
+index c1023eff9f391c07b57e57450b756fe16299f723..b5e0023e431f9fb43c93a3f977144b03545322bb 100644
--- a/src/main/java/org/bukkit/craftbukkit/legacy/FieldRename.java
+++ b/src/main/java/org/bukkit/craftbukkit/legacy/FieldRename.java
@@ -51,11 +51,14 @@ public class FieldRename {
@@ -1244,7 +1244,7 @@ index bbd5dd5b27937ddc3d8c57f2b604331495b0f311..626c3033e36897846fe84a77d05e2e91
CraftRegistry.setMinecraftRegistry(RegistryHelper.getRegistry());
}
diff --git a/src/test/java/org/bukkit/support/provider/RegistriesArgumentProvider.java b/src/test/java/org/bukkit/support/provider/RegistriesArgumentProvider.java
-index 185f219b23ac57e15f8d0167b0077b7103a2f3f9..f4ba15a1b4b43822bd81b513af56c6667237c327 100644
+index 47f3b79d76399ff2185ea753260a702441ecadf5..eb3974690fb12ffe678522ed47e0f730712db016 100644
--- a/src/test/java/org/bukkit/support/provider/RegistriesArgumentProvider.java
+++ b/src/test/java/org/bukkit/support/provider/RegistriesArgumentProvider.java
@@ -1,6 +1,7 @@
@@ -1269,8 +1269,8 @@ index 185f219b23ac57e15f8d0167b0077b7103a2f3f9..f4ba15a1b4b43822bd81b513af56c666
- register(StructureType.class, Registries.STRUCTURE_TYPE, CraftStructureType.class, net.minecraft.world.level.levelgen.structure.StructureType.class);
- register(Villager.Type.class, Registries.VILLAGER_TYPE, CraftVillager.CraftType.class, VillagerType.class);
- register(Villager.Profession.class, Registries.VILLAGER_PROFESSION, CraftVillager.CraftProfession.class, VillagerProfession.class);
-- register(TrimMaterial.class, Registries.TRIM_MATERIAL, CraftTrimMaterial.class, net.minecraft.world.item.armortrim.TrimMaterial.class);
-- register(TrimPattern.class, Registries.TRIM_PATTERN, CraftTrimPattern.class, net.minecraft.world.item.armortrim.TrimPattern.class);
+- register(TrimMaterial.class, Registries.TRIM_MATERIAL, CraftTrimMaterial.class, net.minecraft.world.item.equipment.trim.TrimMaterial.class);
+- register(TrimPattern.class, Registries.TRIM_PATTERN, CraftTrimPattern.class, net.minecraft.world.item.equipment.trim.TrimPattern.class);
- register(DamageType.class, Registries.DAMAGE_TYPE, CraftDamageType.class, net.minecraft.world.damagesource.DamageType.class);
- register(JukeboxSong.class, Registries.JUKEBOX_SONG, CraftJukeboxSong.class, net.minecraft.world.item.JukeboxSong.class);
- register(Wolf.Variant.class, Registries.WOLF_VARIANT, CraftWolf.CraftVariant.class, WolfVariant.class);
@@ -1290,8 +1290,8 @@ index 185f219b23ac57e15f8d0167b0077b7103a2f3f9..f4ba15a1b4b43822bd81b513af56c666
+ register(RegistryKey.STRUCTURE_TYPE, StructureType.class, Registries.STRUCTURE_TYPE, CraftStructureType.class, net.minecraft.world.level.levelgen.structure.StructureType.class);
+ register(RegistryKey.VILLAGER_TYPE, Villager.Type.class, Registries.VILLAGER_TYPE, CraftVillager.CraftType.class, VillagerType.class);
+ register(RegistryKey.VILLAGER_PROFESSION, Villager.Profession.class, Registries.VILLAGER_PROFESSION, CraftVillager.CraftProfession.class, VillagerProfession.class);
-+ register(RegistryKey.TRIM_MATERIAL, TrimMaterial.class, Registries.TRIM_MATERIAL, CraftTrimMaterial.class, net.minecraft.world.item.armortrim.TrimMaterial.class);
-+ register(RegistryKey.TRIM_PATTERN, TrimPattern.class, Registries.TRIM_PATTERN, CraftTrimPattern.class, net.minecraft.world.item.armortrim.TrimPattern.class);
++ register(RegistryKey.TRIM_MATERIAL, TrimMaterial.class, Registries.TRIM_MATERIAL, CraftTrimMaterial.class, net.minecraft.world.item.equipment.trim.TrimMaterial.class);
++ register(RegistryKey.TRIM_PATTERN, TrimPattern.class, Registries.TRIM_PATTERN, CraftTrimPattern.class, net.minecraft.world.item.equipment.trim.TrimPattern.class);
+ register(RegistryKey.DAMAGE_TYPE, DamageType.class, Registries.DAMAGE_TYPE, CraftDamageType.class, net.minecraft.world.damagesource.DamageType.class);
+ register(RegistryKey.JUKEBOX_SONG, JukeboxSong.class, Registries.JUKEBOX_SONG, CraftJukeboxSong.class, net.minecraft.world.item.JukeboxSong.class);
+ register(RegistryKey.WOLF_VARIANT, Wolf.Variant.class, Registries.WOLF_VARIANT, CraftWolf.CraftVariant.class, WolfVariant.class);
diff --git a/patches/unapplied/server/0472-Add-StructuresLocateEvent.patch b/patches/server/0468-Add-StructuresLocateEvent.patch
index d8c688e2ae..5312adefad 100644
--- a/patches/unapplied/server/0472-Add-StructuresLocateEvent.patch
+++ b/patches/server/0468-Add-StructuresLocateEvent.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Add StructuresLocateEvent
Co-authored-by: Jake Potrebic <[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 0a779632c9d11496fcfc147870fba2699d9cc274..5adc1952504b26772116b55a5144b7704136edfa 100644
+index 115deba41ec48143570489e8494785a3a48cd789..fd2dd6d25b8d6f3066c60a7f30a58a72cb418b85 100644
--- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
+++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
@@ -126,6 +126,24 @@ public abstract class ChunkGenerator {
diff --git a/patches/unapplied/server/0473-Collision-option-for-requiring-a-player-participant.patch b/patches/server/0469-Collision-option-for-requiring-a-player-participant.patch
index 28b12f77f8..a1b916f2ad 100644
--- a/patches/unapplied/server/0473-Collision-option-for-requiring-a-player-participant.patch
+++ b/patches/server/0469-Collision-option-for-requiring-a-player-participant.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Collision option for requiring a player participant
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index bed376337035545e7ec677f2f7fe3372a3c9ea25..7d131f3b3f5739468aa3115e97ed28b6bfeca33d 100644
+index ad34a525f54a157140323a26752a420a8e348a55..1d2f0f8756addf0db7356b47ea8a1eddd2c4503d 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -1936,6 +1936,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -2024,6 +2024,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
public void push(Entity entity) {
if (!this.isPassengerOfSameVehicle(entity)) {
if (!entity.noPhysics && !this.noPhysics) {
@@ -16,11 +16,23 @@ index bed376337035545e7ec677f2f7fe3372a3c9ea25..7d131f3b3f5739468aa3115e97ed28b6
double d0 = entity.getX() - this.getX();
double d1 = entity.getZ() - this.getZ();
double d2 = Mth.absMax(d0, d1);
+diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractBoat.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractBoat.java
+index a4eab65c280e493889621e62d8fc94158b930c96..57ea01469ddd180a0c2121cce2807bcccf93bf48 100644
+--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractBoat.java
++++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractBoat.java
+@@ -196,6 +196,7 @@ public abstract class AbstractBoat extends VehicleEntity implements Leashable {
+
+ @Override
+ public void push(Entity entity) {
++ if (!this.level().paperConfig().collisions.allowVehicleCollisions && this.level().paperConfig().collisions.onlyPlayersCollide && !(entity instanceof Player)) return; // Paper - Collision option for requiring a player participant
+ if (entity instanceof AbstractBoat) {
+ if (entity.getBoundingBox().minY < this.getBoundingBox().maxY) {
+ // CraftBukkit start
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
-index 4d8c14d3a42f3e4b963cf5f8fa764df79813912b..93634fb01962ca7a35026e3c365f2a7f6b258a39 100644
+index 50c0055d80735313c280821991bd2a76e427f082..ee7350e19a86ffa115e4bce6b186a2422951e89b 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
-@@ -799,6 +799,7 @@ public abstract class AbstractMinecart extends VehicleEntity {
+@@ -562,6 +562,7 @@ public abstract class AbstractMinecart extends VehicleEntity {
public void push(Entity entity) {
if (!this.level().isClientSide) {
if (!entity.noPhysics && !this.noPhysics) {
@@ -28,15 +40,3 @@ index 4d8c14d3a42f3e4b963cf5f8fa764df79813912b..93634fb01962ca7a35026e3c365f2a7f
if (!this.hasPassenger(entity)) {
// CraftBukkit start
VehicleEntityCollisionEvent collisionEvent = new VehicleEntityCollisionEvent((Vehicle) this.getBukkitEntity(), entity.getBukkitEntity());
-diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
-index 2cb535639bff0e867c1b1e845fee6e34bb237044..907f751c859855484151fb5d607acee2f2a35076 100644
---- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
-+++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
-@@ -204,6 +204,7 @@ public class Boat extends VehicleEntity implements Leashable, VariantHolder<Boat
-
- @Override
- public void push(Entity entity) {
-+ if (!this.level().paperConfig().collisions.allowVehicleCollisions && this.level().paperConfig().collisions.onlyPlayersCollide && !(entity instanceof Player)) return; // Paper - Collision option for requiring a player participant
- if (entity instanceof Boat) {
- if (entity.getBoundingBox().minY < this.getBoundingBox().maxY) {
- // CraftBukkit start
diff --git a/patches/unapplied/server/0474-Return-chat-component-with-empty-text-instead-of-thr.patch b/patches/server/0470-Return-chat-component-with-empty-text-instead-of-thr.patch
index af20b23c54..20c17b39c0 100644
--- a/patches/unapplied/server/0474-Return-chat-component-with-empty-text-instead-of-thr.patch
+++ b/patches/server/0470-Return-chat-component-with-empty-text-instead-of-thr.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Return chat component with empty text instead of throwing
diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
-index fe8d66893aa2c2ca6fc57ea96479ce4d646d8619..b8d8aad81f54f7f43c01da075e63ec9173750bec 100644
+index 8a03f31d07e467288dd518c99f3f29bc77eac058..3b92fb173f623a05ae99c86d98f2ecdf907f58c4 100644
--- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
-@@ -89,7 +89,12 @@ public abstract class AbstractContainerMenu {
+@@ -93,7 +93,12 @@ public abstract class AbstractContainerMenu {
}
private Component title;
public final Component getTitle() {
diff --git a/patches/unapplied/server/0475-Make-schedule-command-per-world.patch b/patches/server/0471-Make-schedule-command-per-world.patch
index 2d8f63ad1e..3ac2f8e3f4 100644
--- a/patches/unapplied/server/0475-Make-schedule-command-per-world.patch
+++ b/patches/server/0471-Make-schedule-command-per-world.patch
@@ -5,19 +5,19 @@ Subject: [PATCH] Make schedule command per-world
diff --git a/src/main/java/net/minecraft/server/commands/ScheduleCommand.java b/src/main/java/net/minecraft/server/commands/ScheduleCommand.java
-index f2d1430d714debc9e9b53eef0cbcda0d8cdcd459..d090f94a9a8a314df01e83a031dd18d5c6f1caf9 100644
+index 10b059a93762d9711fb4aedff572edfaebcb8264..1090759025969c04267de8b96ad045b1da0cb246 100644
--- a/src/main/java/net/minecraft/server/commands/ScheduleCommand.java
+++ b/src/main/java/net/minecraft/server/commands/ScheduleCommand.java
-@@ -30,7 +30,7 @@ public class ScheduleCommand {
- return Component.translatableEscape("commands.schedule.cleared.failure", object);
+@@ -33,7 +33,7 @@ public class ScheduleCommand {
});
+ private static final SimpleCommandExceptionType ERROR_MACRO = new SimpleCommandExceptionType(Component.translatableEscape("commands.schedule.macro"));
private static final SuggestionProvider<CommandSourceStack> SUGGEST_SCHEDULE = (commandcontext, suggestionsbuilder) -> {
- return SharedSuggestionProvider.suggest((Iterable) ((CommandSourceStack) commandcontext.getSource()).getServer().getWorldData().overworldData().getScheduledEvents().getEventsIds(), suggestionsbuilder);
+ return SharedSuggestionProvider.suggest((Iterable) ((net.minecraft.commands.CommandSourceStack) commandcontext.getSource()).getLevel().serverLevelData.getScheduledEvents().getEventsIds(), suggestionsbuilder); // Paper - Make schedule command per-world
};
public ScheduleCommand() {}
-@@ -85,7 +85,7 @@ public class ScheduleCommand {
+@@ -93,7 +93,7 @@ public class ScheduleCommand {
}
private static int remove(CommandSourceStack source, String eventName) throws CommandSyntaxException {
diff --git a/patches/unapplied/server/0476-Configurable-max-leash-distance.patch b/patches/server/0472-Configurable-max-leash-distance.patch
index d2f544737b..625e1c156b 100644
--- a/patches/unapplied/server/0476-Configurable-max-leash-distance.patch
+++ b/patches/server/0472-Configurable-max-leash-distance.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable max leash distance
diff --git a/src/main/java/net/minecraft/world/entity/Leashable.java b/src/main/java/net/minecraft/world/entity/Leashable.java
-index 1f2d04a456c383815b0c5ef331471593556fd128..5c51dd5229689cba459655d488aee59bd159a414 100644
+index e53c3b53ea9c0932f0f049bf76f1f6de0432506a..dc39ecc3e1aada638337d31bfe68b400c6454af7 100644
--- a/src/main/java/net/minecraft/world/entity/Leashable.java
+++ b/src/main/java/net/minecraft/world/entity/Leashable.java
-@@ -179,7 +179,7 @@ public interface Leashable {
+@@ -180,7 +180,7 @@ public interface Leashable {
return;
}
@@ -18,10 +18,10 @@ index 1f2d04a456c383815b0c5ef331471593556fd128..5c51dd5229689cba459655d488aee59b
} else if ((double) f > 6.0D) {
((Leashable) entity).elasticRangeLeashBehaviour(entity1, f);
diff --git a/src/main/java/net/minecraft/world/entity/TamableAnimal.java b/src/main/java/net/minecraft/world/entity/TamableAnimal.java
-index f2d311a5450eb684603580bbf7e9e7fc73fc2f5c..bf2c9134c7d9d5926add36b55e3cfea79e8c8243 100644
+index f239ab65d914ee9ec819e112f0a0466a06a77929..d2785628368b65854b6e1f35005c478d490a2f8c 100644
--- a/src/main/java/net/minecraft/world/entity/TamableAnimal.java
+++ b/src/main/java/net/minecraft/world/entity/TamableAnimal.java
-@@ -97,7 +97,7 @@ public abstract class TamableAnimal extends Animal implements OwnableEntity {
+@@ -98,7 +98,7 @@ public abstract class TamableAnimal extends Animal implements OwnableEntity {
@Override
public boolean handleLeashAtDistance(Entity leashHolder, float distance) {
if (this.isInSittingPose()) {
diff --git a/patches/unapplied/server/0477-Add-BlockPreDispenseEvent.patch b/patches/server/0473-Add-BlockPreDispenseEvent.patch
index 6e9bb3b216..ae0c60a3b4 100644
--- a/patches/unapplied/server/0477-Add-BlockPreDispenseEvent.patch
+++ b/patches/server/0473-Add-BlockPreDispenseEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add BlockPreDispenseEvent
diff --git a/src/main/java/net/minecraft/world/level/block/DispenserBlock.java b/src/main/java/net/minecraft/world/level/block/DispenserBlock.java
-index 94bcbaf7daf7dfe566f508d1170a433930d9d49a..f6edfea463b3725d3a79aca38825e86dbf82175c 100644
+index f4853a5ff8a45efcda2d7781c1fa897c47d8ea46..a02f24448b002824b068278fa427003008c0d0f1 100644
--- a/src/main/java/net/minecraft/world/level/block/DispenserBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/DispenserBlock.java
-@@ -110,6 +110,7 @@ public class DispenserBlock extends BaseEntityBlock {
+@@ -107,6 +107,7 @@ public class DispenserBlock extends BaseEntityBlock {
DispenseItemBehavior idispensebehavior = this.getDispenseMethod(world, itemstack);
if (idispensebehavior != DispenseItemBehavior.NOOP) {
@@ -29,10 +29,10 @@ index 91b514967405115f22edf4255775361a672e5c2f..ddecf443df3679e3098eb54edd19585a
} else {
// CraftBukkit start - Fire event when pushing items into other inventories
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 9e67dc35ea12149265517b951a96828460b2ca67..251b605396b77b0c449972c1da75978f57587e1a 100644
+index 4d7ac961b35b747ba5369ec1bdb6a9d78281f5d7..12aeb922c8a53eff9ba8e2c765d87df497611362 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -2134,5 +2134,11 @@ public class CraftEventFactory {
+@@ -2132,5 +2132,11 @@ populateFields(victim, event); // Paper - make cancellable
io.papermc.paper.event.block.BlockFailedDispenseEvent event = new io.papermc.paper.event.block.BlockFailedDispenseEvent(block);
return event.callEvent();
}
diff --git a/patches/unapplied/server/0478-Add-PlayerChangeBeaconEffectEvent.patch b/patches/server/0474-Add-PlayerChangeBeaconEffectEvent.patch
index 1903c21ba8..0b8263f96e 100644
--- a/patches/unapplied/server/0478-Add-PlayerChangeBeaconEffectEvent.patch
+++ b/patches/server/0474-Add-PlayerChangeBeaconEffectEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add PlayerChangeBeaconEffectEvent
diff --git a/src/main/java/net/minecraft/world/inventory/BeaconMenu.java b/src/main/java/net/minecraft/world/inventory/BeaconMenu.java
-index 7c4d2c184d9a1e4a1856e6771d39db384381e300..396559c281eee9e8c677cb222721414e8d9e12a2 100644
+index a191cef8037d94c7e93f79b86fc26ebefae95d8f..cad0b581c992edc5cd312a727695a443e26e96d8 100644
--- a/src/main/java/net/minecraft/world/inventory/BeaconMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/BeaconMenu.java
-@@ -171,12 +171,25 @@ public class BeaconMenu extends AbstractContainerMenu {
+@@ -157,12 +157,25 @@ public class BeaconMenu extends AbstractContainerMenu {
return BeaconMenu.decodeEffect(this.beaconData.get(2));
}
diff --git a/patches/unapplied/server/0479-Add-toggle-for-always-placing-the-dragon-egg.patch b/patches/server/0475-Add-toggle-for-always-placing-the-dragon-egg.patch
index ccbab4766e..0b28271dd1 100644
--- a/patches/unapplied/server/0479-Add-toggle-for-always-placing-the-dragon-egg.patch
+++ b/patches/server/0475-Add-toggle-for-always-placing-the-dragon-egg.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add toggle for always placing the dragon egg
diff --git a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
-index d6deedb96583c19eeb27e671289c4edc8a9245b4..4f3fdc6ea0cafd61f778edb6a967bd0eb00abdb9 100644
+index 323fbf684b7062c1b9084f1718538a3b3414d5bf..0e1eceb2b83aaafccbb5d58cf5098cfbc6f25a54 100644
--- a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
+++ b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
-@@ -409,7 +409,7 @@ public class EndDragonFight {
+@@ -410,7 +410,7 @@ public class EndDragonFight {
this.dragonEvent.setVisible(false);
this.spawnExitPortal(true);
this.spawnNewGateway();
diff --git a/patches/unapplied/server/0480-Add-PlayerStonecutterRecipeSelectEvent.patch b/patches/server/0476-Add-PlayerStonecutterRecipeSelectEvent.patch
index 0c96d8fa15..8a5e50313f 100644
--- a/patches/unapplied/server/0480-Add-PlayerStonecutterRecipeSelectEvent.patch
+++ b/patches/server/0476-Add-PlayerStonecutterRecipeSelectEvent.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Add PlayerStonecutterRecipeSelectEvent
Co-Authored-By: MiniDigger <[email protected]>
diff --git a/src/main/java/net/minecraft/world/inventory/StonecutterMenu.java b/src/main/java/net/minecraft/world/inventory/StonecutterMenu.java
-index 5b4f03128499b0c1a4b8c5f5ccd17e4bdb391e81..37e75c02c374314372630f4bda0b92519809f2a4 100644
+index 97837d1baf6b929a50e5562ef466050e70c2c8b1..a93870952e2ef674028b8a20aa52a685c743e7ea 100644
--- a/src/main/java/net/minecraft/world/inventory/StonecutterMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/StonecutterMenu.java
@@ -64,7 +64,7 @@ public class StonecutterMenu extends AbstractContainerMenu {
@@ -15,29 +15,33 @@ index 5b4f03128499b0c1a4b8c5f5ccd17e4bdb391e81..37e75c02c374314372630f4bda0b9251
super(MenuType.STONECUTTER, syncId);
- this.selectedRecipeIndex = DataSlot.standalone();
+ this.selectedRecipeIndex = DataSlot.shared(new int[1], 0); // Paper - Add PlayerStonecutterRecipeSelectEvent
- this.recipes = Lists.newArrayList();
+ this.recipesForInput = SelectableRecipe.SingleInputSet.empty();
this.input = ItemStack.EMPTY;
this.slotUpdateListener = () -> {
-@@ -162,7 +162,30 @@ public class StonecutterMenu extends AbstractContainerMenu {
+@@ -150,8 +150,34 @@ public class StonecutterMenu extends AbstractContainerMenu {
@Override
public boolean clickMenuButton(net.minecraft.world.entity.player.Player player, int id) {
if (this.isValidRecipeIndex(id)) {
- this.selectedRecipeIndex.set(id);
+- this.setupResultSlot(id);
+ // Paper start - Add PlayerStonecutterRecipeSelectEvent
+ int recipeIndex = id;
+ this.selectedRecipeIndex.set(recipeIndex);
+ this.selectedRecipeIndex.checkAndClearUpdateFlag(); // mark as changed
-+ if (this.isValidRecipeIndex(id)) {
-+ io.papermc.paper.event.player.PlayerStonecutterRecipeSelectEvent event = new io.papermc.paper.event.player.PlayerStonecutterRecipeSelectEvent((Player) player.getBukkitEntity(), (org.bukkit.inventory.StonecutterInventory) getBukkitView().getTopInventory(), (org.bukkit.inventory.StonecuttingRecipe) this.getRecipes().get(id).toBukkitRecipe());
++ paperEventBlock: if (this.isValidRecipeIndex(id)) {
++ final Optional<RecipeHolder<StonecutterRecipe>> recipe = this.recipesForInput.entries().get(id).recipe().recipe();
++ if (recipe.isEmpty()) break paperEventBlock; // The recipe selected does not have an actual server recipe (presumably its the empty one). Cannot call the event, just break.
++
++ io.papermc.paper.event.player.PlayerStonecutterRecipeSelectEvent event = new io.papermc.paper.event.player.PlayerStonecutterRecipeSelectEvent((Player) player.getBukkitEntity(), getBukkitView().getTopInventory(), (org.bukkit.inventory.StonecuttingRecipe) recipe.get().toBukkitRecipe());
+ if (!event.callEvent()) {
+ player.containerMenu.sendAllDataToRemote();
+ return false;
+ }
+
+ net.minecraft.resources.ResourceLocation key = org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(event.getStonecuttingRecipe().getKey());
-+ if (!this.getRecipes().get(recipeIndex).id().equals(key)) { // If the recipe did NOT stay the same
-+ for (int newRecipeIndex = 0; newRecipeIndex < this.getRecipes().size(); newRecipeIndex++) {
-+ if (this.getRecipes().get(newRecipeIndex).id().equals(key)) {
++ if (!recipe.get().id().location().equals(key)) { // If the recipe did NOT stay the same
++ for (int newRecipeIndex = 0; newRecipeIndex < this.recipesForInput.entries().size(); newRecipeIndex++) {
++ if (this.recipesForInput.entries().get(newRecipeIndex).recipe().recipe().filter(r -> r.id().location().equals(key)).isPresent()) {
+ recipeIndex = newRecipeIndex;
+ break;
+ }
@@ -46,7 +50,8 @@ index 5b4f03128499b0c1a4b8c5f5ccd17e4bdb391e81..37e75c02c374314372630f4bda0b9251
+ }
+ player.containerMenu.sendAllDataToRemote();
+ this.selectedRecipeIndex.set(recipeIndex); // set new index, so that listeners can read it
++ this.setupResultSlot(recipeIndex);
+ // Paper end - Add PlayerStonecutterRecipeSelectEvent
- this.setupResultSlot();
}
+ return true;
diff --git a/patches/unapplied/server/0481-Expand-EntityUnleashEvent.patch b/patches/server/0477-Expand-EntityUnleashEvent.patch
index 39bfff3811..fceff6d94a 100644
--- a/patches/unapplied/server/0481-Expand-EntityUnleashEvent.patch
+++ b/patches/server/0477-Expand-EntityUnleashEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Expand EntityUnleashEvent
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 7d131f3b3f5739468aa3115e97ed28b6bfeca33d..da184893d617311a43f9ce176a965f8417a2876d 100644
+index 1d2f0f8756addf0db7356b47ea8a1eddd2c4503d..42004784a5421bd27d0a4a2bf1c17d14341fc5a4 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -2574,12 +2574,15 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -2689,12 +2689,15 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
if (leashable.getLeashHolder() == player) {
if (!this.level().isClientSide()) {
// CraftBukkit start - fire PlayerUnleashEntityEvent
@@ -26,7 +26,7 @@ index 7d131f3b3f5739468aa3115e97ed28b6bfeca33d..da184893d617311a43f9ce176a965f84
this.gameEvent(GameEvent.ENTITY_INTERACT, player);
}
-@@ -3449,9 +3452,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -3659,9 +3662,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
protected void removeAfterChangingDimensions() {
this.setRemoved(Entity.RemovalReason.CHANGED_DIMENSION, null); // CraftBukkit - add Bukkit remove cause
@@ -43,24 +43,23 @@ index 7d131f3b3f5739468aa3115e97ed28b6bfeca33d..da184893d617311a43f9ce176a965f84
}
diff --git a/src/main/java/net/minecraft/world/entity/Leashable.java b/src/main/java/net/minecraft/world/entity/Leashable.java
-index 5c51dd5229689cba459655d488aee59bd159a414..e7535f15be3cc1537aafee53779ccfb4f21d1f38 100644
+index dc39ecc3e1aada638337d31bfe68b400c6454af7..1a6448cccf79a94013f9f44c3067d91da3da1f7e 100644
--- a/src/main/java/net/minecraft/world/entity/Leashable.java
+++ b/src/main/java/net/minecraft/world/entity/Leashable.java
-@@ -166,8 +166,11 @@ public interface Leashable {
+@@ -167,8 +167,11 @@ public interface Leashable {
if (leashable_a != null && leashable_a.leashHolder != null) {
if (!entity.isAlive() || !leashable_a.leashHolder.isAlive()) {
-- entity.level().getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(entity.getBukkitEntity(), (!entity.isAlive()) ? UnleashReason.PLAYER_UNLEASH : UnleashReason.HOLDER_GONE)); // CraftBukkit
-- Leashable.dropLeash(entity, true, !entity.pluginRemoved); // CraftBukkit - SPIGOT-7487: Don't drop leash, when the holder was removed by a plugin
+- world.getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(entity.getBukkitEntity(), (!entity.isAlive()) ? UnleashReason.PLAYER_UNLEASH : UnleashReason.HOLDER_GONE)); // CraftBukkit
+ // Paper start - Expand EntityUnleashEvent
-+ final EntityUnleashEvent event = new EntityUnleashEvent(entity.getBukkitEntity(), (!entity.isAlive()) ? UnleashReason.PLAYER_UNLEASH : UnleashReason.HOLDER_GONE, !entity.pluginRemoved);
++ final EntityUnleashEvent event = new EntityUnleashEvent(entity.getBukkitEntity(), (!entity.isAlive()) ? UnleashReason.PLAYER_UNLEASH : UnleashReason.HOLDER_GONE, world.getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS) && !entity.pluginRemoved);
+ event.callEvent();
-+ Leashable.dropLeash(entity, true, event.isDropLeash()); // CraftBukkit - SPIGOT-7487: Don't drop leash, when the holder was removed by a plugin
+ Leashable.dropLeash(entity, true, world.getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS) && !entity.pluginRemoved); // CraftBukkit - SPIGOT-7487: Don't drop leash, when the holder was removed by a plugin
+ // Paper end - Expand EntityUnleashEvent
}
Entity entity1 = ((Leashable) entity).getLeashHolder();
-@@ -198,11 +201,16 @@ public interface Leashable {
+@@ -199,11 +202,16 @@ public interface Leashable {
default void leashTooFarBehaviour() {
// CraftBukkit start
@@ -80,10 +79,10 @@ index 5c51dd5229689cba459655d488aee59bd159a414..e7535f15be3cc1537aafee53779ccfb4
default void closeRangeLeashBehaviour(Entity entity) {}
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index b46572f6e3b52f498b395d3b8c5def2aa799ff03..e87360e21e6eb7b0161c34a3ac6cb83d18bcd1e8 100644
+index a8ab3c03a6f96658ce2a3f5758225954a36de6a9..ac7a52e77fd2fcbe9f95709b95ba54f8c2a6514b 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -1621,8 +1621,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -1613,8 +1613,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
boolean flag1 = super.startRiding(entity, force);
if (flag1 && this.isLeashed()) {
@@ -98,10 +97,10 @@ index b46572f6e3b52f498b395d3b8c5def2aa799ff03..e87360e21e6eb7b0161c34a3ac6cb83d
return flag1;
diff --git a/src/main/java/net/minecraft/world/entity/TamableAnimal.java b/src/main/java/net/minecraft/world/entity/TamableAnimal.java
-index bf2c9134c7d9d5926add36b55e3cfea79e8c8243..7b7bc1a205dfacbe5709011b6b6799e75af9e4cc 100644
+index d2785628368b65854b6e1f35005c478d490a2f8c..cd565d1a8dab8d45196e4d29cab3d93a3ca619eb 100644
--- a/src/main/java/net/minecraft/world/entity/TamableAnimal.java
+++ b/src/main/java/net/minecraft/world/entity/TamableAnimal.java
-@@ -98,7 +98,11 @@ public abstract class TamableAnimal extends Animal implements OwnableEntity {
+@@ -99,7 +99,11 @@ public abstract class TamableAnimal extends Animal implements OwnableEntity {
public boolean handleLeashAtDistance(Entity leashHolder, float distance) {
if (this.isInSittingPose()) {
if (distance > (float) this.level().paperConfig().misc.maxLeashDistance.or(Leashable.LEASH_TOO_FAR_DIST)) { // Paper - Configurable max leash distance
@@ -115,10 +114,10 @@ index bf2c9134c7d9d5926add36b55e3cfea79e8c8243..7b7bc1a205dfacbe5709011b6b6799e7
return false;
diff --git a/src/main/java/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java b/src/main/java/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java
-index 3c0af74ed65610b1d5e3b72fdcf28c5a3423f0da..01173fc7177d78588978e087e63efda0b0527c2f 100644
+index 4b44830ef5d08887274ebb39e2780606fe3a76b4..d3a7953a3f42a0020342845e9107c6991637b050 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java
-@@ -118,13 +118,18 @@ public class LeashFenceKnotEntity extends BlockAttachedEntity {
+@@ -119,13 +119,18 @@ public class LeashFenceKnotEntity extends BlockAttachedEntity {
if (leashable1.isLeashed() && leashable1.getLeashHolder() == this) {
// CraftBukkit start
@@ -140,10 +139,10 @@ index 3c0af74ed65610b1d5e3b72fdcf28c5a3423f0da..01173fc7177d78588978e087e63efda0
flag1 = true;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 251b605396b77b0c449972c1da75978f57587e1a..c48a9026c4db2005b67c5f70e9e1fa95b7820bc0 100644
+index 12aeb922c8a53eff9ba8e2c765d87df497611362..cee72eb02ebba4f50a117876351b8f516ba12057 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -1598,8 +1598,10 @@ public class CraftEventFactory {
+@@ -1596,8 +1596,10 @@ populateFields(victim, event); // Paper - make cancellable
Bukkit.getPluginManager().callEvent(new PlayerRecipeBookSettingsChangeEvent(player.getBukkitEntity(), bukkitType, open, filter));
}
diff --git a/patches/unapplied/server/0482-Reset-shield-blocking-on-dimension-change.patch b/patches/server/0478-Reset-shield-blocking-on-dimension-change.patch
index f0f37986b6..c1bc7de4e1 100644
--- a/patches/unapplied/server/0482-Reset-shield-blocking-on-dimension-change.patch
+++ b/patches/server/0478-Reset-shield-blocking-on-dimension-change.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Reset shield blocking on dimension change
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 2ea613f818403f8e8ece4b36891738139345cf89..fffd3ae6c4fc0b86057cd915bb4f0987f41a64d0 100644
+index 0ae490bb9b4cd781876054d0824c5392060208eb..3a2a4f6bc1de45c0dc2020357ee308064666f8d5 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -1349,6 +1349,11 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player {
+@@ -1613,6 +1613,11 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player {
PlayerChangedWorldEvent changeEvent = new PlayerChangedWorldEvent(this.getBukkitEntity(), worldserver1.getWorld());
this.level().getCraftServer().getPluginManager().callEvent(changeEvent);
// CraftBukkit end
diff --git a/patches/unapplied/server/0483-Add-DragonEggFormEvent.patch b/patches/server/0479-Add-DragonEggFormEvent.patch
index 8a1ea59534..34506b3c79 100644
--- a/patches/unapplied/server/0483-Add-DragonEggFormEvent.patch
+++ b/patches/server/0479-Add-DragonEggFormEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add DragonEggFormEvent
diff --git a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
-index 4f3fdc6ea0cafd61f778edb6a967bd0eb00abdb9..460744ec3a1abe9a2d9d16c2ec521c52c7f8db95 100644
+index 0e1eceb2b83aaafccbb5d58cf5098cfbc6f25a54..3d1a49d865e17a61ff74c6fe0efbd908447ee730 100644
--- a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
+++ b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
-@@ -409,8 +409,22 @@ public class EndDragonFight {
+@@ -410,8 +410,22 @@ public class EndDragonFight {
this.dragonEvent.setVisible(false);
this.spawnExitPortal(true);
this.spawnNewGateway();
diff --git a/patches/unapplied/server/0484-Add-EntityMoveEvent.patch b/patches/server/0480-Add-EntityMoveEvent.patch
index 9b7d66dfba..7eb0eacb2e 100644
--- a/patches/unapplied/server/0484-Add-EntityMoveEvent.patch
+++ b/patches/server/0480-Add-EntityMoveEvent.patch
@@ -5,22 +5,22 @@ Subject: [PATCH] Add EntityMoveEvent
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 39ce74bc3fbb282f56028273d53f980171bdb464..43b28b56c7949f95af5b7e99b04b93ed711d8880 100644
+index 058719f8b768b5a1227a19927d0f632815190a91..985f345cdf9f69140df9210be6eca477d911f8a9 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1605,6 +1605,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
+@@ -1683,6 +1683,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
while (iterator.hasNext()) {
ServerLevel worldserver = (ServerLevel) iterator.next();
worldserver.hasPhysicsEvent = org.bukkit.event.block.BlockPhysicsEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - BlockPhysicsEvent
+ worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent
- this.profiler.push(() -> {
+ gameprofilerfiller.push(() -> {
String s = String.valueOf(worldserver);
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 373560fc82e491e6c8b755fecfe78d49a2fc3e2f..644341b8bc3079c6f092226acd11667f64bd55a1 100644
+index d62d6a345837e1b63c1a1393f18e367ac0ef4c30..b91ed08e8d9fbd399834d19ef01ebe5692d1ee4a 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -228,6 +228,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -231,6 +231,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
public final LevelStorageSource.LevelStorageAccess convertable;
public final UUID uuid;
public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent
@@ -29,13 +29,13 @@ index 373560fc82e491e6c8b755fecfe78d49a2fc3e2f..644341b8bc3079c6f092226acd11667f
public LevelChunk getChunkIfLoaded(int x, int z) {
return this.chunkSource.getChunk(x, z, false);
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index d94c3e86885c5a8ba636988d29f98b496e13b627..a89c6ba4140f15e7f68f0df5cf64a176d350123b 100644
+index 7ea58478d3cde175a056f41cf945636a04128828..293490d124bc06c4a06b9f4a7f77a9c25a8d7d39 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -3510,6 +3510,20 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3628,6 +3628,20 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.pushEntities();
- this.level().getProfiler().pop();
+ gameprofilerfiller.pop();
+ // Paper start - Add EntityMoveEvent
+ if (((ServerLevel) this.level()).hasEntityMoveEvent && !(this instanceof net.minecraft.world.entity.player.Player)) {
+ if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) {
@@ -50,6 +50,6 @@ index d94c3e86885c5a8ba636988d29f98b496e13b627..a89c6ba4140f15e7f68f0df5cf64a176
+ }
+ }
+ // Paper end - Add EntityMoveEvent
- if (!this.level().isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) {
- this.hurt(this.damageSources().drown(), 1.0F);
- }
+ world = this.level();
+ if (world instanceof ServerLevel worldserver) {
+ if (this.isSensitiveToWater() && this.isInWaterRainOrBubble()) {
diff --git a/patches/unapplied/server/0485-added-option-to-disable-pathfinding-updates-on-block.patch b/patches/server/0481-added-option-to-disable-pathfinding-updates-on-block.patch
index e40ef31e16..3850327834 100644
--- a/patches/unapplied/server/0485-added-option-to-disable-pathfinding-updates-on-block.patch
+++ b/patches/server/0481-added-option-to-disable-pathfinding-updates-on-block.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] added option to disable pathfinding updates on block changes
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 644341b8bc3079c6f092226acd11667f64bd55a1..1fe013b94cf1b5332f1e4645dd35df01e11fe0d9 100644
+index b91ed08e8d9fbd399834d19ef01ebe5692d1ee4a..d696ec118367f64fa7151189a4ace58287329851 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -1374,6 +1374,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1387,6 +1387,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
this.getChunkSource().blockChanged(pos);
this.pathTypesByPosCache.invalidate(pos);
@@ -16,7 +16,7 @@ index 644341b8bc3079c6f092226acd11667f64bd55a1..1fe013b94cf1b5332f1e4645dd35df01
VoxelShape voxelshape = oldState.getCollisionShape(this, pos);
VoxelShape voxelshape1 = newState.getCollisionShape(this, pos);
-@@ -1415,6 +1416,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
+@@ -1428,6 +1429,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}
}
diff --git a/patches/unapplied/server/0486-Inline-shift-direction-fields.patch b/patches/server/0482-Inline-shift-direction-fields.patch
index 910b881e3a..22234bc09a 100644
--- a/patches/unapplied/server/0486-Inline-shift-direction-fields.patch
+++ b/patches/server/0482-Inline-shift-direction-fields.patch
@@ -7,10 +7,10 @@ Removes a layer of indirection for EnumDirection.getAdjacent(X|Y|Z)(), which is
critical section for much of the server, including the lighting engine.
diff --git a/src/main/java/net/minecraft/core/Direction.java b/src/main/java/net/minecraft/core/Direction.java
-index c47e6acbd36737aa7af13b452f51b3f017d324f4..03c45ee77276462818a6f774b5945b25924aa3f0 100644
+index 69ccada8ea78c05d3fb886222698c07dee421506..3fde5abde736b2c19d8819d9aec0397a0245ccd1 100644
--- a/src/main/java/net/minecraft/core/Direction.java
+++ b/src/main/java/net/minecraft/core/Direction.java
-@@ -55,6 +55,12 @@ public enum Direction implements StringRepresentable {
+@@ -57,6 +57,12 @@ public enum Direction implements StringRepresentable {
.sorted(Comparator.comparingInt(direction -> direction.data2d))
.toArray(Direction[]::new);
@@ -23,10 +23,10 @@ index c47e6acbd36737aa7af13b452f51b3f017d324f4..03c45ee77276462818a6f774b5945b25
private Direction(
final int id,
final int idOpposite,
-@@ -71,6 +77,11 @@ public enum Direction implements StringRepresentable {
- this.axis = axis;
+@@ -74,6 +80,11 @@ public enum Direction implements StringRepresentable {
this.axisDirection = direction;
this.normal = vector;
+ this.normalVec3 = Vec3.atLowerCornerOf(vector);
+ // Paper start - Perf: Inline shift direction fields
+ this.adjX = vector.getX();
+ this.adjY = vector.getY();
@@ -35,7 +35,7 @@ index c47e6acbd36737aa7af13b452f51b3f017d324f4..03c45ee77276462818a6f774b5945b25
}
public static Direction[] orderedByNearest(Entity entity) {
-@@ -234,15 +245,15 @@ public enum Direction implements StringRepresentable {
+@@ -247,15 +258,15 @@ public enum Direction implements StringRepresentable {
}
public int getStepX() {
diff --git a/patches/unapplied/server/0487-Allow-adding-items-to-BlockDropItemEvent.patch b/patches/server/0483-Allow-adding-items-to-BlockDropItemEvent.patch
index 4753f93e41..4f9534949b 100644
--- a/patches/unapplied/server/0487-Allow-adding-items-to-BlockDropItemEvent.patch
+++ b/patches/server/0483-Allow-adding-items-to-BlockDropItemEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow adding items to BlockDropItemEvent
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index c48a9026c4db2005b67c5f70e9e1fa95b7820bc0..36adcab02e97cae2d087bae74cc4ceaf3052a9f8 100644
+index cee72eb02ebba4f50a117876351b8f516ba12057..1ce637a2b80dfc5c3da20f7bd95b97f4718a07d4 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -462,13 +462,30 @@ public class CraftEventFactory {
+@@ -461,13 +461,30 @@ public class CraftEventFactory {
}
public static void handleBlockDropItemEvent(Block block, BlockState state, ServerPlayer player, List<ItemEntity> items) {
diff --git a/patches/unapplied/server/0488-Add-getMainThreadExecutor-to-BukkitScheduler.patch b/patches/server/0484-Add-getMainThreadExecutor-to-BukkitScheduler.patch
index 6ae0c8d11b..e2b8629ca8 100644
--- a/patches/unapplied/server/0488-Add-getMainThreadExecutor-to-BukkitScheduler.patch
+++ b/patches/server/0484-Add-getMainThreadExecutor-to-BukkitScheduler.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add getMainThreadExecutor to BukkitScheduler
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
-index d7c2d8993a172e343669228cf24a58d8992a1c10..2f4d6b56301195f8d39ed50dffe842464065bfe1 100644
+index fdfdcac6644e5343fb1f1cbe5d9aa76a79627046..5fc88196b2c873427c817e9802ad3b12009f265f 100644
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
@@ -642,4 +642,15 @@ public class CraftScheduler implements BukkitScheduler {
diff --git a/patches/unapplied/server/0489-living-entity-allow-attribute-registration.patch b/patches/server/0485-living-entity-allow-attribute-registration.patch
index 77576f8436..e9e4ab2f48 100644
--- a/patches/unapplied/server/0489-living-entity-allow-attribute-registration.patch
+++ b/patches/server/0485-living-entity-allow-attribute-registration.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] living entity allow attribute registration
diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
-index cd03d705337a0ea34c7c06a581294112433afb50..69992ebc999ea3ff9e47e4e049bcc514c01150ca 100644
+index 3a6c55a7f07e8871a77c91679732dd63db604004..94d04a20f97405e02d7cccaabadc7a7e86e336f7 100644
--- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
+++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
-@@ -140,4 +140,12 @@ public class AttributeMap {
+@@ -149,4 +149,12 @@ public class AttributeMap {
}
}
}
@@ -38,10 +38,10 @@ index 5678d2007d5adf45dec0638c5dd848b601801814..0a7ed5a4f1644a70d8f98ad7a6962b81
+ // Paper end - living entity allow attribute registration
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-index 10f3defa8f4b57fb45cf7de06d415b72102e47d5..e56a0d8928e3c0e27b1acd171162e4a53b70d925 100644
+index ff3b53eff8f5fc1e02e7b30d59ff27dfe8f5d431..5749e2b5174be23633c8a811baec8c05da12e3e2 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-@@ -768,6 +768,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
+@@ -775,6 +775,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
return this.getHandle().craftAttributes.getAttribute(attribute);
}
diff --git a/patches/unapplied/server/0490-fix-dead-slime-setSize-invincibility.patch b/patches/server/0486-fix-dead-slime-setSize-invincibility.patch
index 494e56127e..494e56127e 100644
--- a/patches/unapplied/server/0490-fix-dead-slime-setSize-invincibility.patch
+++ b/patches/server/0486-fix-dead-slime-setSize-invincibility.patch
diff --git a/patches/unapplied/server/0491-Merchant-getRecipes-should-return-an-immutable-list.patch b/patches/server/0487-Merchant-getRecipes-should-return-an-immutable-list.patch
index d40a7cf8d7..d40a7cf8d7 100644
--- a/patches/unapplied/server/0491-Merchant-getRecipes-should-return-an-immutable-list.patch
+++ b/patches/server/0487-Merchant-getRecipes-should-return-an-immutable-list.patch
diff --git a/patches/unapplied/server/0492-Expose-Tracked-Players.patch b/patches/server/0488-Expose-Tracked-Players.patch
index d8ca4c111c..2835731302 100644
--- a/patches/unapplied/server/0492-Expose-Tracked-Players.patch
+++ b/patches/server/0488-Expose-Tracked-Players.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Expose Tracked Players
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-index 98e8ad81b8c9c0636abe59f70ce891fe926a37fe..96201ea45f8b53dcadb1a8732b1d49b1e8d1d7df 100644
+index 925626b74005ec9c031c3773171f7684ecc9ccd3..06fda053874e7ef0c8995b1a55e5f518b28eebc9 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-@@ -1069,4 +1069,21 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
+@@ -1070,4 +1070,21 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
return getHandle().isTicking();
}
// Paper end - isTicking API
diff --git a/patches/unapplied/server/0493-Improve-ServerGUI.patch b/patches/server/0489-Improve-ServerGUI.patch
index 8dde1d1a9b..8dde1d1a9b 100644
--- a/patches/unapplied/server/0493-Improve-ServerGUI.patch
+++ b/patches/server/0489-Improve-ServerGUI.patch
diff --git a/patches/unapplied/server/0494-fix-converting-txt-to-json-file.patch b/patches/server/0490-fix-converting-txt-to-json-file.patch
index 2134c10628..19ad568347 100644
--- a/patches/unapplied/server/0494-fix-converting-txt-to-json-file.patch
+++ b/patches/server/0490-fix-converting-txt-to-json-file.patch
@@ -21,10 +21,10 @@ index 929f59bce01c8e6ed4b0b551744d42e131b8fc80..22c4f8dea99f92a1eb3da2baf0a15bf9
this.saveUserBanList();
this.loadIpBanList();
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index 2b1d7a2360a9ee7bca9d93a2dc8c61d1648a8348..d5153f804cfcfd1a70c46975e3fb1e50c8a82999 100644
+index 20a3138c6c2a6c8ada8b6008913abae0eea76f2d..e95d592b6001dd4320c58133d841359f99c2d9c4 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-@@ -216,6 +216,12 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -215,6 +215,12 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
this.paperConfigurations.initializeGlobalConfiguration(this.registryAccess());
this.paperConfigurations.initializeWorldDefaultsConfiguration(this.registryAccess());
// Paper end - initialize global and world-defaults configuration
@@ -37,7 +37,7 @@ index 2b1d7a2360a9ee7bca9d93a2dc8c61d1648a8348..d5153f804cfcfd1a70c46975e3fb1e50
org.spigotmc.WatchdogThread.doStart(org.spigotmc.SpigotConfig.timeoutTime, org.spigotmc.SpigotConfig.restartOnCrash); // Paper - start watchdog thread
io.papermc.paper.command.PaperCommands.registerCommands(this); // Paper - setup /paper command
com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics
-@@ -270,9 +276,6 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -269,9 +275,6 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
DedicatedServer.LOGGER.warn("To change this, set \"online-mode\" to \"true\" in the server.properties file.");
}
@@ -48,10 +48,10 @@ index 2b1d7a2360a9ee7bca9d93a2dc8c61d1648a8348..d5153f804cfcfd1a70c46975e3fb1e50
if (!OldUsersConverter.serverReadyAfterUserconversion(this)) {
return false;
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 9b94ca912f99a3a465f30130b24347fc9aca72ff..123fe4f5b98a7483af86695ec82987abd45eafb2 100644
+index 7676dbe55b4bf6e0472dc0190c01e6ecfcbb464e..26e0414645f7ab11ca3e77c7c5e458612625aee9 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -179,6 +179,7 @@ public abstract class PlayerList {
+@@ -180,6 +180,7 @@ public abstract class PlayerList {
this.maxPlayers = maxPlayers;
this.playerIo = saveHandler;
}
diff --git a/patches/unapplied/server/0495-Add-worldborder-events.patch b/patches/server/0491-Add-worldborder-events.patch
index 44a467547c..014dba4c88 100644
--- a/patches/unapplied/server/0495-Add-worldborder-events.patch
+++ b/patches/server/0491-Add-worldborder-events.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add worldborder events
diff --git a/src/main/java/net/minecraft/world/level/border/WorldBorder.java b/src/main/java/net/minecraft/world/level/border/WorldBorder.java
-index 3442e33a1146318228c4727a2a5afde685f69bf7..04e62c54f224f7949fde9ceded208e700db55aa1 100644
+index b50090df116697a12f5498d65dd2e5d6d5297fb5..807a097a7b6399f24ede741f94ce98eb67e55add 100644
--- a/src/main/java/net/minecraft/world/level/border/WorldBorder.java
+++ b/src/main/java/net/minecraft/world/level/border/WorldBorder.java
-@@ -140,6 +140,14 @@ public class WorldBorder {
+@@ -148,6 +148,14 @@ public class WorldBorder {
}
public void setCenter(double x, double z) {
@@ -23,7 +23,7 @@ index 3442e33a1146318228c4727a2a5afde685f69bf7..04e62c54f224f7949fde9ceded208e70
this.centerX = x;
this.centerZ = z;
this.extent.onCenterChange();
-@@ -166,6 +174,17 @@ public class WorldBorder {
+@@ -174,6 +182,17 @@ public class WorldBorder {
}
public void setSize(double size) {
@@ -41,7 +41,7 @@ index 3442e33a1146318228c4727a2a5afde685f69bf7..04e62c54f224f7949fde9ceded208e70
this.extent = new WorldBorder.StaticBorderExtent(size);
Iterator iterator = this.getListeners().iterator();
-@@ -178,6 +197,20 @@ public class WorldBorder {
+@@ -186,6 +205,20 @@ public class WorldBorder {
}
public void lerpSizeBetween(double fromSize, double toSize, long time) {
@@ -62,7 +62,7 @@ index 3442e33a1146318228c4727a2a5afde685f69bf7..04e62c54f224f7949fde9ceded208e70
this.extent = (WorldBorder.BorderExtent) (fromSize == toSize ? new WorldBorder.StaticBorderExtent(toSize) : new WorldBorder.MovingBorderExtent(fromSize, toSize, time));
Iterator iterator = this.getListeners().iterator();
-@@ -489,6 +522,7 @@ public class WorldBorder {
+@@ -497,6 +530,7 @@ public class WorldBorder {
@Override
public WorldBorder.BorderExtent update() {
diff --git a/patches/unapplied/server/0496-Add-PlayerNameEntityEvent.patch b/patches/server/0492-Add-PlayerNameEntityEvent.patch
index 9287edc1b7..4215e4291d 100644
--- a/patches/unapplied/server/0496-Add-PlayerNameEntityEvent.patch
+++ b/patches/server/0492-Add-PlayerNameEntityEvent.patch
@@ -5,12 +5,12 @@ Subject: [PATCH] Add PlayerNameEntityEvent
diff --git a/src/main/java/net/minecraft/world/item/NameTagItem.java b/src/main/java/net/minecraft/world/item/NameTagItem.java
-index 3ce8c725270510dbaaf2c1edc895d37ea9ca424c..774c982f28b4f127fc3f036c19dfb47fb9ae3264 100644
+index dd5aa4bbf2e7bab3be1c3582b090fdf0fa3fb0df..000d1863bfba98b5132dfc6743362d687b2f54f3 100644
--- a/src/main/java/net/minecraft/world/item/NameTagItem.java
+++ b/src/main/java/net/minecraft/world/item/NameTagItem.java
@@ -18,8 +18,13 @@ public class NameTagItem extends Item {
Component component = stack.get(DataComponents.CUSTOM_NAME);
- if (component != null && !(entity instanceof Player)) {
+ if (component != null && entity.getType().canSerialize()) {
if (!user.level().isClientSide && entity.isAlive()) {
- entity.setCustomName(component);
- if (entity instanceof Mob mob) {
diff --git a/patches/unapplied/server/0497-Add-recipe-to-cook-events.patch b/patches/server/0493-Add-recipe-to-cook-events.patch
index 6fe8720d21..737ce3caf8 100644
--- a/patches/unapplied/server/0497-Add-recipe-to-cook-events.patch
+++ b/patches/server/0493-Add-recipe-to-cook-events.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add recipe to cook events
diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
-index 5ea2b05961590732a43bb5a1abf00bf8a00c72c2..84a3130a31f7a0fd5a8ae1b293dd3f2ca07c86d3 100644
+index b9dd5f710533b156311cac2c020fd0d5f64b6265..2ec1c00eb77051c622fedec1ebeba2953886ace4 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
-@@ -444,7 +444,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
+@@ -332,7 +332,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
CraftItemStack source = CraftItemStack.asCraftMirror(itemstack);
org.bukkit.inventory.ItemStack result = CraftItemStack.asBukkitCopy(itemstack1);
@@ -18,22 +18,22 @@ index 5ea2b05961590732a43bb5a1abf00bf8a00c72c2..84a3130a31f7a0fd5a8ae1b293dd3f2c
if (furnaceSmeltEvent.isCancelled()) {
diff --git a/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
-index 80f911692c97585a696a19ebbe616d6aa312b2d9..0c20a334be4b1c4cf7999826f8d9bff5e36bc2b8 100644
+index 30035d534e144bf31f94073c57b0195be7e62772..7fa1aea7942a1bc4d9779a9f8ab020ccd5566923 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
-@@ -67,7 +67,10 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
+@@ -66,7 +66,10 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
- if (campfire.cookingProgress[i] >= campfire.cookingTime[i]) {
+ if (blockEntity.cookingProgress[i] >= blockEntity.cookingTime[i]) {
SingleRecipeInput singlerecipeinput = new SingleRecipeInput(itemstack);
-- ItemStack itemstack1 = (ItemStack) campfire.quickCheck.getRecipeFor(singlerecipeinput, world).map((recipeholder) -> {
+- ItemStack itemstack1 = (ItemStack) recipeMatchGetter.getRecipeFor(singlerecipeinput, world).map((recipeholder) -> {
+ // Paper start - add recipe to cook events
-+ Optional<RecipeHolder<CampfireCookingRecipe>> recipeHolderOptional = campfire.quickCheck.getRecipeFor(singlerecipeinput, world);
-+ ItemStack itemstack1 = recipeHolderOptional.map((recipeholder) -> {
-+ // Paper end - Add recipe to cook events
++ final Optional<RecipeHolder<CampfireCookingRecipe>> recipeHolderOptional = recipeMatchGetter.getRecipeFor(singlerecipeinput, world);
++ ItemStack itemstack1 = (ItemStack) recipeHolderOptional.map((recipeholder) -> {
++ // Paper end - add recipe to cook events
return ((CampfireCookingRecipe) recipeholder.value()).assemble(singlerecipeinput, world.registryAccess());
}).orElse(itemstack);
-@@ -76,7 +79,7 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
+@@ -75,7 +78,7 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
CraftItemStack source = CraftItemStack.asCraftMirror(itemstack);
org.bukkit.inventory.ItemStack result = CraftItemStack.asBukkitCopy(itemstack1);
diff --git a/patches/unapplied/server/0498-Add-Block-isValidTool.patch b/patches/server/0494-Add-Block-isValidTool.patch
index 5f36fb047c..e0c42e8e37 100644
--- a/patches/unapplied/server/0498-Add-Block-isValidTool.patch
+++ b/patches/server/0494-Add-Block-isValidTool.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add Block#isValidTool
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
-index 98e87dc15e2ed23f6897ba6359846ff5bc32b655..2034858a53c4c887da334cdc7713997daa01124f 100644
+index 1595e877b02b447b36f5c316ae70d4023b78a862..54fb380a6896731a18c0100722d12099e590cbc9 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
@@ -693,5 +693,9 @@ public class CraftBlock implements Block {
diff --git a/patches/unapplied/server/0499-Allow-using-signs-inside-spawn-protection.patch b/patches/server/0495-Allow-using-signs-inside-spawn-protection.patch
index 9f0399c60f..84ca07a4a1 100644
--- a/patches/unapplied/server/0499-Allow-using-signs-inside-spawn-protection.patch
+++ b/patches/server/0495-Allow-using-signs-inside-spawn-protection.patch
@@ -5,16 +5,15 @@ Subject: [PATCH] Allow using signs inside spawn protection
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index d7d36b5148f2e7280816cc70b300b9b10720f751..25d060e8d77b1e8ea2ac951d2b25d60a984398cd 100644
+index 0c413f4981038c5c3f12ba17309ce354c3f13ec6..628260aa644539a966e4cc5acf8da34144fcabd0 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -1758,8 +1758,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
- int i = this.player.level().getMaxBuildHeight();
+@@ -1762,7 +1762,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+ int i = this.player.level().getMaxY();
- if (blockposition.getY() < i) {
+ if (blockposition.getY() <= i) {
- if (this.awaitingPositionFromClient == null && worldserver.mayInteract(this.player, blockposition)) {
-- this.player.stopUsingItem(); // CraftBukkit - SPIGOT-4706
+ if (this.awaitingPositionFromClient == null && (worldserver.mayInteract(this.player, blockposition) || (worldserver.paperConfig().spawn.allowUsingSignsInsideSpawnProtection && worldserver.getBlockState(blockposition).getBlock() instanceof net.minecraft.world.level.block.SignBlock))) { // Paper - Allow using signs inside spawn protection
+ this.player.stopUsingItem(); // CraftBukkit - SPIGOT-4706
InteractionResult enuminteractionresult = this.player.gameMode.useItemOn(this.player, worldserver, itemstack, enumhand, movingobjectpositionblock);
- if (enuminteractionresult.consumesAction()) {
diff --git a/patches/unapplied/server/0500-Expand-world-key-API.patch b/patches/server/0496-Expand-world-key-API.patch
index d2ccfa3efb..beef586467 100644
--- a/patches/unapplied/server/0500-Expand-world-key-API.patch
+++ b/patches/server/0496-Expand-world-key-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Expand world key API
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
-index 1963e826548c5a8859c50f57654784c3aef50e44..04a39cb6c13c26e2cb1d73a9da98df5d04df69bc 100644
+index 93dadbf659e41c923268d8ec782fcbdc8aaeff68..21e5dd6624e50dec35859b7d1be4a304e4427883 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
@@ -515,5 +515,10 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
@@ -20,10 +20,10 @@ index 1963e826548c5a8859c50f57654784c3aef50e44..04a39cb6c13c26e2cb1d73a9da98df5d
// Paper end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-index f402ef662779e096ee354b9edd66cca785b85f33..a9c6f53c7e828a4b7d0cefbaa98e50ff1db9354a 100644
+index ee231d93d216571a45b11b49663b2ea91c47a1c7..dc20a383950a72aba5d056912d257912d3c0e808 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
-@@ -1183,9 +1183,15 @@ public final class CraftServer implements Server {
+@@ -1186,9 +1186,15 @@ public final class CraftServer implements Server {
File folder = new File(this.getWorldContainer(), name);
World world = this.getWorld(name);
@@ -41,7 +41,7 @@ index f402ef662779e096ee354b9edd66cca785b85f33..a9c6f53c7e828a4b7d0cefbaa98e50ff
if (folder.exists()) {
Preconditions.checkArgument(folder.isDirectory(), "File (%s) exists and isn't a folder", name);
-@@ -1311,7 +1317,7 @@ public final class CraftServer implements Server {
+@@ -1314,7 +1320,7 @@ public final class CraftServer implements Server {
} else if (name.equals(levelName + "_the_end")) {
worldKey = net.minecraft.world.level.Level.END;
} else {
@@ -50,7 +50,7 @@ index f402ef662779e096ee354b9edd66cca785b85f33..a9c6f53c7e828a4b7d0cefbaa98e50ff
}
// If set to not keep spawn in memory (changed from default) then adjust rule accordingly
-@@ -1407,6 +1413,15 @@ public final class CraftServer implements Server {
+@@ -1410,6 +1416,15 @@ public final class CraftServer implements Server {
return null;
}
@@ -67,7 +67,7 @@ index f402ef662779e096ee354b9edd66cca785b85f33..a9c6f53c7e828a4b7d0cefbaa98e50ff
// Check if a World already exists with the UID.
if (this.getWorld(world.getUID()) != null) {
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
-index 66249c5caefb0879e13c02d5553b09b4122418b9..79915a93b36ddf2925444369a5df4e8f4fd5610e 100644
+index ea9c9ae832c4044a2eccbf901e20ff042df68bf3..407fa9f1f3d418597eb490e2cf41aee39c715d3a 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -522,6 +522,11 @@ public final class CraftMagicNumbers implements UnsafeValues {
diff --git a/patches/unapplied/server/0501-Add-fast-alternative-constructor-for-Rotations.patch b/patches/server/0497-Add-fast-alternative-constructor-for-Rotations.patch
index e28775fc9a..e28775fc9a 100644
--- a/patches/unapplied/server/0501-Add-fast-alternative-constructor-for-Rotations.patch
+++ b/patches/server/0497-Add-fast-alternative-constructor-for-Rotations.patch
diff --git a/patches/unapplied/server/0502-Drop-carried-item-when-player-has-disconnected.patch b/patches/server/0498-Drop-carried-item-when-player-has-disconnected.patch
index ababb3984c..a13f458eea 100644
--- a/patches/unapplied/server/0502-Drop-carried-item-when-player-has-disconnected.patch
+++ b/patches/server/0498-Drop-carried-item-when-player-has-disconnected.patch
@@ -7,10 +7,10 @@ Fixes disappearance of held items, when a player gets disconnected and PlayerDro
Closes #5036
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 123fe4f5b98a7483af86695ec82987abd45eafb2..bbc6f64a3b2c0702a0a752acd48145cdcafd742e 100644
+index 26e0414645f7ab11ca3e77c7c5e458612625aee9..6f7807cc0da427485037b3a72a9c60c81a858294 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -588,6 +588,14 @@ public abstract class PlayerList {
+@@ -538,6 +538,14 @@ public abstract class PlayerList {
}
// Paper end - Configurable player collision
diff --git a/patches/unapplied/server/0503-forced-whitelist-use-configurable-kick-message.patch b/patches/server/0499-forced-whitelist-use-configurable-kick-message.patch
index 96926fac4a..aed5bbf27d 100644
--- a/patches/unapplied/server/0503-forced-whitelist-use-configurable-kick-message.patch
+++ b/patches/server/0499-forced-whitelist-use-configurable-kick-message.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] forced whitelist: use configurable kick message
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 43b28b56c7949f95af5b7e99b04b93ed711d8880..6651afa50cfaf53959f89108904d4bf65a0fc495 100644
+index 985f345cdf9f69140df9210be6eca477d911f8a9..42429684bd732d0094ad0db346d2a656871aabff 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -2286,7 +2286,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
+@@ -2368,7 +2368,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
ServerPlayer entityplayer = (ServerPlayer) iterator.next();
if (!whitelist.isWhiteListed(entityplayer.getGameProfile()) && !this.getPlayerList().isOp(entityplayer.getGameProfile())) { // Paper - Fix kicking ops when whitelist is reloaded (MC-171420)
diff --git a/patches/unapplied/server/0504-Don-t-ignore-result-of-PlayerEditBookEvent.patch b/patches/server/0500-Don-t-ignore-result-of-PlayerEditBookEvent.patch
index 04bcbb953c..1946415e72 100644
--- a/patches/unapplied/server/0504-Don-t-ignore-result-of-PlayerEditBookEvent.patch
+++ b/patches/server/0500-Don-t-ignore-result-of-PlayerEditBookEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Don't ignore result of PlayerEditBookEvent
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 25d060e8d77b1e8ea2ac951d2b25d60a984398cd..403b2499374906daa0ca2bb774522f92e186e6d5 100644
+index 628260aa644539a966e4cc5acf8da34144fcabd0..ed6c07cfa69788eb6adcaf8293b2ca2040f057a0 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -1154,7 +1154,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1157,7 +1157,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
List<Filterable<String>> list1 = pages.stream().map(this::filterableFromOutgoing).toList();
itemstack.set(DataComponents.WRITABLE_BOOK_CONTENT, new WritableBookContent(list1));
diff --git a/patches/unapplied/server/0505-Expose-protocol-version.patch b/patches/server/0501-Expose-protocol-version.patch
index d47bd22bc7..1cc14ceba2 100644
--- a/patches/unapplied/server/0505-Expose-protocol-version.patch
+++ b/patches/server/0501-Expose-protocol-version.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Expose protocol version
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
-index 79915a93b36ddf2925444369a5df4e8f4fd5610e..09fa524fa1155d53d988c15c1af551f73c96ede5 100644
+index 407fa9f1f3d418597eb490e2cf41aee39c715d3a..2f7cb2bd5998204d61c9d758224b3a2e3351de48 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -527,6 +527,11 @@ public final class CraftMagicNumbers implements UnsafeValues {
diff --git a/patches/unapplied/server/0506-Enhance-console-tab-completions-for-brigadier-comman.patch b/patches/server/0502-Enhance-console-tab-completions-for-brigadier-comman.patch
index 596d2d9d6d..15098cf64c 100644
--- a/patches/unapplied/server/0506-Enhance-console-tab-completions-for-brigadier-comman.patch
+++ b/patches/server/0502-Enhance-console-tab-completions-for-brigadier-comman.patch
@@ -358,10 +358,10 @@ index 0000000000000000000000000000000000000000..8239a8ba57f856cbbee237a601b3cabf
+ }
+}
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index d5153f804cfcfd1a70c46975e3fb1e50c8a82999..764395fe8e49d811294ca82887fee91ca6cd01fc 100644
+index e95d592b6001dd4320c58133d841359f99c2d9c4..17b15bef9ad8edddc2e1f2a617a1ab4bd5b53347 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-@@ -190,7 +190,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -189,7 +189,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
thread.setDaemon(true);
thread.setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(DedicatedServer.LOGGER));
@@ -370,7 +370,7 @@ index d5153f804cfcfd1a70c46975e3fb1e50c8a82999..764395fe8e49d811294ca82887fee91c
DedicatedServer.LOGGER.info("Starting minecraft server version {}", SharedConstants.getCurrentVersion().getName());
if (Runtime.getRuntime().maxMemory() / 1024L / 1024L < 512L) {
DedicatedServer.LOGGER.warn("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\"");
-@@ -223,6 +223,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -222,6 +222,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
this.getPlayerList().loadAndSaveFiles(); // Must be after convertNames
// Paper end - fix converting txt to json file
org.spigotmc.WatchdogThread.doStart(org.spigotmc.SpigotConfig.timeoutTime, org.spigotmc.SpigotConfig.restartOnCrash); // Paper - start watchdog thread
diff --git a/patches/unapplied/server/0507-Fix-PlayerItemConsumeEvent-cancelling-properly.patch b/patches/server/0503-Fix-PlayerItemConsumeEvent-cancelling-properly.patch
index a47593aa71..a1da72f499 100644
--- a/patches/unapplied/server/0507-Fix-PlayerItemConsumeEvent-cancelling-properly.patch
+++ b/patches/server/0503-Fix-PlayerItemConsumeEvent-cancelling-properly.patch
@@ -9,14 +9,14 @@ till their item is switched.
This patch clears the active item when the event is cancelled
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index a89c6ba4140f15e7f68f0df5cf64a176d350123b..afa2d3f5199fcac5c83639bb87e31425da4c5310 100644
+index 293490d124bc06c4a06b9f4a7f77a9c25a8d7d39..b7cc3d84c724772e3e1250c5e99bb32e01112220 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -4011,6 +4011,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -4136,6 +4136,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.level().getCraftServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
+ this.stopUsingItem(); // Paper - event is using an item, clear active item to reset its use
// Update client
- if (this.useItem.getItem() instanceof net.minecraft.world.item.SuspiciousStewItem itemSuspiciousStew) {
- itemSuspiciousStew.cancelUsingItem(entityPlayer, this.useItem);
+ Consumable consumable = this.useItem.get(DataComponents.CONSUMABLE);
+ if (consumable != null) {