diff --git a/patches/unapplied/server/Add-registry-entry-and-builders.patch b/patches/server/Add-registry-entry-and-builders.patch similarity index 100% rename from patches/unapplied/server/Add-registry-entry-and-builders.patch rename to patches/server/Add-registry-entry-and-builders.patch diff --git a/patches/unapplied/server/Check-distance-in-entity-interactions.patch b/patches/server/Check-distance-in-entity-interactions.patch similarity index 91% rename from patches/unapplied/server/Check-distance-in-entity-interactions.patch rename to patches/server/Check-distance-in-entity-interactions.patch index 7245588440..d478e65bcc 100644 --- a/patches/unapplied/server/Check-distance-in-entity-interactions.patch +++ b/patches/server/Check-distance-in-entity-interactions.patch @@ -53,16 +53,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 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 +diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractBoat.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractBoat.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -+++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -@@ -0,0 +0,0 @@ public class Boat extends VehicleEntity implements Leashable, VariantHolder 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java diff --git a/patches/unapplied/server/Proxy-ItemStack-to-CraftItemStack.patch b/patches/server/Proxy-ItemStack-to-CraftItemStack.patch similarity index 100% rename from patches/unapplied/server/Proxy-ItemStack-to-CraftItemStack.patch rename to patches/server/Proxy-ItemStack-to-CraftItemStack.patch diff --git a/patches/unapplied/server/Registry-Modification-API.patch b/patches/server/Registry-Modification-API.patch similarity index 96% rename from patches/unapplied/server/Registry-Modification-API.patch rename to patches/server/Registry-Modification-API.patch index b9425d5f14..6b914289b0 100644 --- a/patches/unapplied/server/Registry-Modification-API.patch +++ b/patches/server/Registry-Modification-API.patch @@ -1121,8 +1121,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/core/MappedRegistry.java +++ b/src/main/java/net/minecraft/core/MappedRegistry.java @@ -0,0 +0,0 @@ public class MappedRegistry implements WritableRegistry { - public HolderLookup.RegistryLookup asLookup() { - return this.lookup; + + Stream> getTags(); } + // Paper start + // used to clear intrusive holders from GameEvent, Item, Block, EntityType, and Fluid from unused instances of those types @@ -1138,8 +1138,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/core/registries/BuiltInRegistries.java +++ b/src/main/java/net/minecraft/core/registries/BuiltInRegistries.java @@ -0,0 +0,0 @@ public class BuiltInRegistries { - Registries.ENCHANTMENT_PROVIDER_TYPE, EnchantmentProviderTypes::bootstrap - ); + 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() { @@ -1164,9 +1164,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 runnable.run(); // Paper freeze(); @@ -0,0 +0,0 @@ public class BuiltInRegistries { - REGISTRY.freeze(); for (Registry registry : REGISTRY) { + bindBootstrappedTagsToEmpty(registry); + io.papermc.paper.registry.PaperRegistryListenerManager.INSTANCE.runFreezeListeners(registry.key(), BUILT_IN_CONVERSIONS); // Paper registry.freeze(); } @@ -1176,27 +1176,27 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/resources/RegistryDataLoader.java +++ b/src/main/java/net/minecraft/resources/RegistryDataLoader.java @@ -0,0 +0,0 @@ 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 + 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( @@ -0,0 +0,0 @@ public class RegistryDataLoader { - RegistryAccess registryManager, + 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( @@ -0,0 +0,0 @@ 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)); @@ -1249,8 +1249,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + Map, Exception> loadingErrors, + io.papermc.paper.registry.data.util.Conversions conversions // Paper - pass conversions ) { - List list = data.get(registry.key()); - if (list != null) { + RegistryDataLoader.NetworkedRegistryData networkedRegistryData = data.get(registry.key()); + if (networkedRegistryData != null) { @@ -0,0 +0,0 @@ public class RegistryDataLoader { try { @@ -1271,7 +1271,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } public void loadFromNetwork( - Map>, List> data, + Map>, RegistryDataLoader.NetworkedRegistryData> data, ResourceProvider factory, - RegistryOps.RegistryInfoLookup infoGetter + RegistryOps.RegistryInfoLookup infoGetter, @@ -1288,39 +1288,40 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/ReloadableServerRegistries.java +++ b/src/main/java/net/minecraft/server/ReloadableServerRegistries.java @@ -0,0 +0,0 @@ public class ReloadableServerRegistries { - ) { - RegistryAccess.Frozen frozen = dynamicRegistries.getAccessForLoading(RegistryLayer.RELOADABLE); - RegistryOps registryOps = new ReloadableServerRegistries.EmptyTagLookupWrapper(frozen).createSerializationContext(JsonOps.INSTANCE); + ); + 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( +@@ -0,0 +0,0 @@ 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( - () -> { + return CompletableFuture.supplyAsync(() -> { + WritableRegistry writableRegistry = new MappedRegistry<>(type.registryKey(), Lifecycle.experimental()); @@ -0,0 +0,0 @@ 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; - }, + 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java diff --git a/patches/unapplied/server/optimize-dirt-and-snow-spreading.patch b/patches/server/optimize-dirt-and-snow-spreading.patch similarity index 100% rename from patches/unapplied/server/optimize-dirt-and-snow-spreading.patch rename to patches/server/optimize-dirt-and-snow-spreading.patch