aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2024-07-16 16:39:57 -0700
committerGitHub <[email protected]>2024-07-16 16:39:57 -0700
commit506f1651e549c290142df8d1e2e8ea831bc381c0 (patch)
tree250f8cb16a8e94a588aa9df694e199f3e45ae824
parenta6ceda12c54cd8b7d272fe50e744c9b9a26d0838 (diff)
downloadPaper-506f1651e549c290142df8d1e2e8ea831bc381c0.tar.gz
Paper-506f1651e549c290142df8d1e2e8ea831bc381c0.zip
Don't store removed components in multiple places (#11091)
-rw-r--r--patches/server/0962-Don-t-lose-removed-data-components-in-ItemMeta.patch49
-rw-r--r--patches/server/0962-Handle-Large-Packets-disconnecting-client.patch (renamed from patches/server/0963-Handle-Large-Packets-disconnecting-client.patch)0
-rw-r--r--patches/server/0963-Fix-ItemFlags.patch (renamed from patches/server/0964-Fix-ItemFlags.patch)28
-rw-r--r--patches/server/0964-Fix-Player-setBlockUpdate.patch (renamed from patches/server/0965-Fix-Player-setBlockUpdate.patch)0
-rw-r--r--patches/server/0965-Fix-helmet-damage-reduction-inconsistencies.patch (renamed from patches/server/0966-Fix-helmet-damage-reduction-inconsistencies.patch)0
-rw-r--r--patches/server/0966-Revert-to-vanilla-handling-of-LivingEntity-actuallyH.patch (renamed from patches/server/0967-Revert-to-vanilla-handling-of-LivingEntity-actuallyH.patch)0
-rw-r--r--patches/server/0967-improve-checking-handled-tags-in-itemmeta.patch (renamed from patches/server/0968-improve-checking-handled-tags-in-itemmeta.patch)17
-rw-r--r--patches/server/0968-General-ItemMeta-fixes.patch (renamed from patches/server/0969-General-ItemMeta-fixes.patch)64
-rw-r--r--patches/server/0969-Expose-hasColor-to-leather-armor.patch (renamed from patches/server/0970-Expose-hasColor-to-leather-armor.patch)0
-rw-r--r--patches/server/0970-Added-API-to-get-player-ha-proxy-address.patch (renamed from patches/server/0971-Added-API-to-get-player-ha-proxy-address.patch)0
-rw-r--r--patches/server/0971-More-Chest-Block-API.patch (renamed from patches/server/0972-More-Chest-Block-API.patch)0
-rw-r--r--patches/server/0972-Print-data-component-type-on-encoding-error.patch (renamed from patches/server/0973-Print-data-component-type-on-encoding-error.patch)0
-rw-r--r--patches/server/0973-Brigadier-based-command-API.patch (renamed from patches/server/0974-Brigadier-based-command-API.patch)0
-rw-r--r--patches/server/0974-Fix-issues-with-Recipe-API.patch (renamed from patches/server/0975-Fix-issues-with-Recipe-API.patch)0
-rw-r--r--patches/server/0975-Fix-equipment-slot-and-group-API.patch (renamed from patches/server/0976-Fix-equipment-slot-and-group-API.patch)6
-rw-r--r--patches/server/0976-Allow-Bukkit-plugin-to-use-Paper-PluginLoader-API.patch (renamed from patches/server/0977-Allow-Bukkit-plugin-to-use-Paper-PluginLoader-API.patch)0
-rw-r--r--patches/server/0977-Prevent-sending-oversized-item-data-in-equipment-and.patch (renamed from patches/server/0978-Prevent-sending-oversized-item-data-in-equipment-and.patch)0
-rw-r--r--patches/server/0978-Prevent-NPE-if-hooked-entity-was-cleared.patch (renamed from patches/server/0979-Prevent-NPE-if-hooked-entity-was-cleared.patch)0
-rw-r--r--patches/server/0979-Fix-cancelling-BlockPlaceEvent-calling-onRemove.patch (renamed from patches/server/0980-Fix-cancelling-BlockPlaceEvent-calling-onRemove.patch)0
-rw-r--r--patches/server/0980-Add-missing-fishing-event-state.patch (renamed from patches/server/0981-Add-missing-fishing-event-state.patch)0
-rw-r--r--patches/server/0981-Deprecate-InvAction-HOTBAR_MOVE_AND_READD.patch (renamed from patches/server/0982-Deprecate-InvAction-HOTBAR_MOVE_AND_READD.patch)0
-rw-r--r--patches/server/0982-Fix-sending-disconnect-packet-in-phases-where-it-doe.patch (renamed from patches/server/0983-Fix-sending-disconnect-packet-in-phases-where-it-doe.patch)0
-rw-r--r--patches/server/0983-Adopt-MaterialRerouting.patch (renamed from patches/server/0984-Adopt-MaterialRerouting.patch)0
-rw-r--r--patches/server/0984-Suspicious-Effect-Entry-API.patch (renamed from patches/server/0985-Suspicious-Effect-Entry-API.patch)0
-rw-r--r--patches/server/0985-check-if-itemstack-is-stackable-first.patch (renamed from patches/server/0986-check-if-itemstack-is-stackable-first.patch)0
-rw-r--r--patches/server/0986-Fix-removing-recipes-from-RecipeIterator.patch (renamed from patches/server/0987-Fix-removing-recipes-from-RecipeIterator.patch)0
-rw-r--r--patches/server/0987-Configurable-damage-tick-when-blocking-with-shield.patch (renamed from patches/server/0988-Configurable-damage-tick-when-blocking-with-shield.patch)0
-rw-r--r--patches/server/0988-Properly-remove-the-experimental-smithing-inventory-.patch (renamed from patches/server/0989-Properly-remove-the-experimental-smithing-inventory-.patch)0
-rw-r--r--patches/server/0989-Moonrise-optimisation-patches.patch (renamed from patches/server/0990-Moonrise-optimisation-patches.patch)0
-rw-r--r--patches/server/0990-Rewrite-dataconverter-system.patch (renamed from patches/server/0991-Rewrite-dataconverter-system.patch)0
-rw-r--r--patches/server/0991-disable-forced-empty-world-ticks.patch (renamed from patches/server/0992-disable-forced-empty-world-ticks.patch)2
-rw-r--r--patches/server/0992-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch (renamed from patches/server/0993-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch)0
-rw-r--r--patches/server/0993-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch (renamed from patches/server/0994-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch)2
-rw-r--r--patches/server/0994-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch (renamed from patches/server/0995-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch)0
-rw-r--r--patches/server/0995-Optimize-Network-Manager-and-add-advanced-packet-sup.patch (renamed from patches/server/0996-Optimize-Network-Manager-and-add-advanced-packet-sup.patch)0
-rw-r--r--patches/server/0996-Allow-Saving-of-Oversized-Chunks.patch (renamed from patches/server/0997-Allow-Saving-of-Oversized-Chunks.patch)0
-rw-r--r--patches/server/0997-Flat-bedrock-generator-settings.patch (renamed from patches/server/0998-Flat-bedrock-generator-settings.patch)0
-rw-r--r--patches/server/0998-Entity-Activation-Range-2.0.patch (renamed from patches/server/0999-Entity-Activation-Range-2.0.patch)2
-rw-r--r--patches/server/0999-Optional-per-player-mob-spawns.patch (renamed from patches/server/1000-Optional-per-player-mob-spawns.patch)2
-rw-r--r--patches/server/1000-Anti-Xray.patch (renamed from patches/server/1001-Anti-Xray.patch)2
-rw-r--r--patches/server/1001-Eigencraft-redstone-implementation.patch (renamed from patches/server/1002-Eigencraft-redstone-implementation.patch)0
-rw-r--r--patches/server/1002-Add-Alternate-Current-redstone-implementation.patch (renamed from patches/server/1003-Add-Alternate-Current-redstone-implementation.patch)2
-rw-r--r--patches/server/1003-Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch (renamed from patches/server/1004-Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch)2
-rw-r--r--patches/server/1004-Use-Velocity-compression-and-cipher-natives.patch (renamed from patches/server/1005-Use-Velocity-compression-and-cipher-natives.patch)0
-rw-r--r--patches/server/1005-Optimize-Collision-to-not-load-chunks.patch (renamed from patches/server/1006-Optimize-Collision-to-not-load-chunks.patch)0
-rw-r--r--patches/server/1006-Optimize-GoalSelector-Goal.Flag-Set-operations.patch (renamed from patches/server/1007-Optimize-GoalSelector-Goal.Flag-Set-operations.patch)0
-rw-r--r--patches/server/1007-Optimize-Hoppers.patch (renamed from patches/server/1008-Optimize-Hoppers.patch)0
-rw-r--r--patches/server/1008-Entity-load-save-limit-per-chunk.patch (renamed from patches/server/1009-Entity-load-save-limit-per-chunk.patch)0
-rw-r--r--patches/server/1009-Optimize-Voxel-Shape-Merging.patch (renamed from patches/server/1010-Optimize-Voxel-Shape-Merging.patch)0
-rw-r--r--patches/server/1010-Optimize-Bit-Operations-by-inlining.patch (renamed from patches/server/1011-Optimize-Bit-Operations-by-inlining.patch)0
-rw-r--r--patches/server/1011-Remove-streams-from-hot-code.patch (renamed from patches/server/1012-Remove-streams-from-hot-code.patch)0
-rw-r--r--patches/server/1012-Optimize-Pathfinder-Remove-Streams-Optimized-collect.patch (renamed from patches/server/1013-Optimize-Pathfinder-Remove-Streams-Optimized-collect.patch)0
-rw-r--r--patches/server/1013-Custom-table-implementation-for-blockstate-state-loo.patch (renamed from patches/server/1014-Custom-table-implementation-for-blockstate-state-loo.patch)0
-rw-r--r--patches/server/1014-Fix-entity-type-tags-suggestions-in-selectors.patch (renamed from patches/server/1015-Fix-entity-type-tags-suggestions-in-selectors.patch)0
-rw-r--r--patches/server/1015-Handle-Oversized-block-entities-in-chunks.patch (renamed from patches/server/1016-Handle-Oversized-block-entities-in-chunks.patch)0
-rw-r--r--patches/server/1016-API-for-checking-sent-chunks.patch (renamed from patches/server/1017-API-for-checking-sent-chunks.patch)0
-rw-r--r--patches/server/1017-Check-distance-in-entity-interactions.patch (renamed from patches/server/1018-Check-distance-in-entity-interactions.patch)0
-rw-r--r--patches/server/1018-Configurable-Sand-Duping.patch (renamed from patches/server/1019-Configurable-Sand-Duping.patch)0
-rw-r--r--patches/server/1019-Optimise-general-POI-access.patch (renamed from patches/server/1020-Optimise-general-POI-access.patch)0
-rw-r--r--patches/server/1020-Improve-performance-of-mass-crafts.patch (renamed from patches/server/1021-Improve-performance-of-mass-crafts.patch)0
-rw-r--r--patches/server/1021-Properly-resend-entities.patch (renamed from patches/server/1022-Properly-resend-entities.patch)0
-rw-r--r--patches/server/1022-Registry-Modification-API.patch (renamed from patches/server/1023-Registry-Modification-API.patch)0
-rw-r--r--patches/server/1023-Add-registry-entry-and-builders.patch (renamed from patches/server/1024-Add-registry-entry-and-builders.patch)0
-rw-r--r--patches/server/1024-Improved-Watchdog-Support.patch (renamed from patches/server/1025-Improved-Watchdog-Support.patch)0
-rw-r--r--patches/server/1025-Proxy-ItemStack-to-CraftItemStack.patch (renamed from patches/server/1026-Proxy-ItemStack-to-CraftItemStack.patch)0
-rw-r--r--patches/server/1026-Make-a-PDC-view-accessible-directly-from-ItemStack.patch (renamed from patches/server/1027-Make-a-PDC-view-accessible-directly-from-ItemStack.patch)0
-rw-r--r--patches/server/1027-Prioritize-Minecraft-commands-in-function-parsing-an.patch (renamed from patches/server/1028-Prioritize-Minecraft-commands-in-function-parsing-an.patch)0
-rw-r--r--patches/server/1028-optimize-dirt-and-snow-spreading.patch (renamed from patches/server/1029-optimize-dirt-and-snow-spreading.patch)0
-rw-r--r--patches/server/1029-Fix-NPE-for-Jukebox-setRecord.patch (renamed from patches/server/1030-Fix-NPE-for-Jukebox-setRecord.patch)0
-rw-r--r--patches/server/1030-Fix-CraftWorld-isChunkGenerated.patch (renamed from patches/server/1031-Fix-CraftWorld-isChunkGenerated.patch)0
-rw-r--r--patches/server/1031-Add-debug-for-chunk-system-unload-crash.patch (renamed from patches/server/1032-Add-debug-for-chunk-system-unload-crash.patch)0
-rw-r--r--patches/server/1032-fix-horse-inventories.patch (renamed from patches/server/1033-fix-horse-inventories.patch)0
-rw-r--r--patches/server/1033-Only-call-EntityDamageEvents-before-actuallyHurt.patch (renamed from patches/server/1034-Only-call-EntityDamageEvents-before-actuallyHurt.patch)0
-rw-r--r--patches/server/1034-Fix-entity-tracker-desync-when-new-players-are-added.patch (renamed from patches/server/1035-Fix-entity-tracker-desync-when-new-players-are-added.patch)0
-rw-r--r--patches/server/1035-Lag-compensation-ticks.patch (renamed from patches/server/1036-Lag-compensation-ticks.patch)0
-rw-r--r--patches/server/1036-Detail-more-information-in-watchdog-dumps.patch (renamed from patches/server/1037-Detail-more-information-in-watchdog-dumps.patch)2
-rw-r--r--patches/server/1037-Write-SavedData-IO-async.patch (renamed from patches/server/1038-Write-SavedData-IO-async.patch)2
-rw-r--r--patches/server/1038-Correctly-call-PlayerItemBreakEvent.patch (renamed from patches/server/1039-Correctly-call-PlayerItemBreakEvent.patch)0
-rw-r--r--patches/server/1039-Add-ItemType-getItemRarity.patch (renamed from patches/server/1040-Add-ItemType-getItemRarity.patch)0
-rw-r--r--patches/server/1040-Incremental-chunk-and-player-saving.patch (renamed from patches/server/1041-Incremental-chunk-and-player-saving.patch)0
-rw-r--r--patches/server/1041-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch (renamed from patches/server/1042-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch)0
81 files changed, 65 insertions, 117 deletions
diff --git a/patches/server/0962-Don-t-lose-removed-data-components-in-ItemMeta.patch b/patches/server/0962-Don-t-lose-removed-data-components-in-ItemMeta.patch
deleted file mode 100644
index 04001583fc..0000000000
--- a/patches/server/0962-Don-t-lose-removed-data-components-in-ItemMeta.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Jake Potrebic <[email protected]>
-Date: Fri, 26 Apr 2024 21:33:20 -0700
-Subject: [PATCH] Don't lose removed data components in ItemMeta
-
-
-diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-index 2cf89147025066f34c12b9956d18451487fb2799..bc5adcb7638d6672cad33ef4adf73e475bc16b7d 100644
---- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-@@ -198,6 +198,13 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
- return this;
- }
-
-+ // Paper start - support removing component types
-+ <T> Applicator remove(DataComponentType<T> type) {
-+ this.builder.remove(type);
-+ return this;
-+ }
-+ // Paper end - support removing component types
-+
- DataComponentPatch build() {
- return this.builder.build();
- }
-@@ -428,7 +435,11 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
-
- Set<Map.Entry<DataComponentType<?>, Optional<?>>> keys = tag.entrySet();
- for (Map.Entry<DataComponentType<?>, Optional<?>> key : keys) {
-- if (!CraftMetaItem.getHandledTags().contains(key.getKey())) {
-+ // Paper start - don't lose unhandled tags
-+ if (key.getValue().isEmpty()) {
-+ this.unhandledTags.remove(key.getKey());
-+ } else if (!CraftMetaItem.getHandledTags().contains(key.getKey())) {
-+ // Paper end - don't lose unhandled tags
- key.getValue().ifPresent((value) -> {
- this.unhandledTags.set((DataComponentType) key.getKey(), value);
- });
-@@ -864,9 +875,9 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
- }
-
- for (Map.Entry<DataComponentType<?>, Optional<?>> e : this.unhandledTags.build().entrySet()) {
-- e.getValue().ifPresent((value) -> {
-+ e.getValue().ifPresentOrElse((value) -> {
- itemTag.builder.set((DataComponentType) e.getKey(), value);
-- });
-+ }, () -> itemTag.remove(e.getKey()));
- }
-
- for (DataComponentType<?> removed : this.removedTags) {
diff --git a/patches/server/0963-Handle-Large-Packets-disconnecting-client.patch b/patches/server/0962-Handle-Large-Packets-disconnecting-client.patch
index ea20a101a7..ea20a101a7 100644
--- a/patches/server/0963-Handle-Large-Packets-disconnecting-client.patch
+++ b/patches/server/0962-Handle-Large-Packets-disconnecting-client.patch
diff --git a/patches/server/0964-Fix-ItemFlags.patch b/patches/server/0963-Fix-ItemFlags.patch
index 90a623a713..d750443ba5 100644
--- a/patches/server/0964-Fix-ItemFlags.patch
+++ b/patches/server/0963-Fix-ItemFlags.patch
@@ -33,10 +33,10 @@ index 73fe41322e0349ad1d46a760f621b6c91112e90e..19af55ec2bf62b70bd3be44f499b32f5
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0ddd5531755 100644
+index 2cf89147025066f34c12b9956d18451487fb2799..078b75f027b99a8a2a6a3ee19d087acc03eefe12 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-@@ -252,6 +252,12 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -245,6 +245,12 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
static final ItemMetaKeyType<Unit> HIDE_ADDITIONAL_TOOLTIP = new ItemMetaKeyType(DataComponents.HIDE_ADDITIONAL_TOOLTIP);
@Specific(Specific.To.NBT)
static final ItemMetaKeyType<CustomData> CUSTOM_DATA = new ItemMetaKeyType<>(DataComponents.CUSTOM_DATA);
@@ -49,7 +49,7 @@ index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0dd
// We store the raw original JSON representation of all text data. See SPIGOT-5063, SPIGOT-5656, SPIGOT-5304
private Component displayName;
-@@ -334,6 +340,10 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -327,6 +333,10 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
this.customTag = meta.customTag;
this.version = meta.version;
@@ -60,7 +60,7 @@ index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0dd
}
CraftMetaItem(DataComponentPatch tag) {
-@@ -432,6 +442,20 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -425,6 +435,20 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
this.customTag = null;
}
});
@@ -81,7 +81,7 @@ index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0dd
Set<Map.Entry<DataComponentType<?>, Optional<?>>> keys = tag.entrySet();
for (Map.Entry<DataComponentType<?>, Optional<?>> key : keys) {
-@@ -631,7 +655,15 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -620,7 +644,15 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
try {
CompoundTag unhandledTag = NbtIo.readCompressed(buf, NbtAccounter.unlimitedHeap());
DataComponentPatch unhandledPatch = DataComponentPatch.CODEC.parse(MinecraftServer.getDefaultRegistryAccess().createSerializationContext(NbtOps.INSTANCE), unhandledTag).result().get();
@@ -98,7 +98,7 @@ index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0dd
for (Entry<DataComponentType<?>, Optional<?>> entry : unhandledPatch.entrySet()) {
// Move removed unhandled tags to dedicated removedTags
-@@ -874,6 +906,15 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -863,6 +895,15 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
itemTag.put(CraftMetaItem.MAX_DAMAGE, this.maxDamage);
}
@@ -112,9 +112,9 @@ index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0dd
+ // Paper end
+
for (Map.Entry<DataComponentType<?>, Optional<?>> e : this.unhandledTags.build().entrySet()) {
- e.getValue().ifPresentOrElse((value) -> {
+ e.getValue().ifPresent((value) -> {
itemTag.builder.set((DataComponentType) e.getKey(), value);
-@@ -962,7 +1003,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -951,7 +992,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Overridden
boolean isEmpty() {
@@ -123,7 +123,7 @@ index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0dd
}
// Paper start
-@@ -1632,6 +1673,8 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1621,6 +1662,8 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
&& (this.hasJukeboxPlayable() ? that.hasJukeboxPlayable() && this.jukebox.equals(that.jukebox) : !that.hasJukeboxPlayable())
&& (this.hasDamage() ? that.hasDamage() && this.damage == that.damage : !that.hasDamage())
&& (this.hasMaxDamage() ? that.hasMaxDamage() && this.maxDamage.equals(that.maxDamage) : !that.hasMaxDamage())
@@ -132,7 +132,7 @@ index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0dd
&& (this.version == that.version);
}
-@@ -1677,6 +1720,8 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1666,6 +1709,8 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
hash = 61 * hash + (this.hasDamage() ? this.damage : 0);
hash = 61 * hash + (this.hasMaxDamage() ? 1231 : 1237);
hash = 61 * hash + (this.hasAttributeModifiers() ? this.attributeModifiers.hashCode() : 0);
@@ -141,7 +141,7 @@ index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0dd
hash = 61 * hash + this.version;
return hash;
}
-@@ -1721,6 +1766,14 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1710,6 +1755,14 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
clone.damage = this.damage;
clone.maxDamage = this.maxDamage;
clone.version = this.version;
@@ -156,7 +156,7 @@ index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0dd
return clone;
} catch (CloneNotSupportedException e) {
throw new Error(e);
-@@ -1838,6 +1891,16 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1827,6 +1880,16 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
}
}
@@ -173,7 +173,7 @@ index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0dd
if (!this.unhandledTags.isEmpty()) {
Tag unhandled = DataComponentPatch.CODEC.encodeStart(MinecraftServer.getDefaultRegistryAccess().createSerializationContext(NbtOps.INSTANCE), this.unhandledTags.build()).getOrThrow(IllegalStateException::new);
try {
-@@ -1848,6 +1911,14 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1837,6 +1900,14 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
Logger.getLogger(CraftMetaItem.class.getName()).log(Level.SEVERE, null, ex);
}
}
@@ -188,7 +188,7 @@ index bc5adcb7638d6672cad33ef4adf73e475bc16b7d..d29b8c6851aad227eb8f12012903e0dd
if (!this.removedTags.isEmpty()) {
RegistryAccess registryAccess = CraftRegistry.getMinecraftRegistry();
-@@ -2001,6 +2072,8 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1990,6 +2061,8 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
CraftMetaItem.MAX_DAMAGE.TYPE,
CraftMetaItem.CUSTOM_DATA.TYPE,
CraftMetaItem.ATTRIBUTES.TYPE,
diff --git a/patches/server/0965-Fix-Player-setBlockUpdate.patch b/patches/server/0964-Fix-Player-setBlockUpdate.patch
index 17597398de..17597398de 100644
--- a/patches/server/0965-Fix-Player-setBlockUpdate.patch
+++ b/patches/server/0964-Fix-Player-setBlockUpdate.patch
diff --git a/patches/server/0966-Fix-helmet-damage-reduction-inconsistencies.patch b/patches/server/0965-Fix-helmet-damage-reduction-inconsistencies.patch
index 68b0416c32..68b0416c32 100644
--- a/patches/server/0966-Fix-helmet-damage-reduction-inconsistencies.patch
+++ b/patches/server/0965-Fix-helmet-damage-reduction-inconsistencies.patch
diff --git a/patches/server/0967-Revert-to-vanilla-handling-of-LivingEntity-actuallyH.patch b/patches/server/0966-Revert-to-vanilla-handling-of-LivingEntity-actuallyH.patch
index 865466307d..865466307d 100644
--- a/patches/server/0967-Revert-to-vanilla-handling-of-LivingEntity-actuallyH.patch
+++ b/patches/server/0966-Revert-to-vanilla-handling-of-LivingEntity-actuallyH.patch
diff --git a/patches/server/0968-improve-checking-handled-tags-in-itemmeta.patch b/patches/server/0967-improve-checking-handled-tags-in-itemmeta.patch
index 70c26309b4..ba576b47eb 100644
--- a/patches/server/0968-improve-checking-handled-tags-in-itemmeta.patch
+++ b/patches/server/0967-improve-checking-handled-tags-in-itemmeta.patch
@@ -451,10 +451,10 @@ index 8c1d2d0521da52f9a1262f5433da21700b9b0454..9600b23666668d7d581e2920a4e03e59
getOrEmpty(tag, CraftMetaFirework.FIREWORKS).ifPresent((fireworks) -> {
this.power = fireworks.flightDuration();
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-index d29b8c6851aad227eb8f12012903e0ddd5531755..58da8cb19a8444c634cbc1f39e93503ca8e2ecab 100644
+index 078b75f027b99a8a2a6a3ee19d087acc03eefe12..1903a6948242e2dc40302a0acb9171fc3cc3000e 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-@@ -346,7 +346,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -339,7 +339,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
// Paper end
}
@@ -463,7 +463,7 @@ index d29b8c6851aad227eb8f12012903e0ddd5531755..58da8cb19a8444c634cbc1f39e93503c
CraftMetaItem.getOrEmpty(tag, CraftMetaItem.NAME).ifPresent((component) -> {
this.displayName = component;
});
-@@ -457,12 +457,19 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -450,9 +450,16 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
});
// Paper end - fix ItemFlags
@@ -476,15 +476,12 @@ index d29b8c6851aad227eb8f12012903e0ddd5531755..58da8cb19a8444c634cbc1f39e93503c
+ // Paper end - improve checking handled data component types
Set<Map.Entry<DataComponentType<?>, Optional<?>>> keys = tag.entrySet();
for (Map.Entry<DataComponentType<?>, Optional<?>> key : keys) {
- // Paper start - don't lose unhandled tags
- if (key.getValue().isEmpty()) {
- this.unhandledTags.remove(key.getKey());
-- } else if (!CraftMetaItem.getHandledTags().contains(key.getKey())) {
-+ } else if (!handledTags.contains(key.getKey())) { // Paper - improve checking handled data component types
- // Paper end - don't lose unhandled tags
+- if (!CraftMetaItem.getHandledTags().contains(key.getKey())) {
++ if (!handledTags.contains(key.getKey())) { // Paper - improve checking handled data component types
key.getValue().ifPresent((value) -> {
this.unhandledTags.set((DataComponentType) key.getKey(), value);
-@@ -2047,67 +2054,75 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+ });
+@@ -2036,67 +2043,75 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
this.version = version;
}
diff --git a/patches/server/0969-General-ItemMeta-fixes.patch b/patches/server/0968-General-ItemMeta-fixes.patch
index f9c8fb01ed..99201f828a 100644
--- a/patches/server/0969-General-ItemMeta-fixes.patch
+++ b/patches/server/0968-General-ItemMeta-fixes.patch
@@ -795,7 +795,7 @@ index 9600b23666668d7d581e2920a4e03e59cc2339fb..0eceacbb096481d3bd31f5f99e964c88
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad3995dd8018 100644
+index 1903a6948242e2dc40302a0acb9171fc3cc3000e..a9acbb181dd72238b63fb08fda1b3bc0d246e36e 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
@@ -182,9 +182,10 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@@ -811,7 +811,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
<T> Applicator put(ItemMetaKeyType<T> key, T value) {
this.builder.set(key.TYPE, value);
-@@ -278,7 +279,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -271,7 +272,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
private CraftFoodComponent food;
private CraftToolComponent tool;
private CraftJukeboxComponent jukebox;
@@ -820,7 +820,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
private Integer maxDamage;
private static final Set<DataComponentType> HANDLED_TAGS = Sets.newHashSet();
-@@ -310,7 +311,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -303,7 +304,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
this.enchantments = new EnchantmentMap(meta.enchantments); // Paper
}
@@ -829,7 +829,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
this.attributeModifiers = LinkedHashMultimap.create(meta.attributeModifiers);
}
-@@ -347,6 +348,11 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -340,6 +341,11 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
}
CraftMetaItem(DataComponentPatch tag, Set<DataComponentType<?>> extraHandledTags) { // Paper - improve handled tags on type changes
@@ -841,7 +841,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
CraftMetaItem.getOrEmpty(tag, CraftMetaItem.NAME).ifPresent((component) -> {
this.displayName = component;
});
-@@ -802,7 +808,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -791,7 +797,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
Map<?, ?> mods = SerializableMeta.getObject(Map.class, map, key.BUKKIT, true);
Multimap<Attribute, AttributeModifier> result = LinkedHashMultimap.create();
if (mods == null) {
@@ -850,7 +850,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
}
for (Object obj : mods.keySet()) {
-@@ -905,7 +911,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -894,7 +900,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
itemTag.put(CraftMetaItem.JUKEBOX_PLAYABLE, this.jukebox.getHandle());
}
@@ -859,7 +859,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
itemTag.put(CraftMetaItem.DAMAGE, this.damage);
}
-@@ -970,10 +976,8 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -959,10 +965,8 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
}
void applyModifiers(Multimap<Attribute, AttributeModifier> modifiers, CraftMetaItem.Applicator tag) {
@@ -872,7 +872,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
return;
}
-@@ -1010,7 +1014,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -999,7 +1003,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Overridden
boolean isEmpty() {
@@ -881,7 +881,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
}
// Paper start
-@@ -1106,6 +1110,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1095,6 +1099,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Override
public void lore(final List<? extends net.kyori.adventure.text.Component> lore) {
@@ -889,7 +889,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
this.lore = lore != null ? io.papermc.paper.adventure.PaperAdventure.asVanilla(lore) : null;
}
// Paper end
-@@ -1164,7 +1169,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1153,7 +1158,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Override
public void removeEnchantments() {
if (this.hasEnchants()) {
@@ -898,7 +898,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
}
}
-@@ -1230,6 +1235,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1219,6 +1224,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
// Paper end
@Override
public void setLore(List<String> lore) {
@@ -906,7 +906,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
if (lore == null || lore.isEmpty()) {
this.lore = null;
} else {
-@@ -1245,6 +1251,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1234,6 +1240,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
// Paper start
@Override
public void setLoreComponents(List<net.md_5.bungee.api.chat.BaseComponent[]> lore) {
@@ -914,7 +914,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
if (lore == null) {
this.lore = null;
} else {
-@@ -1386,7 +1393,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1375,7 +1382,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Override
public FoodComponent getFood() {
@@ -923,7 +923,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
}
@Override
-@@ -1442,7 +1449,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1431,7 +1438,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Override
public Multimap<Attribute, AttributeModifier> getAttributeModifiers(@Nullable EquipmentSlot slot) {
@@ -932,7 +932,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
SetMultimap<Attribute, AttributeModifier> result = LinkedHashMultimap.create();
for (Map.Entry<Attribute, AttributeModifier> entry : this.attributeModifiers.entries()) {
if (entry.getValue().getSlot() == null || entry.getValue().getSlot() == slot) {
-@@ -1455,6 +1462,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1444,6 +1451,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Override
public Collection<AttributeModifier> getAttributeModifiers(@Nonnull Attribute attribute) {
Preconditions.checkNotNull(attribute, "Attribute cannot be null");
@@ -940,7 +940,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
return this.attributeModifiers.containsKey(attribute) ? ImmutableList.copyOf(this.attributeModifiers.get(attribute)) : null;
}
-@@ -1462,22 +1470,33 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1451,22 +1459,33 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
public boolean addAttributeModifier(@Nonnull Attribute attribute, @Nonnull AttributeModifier modifier) {
Preconditions.checkNotNull(attribute, "Attribute cannot be null");
Preconditions.checkNotNull(modifier, "AttributeModifier cannot be null");
@@ -978,7 +978,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
Iterator<Map.Entry<Attribute, AttributeModifier>> iterator = attributeModifiers.entries().iterator();
while (iterator.hasNext()) {
-@@ -1487,6 +1506,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1476,6 +1495,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
iterator.remove();
continue;
}
@@ -986,7 +986,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
this.attributeModifiers.put(next.getKey(), next.getValue());
}
}
-@@ -1494,13 +1514,13 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1483,13 +1503,13 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Override
public boolean removeAttributeModifier(@Nonnull Attribute attribute) {
Preconditions.checkNotNull(attribute, "Attribute cannot be null");
@@ -1002,7 +1002,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
int removed = 0;
Iterator<Map.Entry<Attribute, AttributeModifier>> iter = this.attributeModifiers.entries().iterator();
-@@ -1520,7 +1540,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1509,7 +1529,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
public boolean removeAttributeModifier(@Nonnull Attribute attribute, @Nonnull AttributeModifier modifier) {
Preconditions.checkNotNull(attribute, "Attribute cannot be null");
Preconditions.checkNotNull(modifier, "AttributeModifier cannot be null");
@@ -1011,7 +1011,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
int removed = 0;
Iterator<Map.Entry<Attribute, AttributeModifier>> iter = this.attributeModifiers.entries().iterator();
-@@ -1542,7 +1562,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1531,7 +1551,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Override
public String getAsString() {
@@ -1020,7 +1020,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
this.applyToItem(tag);
DataComponentPatch patch = tag.build();
Tag nbt = DataComponentPatch.CODEC.encodeStart(MinecraftServer.getDefaultRegistryAccess().createSerializationContext(NbtOps.INSTANCE), patch).getOrThrow();
-@@ -1551,7 +1571,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1540,7 +1560,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Override
public String getAsComponentString() {
@@ -1029,7 +1029,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
this.applyToItem(tag);
DataComponentPatch patch = tag.build();
-@@ -1591,6 +1611,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1580,6 +1600,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
if (first == null || second == null) {
return false;
}
@@ -1037,7 +1037,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
for (Map.Entry<Attribute, AttributeModifier> entry : first.entries()) {
if (!second.containsEntry(entry.getKey(), entry.getValue())) {
return false;
-@@ -1606,19 +1627,33 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1595,19 +1616,33 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Override
public boolean hasDamage() {
@@ -1073,7 +1073,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
@Override
public boolean hasMaxDamage() {
return this.maxDamage != null;
-@@ -1632,6 +1667,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1621,6 +1656,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
@Override
public void setMaxDamage(Integer maxDamage) {
@@ -1081,7 +1081,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
this.maxDamage = maxDamage;
}
-@@ -1663,7 +1699,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1652,7 +1688,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
&& (this.hasCustomModelData() ? that.hasCustomModelData() && this.customModelData.equals(that.customModelData) : !that.hasCustomModelData())
&& (this.hasBlockData() ? that.hasBlockData() && this.blockData.equals(that.blockData) : !that.hasBlockData())
&& (this.hasRepairCost() ? that.hasRepairCost() && this.repairCost == that.repairCost : !that.hasRepairCost())
@@ -1090,7 +1090,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
&& (this.unhandledTags.equals(that.unhandledTags))
&& (this.removedTags.equals(that.removedTags))
&& (Objects.equals(this.customTag, that.customTag))
-@@ -1678,7 +1714,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1667,7 +1703,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
&& (this.hasFood() ? that.hasFood() && this.food.equals(that.food) : !that.hasFood())
&& (this.hasTool() ? that.hasTool() && this.tool.equals(that.tool) : !that.hasTool())
&& (this.hasJukeboxPlayable() ? that.hasJukeboxPlayable() && this.jukebox.equals(that.jukebox) : !that.hasJukeboxPlayable())
@@ -1099,7 +1099,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
&& (this.hasMaxDamage() ? that.hasMaxDamage() && this.maxDamage.equals(that.maxDamage) : !that.hasMaxDamage())
&& (this.canPlaceOnPredicates != null ? that.canPlaceOnPredicates != null && this.canPlaceOnPredicates.equals(that.canPlaceOnPredicates) : that.canPlaceOnPredicates == null) // Paper
&& (this.canBreakPredicates != null ? that.canBreakPredicates != null && this.canBreakPredicates.equals(that.canBreakPredicates) : that.canBreakPredicates == null) // Paper
-@@ -1724,9 +1760,9 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1713,9 +1749,9 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
hash = 61 * hash + (this.hasFood() ? this.food.hashCode() : 0);
hash = 61 * hash + (this.hasTool() ? this.tool.hashCode() : 0);
hash = 61 * hash + (this.hasJukeboxPlayable() ? this.jukebox.hashCode() : 0);
@@ -1112,7 +1112,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
hash = 61 * hash + (this.canPlaceOnPredicates != null ? this.canPlaceOnPredicates.hashCode() : 0); // Paper
hash = 61 * hash + (this.canBreakPredicates != null ? this.canBreakPredicates.hashCode() : 0); // Paper
hash = 61 * hash + this.version;
-@@ -1746,7 +1782,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1735,7 +1771,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
if (this.enchantments != null) {
clone.enchantments = new EnchantmentMap(this.enchantments); // Paper
}
@@ -1121,7 +1121,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
clone.attributeModifiers = LinkedHashMultimap.create(this.attributeModifiers);
}
if (this.customTag != null) {
-@@ -1874,7 +1910,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1863,7 +1899,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
builder.put(CraftMetaItem.JUKEBOX_PLAYABLE.BUKKIT, this.jukebox);
}
@@ -1130,7 +1130,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
builder.put(CraftMetaItem.DAMAGE.BUKKIT, this.damage);
}
-@@ -1975,7 +2011,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1964,7 +2000,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
}
static void serializeModifiers(Multimap<Attribute, AttributeModifier> modifiers, ImmutableMap.Builder<String, Object> builder, ItemMetaKey key) {
@@ -1139,7 +1139,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
return;
}
-@@ -2057,7 +2093,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -2046,7 +2082,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
// Paper start - improve checking handled tags
@org.jetbrains.annotations.VisibleForTesting
public static final Map<Class<? extends CraftMetaItem>, Set<DataComponentType<?>>> HANDLED_DCTS_PER_TYPE = new HashMap<>();
@@ -1148,7 +1148,7 @@ index 58da8cb19a8444c634cbc1f39e93503ca8e2ecab..20d0ca163242bb58369f0709f452ad39
CraftMetaItem.NAME.TYPE,
CraftMetaItem.ITEM_NAME.TYPE,
CraftMetaItem.LORE.TYPE,
-@@ -2125,7 +2161,12 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -2114,7 +2150,12 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
// Paper end - improve checking handled data component types
protected static <T> Optional<? extends T> getOrEmpty(DataComponentPatch tag, ItemMetaKeyType<T> type) {
diff --git a/patches/server/0970-Expose-hasColor-to-leather-armor.patch b/patches/server/0969-Expose-hasColor-to-leather-armor.patch
index fb4dc944de..fb4dc944de 100644
--- a/patches/server/0970-Expose-hasColor-to-leather-armor.patch
+++ b/patches/server/0969-Expose-hasColor-to-leather-armor.patch
diff --git a/patches/server/0971-Added-API-to-get-player-ha-proxy-address.patch b/patches/server/0970-Added-API-to-get-player-ha-proxy-address.patch
index f12e7f6ec8..f12e7f6ec8 100644
--- a/patches/server/0971-Added-API-to-get-player-ha-proxy-address.patch
+++ b/patches/server/0970-Added-API-to-get-player-ha-proxy-address.patch
diff --git a/patches/server/0972-More-Chest-Block-API.patch b/patches/server/0971-More-Chest-Block-API.patch
index 020d97d086..020d97d086 100644
--- a/patches/server/0972-More-Chest-Block-API.patch
+++ b/patches/server/0971-More-Chest-Block-API.patch
diff --git a/patches/server/0973-Print-data-component-type-on-encoding-error.patch b/patches/server/0972-Print-data-component-type-on-encoding-error.patch
index a60bdfee87..a60bdfee87 100644
--- a/patches/server/0973-Print-data-component-type-on-encoding-error.patch
+++ b/patches/server/0972-Print-data-component-type-on-encoding-error.patch
diff --git a/patches/server/0974-Brigadier-based-command-API.patch b/patches/server/0973-Brigadier-based-command-API.patch
index ab14bb6a9c..ab14bb6a9c 100644
--- a/patches/server/0974-Brigadier-based-command-API.patch
+++ b/patches/server/0973-Brigadier-based-command-API.patch
diff --git a/patches/server/0975-Fix-issues-with-Recipe-API.patch b/patches/server/0974-Fix-issues-with-Recipe-API.patch
index bb85dca687..bb85dca687 100644
--- a/patches/server/0975-Fix-issues-with-Recipe-API.patch
+++ b/patches/server/0974-Fix-issues-with-Recipe-API.patch
diff --git a/patches/server/0976-Fix-equipment-slot-and-group-API.patch b/patches/server/0975-Fix-equipment-slot-and-group-API.patch
index f8ca8d1bab..05b6eafa06 100644
--- a/patches/server/0976-Fix-equipment-slot-and-group-API.patch
+++ b/patches/server/0975-Fix-equipment-slot-and-group-API.patch
@@ -52,10 +52,10 @@ index 9d74577af071954e1e37201a96368c1360076209..eafa54c870c3e2aef30c3f9f96f51660
throw new IllegalArgumentException("Not implemented. This is a bug");
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-index 20d0ca163242bb58369f0709f452ad3995dd8018..1ea7597b5e0f38789a9f8bdf83c3ac35ae19164f 100644
+index a9acbb181dd72238b63fb08fda1b3bc0d246e36e..d87bfdda1f06a94e97465c105d28989e1d64e1e0 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
-@@ -1452,7 +1452,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1441,7 +1441,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
if (this.attributeModifiers == null) return LinkedHashMultimap.create(); // Paper - don't change the components
SetMultimap<Attribute, AttributeModifier> result = LinkedHashMultimap.create();
for (Map.Entry<Attribute, AttributeModifier> entry : this.attributeModifiers.entries()) {
@@ -64,7 +64,7 @@ index 20d0ca163242bb58369f0709f452ad3995dd8018..1ea7597b5e0f38789a9f8bdf83c3ac35
result.put(entry.getKey(), entry.getValue());
}
}
-@@ -1526,9 +1526,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
+@@ -1515,9 +1515,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
while (iter.hasNext()) {
Map.Entry<Attribute, AttributeModifier> entry = iter.next();
diff --git a/patches/server/0977-Allow-Bukkit-plugin-to-use-Paper-PluginLoader-API.patch b/patches/server/0976-Allow-Bukkit-plugin-to-use-Paper-PluginLoader-API.patch
index 980c3dc8a0..980c3dc8a0 100644
--- a/patches/server/0977-Allow-Bukkit-plugin-to-use-Paper-PluginLoader-API.patch
+++ b/patches/server/0976-Allow-Bukkit-plugin-to-use-Paper-PluginLoader-API.patch
diff --git a/patches/server/0978-Prevent-sending-oversized-item-data-in-equipment-and.patch b/patches/server/0977-Prevent-sending-oversized-item-data-in-equipment-and.patch
index 077dab00a8..077dab00a8 100644
--- a/patches/server/0978-Prevent-sending-oversized-item-data-in-equipment-and.patch
+++ b/patches/server/0977-Prevent-sending-oversized-item-data-in-equipment-and.patch
diff --git a/patches/server/0979-Prevent-NPE-if-hooked-entity-was-cleared.patch b/patches/server/0978-Prevent-NPE-if-hooked-entity-was-cleared.patch
index 8d3547db93..8d3547db93 100644
--- a/patches/server/0979-Prevent-NPE-if-hooked-entity-was-cleared.patch
+++ b/patches/server/0978-Prevent-NPE-if-hooked-entity-was-cleared.patch
diff --git a/patches/server/0980-Fix-cancelling-BlockPlaceEvent-calling-onRemove.patch b/patches/server/0979-Fix-cancelling-BlockPlaceEvent-calling-onRemove.patch
index 8af7943ca8..8af7943ca8 100644
--- a/patches/server/0980-Fix-cancelling-BlockPlaceEvent-calling-onRemove.patch
+++ b/patches/server/0979-Fix-cancelling-BlockPlaceEvent-calling-onRemove.patch
diff --git a/patches/server/0981-Add-missing-fishing-event-state.patch b/patches/server/0980-Add-missing-fishing-event-state.patch
index 6ad1a92dd0..6ad1a92dd0 100644
--- a/patches/server/0981-Add-missing-fishing-event-state.patch
+++ b/patches/server/0980-Add-missing-fishing-event-state.patch
diff --git a/patches/server/0982-Deprecate-InvAction-HOTBAR_MOVE_AND_READD.patch b/patches/server/0981-Deprecate-InvAction-HOTBAR_MOVE_AND_READD.patch
index 1af38ab7e6..1af38ab7e6 100644
--- a/patches/server/0982-Deprecate-InvAction-HOTBAR_MOVE_AND_READD.patch
+++ b/patches/server/0981-Deprecate-InvAction-HOTBAR_MOVE_AND_READD.patch
diff --git a/patches/server/0983-Fix-sending-disconnect-packet-in-phases-where-it-doe.patch b/patches/server/0982-Fix-sending-disconnect-packet-in-phases-where-it-doe.patch
index 1abf467e7e..1abf467e7e 100644
--- a/patches/server/0983-Fix-sending-disconnect-packet-in-phases-where-it-doe.patch
+++ b/patches/server/0982-Fix-sending-disconnect-packet-in-phases-where-it-doe.patch
diff --git a/patches/server/0984-Adopt-MaterialRerouting.patch b/patches/server/0983-Adopt-MaterialRerouting.patch
index c1057b6bc1..c1057b6bc1 100644
--- a/patches/server/0984-Adopt-MaterialRerouting.patch
+++ b/patches/server/0983-Adopt-MaterialRerouting.patch
diff --git a/patches/server/0985-Suspicious-Effect-Entry-API.patch b/patches/server/0984-Suspicious-Effect-Entry-API.patch
index bc26031199..bc26031199 100644
--- a/patches/server/0985-Suspicious-Effect-Entry-API.patch
+++ b/patches/server/0984-Suspicious-Effect-Entry-API.patch
diff --git a/patches/server/0986-check-if-itemstack-is-stackable-first.patch b/patches/server/0985-check-if-itemstack-is-stackable-first.patch
index 8e11960bdd..8e11960bdd 100644
--- a/patches/server/0986-check-if-itemstack-is-stackable-first.patch
+++ b/patches/server/0985-check-if-itemstack-is-stackable-first.patch
diff --git a/patches/server/0987-Fix-removing-recipes-from-RecipeIterator.patch b/patches/server/0986-Fix-removing-recipes-from-RecipeIterator.patch
index 461c3eb854..461c3eb854 100644
--- a/patches/server/0987-Fix-removing-recipes-from-RecipeIterator.patch
+++ b/patches/server/0986-Fix-removing-recipes-from-RecipeIterator.patch
diff --git a/patches/server/0988-Configurable-damage-tick-when-blocking-with-shield.patch b/patches/server/0987-Configurable-damage-tick-when-blocking-with-shield.patch
index 5854c4306d..5854c4306d 100644
--- a/patches/server/0988-Configurable-damage-tick-when-blocking-with-shield.patch
+++ b/patches/server/0987-Configurable-damage-tick-when-blocking-with-shield.patch
diff --git a/patches/server/0989-Properly-remove-the-experimental-smithing-inventory-.patch b/patches/server/0988-Properly-remove-the-experimental-smithing-inventory-.patch
index 9ede88caa7..9ede88caa7 100644
--- a/patches/server/0989-Properly-remove-the-experimental-smithing-inventory-.patch
+++ b/patches/server/0988-Properly-remove-the-experimental-smithing-inventory-.patch
diff --git a/patches/server/0990-Moonrise-optimisation-patches.patch b/patches/server/0989-Moonrise-optimisation-patches.patch
index ae4d0b2e53..ae4d0b2e53 100644
--- a/patches/server/0990-Moonrise-optimisation-patches.patch
+++ b/patches/server/0989-Moonrise-optimisation-patches.patch
diff --git a/patches/server/0991-Rewrite-dataconverter-system.patch b/patches/server/0990-Rewrite-dataconverter-system.patch
index ea19e60350..ea19e60350 100644
--- a/patches/server/0991-Rewrite-dataconverter-system.patch
+++ b/patches/server/0990-Rewrite-dataconverter-system.patch
diff --git a/patches/server/0992-disable-forced-empty-world-ticks.patch b/patches/server/0991-disable-forced-empty-world-ticks.patch
index 048546178d..a9fa9f8360 100644
--- a/patches/server/0992-disable-forced-empty-world-ticks.patch
+++ b/patches/server/0991-disable-forced-empty-world-ticks.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] disable forced empty world ticks
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 9bebb4648b6490abb9942f6406ad4f96d4bf799f..e90199531c6c2975644e1223502bcecb4469220f 100644
+index bb3826481d6165991f4201ed39d56fa5824a841f..2e30f8a12391222e612a9c1bf56e93625f52a8dc 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -710,7 +710,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
diff --git a/patches/server/0993-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch b/patches/server/0992-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch
index 229e45202f..229e45202f 100644
--- a/patches/server/0993-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch
+++ b/patches/server/0992-Optimize-isInWorldBounds-and-getBlockState-for-inlin.patch
diff --git a/patches/server/0994-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch b/patches/server/0993-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch
index 12aebd4994..f2c0d4389a 100644
--- a/patches/server/0994-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch
+++ b/patches/server/0993-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch
@@ -13,7 +13,7 @@ custom renderers are in use, defaulting to the much simpler Vanilla system.
Additionally, numerous issues to player position tracking on maps has been fixed.
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index e90199531c6c2975644e1223502bcecb4469220f..aa5c2ccf2a49d0f29c17babcf853b750f0b37a4f 100644
+index 2e30f8a12391222e612a9c1bf56e93625f52a8dc..162671f8e370c84832b18697a1ef787981e1632d 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -2518,6 +2518,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
diff --git a/patches/server/0995-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch b/patches/server/0994-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch
index 6f9e63f228..6f9e63f228 100644
--- a/patches/server/0995-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch
+++ b/patches/server/0994-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch
diff --git a/patches/server/0996-Optimize-Network-Manager-and-add-advanced-packet-sup.patch b/patches/server/0995-Optimize-Network-Manager-and-add-advanced-packet-sup.patch
index f51a3d8642..f51a3d8642 100644
--- a/patches/server/0996-Optimize-Network-Manager-and-add-advanced-packet-sup.patch
+++ b/patches/server/0995-Optimize-Network-Manager-and-add-advanced-packet-sup.patch
diff --git a/patches/server/0997-Allow-Saving-of-Oversized-Chunks.patch b/patches/server/0996-Allow-Saving-of-Oversized-Chunks.patch
index 4eef25929e..4eef25929e 100644
--- a/patches/server/0997-Allow-Saving-of-Oversized-Chunks.patch
+++ b/patches/server/0996-Allow-Saving-of-Oversized-Chunks.patch
diff --git a/patches/server/0998-Flat-bedrock-generator-settings.patch b/patches/server/0997-Flat-bedrock-generator-settings.patch
index da68e7d65b..da68e7d65b 100644
--- a/patches/server/0998-Flat-bedrock-generator-settings.patch
+++ b/patches/server/0997-Flat-bedrock-generator-settings.patch
diff --git a/patches/server/0999-Entity-Activation-Range-2.0.patch b/patches/server/0998-Entity-Activation-Range-2.0.patch
index b3f299d484..588b66fec0 100644
--- a/patches/server/0999-Entity-Activation-Range-2.0.patch
+++ b/patches/server/0998-Entity-Activation-Range-2.0.patch
@@ -17,7 +17,7 @@ Adds villagers as separate config
public net.minecraft.world.entity.Entity isInsidePortal
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index aa5c2ccf2a49d0f29c17babcf853b750f0b37a4f..70fbce91ef8f132fec4ab778f465a948c80d0ce8 100644
+index 162671f8e370c84832b18697a1ef787981e1632d..8b6a1a80a3bf95e7f17c6b64d0949d6732352f0c 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -2,7 +2,6 @@ package net.minecraft.server.level;
diff --git a/patches/server/1000-Optional-per-player-mob-spawns.patch b/patches/server/0999-Optional-per-player-mob-spawns.patch
index c3c621be5a..807e87ea3f 100644
--- a/patches/server/1000-Optional-per-player-mob-spawns.patch
+++ b/patches/server/0999-Optional-per-player-mob-spawns.patch
@@ -37,7 +37,7 @@ index d843bc04ae93d11d7820cab5ed18617193568f0d..152cd6b1671785b495caeb7e535f58df
// Paper end
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index 67eb2fb32de3555b3afb4b4b7a3a47a164158ac8..bafeda818e02eb3de9dc78f62106a0d3e95d476b 100644
+index d2cb358c340bcf7532fd25eccdd33c6945d16de4..2211c054f55e962082eac82aedf5ca625e5b25f2 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
@@ -439,7 +439,19 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
diff --git a/patches/server/1001-Anti-Xray.patch b/patches/server/1000-Anti-Xray.patch
index a49fa5300b..bacd340c00 100644
--- a/patches/server/1001-Anti-Xray.patch
+++ b/patches/server/1000-Anti-Xray.patch
@@ -1104,7 +1104,7 @@ index 183b2191fa1c1b27adedf39593e1b5a223fb1279..8ead66c134688b11dca15f6509147e72
private ClientboundLevelChunkWithLightPacket(RegistryFriendlyByteBuf buf) {
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 70fbce91ef8f132fec4ab778f465a948c80d0ce8..b1e96f74ca3c9607795044e5fc746d9465310fdb 100644
+index 8b6a1a80a3bf95e7f17c6b64d0949d6732352f0c..6a844382882a69bfc690b956fa8d59c2d0ea0bd3 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -515,7 +515,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
diff --git a/patches/server/1002-Eigencraft-redstone-implementation.patch b/patches/server/1001-Eigencraft-redstone-implementation.patch
index b3e3db6504..b3e3db6504 100644
--- a/patches/server/1002-Eigencraft-redstone-implementation.patch
+++ b/patches/server/1001-Eigencraft-redstone-implementation.patch
diff --git a/patches/server/1003-Add-Alternate-Current-redstone-implementation.patch b/patches/server/1002-Add-Alternate-Current-redstone-implementation.patch
index a0d7873535..3aeaef70d8 100644
--- a/patches/server/1003-Add-Alternate-Current-redstone-implementation.patch
+++ b/patches/server/1002-Add-Alternate-Current-redstone-implementation.patch
@@ -2009,7 +2009,7 @@ index 0000000000000000000000000000000000000000..33cd90c30c22200a4e1ae64f40a0bf78
+ }
+}
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index b1e96f74ca3c9607795044e5fc746d9465310fdb..2a08dfbda588bd6282d78b35bf33a0802b178a70 100644
+index 6a844382882a69bfc690b956fa8d59c2d0ea0bd3..a994456adb0034c0662151f4ae28c1c06f91333e 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, ca.spottedleaf.
diff --git a/patches/server/1004-Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch b/patches/server/1003-Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch
index 26fab47a5b..83f592b0c7 100644
--- a/patches/server/1004-Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch
+++ b/patches/server/1003-Improve-cancelling-PreCreatureSpawnEvent-with-per-pl.patch
@@ -37,7 +37,7 @@ index 152cd6b1671785b495caeb7e535f58df864ce24c..344966d3deb640eb99bc9c9e318e6e67
}
// Paper end
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index bafeda818e02eb3de9dc78f62106a0d3e95d476b..64ed296cfbe7e5d27286b8cee70454fd1d99ebb0 100644
+index 2211c054f55e962082eac82aedf5ca625e5b25f2..61e222fb129c5733411ce95aaa5f035dbd95b01a 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
@@ -445,7 +445,17 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
diff --git a/patches/server/1005-Use-Velocity-compression-and-cipher-natives.patch b/patches/server/1004-Use-Velocity-compression-and-cipher-natives.patch
index 276343645a..276343645a 100644
--- a/patches/server/1005-Use-Velocity-compression-and-cipher-natives.patch
+++ b/patches/server/1004-Use-Velocity-compression-and-cipher-natives.patch
diff --git a/patches/server/1006-Optimize-Collision-to-not-load-chunks.patch b/patches/server/1005-Optimize-Collision-to-not-load-chunks.patch
index d48dec5878..d48dec5878 100644
--- a/patches/server/1006-Optimize-Collision-to-not-load-chunks.patch
+++ b/patches/server/1005-Optimize-Collision-to-not-load-chunks.patch
diff --git a/patches/server/1007-Optimize-GoalSelector-Goal.Flag-Set-operations.patch b/patches/server/1006-Optimize-GoalSelector-Goal.Flag-Set-operations.patch
index 1f46712639..1f46712639 100644
--- a/patches/server/1007-Optimize-GoalSelector-Goal.Flag-Set-operations.patch
+++ b/patches/server/1006-Optimize-GoalSelector-Goal.Flag-Set-operations.patch
diff --git a/patches/server/1008-Optimize-Hoppers.patch b/patches/server/1007-Optimize-Hoppers.patch
index 7203ad1a95..7203ad1a95 100644
--- a/patches/server/1008-Optimize-Hoppers.patch
+++ b/patches/server/1007-Optimize-Hoppers.patch
diff --git a/patches/server/1009-Entity-load-save-limit-per-chunk.patch b/patches/server/1008-Entity-load-save-limit-per-chunk.patch
index 380beda077..380beda077 100644
--- a/patches/server/1009-Entity-load-save-limit-per-chunk.patch
+++ b/patches/server/1008-Entity-load-save-limit-per-chunk.patch
diff --git a/patches/server/1010-Optimize-Voxel-Shape-Merging.patch b/patches/server/1009-Optimize-Voxel-Shape-Merging.patch
index 114ee7cb28..114ee7cb28 100644
--- a/patches/server/1010-Optimize-Voxel-Shape-Merging.patch
+++ b/patches/server/1009-Optimize-Voxel-Shape-Merging.patch
diff --git a/patches/server/1011-Optimize-Bit-Operations-by-inlining.patch b/patches/server/1010-Optimize-Bit-Operations-by-inlining.patch
index b7d93a56b9..b7d93a56b9 100644
--- a/patches/server/1011-Optimize-Bit-Operations-by-inlining.patch
+++ b/patches/server/1010-Optimize-Bit-Operations-by-inlining.patch
diff --git a/patches/server/1012-Remove-streams-from-hot-code.patch b/patches/server/1011-Remove-streams-from-hot-code.patch
index 4c6d94f7bf..4c6d94f7bf 100644
--- a/patches/server/1012-Remove-streams-from-hot-code.patch
+++ b/patches/server/1011-Remove-streams-from-hot-code.patch
diff --git a/patches/server/1013-Optimize-Pathfinder-Remove-Streams-Optimized-collect.patch b/patches/server/1012-Optimize-Pathfinder-Remove-Streams-Optimized-collect.patch
index 6fc4445bbf..6fc4445bbf 100644
--- a/patches/server/1013-Optimize-Pathfinder-Remove-Streams-Optimized-collect.patch
+++ b/patches/server/1012-Optimize-Pathfinder-Remove-Streams-Optimized-collect.patch
diff --git a/patches/server/1014-Custom-table-implementation-for-blockstate-state-loo.patch b/patches/server/1013-Custom-table-implementation-for-blockstate-state-loo.patch
index 96d90abea3..96d90abea3 100644
--- a/patches/server/1014-Custom-table-implementation-for-blockstate-state-loo.patch
+++ b/patches/server/1013-Custom-table-implementation-for-blockstate-state-loo.patch
diff --git a/patches/server/1015-Fix-entity-type-tags-suggestions-in-selectors.patch b/patches/server/1014-Fix-entity-type-tags-suggestions-in-selectors.patch
index a8e41e99e4..a8e41e99e4 100644
--- a/patches/server/1015-Fix-entity-type-tags-suggestions-in-selectors.patch
+++ b/patches/server/1014-Fix-entity-type-tags-suggestions-in-selectors.patch
diff --git a/patches/server/1016-Handle-Oversized-block-entities-in-chunks.patch b/patches/server/1015-Handle-Oversized-block-entities-in-chunks.patch
index d3283fd63f..d3283fd63f 100644
--- a/patches/server/1016-Handle-Oversized-block-entities-in-chunks.patch
+++ b/patches/server/1015-Handle-Oversized-block-entities-in-chunks.patch
diff --git a/patches/server/1017-API-for-checking-sent-chunks.patch b/patches/server/1016-API-for-checking-sent-chunks.patch
index 5129c9a08a..5129c9a08a 100644
--- a/patches/server/1017-API-for-checking-sent-chunks.patch
+++ b/patches/server/1016-API-for-checking-sent-chunks.patch
diff --git a/patches/server/1018-Check-distance-in-entity-interactions.patch b/patches/server/1017-Check-distance-in-entity-interactions.patch
index 64fd802e0e..64fd802e0e 100644
--- a/patches/server/1018-Check-distance-in-entity-interactions.patch
+++ b/patches/server/1017-Check-distance-in-entity-interactions.patch
diff --git a/patches/server/1019-Configurable-Sand-Duping.patch b/patches/server/1018-Configurable-Sand-Duping.patch
index cbc52697db..cbc52697db 100644
--- a/patches/server/1019-Configurable-Sand-Duping.patch
+++ b/patches/server/1018-Configurable-Sand-Duping.patch
diff --git a/patches/server/1020-Optimise-general-POI-access.patch b/patches/server/1019-Optimise-general-POI-access.patch
index f8e4fb9c3d..f8e4fb9c3d 100644
--- a/patches/server/1020-Optimise-general-POI-access.patch
+++ b/patches/server/1019-Optimise-general-POI-access.patch
diff --git a/patches/server/1021-Improve-performance-of-mass-crafts.patch b/patches/server/1020-Improve-performance-of-mass-crafts.patch
index 15701b21e0..15701b21e0 100644
--- a/patches/server/1021-Improve-performance-of-mass-crafts.patch
+++ b/patches/server/1020-Improve-performance-of-mass-crafts.patch
diff --git a/patches/server/1022-Properly-resend-entities.patch b/patches/server/1021-Properly-resend-entities.patch
index 6e61a43375..6e61a43375 100644
--- a/patches/server/1022-Properly-resend-entities.patch
+++ b/patches/server/1021-Properly-resend-entities.patch
diff --git a/patches/server/1023-Registry-Modification-API.patch b/patches/server/1022-Registry-Modification-API.patch
index dc555c750d..dc555c750d 100644
--- a/patches/server/1023-Registry-Modification-API.patch
+++ b/patches/server/1022-Registry-Modification-API.patch
diff --git a/patches/server/1024-Add-registry-entry-and-builders.patch b/patches/server/1023-Add-registry-entry-and-builders.patch
index 1b920c14d0..1b920c14d0 100644
--- a/patches/server/1024-Add-registry-entry-and-builders.patch
+++ b/patches/server/1023-Add-registry-entry-and-builders.patch
diff --git a/patches/server/1025-Improved-Watchdog-Support.patch b/patches/server/1024-Improved-Watchdog-Support.patch
index 2e3fc383a2..2e3fc383a2 100644
--- a/patches/server/1025-Improved-Watchdog-Support.patch
+++ b/patches/server/1024-Improved-Watchdog-Support.patch
diff --git a/patches/server/1026-Proxy-ItemStack-to-CraftItemStack.patch b/patches/server/1025-Proxy-ItemStack-to-CraftItemStack.patch
index eb49cbe5f4..eb49cbe5f4 100644
--- a/patches/server/1026-Proxy-ItemStack-to-CraftItemStack.patch
+++ b/patches/server/1025-Proxy-ItemStack-to-CraftItemStack.patch
diff --git a/patches/server/1027-Make-a-PDC-view-accessible-directly-from-ItemStack.patch b/patches/server/1026-Make-a-PDC-view-accessible-directly-from-ItemStack.patch
index bb97ac9fc5..bb97ac9fc5 100644
--- a/patches/server/1027-Make-a-PDC-view-accessible-directly-from-ItemStack.patch
+++ b/patches/server/1026-Make-a-PDC-view-accessible-directly-from-ItemStack.patch
diff --git a/patches/server/1028-Prioritize-Minecraft-commands-in-function-parsing-an.patch b/patches/server/1027-Prioritize-Minecraft-commands-in-function-parsing-an.patch
index 6e36d9a7b3..6e36d9a7b3 100644
--- a/patches/server/1028-Prioritize-Minecraft-commands-in-function-parsing-an.patch
+++ b/patches/server/1027-Prioritize-Minecraft-commands-in-function-parsing-an.patch
diff --git a/patches/server/1029-optimize-dirt-and-snow-spreading.patch b/patches/server/1028-optimize-dirt-and-snow-spreading.patch
index 49de7fcab9..49de7fcab9 100644
--- a/patches/server/1029-optimize-dirt-and-snow-spreading.patch
+++ b/patches/server/1028-optimize-dirt-and-snow-spreading.patch
diff --git a/patches/server/1030-Fix-NPE-for-Jukebox-setRecord.patch b/patches/server/1029-Fix-NPE-for-Jukebox-setRecord.patch
index e15a77ee75..e15a77ee75 100644
--- a/patches/server/1030-Fix-NPE-for-Jukebox-setRecord.patch
+++ b/patches/server/1029-Fix-NPE-for-Jukebox-setRecord.patch
diff --git a/patches/server/1031-Fix-CraftWorld-isChunkGenerated.patch b/patches/server/1030-Fix-CraftWorld-isChunkGenerated.patch
index f91e8b2bd0..f91e8b2bd0 100644
--- a/patches/server/1031-Fix-CraftWorld-isChunkGenerated.patch
+++ b/patches/server/1030-Fix-CraftWorld-isChunkGenerated.patch
diff --git a/patches/server/1032-Add-debug-for-chunk-system-unload-crash.patch b/patches/server/1031-Add-debug-for-chunk-system-unload-crash.patch
index 401b927f05..401b927f05 100644
--- a/patches/server/1032-Add-debug-for-chunk-system-unload-crash.patch
+++ b/patches/server/1031-Add-debug-for-chunk-system-unload-crash.patch
diff --git a/patches/server/1033-fix-horse-inventories.patch b/patches/server/1032-fix-horse-inventories.patch
index e8388a0c72..e8388a0c72 100644
--- a/patches/server/1033-fix-horse-inventories.patch
+++ b/patches/server/1032-fix-horse-inventories.patch
diff --git a/patches/server/1034-Only-call-EntityDamageEvents-before-actuallyHurt.patch b/patches/server/1033-Only-call-EntityDamageEvents-before-actuallyHurt.patch
index 1b7439c07a..1b7439c07a 100644
--- a/patches/server/1034-Only-call-EntityDamageEvents-before-actuallyHurt.patch
+++ b/patches/server/1033-Only-call-EntityDamageEvents-before-actuallyHurt.patch
diff --git a/patches/server/1035-Fix-entity-tracker-desync-when-new-players-are-added.patch b/patches/server/1034-Fix-entity-tracker-desync-when-new-players-are-added.patch
index 024bf5125d..024bf5125d 100644
--- a/patches/server/1035-Fix-entity-tracker-desync-when-new-players-are-added.patch
+++ b/patches/server/1034-Fix-entity-tracker-desync-when-new-players-are-added.patch
diff --git a/patches/server/1036-Lag-compensation-ticks.patch b/patches/server/1035-Lag-compensation-ticks.patch
index 34a7372bd6..34a7372bd6 100644
--- a/patches/server/1036-Lag-compensation-ticks.patch
+++ b/patches/server/1035-Lag-compensation-ticks.patch
diff --git a/patches/server/1037-Detail-more-information-in-watchdog-dumps.patch b/patches/server/1036-Detail-more-information-in-watchdog-dumps.patch
index 3c88154417..e629b56acf 100644
--- a/patches/server/1037-Detail-more-information-in-watchdog-dumps.patch
+++ b/patches/server/1036-Detail-more-information-in-watchdog-dumps.patch
@@ -76,7 +76,7 @@ index d0d36a57ec4896bcb74970f8fb24d8f3e17db133..e2c24813f59c2fd075c740ac1842a38f
});
throw RunningOnDifferentThreadException.RUNNING_ON_DIFFERENT_THREAD;
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 9c9107add605c09445cf795f4c850b080b4f995d..4b601c066b94fddd7d878677098bca0d3ae2e5a3 100644
+index bee76ffe45e97c9c03430cf5a52d279421bc6536..e4cdbbf8a37f1363711ecd23f9c0eadcc95f7209 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1223,7 +1223,26 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
diff --git a/patches/server/1038-Write-SavedData-IO-async.patch b/patches/server/1037-Write-SavedData-IO-async.patch
index 66d62d3d94..1565f5f4e4 100644
--- a/patches/server/1038-Write-SavedData-IO-async.patch
+++ b/patches/server/1037-Write-SavedData-IO-async.patch
@@ -24,7 +24,7 @@ index 61e222fb129c5733411ce95aaa5f035dbd95b01a..3575fe6f57457ab865a29d20836512f6
// CraftBukkit start - modelled on below
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 4b601c066b94fddd7d878677098bca0d3ae2e5a3..db40701c22d7526b696d503df1e198a70f5beaa9 100644
+index e4cdbbf8a37f1363711ecd23f9c0eadcc95f7209..9b463cd43bcf763faab04012137695a575f16729 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1354,7 +1354,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
diff --git a/patches/server/1039-Correctly-call-PlayerItemBreakEvent.patch b/patches/server/1038-Correctly-call-PlayerItemBreakEvent.patch
index 6637cd6cd0..6637cd6cd0 100644
--- a/patches/server/1039-Correctly-call-PlayerItemBreakEvent.patch
+++ b/patches/server/1038-Correctly-call-PlayerItemBreakEvent.patch
diff --git a/patches/server/1040-Add-ItemType-getItemRarity.patch b/patches/server/1039-Add-ItemType-getItemRarity.patch
index 35ebf5036b..35ebf5036b 100644
--- a/patches/server/1040-Add-ItemType-getItemRarity.patch
+++ b/patches/server/1039-Add-ItemType-getItemRarity.patch
diff --git a/patches/server/1041-Incremental-chunk-and-player-saving.patch b/patches/server/1040-Incremental-chunk-and-player-saving.patch
index f6f0f055f9..f6f0f055f9 100644
--- a/patches/server/1041-Incremental-chunk-and-player-saving.patch
+++ b/patches/server/1040-Incremental-chunk-and-player-saving.patch
diff --git a/patches/server/1042-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch b/patches/server/1041-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch
index 086d5b0db1..086d5b0db1 100644
--- a/patches/server/1042-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch
+++ b/patches/server/1041-Attempt-to-recalculate-regionfile-header-if-it-is-co.patch