diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/EnchantmentRegistryEntry.java b/paper-api/src/main/java/io/papermc/paper/registry/data/EnchantmentRegistryEntry.java index a9d6447110..e5f851d427 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/EnchantmentRegistryEntry.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/EnchantmentRegistryEntry.java @@ -3,6 +3,7 @@ package io.papermc.paper.registry.data; import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.event.RegistryComposeEvent; import io.papermc.paper.registry.set.RegistryKeySet; import io.papermc.paper.registry.set.RegistrySet; import io.papermc.paper.registry.tag.TagKey; @@ -153,7 +154,7 @@ public interface EnchantmentRegistryEntry { /** * Configures the set of supported items this enchantment can be applied on. This * can be a {@link RegistryKeySet} created via {@link RegistrySet#keySet(io.papermc.paper.registry.RegistryKey, Iterable)} or - * a tag obtained via {@link io.papermc.paper.registry.event.RegistryFreezeEvent#getOrCreateTag(TagKey)} with + * a tag obtained via {@link RegistryComposeEvent#getOrCreateTag(TagKey)} with * tag keys found in {@link io.papermc.paper.registry.keys.tags.ItemTypeTagKeys} such as * {@link io.papermc.paper.registry.keys.tags.ItemTypeTagKeys#ENCHANTABLE_ARMOR} and * {@link io.papermc.paper.registry.keys.tags.ItemTypeTagKeys#ENCHANTABLE_SWORD}. @@ -161,7 +162,7 @@ public interface EnchantmentRegistryEntry { * @param supportedItems the registry key set representing the supported items. * @return this builder instance. * @see RegistrySet#keySet(RegistryKey, TypedKey[]) - * @see io.papermc.paper.registry.event.RegistryFreezeEvent#getOrCreateTag(TagKey) + * @see RegistryComposeEvent#getOrCreateTag(TagKey) */ @Contract(value = "_ -> this", mutates = "this") Builder supportedItems(RegistryKeySet supportedItems); @@ -170,7 +171,7 @@ public interface EnchantmentRegistryEntry { * Configures a set of item types this enchantment can naturally be applied to, when enchanting in an * enchantment table.This can be a {@link RegistryKeySet} created via * {@link RegistrySet#keySet(io.papermc.paper.registry.RegistryKey, Iterable)} or a tag obtained via - * {@link io.papermc.paper.registry.event.RegistryFreezeEvent#getOrCreateTag(TagKey)} with + * {@link RegistryComposeEvent#getOrCreateTag(TagKey)} with * tag keys found in {@link io.papermc.paper.registry.keys.tags.ItemTypeTagKeys} such as * {@link io.papermc.paper.registry.keys.tags.ItemTypeTagKeys#ENCHANTABLE_ARMOR} and * {@link io.papermc.paper.registry.keys.tags.ItemTypeTagKeys#ENCHANTABLE_SWORD}. @@ -182,7 +183,7 @@ public interface EnchantmentRegistryEntry { * @param primaryItems the registry key set representing the primary items. * @return this builder instance. * @see RegistrySet#keySet(RegistryKey, TypedKey[]) - * @see io.papermc.paper.registry.event.RegistryFreezeEvent#getOrCreateTag(TagKey) + * @see RegistryComposeEvent#getOrCreateTag(TagKey) */ @Contract(value = "_ -> this", mutates = "this") Builder primaryItems(@Nullable RegistryKeySet primaryItems); @@ -285,7 +286,7 @@ public interface EnchantmentRegistryEntry { * @param exclusiveWith a registry set of enchantments exclusive to this one. * @return this builder instance. * @see RegistrySet#keySet(RegistryKey, TypedKey[]) - * @see io.papermc.paper.registry.event.RegistryFreezeEvent#getOrCreateTag(TagKey) + * @see RegistryComposeEvent#getOrCreateTag(TagKey) */ @Contract(value = "_ -> this", mutates = "this") Builder exclusiveWith(RegistryKeySet exclusiveWith); diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryComposeEvent.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryComposeEvent.java new file mode 100644 index 0000000000..38149071a4 --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryComposeEvent.java @@ -0,0 +1,40 @@ +package io.papermc.paper.registry.event; + +import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.tag.Tag; +import io.papermc.paper.registry.tag.TagKey; +import org.bukkit.Keyed; +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; + +/** + * Event object for {@link RegistryEventProvider#compose()} ()}. This + * event is fired after a registry is loaded with its normal values. + * It provides a way for plugins to add new objects to the registry. + * + * @param registry entry type + * @param registry entry builder type + */ +@ApiStatus.Experimental +@NullMarked +@ApiStatus.NonExtendable +public interface RegistryComposeEvent> extends RegistryEvent { + + /** + * Get the writable registry. + * + * @return a writable registry + */ + WritableRegistry registry(); + + /** + * Gets or creates a tag for the given tag key. This tag + * is then required to be filled either from the built-in or + * custom datapack. + * + * @param tagKey the tag key + * @return the tag + * @param the tag value type + */ + Tag getOrCreateTag(TagKey tagKey); +} diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventProvider.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventProvider.java index 8518e93829..669c9f4225 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventProvider.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventProvider.java @@ -15,7 +15,7 @@ import org.jspecify.annotations.NullMarked; * Supported events are: *
    *
  • {@link RegistryEntryAddEvent} (via {@link #entryAdd()})
  • - *
  • {@link RegistryFreezeEvent} (via {@link #freeze()})
  • + *
  • {@link RegistryComposeEvent} (via {@link #compose()})
  • *
* * @param registry entry type @@ -45,8 +45,24 @@ public interface RegistryEventProvider> { * to register a handler for {@link RegistryFreezeEvent}. * * @return the registry freeze event type + * @deprecated use {@link #compose()} instead. */ - LifecycleEventType.Prioritizable> freeze(); + @ApiStatus.ScheduledForRemoval(inVersion = "1.21.7 or 1.22, whichever comes first") + @Deprecated(forRemoval = true) + default LifecycleEventType.Prioritizable> freeze() { + return this.compose(); + } + + /** + * Gets the event type for {@link RegistryComposeEvent} which is fired after + * a registry is loaded of expected elements. It allows for the registration of new objects. + *

+ * Can be used in {@link io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager#registerEventHandler(LifecycleEventType, LifecycleEventHandler)} + * to register a handler for {@link RegistryComposeEvent}. + * + * @return the registry freeze event type + */ + LifecycleEventType.Prioritizable> compose(); /** * Gets the registry key associated with this event type provider. diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventProviderImpl.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventProviderImpl.java index 8d9afd4907..c9c5f47162 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventProviderImpl.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventProviderImpl.java @@ -22,8 +22,7 @@ record RegistryEventProviderImpl>(RegistryKey } @Override - public LifecycleEventType.Prioritizable> freeze() { - return RegistryEventTypeProvider.provider().registryFreeze(this); + public LifecycleEventType.Prioritizable> compose() { + return RegistryEventTypeProvider.provider().registryCompose(this); } - } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventTypeProvider.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventTypeProvider.java index d807bd2f42..38f10d2472 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventTypeProvider.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEventTypeProvider.java @@ -20,5 +20,5 @@ interface RegistryEventTypeProvider { > RegistryEntryAddEventType registryEntryAdd(RegistryEventProvider type); - > LifecycleEventType.Prioritizable> registryFreeze(RegistryEventProvider type); + > LifecycleEventType.Prioritizable> registryCompose(RegistryEventProvider type); } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java index c4f4a8fcab..1a47171402 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEvents.java @@ -29,7 +29,7 @@ import org.jspecify.annotations.NullMarked; import static io.papermc.paper.registry.event.RegistryEventProviderImpl.create; /** - * Holds providers for {@link RegistryEntryAddEvent} and {@link RegistryFreezeEvent} + * Holds providers for {@link RegistryEntryAddEvent} and {@link RegistryComposeEvent} * handlers for each applicable registry. */ @ApiStatus.Experimental diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFreezeEvent.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFreezeEvent.java index 59e8ca6c5b..429d8f1e7a 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFreezeEvent.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFreezeEvent.java @@ -1,9 +1,6 @@ package io.papermc.paper.registry.event; import io.papermc.paper.registry.RegistryBuilder; -import io.papermc.paper.registry.tag.Tag; -import io.papermc.paper.registry.tag.TagKey; -import org.bukkit.Keyed; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -14,27 +11,11 @@ import org.jspecify.annotations.NullMarked; * * @param registry entry type * @param registry entry builder type + * @deprecated renamed to {@link RegistryComposeEvent} */ -@ApiStatus.Experimental +@ApiStatus.ScheduledForRemoval(inVersion = "1.21.7 or 1.22, whichever comes first") +@Deprecated(forRemoval = true) @NullMarked @ApiStatus.NonExtendable -public interface RegistryFreezeEvent> extends RegistryEvent { - - /** - * Get the writable registry. - * - * @return a writable registry - */ - WritableRegistry registry(); - - /** - * Gets or creates a tag for the given tag key. This tag - * is then required to be filled either from the built-in or - * custom datapack. - * - * @param tagKey the tag key - * @return the tag - * @param the tag value type - */ - Tag getOrCreateTag(TagKey tagKey); +public interface RegistryFreezeEvent> extends RegistryComposeEvent { } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryListenerManager.java b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryListenerManager.java index 540aaa0964..570a1d9d99 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryListenerManager.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryListenerManager.java @@ -10,11 +10,12 @@ import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEventType; import io.papermc.paper.registry.data.util.Conversions; import io.papermc.paper.registry.entry.RegistryEntry; import io.papermc.paper.registry.entry.RegistryEntryMeta; +import io.papermc.paper.registry.event.RegistryEntryAddEvent; import io.papermc.paper.registry.event.RegistryEntryAddEventImpl; import io.papermc.paper.registry.event.RegistryEventMap; import io.papermc.paper.registry.event.RegistryEventProvider; -import io.papermc.paper.registry.event.RegistryFreezeEvent; -import io.papermc.paper.registry.event.RegistryFreezeEventImpl; +import io.papermc.paper.registry.event.RegistryComposeEventImpl; +import io.papermc.paper.registry.event.RegistryComposeEvent; import io.papermc.paper.registry.event.type.RegistryEntryAddEventType; import io.papermc.paper.registry.event.type.RegistryEntryAddEventTypeImpl; import io.papermc.paper.registry.event.type.RegistryLifecycleEventType; @@ -37,7 +38,7 @@ public class PaperRegistryListenerManager { public static final PaperRegistryListenerManager INSTANCE = new PaperRegistryListenerManager(); public final RegistryEventMap valueAddEventTypes = new RegistryEventMap("value add"); - public final RegistryEventMap freezeEventTypes = new RegistryEventMap("freeze"); + public final RegistryEventMap composeEventType = new RegistryEventMap("compose"); private PaperRegistryListenerManager() { } @@ -157,28 +158,28 @@ public class PaperRegistryListenerManager { public > void runFreezeListeners(final ResourceKey> resourceKey, final Conversions conversions) { final RegistryEntry entry = PaperRegistries.getEntry(resourceKey); - if (entry == null || !entry.meta().modificationApiSupport().canAdd() || !this.freezeEventTypes.hasHandlers(entry.apiKey())) { + if (entry == null || !entry.meta().modificationApiSupport().canAdd() || !this.composeEventType.hasHandlers(entry.apiKey())) { return; } final RegistryEntryMeta.Buildable writableEntry = (RegistryEntryMeta.Buildable) entry.meta(); final WritableCraftRegistry writableRegistry = PaperRegistryAccess.instance().getWritableRegistry(entry.apiKey()); - final RegistryFreezeEventImpl event = writableEntry.createFreezeEvent(writableRegistry, conversions); - LifecycleEventRunner.INSTANCE.callEvent(this.freezeEventTypes.getEventType(entry.apiKey()), event); + final RegistryComposeEventImpl event = writableEntry.createPostLoadEvent(writableRegistry, conversions); + LifecycleEventRunner.INSTANCE.callEvent(this.composeEventType.getEventType(entry.apiKey()), event); } public > RegistryEntryAddEventType getRegistryValueAddEventType(final RegistryEventProvider type) { final RegistryEntry entry = PaperRegistries.getEntry(type.registryKey()); if (entry == null || !entry.meta().modificationApiSupport().canModify()) { - throw new IllegalArgumentException(type.registryKey() + " does not support RegistryEntryAddEvent"); + throw new IllegalArgumentException(type.registryKey() + " does not support " + RegistryEntryAddEvent.class.getSimpleName()); } return this.valueAddEventTypes.getOrCreate(type.registryKey(), RegistryEntryAddEventTypeImpl::new); } - public > LifecycleEventType.Prioritizable> getRegistryFreezeEventType(final RegistryEventProvider type) { + public > LifecycleEventType.Prioritizable> getRegistryComposeEventType(final RegistryEventProvider type) { final RegistryEntry entry = PaperRegistries.getEntry(type.registryKey()); if (entry == null || !entry.meta().modificationApiSupport().canAdd()) { - throw new IllegalArgumentException(type.registryKey() + " does not support RegistryFreezeEvent"); + throw new IllegalArgumentException(type.registryKey() + " does not support " + RegistryComposeEvent.class.getSimpleName()); } - return this.freezeEventTypes.getOrCreate(type.registryKey(), RegistryLifecycleEventType::new); + return this.composeEventType.getOrCreate(type.registryKey(), RegistryLifecycleEventType::new); } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/entry/RegistryEntryMeta.java b/paper-server/src/main/java/io/papermc/paper/registry/entry/RegistryEntryMeta.java index be3ec5863f..f606c523f6 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/entry/RegistryEntryMeta.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/entry/RegistryEntryMeta.java @@ -7,7 +7,7 @@ import io.papermc.paper.registry.TypedKey; import io.papermc.paper.registry.WritableCraftRegistry; import io.papermc.paper.registry.data.util.Conversions; import io.papermc.paper.registry.event.RegistryEntryAddEventImpl; -import io.papermc.paper.registry.event.RegistryFreezeEventImpl; +import io.papermc.paper.registry.event.RegistryComposeEventImpl; import java.util.function.BiFunction; import java.util.function.Supplier; import net.minecraft.core.MappedRegistry; @@ -106,8 +106,8 @@ public sealed interface RegistryEntryMeta permits RegistryEn return new RegistryEntryAddEventImpl<>(key, initialBuilder, this.apiKey(), conversions); } - public RegistryFreezeEventImpl createFreezeEvent(final WritableCraftRegistry writableRegistry, final Conversions conversions) { - return new RegistryFreezeEventImpl<>(this.apiKey(), writableRegistry.createApiWritableRegistry(conversions), conversions); + public RegistryComposeEventImpl createPostLoadEvent(final WritableCraftRegistry writableRegistry, final Conversions conversions) { + return new RegistryComposeEventImpl<>(this.apiKey(), writableRegistry.createApiWritableRegistry(conversions), conversions); } @Override diff --git a/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryFreezeEventImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryComposeEventImpl.java similarity index 94% rename from paper-server/src/main/java/io/papermc/paper/registry/event/RegistryFreezeEventImpl.java rename to paper-server/src/main/java/io/papermc/paper/registry/event/RegistryComposeEventImpl.java index 1b45802f9a..1ceb822b41 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryFreezeEventImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryComposeEventImpl.java @@ -12,7 +12,7 @@ import net.minecraft.core.HolderSet; import net.minecraft.resources.RegistryOps; import org.bukkit.Keyed; -public record RegistryFreezeEventImpl>( +public record RegistryComposeEventImpl>( RegistryKey registryKey, WritableRegistry registry, Conversions conversions diff --git a/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryEventTypeProviderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryEventTypeProviderImpl.java index 34c842ffa3..02390a7df5 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryEventTypeProviderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryEventTypeProviderImpl.java @@ -18,7 +18,7 @@ public class RegistryEventTypeProviderImpl implements RegistryEventTypeProvider } @Override - public > LifecycleEventType.Prioritizable> registryFreeze(final RegistryEventProvider type) { - return PaperRegistryListenerManager.INSTANCE.getRegistryFreezeEventType(type); + public > LifecycleEventType.Prioritizable> registryCompose(final RegistryEventProvider type) { + return PaperRegistryListenerManager.INSTANCE.getRegistryComposeEventType(type); } }