diff --git a/patches/unapplied/server/1007-Handle-Oversized-block-entities-in-chunks.patch b/patches/server/0990-Handle-Oversized-block-entities-in-chunks.patch similarity index 100% rename from patches/unapplied/server/1007-Handle-Oversized-block-entities-in-chunks.patch rename to patches/server/0990-Handle-Oversized-block-entities-in-chunks.patch diff --git a/patches/unapplied/server/1009-Check-distance-in-entity-interactions.patch b/patches/server/0991-Check-distance-in-entity-interactions.patch similarity index 79% rename from patches/unapplied/server/1009-Check-distance-in-entity-interactions.patch rename to patches/server/0991-Check-distance-in-entity-interactions.patch index 95e8e99b56..d628cdfbc0 100644 --- a/patches/unapplied/server/1009-Check-distance-in-entity-interactions.patch +++ b/patches/server/0991-Check-distance-in-entity-interactions.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Check distance in entity interactions diff --git a/src/main/java/net/minecraft/Util.java b/src/main/java/net/minecraft/Util.java -index 42d7ecfab6f72517904451d9df3f0404b176fdb2..0e38a641d8e537750166b56c57aca4a90d418af1 100644 +index 60e523f4de1cbafc2c58a5d568fe3989b7b07c34..dd2037fe9389765f79330036ec7fa3c5e7c7327a 100644 --- a/src/main/java/net/minecraft/Util.java +++ b/src/main/java/net/minecraft/Util.java -@@ -125,6 +125,7 @@ public class Util { +@@ -128,6 +128,7 @@ public class Util { .filter(fileSystemProvider -> fileSystemProvider.getScheme().equalsIgnoreCase("jar")) .findFirst() .orElseThrow(() -> new IllegalStateException("No jar file system provider found")); @@ -17,10 +17,10 @@ index 42d7ecfab6f72517904451d9df3f0404b176fdb2..0e38a641d8e537750166b56c57aca4a9 }; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 340c4452c09a98bc0220e6fe68dc65afc946986b..05dae689ada8d96009e81aabf95a626bae90ecd3 100644 +index 6195b207159c638e98a33c3142ed6b0720c8e14d..f12c59d3bb15f482969cc9d0d2aff0718972675b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1437,7 +1437,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1469,7 +1469,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (!source.is(DamageTypeTags.IS_PROJECTILE)) { Entity entity = source.getDirectEntity(); @@ -29,7 +29,7 @@ index 340c4452c09a98bc0220e6fe68dc65afc946986b..05dae689ada8d96009e81aabf95a626b LivingEntity entityliving = (LivingEntity) entity; this.blockUsingShield(entityliving); -@@ -1557,6 +1557,14 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1593,6 +1593,14 @@ public abstract class LivingEntity extends Entity implements Attackable { d0 = source.getSourcePosition().x() - this.getX(); d1 = source.getSourcePosition().z() - this.getZ(); } @@ -44,7 +44,7 @@ index 340c4452c09a98bc0220e6fe68dc65afc946986b..05dae689ada8d96009e81aabf95a626b this.knockback(0.4000000059604645D, d0, d1, entity1, entity1 == null ? io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.DAMAGE : io.papermc.paper.event.entity.EntityKnockbackEvent.Cause.ENTITY_ATTACK); // CraftBukkit // Paper - knockback events if (!flag) { -@@ -2351,7 +2359,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2428,7 +2436,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.hurtCurrentlyUsedShield((float) -event.getDamage(DamageModifier.BLOCKING)); Entity entity = damagesource.getDirectEntity(); @@ -53,16 +53,16 @@ index 340c4452c09a98bc0220e6fe68dc65afc946986b..05dae689ada8d96009e81aabf95a626b this.blockUsingShield((LivingEntity) entity); } } -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 907f751c859855484151fb5d607acee2f2a35076..f1955afc8e367f80ead85bd5ad3b8d66c255565a 100644 ---- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -+++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -@@ -718,7 +718,7 @@ public class Boat extends VehicleEntity implements Leashable, VariantHolder accessor; diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index e9dcdb1e09e84a9b451034ff4bdfa6eae2dd1c04..24b1715397ba8e6f5e9841a030d0e3d964356f89 100644 +index f2dd272a01b4e946a6746865d55ebc9861f8361b..5d189ba60d40f5c42b2dacc339594ed067418e95 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -561,6 +561,7 @@ public class ServerPlayerGameMode { +@@ -567,6 +567,7 @@ public class ServerPlayerGameMode { } // Paper end - extend Player Interact cancellation player.getBukkitEntity().updateInventory(); // SPIGOT-2867 @@ -68,7 +68,7 @@ index e9dcdb1e09e84a9b451034ff4bdfa6eae2dd1c04..24b1715397ba8e6f5e9841a030d0e3d9 return (event.useItemInHand() != Event.Result.ALLOW) ? InteractionResult.SUCCESS : InteractionResult.PASS; } else if (this.gameModeForPlayer == GameType.SPECTATOR) { MenuProvider itileinventory = iblockdata.getMenuProvider(world, blockposition); -@@ -612,6 +613,11 @@ public class ServerPlayerGameMode { +@@ -618,6 +619,11 @@ public class ServerPlayerGameMode { return enuminteractionresult; } else { @@ -81,10 +81,10 @@ index e9dcdb1e09e84a9b451034ff4bdfa6eae2dd1c04..24b1715397ba8e6f5e9841a030d0e3d9 } } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 0034483685ba626e5883b857de96ffd36e57e150..4c04eb531b6989f7e618d201ecaa84298eab52c4 100644 +index 46f4d7a05d4febd1f8fd3cc2cae635a9e3da0e9e..14a8e05420ae4ca2f1d9028e19379d162a3e6971 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1948,6 +1948,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1966,6 +1966,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } if (cancelled) { @@ -92,7 +92,7 @@ index 0034483685ba626e5883b857de96ffd36e57e150..4c04eb531b6989f7e618d201ecaa8429 this.player.getBukkitEntity().updateInventory(); // SPIGOT-2524 return; } -@@ -2717,7 +2718,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2737,7 +2738,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl // Entity in bucket - SPIGOT-4048 and SPIGOT-6859a if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { @@ -102,10 +102,10 @@ index 0034483685ba626e5883b857de96ffd36e57e150..4c04eb531b6989f7e618d201ecaa8429 } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 3a90dd1289d393426151d4457edaf99731cc34db..ec058eb6a10500831f173dcb47576c32c7516318 100644 +index 4b9761e58f404eedf9db835fc923a88fc1896e96..682b8926027945066921086b6773b31e626cc941 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -393,7 +393,7 @@ public abstract class PlayerList { +@@ -397,7 +397,7 @@ public abstract class PlayerList { ((ServerLevel)player.level()).getChunkSource().chunkMap.addEntity(player); // Paper - Fire PlayerJoinEvent when Player is actually ready; track entity now // CraftBukkit end @@ -114,7 +114,7 @@ index 3a90dd1289d393426151d4457edaf99731cc34db..ec058eb6a10500831f173dcb47576c32 this.sendLevelInfo(player, worldserver1); -@@ -948,12 +948,17 @@ public abstract class PlayerList { +@@ -908,12 +908,17 @@ public abstract class PlayerList { } public void sendActiveEffects(LivingEntity entity, ServerGamePacketListenerImpl networkHandler) { @@ -134,10 +134,10 @@ index 3a90dd1289d393426151d4457edaf99731cc34db..ec058eb6a10500831f173dcb47576c32 } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 52f3d0d4ce28cc6566166ae9a5a1b236ff8c027d..74231cb1c89079473d1727aa3ae2a539d4250317 100644 +index ea7100c8ac5da730d55136ac2ab608c2a7ac0ba8..4f0ff0d333d2de1b4f6beac1ce25e214b971e387 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -684,13 +684,45 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -598,13 +598,45 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit start public void refreshEntityData(ServerPlayer to) { @@ -186,10 +186,10 @@ index 52f3d0d4ce28cc6566166ae9a5a1b236ff8c027d..74231cb1c89079473d1727aa3ae2a539 public boolean equals(Object object) { return object instanceof Entity ? ((Entity) object).id == this.id : false; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 05dae689ada8d96009e81aabf95a626bae90ecd3..3b15995efc65a351da8dac009b9698494771fefb 100644 +index f12c59d3bb15f482969cc9d0d2aff0718972675b..f75b66c9ec786bc6f4d3f5cd5127c815f11166c4 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3879,6 +3879,11 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -4031,6 +4031,11 @@ public abstract class LivingEntity extends Entity implements Attackable { return ((Byte) this.entityData.get(LivingEntity.DATA_LIVING_ENTITY_FLAGS) & 2) > 0 ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND; } @@ -202,7 +202,7 @@ index 05dae689ada8d96009e81aabf95a626bae90ecd3..3b15995efc65a351da8dac009b969849 if (this.isUsingItem()) { if (ItemStack.isSameItem(this.getItemInHand(this.getUsedItemHand()), this.useItem)) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Bucketable.java b/src/main/java/net/minecraft/world/entity/animal/Bucketable.java -index b586116d8cca1585f9c9e618ed4d0cb2ef2747be..acf38ef6d8de8b15cf2b09eb7bda390c4e446e9a 100644 +index 5a12f4c1de2d020e84af933d491397b38d227824..4eca5996a867086be22d22d99db81ab001467516 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bucketable.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bucketable.java @@ -108,8 +108,7 @@ public interface Bucketable { @@ -215,32 +215,31 @@ index b586116d8cca1585f9c9e618ed4d0cb2ef2747be..acf38ef6d8de8b15cf2b09eb7bda390c return Optional.of(InteractionResult.FAIL); } entity.playSound(((Bucketable) entity).getPickupSound(), 1.0F, 1.0F); -diff --git a/src/main/java/net/minecraft/world/item/SuspiciousStewItem.java b/src/main/java/net/minecraft/world/item/SuspiciousStewItem.java -index 5b448006debecab983167d15fac59fc2a04805df..9523db353df026f33d7e859788612b97542bd001 100644 ---- a/src/main/java/net/minecraft/world/item/SuspiciousStewItem.java -+++ b/src/main/java/net/minecraft/world/item/SuspiciousStewItem.java -@@ -58,10 +58,14 @@ public class SuspiciousStewItem extends Item { +diff --git a/src/main/java/net/minecraft/world/item/component/SuspiciousStewEffects.java b/src/main/java/net/minecraft/world/item/component/SuspiciousStewEffects.java +index 04760d8ba7c560bd9d11191c666715ae8c3e4bff..768f90682cd10045c16337fecc2702f57dfe8a50 100644 +--- a/src/main/java/net/minecraft/world/item/component/SuspiciousStewEffects.java ++++ b/src/main/java/net/minecraft/world/item/component/SuspiciousStewEffects.java +@@ -47,9 +47,14 @@ public record SuspiciousStewEffects(List effects) i + // CraftBukkit start + @Override public void cancelUsingItem(net.minecraft.server.level.ServerPlayer entityplayer, ItemStack itemstack) { - SuspiciousStewEffects suspicioussteweffects = (SuspiciousStewEffects) itemstack.getOrDefault(DataComponents.SUSPICIOUS_STEW_EFFECTS, SuspiciousStewEffects.EMPTY); - + final List> packets = new java.util.ArrayList<>(); // Paper - bundlize packets - for (SuspiciousStewEffects.Entry suspicioussteweffects_a : suspicioussteweffects.effects()) { + for (SuspiciousStewEffects.Entry suspicioussteweffects_a : this.effects) { - entityplayer.connection.send(new net.minecraft.network.protocol.game.ClientboundRemoveMobEffectPacket(entityplayer.getId(), suspicioussteweffects_a.effect())); + packets.add(new net.minecraft.network.protocol.game.ClientboundRemoveMobEffectPacket(entityplayer.getId(), suspicioussteweffects_a.effect())); // Paper - bundlize packets } -- entityplayer.server.getPlayerList().sendActivePlayerEffects(entityplayer); + // Paper start - bundlize packets + entityplayer.server.getPlayerList().sendActiveEffects(entityplayer, packets::add); + entityplayer.connection.send(new net.minecraft.network.protocol.game.ClientboundBundlePacket(packets)); + // Paper end - bundlize packets } // CraftBukkit end - } + diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 9ca1fee03bfa557f1df7388c6043c9ec6d02a79a..cd789c235acf740ec29c30b180e7fbe1a140caa9 100644 +index c1d3dd2bd217efd6914bceb1027fa12b06c22a55..ca95a36b0149d4b8a67c3b42316c5d9d0415f5dd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1012,7 +1012,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1013,7 +1013,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return; } diff --git a/patches/unapplied/server/1014-Registry-Modification-API.patch b/patches/server/0994-Registry-Modification-API.patch similarity index 94% rename from patches/unapplied/server/1014-Registry-Modification-API.patch rename to patches/server/0994-Registry-Modification-API.patch index dba4fa5830..ac28f625c7 100644 --- a/patches/unapplied/server/1014-Registry-Modification-API.patch +++ b/patches/server/0994-Registry-Modification-API.patch @@ -1117,12 +1117,12 @@ index 0000000000000000000000000000000000000000..f09ce9c8547ef05153847245746473dd + } +} diff --git a/src/main/java/net/minecraft/core/MappedRegistry.java b/src/main/java/net/minecraft/core/MappedRegistry.java -index edbbafd1705345282e5e6251eb71bfde5793b7d4..f22d22ebcedcc9c20225677844c86a1ad27c4211 100644 +index 71e04e5c1bc0722abf8ca2e0738bd60b6d7ae21c..063630c1ffcce099139c59d598fc5a210e21f640 100644 --- a/src/main/java/net/minecraft/core/MappedRegistry.java +++ b/src/main/java/net/minecraft/core/MappedRegistry.java -@@ -441,4 +441,12 @@ public class MappedRegistry implements WritableRegistry { - public HolderLookup.RegistryLookup asLookup() { - return this.lookup; +@@ -509,4 +509,12 @@ public class MappedRegistry implements WritableRegistry { + + Stream> getTags(); } + // Paper start + // used to clear intrusive holders from GameEvent, Item, Block, EntityType, and Fluid from unused instances of those types @@ -1134,12 +1134,12 @@ index edbbafd1705345282e5e6251eb71bfde5793b7d4..f22d22ebcedcc9c20225677844c86a1a + // Paper end } diff --git a/src/main/java/net/minecraft/core/registries/BuiltInRegistries.java b/src/main/java/net/minecraft/core/registries/BuiltInRegistries.java -index 44b7927081b476813505cab6b3a2da2ec2942c54..0497318e8f647453f38f3a16a8be6bd9aa19253f 100644 +index 4638ba98dbbdb0f880337347be85a6e0fbed2191..12ba8bc0a946c107b076e2c995aca6a3aeb3811f 100644 --- a/src/main/java/net/minecraft/core/registries/BuiltInRegistries.java +++ b/src/main/java/net/minecraft/core/registries/BuiltInRegistries.java -@@ -288,6 +288,17 @@ public class BuiltInRegistries { - Registries.ENCHANTMENT_PROVIDER_TYPE, EnchantmentProviderTypes::bootstrap - ); +@@ -296,6 +296,17 @@ public class BuiltInRegistries { + public static final Registry> SLOT_DISPLAY = registerSimple(Registries.SLOT_DISPLAY, SlotDisplays::bootstrap); + public static final Registry RECIPE_BOOK_CATEGORY = registerSimple(Registries.RECIPE_BOOK_CATEGORY, RecipeBookCategories::bootstrap); public static final Registry> REGISTRY = WRITABLE_REGISTRY; + // Paper start - add built-in registry conversions + public static final io.papermc.paper.registry.data.util.Conversions BUILT_IN_CONVERSIONS = new io.papermc.paper.registry.data.util.Conversions(new net.minecraft.resources.RegistryOps.RegistryInfoLookup() { @@ -1155,7 +1155,7 @@ index 44b7927081b476813505cab6b3a2da2ec2942c54..0497318e8f647453f38f3a16a8be6bd9 private static Registry registerSimple(ResourceKey> key, BuiltInRegistries.RegistryBootstrap initializer) { return internalRegister(key, new MappedRegistry<>(key, Lifecycle.stable(), false), initializer); -@@ -328,6 +339,7 @@ public class BuiltInRegistries { +@@ -336,6 +347,7 @@ public class BuiltInRegistries { } public static void bootStrap(Runnable runnable) { // Paper end @@ -1163,40 +1163,40 @@ index 44b7927081b476813505cab6b3a2da2ec2942c54..0497318e8f647453f38f3a16a8be6bd9 createContents(); runnable.run(); // Paper freeze(); -@@ -346,6 +358,7 @@ public class BuiltInRegistries { - REGISTRY.freeze(); +@@ -355,6 +367,7 @@ public class BuiltInRegistries { for (Registry registry : REGISTRY) { + bindBootstrappedTagsToEmpty(registry); + io.papermc.paper.registry.PaperRegistryListenerManager.INSTANCE.runFreezeListeners(registry.key(), BUILT_IN_CONVERSIONS); // Paper registry.freeze(); } } diff --git a/src/main/java/net/minecraft/resources/RegistryDataLoader.java b/src/main/java/net/minecraft/resources/RegistryDataLoader.java -index abadf4abe08dc3bb6612b42cbb3f7df3ffa28ce9..3053243866c655829fe2e980446b4abf1da6d37c 100644 +index 144a6f5b0c53110804d6d099fe857d25f107d938..f2236665eaf3e6d0f9d44605db3cd5afe0cced4e 100644 --- a/src/main/java/net/minecraft/resources/RegistryDataLoader.java +++ b/src/main/java/net/minecraft/resources/RegistryDataLoader.java -@@ -115,7 +115,7 @@ public class RegistryDataLoader { - ); - - public static RegistryAccess.Frozen load(ResourceManager resourceManager, RegistryAccess registryManager, List> entries) { -- return load((loader, infoGetter) -> loader.loadFromResources(resourceManager, infoGetter), registryManager, entries); -+ return load((loader, infoGetter, conversions) -> loader.loadFromResources(resourceManager, infoGetter, conversions), registryManager, entries); // Paper - pass conversions +@@ -130,7 +130,7 @@ public class RegistryDataLoader { + public static RegistryAccess.Frozen load( + ResourceManager resourceManager, List> registries, List> entries + ) { +- return load((loader, infoGetter) -> loader.loadFromResources(resourceManager, infoGetter), registries, entries); ++ return load((loader, infoGetter, conversions) -> loader.loadFromResources(resourceManager, infoGetter, conversions), registries, entries); // Paper - pass conversions } public static RegistryAccess.Frozen load( -@@ -124,7 +124,7 @@ public class RegistryDataLoader { - RegistryAccess registryManager, +@@ -139,7 +139,7 @@ public class RegistryDataLoader { + List> registries, List> entries ) { -- return load((loader, infoGetter) -> loader.loadFromNetwork(data, factory, infoGetter), registryManager, entries); -+ return load((loader, infoGetter, conversions) -> loader.loadFromNetwork(data, factory, infoGetter, conversions), registryManager, entries); // Paper - pass conversions +- return load((loader, infoGetter) -> loader.loadFromNetwork(data, factory, infoGetter), registries, entries); ++ return load((loader, infoGetter, conversions) -> loader.loadFromNetwork(data, factory, infoGetter, conversions), registries, entries); // Paper - pass conversions } private static RegistryAccess.Frozen load( -@@ -133,9 +133,11 @@ public class RegistryDataLoader { +@@ -148,9 +148,11 @@ public class RegistryDataLoader { Map, Exception> map = new HashMap<>(); List> list = entries.stream().map(entry -> entry.create(Lifecycle.stable(), map)).collect(Collectors.toUnmodifiableList()); - RegistryOps.RegistryInfoLookup registryInfoLookup = createContext(baseRegistryManager, list); + RegistryOps.RegistryInfoLookup registryInfoLookup = createContext(registries, list); - list.forEach(loader -> loadable.apply((RegistryDataLoader.Loader)loader, registryInfoLookup)); + final io.papermc.paper.registry.data.util.Conversions conversions = new io.papermc.paper.registry.data.util.Conversions(registryInfoLookup); // Paper - create conversions + list.forEach(loader -> loadable.apply((RegistryDataLoader.Loader)loader, registryInfoLookup, conversions)); @@ -1206,7 +1206,7 @@ index abadf4abe08dc3bb6612b42cbb3f7df3ffa28ce9..3053243866c655829fe2e980446b4abf try { registry.freeze(); -@@ -193,13 +195,13 @@ public class RegistryDataLoader { +@@ -238,13 +240,13 @@ public class RegistryDataLoader { } private static void loadElementFromResource( @@ -1222,7 +1222,7 @@ index abadf4abe08dc3bb6612b42cbb3f7df3ffa28ce9..3053243866c655829fe2e980446b4abf } } -@@ -208,7 +210,8 @@ public class RegistryDataLoader { +@@ -253,7 +255,8 @@ public class RegistryDataLoader { RegistryOps.RegistryInfoLookup infoGetter, WritableRegistry registry, Decoder elementDecoder, @@ -1232,7 +1232,7 @@ index abadf4abe08dc3bb6612b42cbb3f7df3ffa28ce9..3053243866c655829fe2e980446b4abf ) { String string = Registries.elementsDirPath(registry.key()); FileToIdConverter fileToIdConverter = FileToIdConverter.json(string); -@@ -221,7 +224,7 @@ public class RegistryDataLoader { +@@ -266,7 +269,7 @@ public class RegistryDataLoader { RegistrationInfo registrationInfo = REGISTRATION_INFO_CACHE.apply(resource.knownPackInfo()); try { @@ -1241,7 +1241,7 @@ index abadf4abe08dc3bb6612b42cbb3f7df3ffa28ce9..3053243866c655829fe2e980446b4abf } catch (Exception var15) { errors.put( resourceKey, -@@ -237,7 +240,8 @@ public class RegistryDataLoader { +@@ -284,7 +287,8 @@ public class RegistryDataLoader { RegistryOps.RegistryInfoLookup infoGetter, WritableRegistry registry, Decoder decoder, @@ -1249,9 +1249,9 @@ index abadf4abe08dc3bb6612b42cbb3f7df3ffa28ce9..3053243866c655829fe2e980446b4abf + Map, Exception> loadingErrors, + io.papermc.paper.registry.data.util.Conversions conversions // Paper - pass conversions ) { - List list = data.get(registry.key()); - if (list != null) { -@@ -264,7 +268,7 @@ public class RegistryDataLoader { + RegistryDataLoader.NetworkedRegistryData networkedRegistryData = data.get(registry.key()); + if (networkedRegistryData != null) { +@@ -311,7 +315,7 @@ public class RegistryDataLoader { try { Resource resource = factory.getResourceOrThrow(resourceLocation); @@ -1260,7 +1260,7 @@ index abadf4abe08dc3bb6612b42cbb3f7df3ffa28ce9..3053243866c655829fe2e980446b4abf } catch (Exception var18) { loadingErrors.put(resourceKey, new IllegalStateException("Failed to parse local data", var18)); } -@@ -274,22 +278,23 @@ public class RegistryDataLoader { +@@ -323,22 +327,23 @@ public class RegistryDataLoader { } static record Loader(RegistryDataLoader.RegistryData data, WritableRegistry registry, Map, Exception> loadingErrors) { @@ -1271,7 +1271,7 @@ index abadf4abe08dc3bb6612b42cbb3f7df3ffa28ce9..3053243866c655829fe2e980446b4abf } public void loadFromNetwork( - Map>, List> data, + Map>, RegistryDataLoader.NetworkedRegistryData> data, ResourceProvider factory, - RegistryOps.RegistryInfoLookup infoGetter + RegistryOps.RegistryInfoLookup infoGetter, @@ -1288,41 +1288,42 @@ index abadf4abe08dc3bb6612b42cbb3f7df3ffa28ce9..3053243866c655829fe2e980446b4abf + void apply(RegistryDataLoader.Loader loader, RegistryOps.RegistryInfoLookup infoGetter, io.papermc.paper.registry.data.util.Conversions conversions); // Paper - pass conversions } - public static record RegistryData(ResourceKey> key, Codec elementCodec, boolean requiredNonEmpty) { + public static record NetworkedRegistryData(List elements, TagNetworkSerialization.NetworkPayload tags) { diff --git a/src/main/java/net/minecraft/server/ReloadableServerRegistries.java b/src/main/java/net/minecraft/server/ReloadableServerRegistries.java -index 397bdacab9517354875ebc0bc68d35059b3c318b..908431652a0fea79b5a0cee1efd0c7a7d524b614 100644 +index 6fddef967b6314ca0158f5bd4b8898670ea5e9ec..b5ca1a0acb16d0cd8dccc854f309d425a48b070d 100644 --- a/src/main/java/net/minecraft/server/ReloadableServerRegistries.java +++ b/src/main/java/net/minecraft/server/ReloadableServerRegistries.java -@@ -47,15 +47,16 @@ public class ReloadableServerRegistries { - ) { - RegistryAccess.Frozen frozen = dynamicRegistries.getAccessForLoading(RegistryLayer.RELOADABLE); - RegistryOps registryOps = new ReloadableServerRegistries.EmptyTagLookupWrapper(frozen).createSerializationContext(JsonOps.INSTANCE); +@@ -50,8 +50,9 @@ public class ReloadableServerRegistries { + ); + HolderLookup.Provider provider = HolderLookup.Provider.create(list.stream()); + RegistryOps registryOps = provider.createSerializationContext(JsonOps.INSTANCE); + final io.papermc.paper.registry.data.util.Conversions conversions = new io.papermc.paper.registry.data.util.Conversions(registryOps.lookupProvider); // Paper - List>> list = LootDataType.values() -- .map(type -> scheduleElementParse((LootDataType)type, registryOps, resourceManager, prepareExecutor)) -+ .map(type -> scheduleElementParse((LootDataType)type, registryOps, resourceManager, prepareExecutor, conversions)) // Paper + List>> list2 = LootDataType.values() +- .map(type -> scheduleRegistryLoad((LootDataType)type, registryOps, resourceManager, prepareExecutor)) ++ .map(type -> scheduleRegistryLoad((LootDataType)type, registryOps, resourceManager, prepareExecutor, conversions)) // Paper .toList(); - CompletableFuture>> completableFuture = Util.sequence(list); - return completableFuture.thenApplyAsync(registries -> apply(dynamicRegistries, (List>)registries), prepareExecutor); + CompletableFuture>> completableFuture = Util.sequence(list2); + return completableFuture.thenApplyAsync( +@@ -60,7 +61,7 @@ public class ReloadableServerRegistries { } - private static CompletableFuture> scheduleElementParse( + private static CompletableFuture> scheduleRegistryLoad( - LootDataType type, RegistryOps ops, ResourceManager resourceManager, Executor prepareExecutor + LootDataType type, RegistryOps ops, ResourceManager resourceManager, Executor prepareExecutor, io.papermc.paper.registry.data.util.Conversions conversions // Paper ) { - return CompletableFuture.supplyAsync( - () -> { -@@ -66,7 +67,7 @@ public class ReloadableServerRegistries { - SimpleJsonResourceReloadListener.scanDirectory(resourceManager, string, GSON, map); - map.forEach( - (id, json) -> type.deserialize(id, ops, json) -- .ifPresent(value -> writableRegistry.register(ResourceKey.create(type.registryKey(), id), (T)value, DEFAULT_REGISTRATION_INFO)) -+ .ifPresent(value -> io.papermc.paper.registry.PaperRegistryListenerManager.INSTANCE.registerWithListeners(writableRegistry, ResourceKey.create(type.registryKey(), id), value, DEFAULT_REGISTRATION_INFO, conversions)) // Paper - register with listeners - ); - return writableRegistry; - }, + return CompletableFuture.supplyAsync(() -> { + WritableRegistry writableRegistry = new MappedRegistry<>(type.registryKey(), Lifecycle.experimental()); +@@ -68,7 +69,7 @@ public class ReloadableServerRegistries { + Map map = new HashMap<>(); + String string = Registries.elementsDirPath(type.registryKey()); + SimpleJsonResourceReloadListener.scanDirectory(resourceManager, string, ops, type.codec(), map); +- map.forEach((id, value) -> writableRegistry.register(ResourceKey.create(type.registryKey(), id), (T)value, DEFAULT_REGISTRATION_INFO)); ++ map.forEach((id, value) -> io.papermc.paper.registry.PaperRegistryListenerManager.INSTANCE.registerWithListeners(writableRegistry, ResourceKey.create(type.registryKey(), id), value, DEFAULT_REGISTRATION_INFO, conversions)); // Paper - register with listeners + TagLoader.loadTagsForRegistry(resourceManager, writableRegistry); + return writableRegistry; + }, prepareExecutor); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java b/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java -index 4dff173bbed34a49c22532bbee2b35ebf5920d22..53c70846666b746af6706ed2e363fe388e463e56 100644 +index f8450a2abd1e96fac7827d252cc00038b9dee839..a812a42ea81b1543287e78ea55da6cbf4e0d27f8 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java @@ -167,11 +167,11 @@ public class CraftRegistry implements Registry { @@ -1358,7 +1359,7 @@ index 4dff173bbed34a49c22532bbee2b35ebf5920d22..53c70846666b746af6706ed2e363fe38 + // Paper end - RegistrySet API } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 9f2ddd47dc0658db2f95ef80543fb9a4d2f94f9f..68a6cd43042e87501f5bd48565222638dd58a1cf 100644 +index b24ccbff89db873f5bdf62cbebcca0049b94a8d5..49b898ed5e9de2507a6a6aac61dea4fe902649ca 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -674,6 +674,21 @@ public final class CraftMagicNumbers implements UnsafeValues { @@ -1433,7 +1434,7 @@ index 0000000000000000000000000000000000000000..47b8ebac8496179008b8932c5ca2aadc + } +} diff --git a/src/test/java/org/bukkit/registry/RegistryClassTest.java b/src/test/java/org/bukkit/registry/RegistryClassTest.java -index 575a06125e0b60b5bb8b6f85131f7d6cf86f5083..85f93d8c9b3a48b267e0575ba7fbb3b9f273e70c 100644 +index ea3d37f387bdb0dd5ae3fba9231ace31d0cebd64..c118c911972fe5a9f0c3e306009306f04ae2e821 100644 --- a/src/test/java/org/bukkit/registry/RegistryClassTest.java +++ b/src/test/java/org/bukkit/registry/RegistryClassTest.java @@ -111,7 +111,7 @@ public class RegistryClassTest { diff --git a/patches/unapplied/server/1015-Add-registry-entry-and-builders.patch b/patches/server/0995-Add-registry-entry-and-builders.patch similarity index 100% rename from patches/unapplied/server/1015-Add-registry-entry-and-builders.patch rename to patches/server/0995-Add-registry-entry-and-builders.patch diff --git a/patches/unapplied/server/1017-Proxy-ItemStack-to-CraftItemStack.patch b/patches/server/0996-Proxy-ItemStack-to-CraftItemStack.patch similarity index 95% rename from patches/unapplied/server/1017-Proxy-ItemStack-to-CraftItemStack.patch rename to patches/server/0996-Proxy-ItemStack-to-CraftItemStack.patch index 781b18ae7a..684b037d30 100644 --- a/patches/unapplied/server/1017-Proxy-ItemStack-to-CraftItemStack.patch +++ b/patches/server/0996-Proxy-ItemStack-to-CraftItemStack.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Proxy ItemStack to CraftItemStack diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -index efb7fb8dbaa7446e394f55b021692c11a25fd29f..a3c6d2cbdce60b1cf935d798568b8bb5d97e1229 100644 +index bb2b4528692aed8e3341428697a60c0abee13779..49d2deac8d42a505b75f2196ef895a5564b62cac 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -@@ -26,15 +26,57 @@ import org.jetbrains.annotations.ApiStatus; +@@ -31,15 +31,57 @@ import org.jetbrains.annotations.ApiStatus; @DelegateDeserialization(ItemStack.class) public final class CraftItemStack extends ItemStack { @@ -71,7 +71,7 @@ index efb7fb8dbaa7446e394f55b021692c11a25fd29f..a3c6d2cbdce60b1cf935d798568b8bb5 public static net.minecraft.world.item.ItemStack getOrCloneOnMutation(ItemStack old, ItemStack newInstance) { return old == newInstance ? unwrap(old) : asNMSCopy(newInstance); } -@@ -48,25 +90,13 @@ public final class CraftItemStack extends ItemStack { +@@ -53,25 +95,13 @@ public final class CraftItemStack extends ItemStack { // Paper end - override isEmpty to use vanilla's impl public static net.minecraft.world.item.ItemStack asNMSCopy(ItemStack original) { @@ -102,7 +102,7 @@ index efb7fb8dbaa7446e394f55b021692c11a25fd29f..a3c6d2cbdce60b1cf935d798568b8bb5 } // Paper start -@@ -89,14 +119,10 @@ public final class CraftItemStack extends ItemStack { +@@ -94,14 +124,10 @@ public final class CraftItemStack extends ItemStack { * Copies the NMS stack to return as a strictly-Bukkit stack */ public static ItemStack asBukkitCopy(net.minecraft.world.item.ItemStack original) { @@ -121,7 +121,7 @@ index efb7fb8dbaa7446e394f55b021692c11a25fd29f..a3c6d2cbdce60b1cf935d798568b8bb5 } public static CraftItemStack asCraftMirror(net.minecraft.world.item.ItemStack original) { -@@ -317,11 +343,7 @@ public final class CraftItemStack extends ItemStack { +@@ -329,11 +355,7 @@ public final class CraftItemStack extends ItemStack { @Override public CraftItemStack clone() { @@ -134,7 +134,7 @@ index efb7fb8dbaa7446e394f55b021692c11a25fd29f..a3c6d2cbdce60b1cf935d798568b8bb5 } @Override -@@ -424,22 +446,14 @@ public final class CraftItemStack extends ItemStack { +@@ -436,22 +458,14 @@ public final class CraftItemStack extends ItemStack { if (stack == this) { return true; } @@ -160,7 +160,7 @@ index efb7fb8dbaa7446e394f55b021692c11a25fd29f..a3c6d2cbdce60b1cf935d798568b8bb5 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java -index d03f4a767f6c7fe7d6bcef20e6676c39d9657584..bae3dd5fc67e6b3d98a5e63ffbf639c5042f8843 100644 +index f4a6ee6dfcb2d516a9a1a9c81494b50a629110e4..96dfcfa12c63c682edcdec98647ca6a94d9fb4ed 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java @@ -100,13 +100,14 @@ public class CraftItemType implements ItemType.Typed, Han @@ -205,7 +205,7 @@ index 6cc9d7a9e6d4bfdc27e52fc581b2bb832616f121..6930d0afb230a88aa813b02e4d55c95d + // Paper end } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 68a6cd43042e87501f5bd48565222638dd58a1cf..6adc18c40d5d62e2ebc8deec197cec630a366937 100644 +index 49b898ed5e9de2507a6a6aac61dea4fe902649ca..02745957a08a27af6a032453b8b20a8fed2911b3 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -689,6 +689,13 @@ public final class CraftMagicNumbers implements UnsafeValues { diff --git a/patches/unapplied/server/1018-Make-a-PDC-view-accessible-directly-from-ItemStack.patch b/patches/server/0997-Make-a-PDC-view-accessible-directly-from-ItemStack.patch similarity index 98% rename from patches/unapplied/server/1018-Make-a-PDC-view-accessible-directly-from-ItemStack.patch rename to patches/server/0997-Make-a-PDC-view-accessible-directly-from-ItemStack.patch index f86fe8c7dd..f0bd1ac5eb 100644 --- a/patches/unapplied/server/1018-Make-a-PDC-view-accessible-directly-from-ItemStack.patch +++ b/patches/server/0997-Make-a-PDC-view-accessible-directly-from-ItemStack.patch @@ -131,10 +131,10 @@ index 0000000000000000000000000000000000000000..122c32e82b299cafd7d0c6a9f4818523 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -index a3c6d2cbdce60b1cf935d798568b8bb5d97e1229..6081c588c61406d0d21a15e8e6140d5d5240f0a8 100644 +index 49d2deac8d42a505b75f2196ef895a5564b62cac..756c73a401437566258813946fa10c7caa8f2469 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -@@ -484,4 +484,34 @@ public final class CraftItemStack extends ItemStack { +@@ -496,4 +496,34 @@ public final class CraftItemStack extends ItemStack { return mirrored; } // Paper end diff --git a/patches/unapplied/server/1019-Prioritize-Minecraft-commands-in-function-parsing-an.patch b/patches/server/0998-Prioritize-Minecraft-commands-in-function-parsing-an.patch similarity index 98% rename from patches/unapplied/server/1019-Prioritize-Minecraft-commands-in-function-parsing-an.patch rename to patches/server/0998-Prioritize-Minecraft-commands-in-function-parsing-an.patch index 6e36d9a7b3..c22d5f09be 100644 --- a/patches/unapplied/server/1019-Prioritize-Minecraft-commands-in-function-parsing-an.patch +++ b/patches/server/0998-Prioritize-Minecraft-commands-in-function-parsing-an.patch @@ -118,10 +118,10 @@ index 85a890403645f0f9d381e85b48efcae126673945..bcc27fec043a57eb5064934c967982de @Override diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 3e454515360c22a26c9329e4032d525579110d7e..1d1e76de60e40224f5cb81893f9ee50fe987badb 100644 +index 1e7b99a82184f73aa31cb2e0d4e52a806240926f..260350422fc724ba5cd5769cbb387b6007f36a84 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -310,10 +310,7 @@ public class Commands { +@@ -315,10 +315,7 @@ public class Commands { // Paper - Fix permission levels for command blocks diff --git a/patches/unapplied/server/1020-optimize-dirt-and-snow-spreading.patch b/patches/server/0999-optimize-dirt-and-snow-spreading.patch similarity index 98% rename from patches/unapplied/server/1020-optimize-dirt-and-snow-spreading.patch rename to patches/server/0999-optimize-dirt-and-snow-spreading.patch index 49de7fcab9..e89393b028 100644 --- a/patches/unapplied/server/1020-optimize-dirt-and-snow-spreading.patch +++ b/patches/server/0999-optimize-dirt-and-snow-spreading.patch @@ -5,7 +5,7 @@ Subject: [PATCH] optimize dirt and snow spreading diff --git a/src/main/java/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java b/src/main/java/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java -index 5a39e8d359dc13383711e49ffb2d1294dad26192..b7165ec19bef1a07f6618fc0429d86cda1b08da4 100644 +index b4b826c53548bcf6952f6d0ee8037975ceb8c6e1..a94c164fbf8fc3bb7669799a53f7e5528d921e7c 100644 --- a/src/main/java/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java @@ -18,8 +18,13 @@ public abstract class SpreadingSnowyDirtBlock extends SnowyDirtBlock { diff --git a/patches/unapplied/server/1021-Fix-NPE-for-Jukebox-setRecord.patch b/patches/server/1000-Fix-NPE-for-Jukebox-setRecord.patch similarity index 87% rename from patches/unapplied/server/1021-Fix-NPE-for-Jukebox-setRecord.patch rename to patches/server/1000-Fix-NPE-for-Jukebox-setRecord.patch index e15a77ee75..c673e4f8c7 100644 --- a/patches/unapplied/server/1021-Fix-NPE-for-Jukebox-setRecord.patch +++ b/patches/server/1000-Fix-NPE-for-Jukebox-setRecord.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix NPE for Jukebox#setRecord Fallback to the global registry if no level exists diff --git a/src/main/java/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java -index 1497e76b548ad76b5aaa297bdd35723e6a8f1f8d..c5069730b25e6f0dfb4e5db3271c91116b485f58 100644 +index 69fb6f5cfc8654995d7c78e8f7e9470b601e8ec7..c3bbe5e9e0cc37f3f22fc1d839fa2652966f1266 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java -@@ -200,7 +200,7 @@ public class JukeboxBlockEntity extends BlockEntity implements Clearable, Contai +@@ -199,7 +199,7 @@ public class JukeboxBlockEntity extends BlockEntity implements ContainerSingleIt public void setSongItemWithoutPlaying(ItemStack itemstack, long ticksSinceSongStarted) { // CraftBukkit - add argument this.item = itemstack; this.jukeboxSongPlayer.song = null; // CraftBukkit - reset