From 644064cdd174d6fb9ac5885bf3657907ef47189d Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Thu, 6 Aug 2026 22:22:36 -0700 Subject: [PATCH 1/9] Update for 26.3 holder sets --- .../java/io/papermc/paper/dialog/Dialog.java | 5 +- .../io/papermc/paper/registry/Registered.java | 33 +++++++++ .../data/InlinedRegistryBuilderProvider.java | 17 ++--- .../data/dialog/DialogRegistryEntry.java | 2 + .../registry/event/RegistryComposeEvent.java | 7 ++ .../registry/event/RegistryEntryAddEvent.java | 7 ++ .../paper/registry/event/RegistryFactory.java | 69 ++++++++++++++++++ .../paper/registry/holder/RegistryHolder.java | 30 +++++++- .../paper/registry/set/RegistryHolderSet.java | 28 ++++++++ .../set/RegistryHolderSetBuilder.java | 49 +++++++++++++ .../paper/registry/set/RegistrySet.java | 31 ++++++-- .../registry/set/RegistrySetProvider.java | 26 +++++++ .../paper/registry/set/RegistryValueSet.java | 2 + .../registry/set/RegistryValueSetBuilder.java | 2 + paper-api/src/main/java/org/bukkit/Art.java | 4 +- .../src/main/java/org/bukkit/GameEvent.java | 4 +- .../src/main/java/org/bukkit/JukeboxSong.java | 4 +- .../main/java/org/bukkit/MusicInstrument.java | 5 +- paper-api/src/main/java/org/bukkit/Sound.java | 4 +- .../org/bukkit/block/banner/PatternType.java | 4 +- .../java/org/bukkit/damage/DamageType.java | 4 +- .../org/bukkit/enchantments/Enchantment.java | 4 +- .../src/main/java/org/bukkit/entity/Cat.java | 4 +- .../main/java/org/bukkit/entity/Chicken.java | 4 +- .../src/main/java/org/bukkit/entity/Cow.java | 4 +- .../src/main/java/org/bukkit/entity/Frog.java | 4 +- .../src/main/java/org/bukkit/entity/Pig.java | 4 +- .../java/org/bukkit/entity/SulfurCube.java | 4 +- .../src/main/java/org/bukkit/entity/Wolf.java | 4 +- .../org/bukkit/entity/ZombieNautilus.java | 4 +- .../inventory/meta/trim/TrimMaterial.java | 5 +- .../inventory/meta/trim/TrimPattern.java | 5 +- .../registry/PaperRegistriesRewriter.java | 7 +- .../paper/registry/PaperRegistries.java | 44 ++++++------ .../PaperRegistryListenerManager.java | 8 +-- .../paper/registry/WritableCraftRegistry.java | 4 +- .../InlinedRegistryBuilderProviderImpl.java | 30 +++----- .../data/PaperInstrumentRegistryEntry.java | 4 +- .../data/PaperJukeboxSongRegistryEntry.java | 4 +- .../registry/data/dialog/PaperDialogs.java | 2 +- .../paper/registry/data/util/Conversions.java | 64 ++++++++++++++--- .../paper/registry/entry/EntryFactory.java | 16 +++++ .../registry/entry/RegistryEntryBuilder.java | 16 ++--- .../registry/entry/RegistryEntryMeta.java | 3 +- .../event/RegistryComposeEventImpl.java | 11 +-- .../event/RegistryEntryAddEventImpl.java | 6 +- .../holder/InlinedRegistryHolderImpl.java | 13 +++- .../registry/holder/PaperRegistryHolders.java | 27 +++++-- .../holder/ReferenceRegistryHolderImpl.java | 32 ++++++++- .../paper/registry/holder/package-info.java | 4 ++ .../registry/set/NamedRegistryKeySetImpl.java | 1 - .../paper/registry/set/PaperRegistrySets.java | 37 ++++------ .../set/RegistryHolderSetBuilderImpl.java | 50 +++++++++++++ .../registry/set/RegistryHolderSetImpl.java | 70 +++++++++++++++++++ .../registry/set/RegistrySetProviderImpl.java | 15 ++++ .../set/RegistryValueSetBuilderImpl.java | 1 + .../org/bukkit/craftbukkit/CraftRegistry.java | 4 ++ ...rmc.paper.registry.set.RegistrySetProvider | 1 + .../paper/registry/RegistryBuilderTest.java | 2 +- 59 files changed, 696 insertions(+), 163 deletions(-) create mode 100644 paper-api/src/main/java/io/papermc/paper/registry/Registered.java create mode 100644 paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java create mode 100644 paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSet.java create mode 100644 paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilder.java create mode 100644 paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySetProvider.java create mode 100644 paper-server/src/main/java/io/papermc/paper/registry/entry/EntryFactory.java create mode 100644 paper-server/src/main/java/io/papermc/paper/registry/holder/package-info.java create mode 100644 paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilderImpl.java create mode 100644 paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java create mode 100644 paper-server/src/main/java/io/papermc/paper/registry/set/RegistrySetProviderImpl.java create mode 100644 paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.set.RegistrySetProvider diff --git a/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java b/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java index ced8877aa387..ef6f99e40bac 100644 --- a/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java +++ b/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java @@ -1,5 +1,6 @@ package io.papermc.paper.dialog; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryKey; @@ -19,7 +20,7 @@ * Can also be created during bootstrap via {@link io.papermc.paper.registry.event.RegistryEvents#DIALOG}. */ @ApiStatus.NonExtendable -public interface Dialog extends Keyed, DialogLike { +public interface Dialog extends Keyed, DialogLike, Registered.Inlineable { /** * Creates a new dialog using the provided builder. @@ -28,7 +29,7 @@ public interface Dialog extends Keyed, DialogLike { * @return a new dialog instance */ static Dialog create(final Consumer> value) { - return InlinedRegistryBuilderProvider.instance().createDialog(value); + return InlinedRegistryBuilderProvider.instance().create(RegistryKey.DIALOG, value); } // Start generate - Dialog diff --git a/paper-api/src/main/java/io/papermc/paper/registry/Registered.java b/paper-api/src/main/java/io/papermc/paper/registry/Registered.java new file mode 100644 index 000000000000..43a1b559086e --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/registry/Registered.java @@ -0,0 +1,33 @@ +package io.papermc.paper.registry; + +import org.jetbrains.annotations.ApiStatus; + +/** + * Marker interface for API types that are, or relate to, values in a registry. + */ +@ApiStatus.Experimental +public interface Registered { + + /** + * Marker interface for registered types that link an API type to its + * registry entry and builder types. + * + * @param the API type + * @param the registry entry type + * @param the builder type + */ + @ApiStatus.Experimental + interface Buildable> extends Registered { + } + + /** + * Marker interface for registered types that are valid to be constructed inline. + * + * @param the API type + * @param the registry entry type + * @param the builder type + */ + @ApiStatus.Experimental + interface Inlineable> extends Registered.Buildable { + } +} diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java b/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java index 561e61fe1b7d..e653327251f6 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java @@ -1,14 +1,13 @@ package io.papermc.paper.registry.data; -import io.papermc.paper.dialog.Dialog; +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.RegistryBuilderFactory; -import io.papermc.paper.registry.data.dialog.DialogRegistryEntry; +import io.papermc.paper.registry.RegistryKey; import java.util.Optional; import java.util.ServiceLoader; import java.util.function.Consumer; -import org.bukkit.MusicInstrument; -import org.bukkit.inventory.meta.trim.TrimMaterial; -import org.bukkit.inventory.meta.trim.TrimPattern; +import org.bukkit.Keyed; import org.jetbrains.annotations.ApiStatus; /** @@ -25,11 +24,5 @@ final class Holder { return Holder.INSTANCE.orElseThrow(); } - MusicInstrument createInstrument(Consumer> value); - - Dialog createDialog(Consumer> value); - - TrimMaterial createTrimMaterial(Consumer> value); - - TrimPattern createTrimPattern(Consumer> value); + & Keyed, B extends RegistryBuilder> T create(final RegistryKey key, final Consumer> value); } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/DialogRegistryEntry.java b/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/DialogRegistryEntry.java index d27a09bb7f4d..ba76b452fc3e 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/DialogRegistryEntry.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/DialogRegistryEntry.java @@ -48,8 +48,10 @@ interface Builder extends DialogRegistryEntry, RegistryBuilder { *

Not a part of the registry entry.

* * @return a new registry value set builder + * @deprecated use {@link io.papermc.paper.registry.event.RegistryFactory} on the registry event and {@link io.papermc.paper.registry.set.RegistryHolderSetBuilder} */ @Contract(value = "-> new", pure = true) + @Deprecated(since = "26.3", forRemoval = true) RegistryValueSetBuilder registryValueSet(); /** 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 index 346cca9055c4..bf21a856d20a 100644 --- 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 @@ -34,4 +34,11 @@ public interface RegistryComposeEvent> extends R * @param the tag value type */ Tag getOrCreateTag(TagKey tagKey); // TODO remove Keyed + + /** + * Gets the factory for creating tags, holders, and holder sets. + * + * @return the registry factory + */ + RegistryFactory factory(); } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEvent.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEvent.java index dd9af4661851..549e7fe8981c 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEvent.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEvent.java @@ -42,4 +42,11 @@ public interface RegistryEntryAddEvent> extends * @param the tag value type */ Tag getOrCreateTag(TagKey tagKey); + + /** + * Gets the factory for creating tags, holders, and holder sets. + * + * @return the registry factory + */ + RegistryFactory factory(); } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java new file mode 100644 index 000000000000..77a2326788bd --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java @@ -0,0 +1,69 @@ +package io.papermc.paper.registry.event; + +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.holder.RegistryHolder; +import io.papermc.paper.registry.set.RegistryHolderSetBuilder; +import io.papermc.paper.registry.tag.Tag; +import io.papermc.paper.registry.tag.TagKey; +import java.util.function.Consumer; +import org.bukkit.Keyed; +import org.jetbrains.annotations.ApiStatus; + +/** + * A factory for creating tags, holders, and holder sets while + * reacting to registry events. + */ +@ApiStatus.Experimental +public interface RegistryFactory { + + /** + * 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); // TODO remove Keyed + + /** + * Gets or creates a reference holder for the given key. The referenced + * value does not need to be present in the registry yet. + * + * @param key the key of the referenced value + * @return the reference holder + * @param the API type + * @param the registry entry type + * @param the builder type + */ + , E, B extends RegistryBuilder> RegistryHolder.Reference getOrCreateReferenceHolder(TypedKey key); // TODO remove Keyed + + /** + * Creates an inlined holder wrapping an anonymous value built from the + * given builder consumer. + * + * @param registryKey the registry key for the value's type + * @param value a consumer configuring the inlined value's builder + * @return the inlined holder + * @param the API type + * @param the registry entry type + * @param the builder type + */ + , E, B extends RegistryBuilder> RegistryHolder.Inlined getOrCreateInlinedHolder(RegistryKey registryKey, final Consumer> value); // TODO remove Keyed + + /** + * Creates a new builder for a {@link RegistryHolderSetBuilder holder set} of the given registry. + * + * @param registryKey the registry key for the value's type + * @return a new holder set builder + * @param the API type + * @param the registry entry type + * @param the builder type + */ + , E, B extends RegistryBuilder> RegistryHolderSetBuilder createSetBuilder(RegistryKey registryKey);// TODO remove Keyed +} diff --git a/paper-api/src/main/java/io/papermc/paper/registry/holder/RegistryHolder.java b/paper-api/src/main/java/io/papermc/paper/registry/holder/RegistryHolder.java index 10e031d33852..798e1d1f7a8b 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/holder/RegistryHolder.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/holder/RegistryHolder.java @@ -1,5 +1,7 @@ package io.papermc.paper.registry.holder; +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; import org.jetbrains.annotations.ApiStatus; @@ -12,7 +14,28 @@ * @param the type of the registry entry (for inlined values) */ @ApiStatus.Experimental -public sealed interface RegistryHolder permits RegistryHolder.Reference, RegistryHolder.Inlined { +public sealed interface RegistryHolder, ENTRY> permits RegistryHolder.Reference, RegistryHolder.Inlined { + + /** + * Gets the registry key of the registry this holder's value belongs to. + * + * @return the registry key + */ + RegistryKey registryKey(); + + /** + * Gets the value held by this holder. + * + * @return the value + */ + API value(); + + /** + * Gets the registry entry held by this holder. + * + * @return the entry + */ + ENTRY entry(); /** * A holder that references a registry value by key, but does not have the entry itself. @@ -22,7 +45,7 @@ public sealed interface RegistryHolder permits RegistryHolder.Refere * @param the type of the registry entry */ @ApiStatus.NonExtendable - non-sealed interface Reference extends RegistryHolder { + non-sealed interface Reference, ENTRY> extends RegistryHolder { /** * The key of the referenced value. @@ -39,13 +62,14 @@ non-sealed interface Reference extends RegistryHolder { * @param the type of the registry entry */ @ApiStatus.NonExtendable - non-sealed interface Inlined extends RegistryHolder { + non-sealed interface Inlined, ENTRY> extends RegistryHolder { /** * The inlined entry. * * @return the inlined entry */ + @Override ENTRY entry(); } } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSet.java b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSet.java new file mode 100644 index 000000000000..09a4a2637b89 --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSet.java @@ -0,0 +1,28 @@ +package io.papermc.paper.registry.set; + +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.holder.RegistryHolder; +import java.util.Collection; +import org.jetbrains.annotations.Unmodifiable; + +/** + * A {@link RegistrySet} backed by {@link RegistryHolder holders}, each of which is + * either a reference to a registry value or an inlined, anonymous value. + *

+ * Create with {@link RegistrySet#holderSetBuilder(RegistryKey)}, or if in a registry event context, + * {@link io.papermc.paper.registry.event.RegistryFactory#createSetBuilder(RegistryKey)}. + *

+ * + * @param the API type + * @param the registry entry type + */ +public non-sealed interface RegistryHolderSet, E> extends RegistrySet { + + /** + * Gets the holders in this set. + * + * @return an unmodifiable collection of holders + */ + @Unmodifiable Collection> holders(); +} diff --git a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilder.java b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilder.java new file mode 100644 index 000000000000..a32a8376a23e --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilder.java @@ -0,0 +1,49 @@ +package io.papermc.paper.registry.set; + +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.TypedKey; +import java.util.function.Consumer; + +/** + * A builder for a {@link RegistryHolderSet}. + * + * @param the API type + * @param the registry entry type + * @param the builder type + */ +public interface RegistryHolderSetBuilder, E, B extends RegistryBuilder> { + + /** + * Adds a value to the set. + * + * @param value the value to add + * @return this builder + */ + RegistryHolderSetBuilder add(T value); + + /** + * Adds a value by its key to the set. The referenced value does not need + * to be present in the registry yet. + * + * @param key the key of the value to add + * @return this builder + */ + RegistryHolderSetBuilder add(TypedKey key); + + /** + * Adds an inlined, anonymous value built from the given builder consumer to the set. + * + * @param value a consumer configuring the inlined value's builder + * @return this builder + */ + RegistryHolderSetBuilder add(Consumer> value); + + /** + * Builds the holder set. + * + * @return a new holder set + */ + RegistryHolderSet build(); +} diff --git a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySet.java b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySet.java index b1ad0aefa023..61c1c5a2afca 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySet.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySet.java @@ -1,6 +1,8 @@ package io.papermc.paper.registry.set; import com.google.common.collect.Lists; +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; import io.papermc.paper.registry.tag.Tag; @@ -16,13 +18,30 @@ * These are obtained via {@link org.bukkit.Registry#getTag(io.papermc.paper.registry.tag.TagKey)}. *
  • {@link RegistryKeySet} which is a set of keys linked to values that are present in the registry. These are * created via {@link #keySet(RegistryKey, Iterable)} or {@link #keySetFromValues(RegistryKey, Iterable)}.
  • - *
  • {@link RegistryValueSet} which is a set of values which are anonymous (don't have keys in the registry). These are - * created via {@link #valueSet(RegistryKey, Iterable)}.
  • + *
  • {@link RegistryHolderSet} which is a mixed set of values, some of which are anonymous (don't have keys in the registry). These are + * created via {@link #holderSetBuilder(RegistryKey)}.
  • * * * @param registry value type */ -public sealed interface RegistrySet permits RegistryKeySet, RegistryValueSet { +public sealed interface RegistrySet permits RegistryHolderSet, RegistryKeySet, RegistryValueSet { + + /** + * Creates a new builder for a {@link RegistryHolderSet}, a mixed set of registry-backed + * references and inlined, anonymous values. + *

    + * In a registry event context, use {@link io.papermc.paper.registry.event.RegistryFactory#createSetBuilder(RegistryKey)} instead. + * + * @param registryKey the registry key for the type of these values + * @return a new holder set builder + * @param the API type + * @param the registry entry type + * @param the builder type + */ + @Contract(value = "_ -> new", pure = true) + static , E, B extends RegistryBuilder> RegistryHolderSetBuilder holderSetBuilder(final RegistryKey registryKey) { // TODO remove Keyed + return RegistrySetProvider.instance().registryHolderSetBuilder(registryKey); + } /** * Creates a {@link RegistryValueSet} from anonymous values. @@ -32,8 +51,10 @@ public sealed interface RegistrySet permits RegistryKeySet, RegistryValueSet * @param values the values * @return a new registry set * @param the type of the values + * @deprecated Use {@link #holderSetBuilder(RegistryKey)} */ @Contract(value = "_, _ -> new", pure = true) + @Deprecated(since = "26.3", forRemoval = true) static RegistryValueSet valueSet(final RegistryKey registryKey, final Iterable values) { return RegistryValueSetImpl.create(registryKey, values); } @@ -57,7 +78,7 @@ static RegistryKeySet keySetFromValues(final RegistryKey } /** - * Creates a direct {@link RegistrySet} from {@link TypedKey TypedKeys}. + * Creates a direct {@code RegistrySet} from {@link TypedKey TypedKeys}. * * @param registryKey the registry key for the owner of these keys * @param keys the keys for the values @@ -70,7 +91,7 @@ static RegistryKeySet keySet(final RegistryKey registryK } /** - * Creates a direct {@link RegistrySet} from {@link TypedKey TypedKeys}. + * Creates a direct {@code RegistrySet} from {@link TypedKey TypedKeys}. * * @param registryKey the registry key for the owner of these keys * @param keys the keys for the values diff --git a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySetProvider.java b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySetProvider.java new file mode 100644 index 000000000000..d576dec228b6 --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySetProvider.java @@ -0,0 +1,26 @@ +package io.papermc.paper.registry.set; + +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryKey; +import java.util.Optional; +import java.util.ServiceLoader; +import org.bukkit.Keyed; +import org.jetbrains.annotations.ApiStatus; + +/** + * @hidden + */ +@ApiStatus.Internal +@ApiStatus.NonExtendable +public interface RegistrySetProvider { + + static RegistrySetProvider instance() { + final class Holder { + static final Optional INSTANCE = ServiceLoader.load(RegistrySetProvider.class, RegistrySetProvider.class.getClassLoader()).findFirst(); + } + return Holder.INSTANCE.orElseThrow(); + } + + , E, B extends RegistryBuilder> RegistryHolderSetBuilder registryHolderSetBuilder(RegistryKey registryKey); // TODO remove Keyed +} diff --git a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryValueSet.java b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryValueSet.java index 74ae9cba4f28..52811dba4541 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryValueSet.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryValueSet.java @@ -12,7 +12,9 @@ * in the context of a {@link io.papermc.paper.registry.RegistryBuilder}, * there are methods to create them like {@link DialogRegistryEntry.Builder#registryValueSet()}. * @param registry value type + * @deprecated use {@link RegistryHolderSet} and {@link RegistryHolderSetBuilder} */ +@Deprecated(since = "26.3", forRemoval = true) public sealed interface RegistryValueSet extends Iterable, RegistrySet permits RegistryValueSetImpl { @Override diff --git a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryValueSetBuilder.java b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryValueSetBuilder.java index 974d2c3b47a1..7cae7737cb04 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryValueSetBuilder.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryValueSetBuilder.java @@ -10,8 +10,10 @@ * * @param the API type * @param the type of the entry builder, + * @deprecated use {@link RegistryHolderSetBuilder} */ @ApiStatus.NonExtendable +@Deprecated(since = "26.3", forRemoval = true) public interface RegistryValueSetBuilder> { /** diff --git a/paper-api/src/main/java/org/bukkit/Art.java b/paper-api/src/main/java/org/bukkit/Art.java index c8c100ee4fd5..6d25ec08af18 100644 --- a/paper-api/src/main/java/org/bukkit/Art.java +++ b/paper-api/src/main/java/org/bukkit/Art.java @@ -1,8 +1,10 @@ package org.bukkit; import com.google.common.base.Preconditions; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.PaintingVariantRegistryEntry; import java.util.Locale; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; @@ -18,7 +20,7 @@ * There may be additional arts present in the server, for example from a {@link io.papermc.paper.datapack.Datapack} * which can be accessed via {@link RegistryAccess#registryAccess()} and {@link RegistryKey#PAINTING_VARIANT}. */ -public interface Art extends OldEnum, Keyed { +public interface Art extends OldEnum, Keyed, Registered.Buildable { // Start generate - Art Art ALBAN = getArt("alban"); diff --git a/paper-api/src/main/java/org/bukkit/GameEvent.java b/paper-api/src/main/java/org/bukkit/GameEvent.java index 5ec417a75e3d..47be8f3717ab 100644 --- a/paper-api/src/main/java/org/bukkit/GameEvent.java +++ b/paper-api/src/main/java/org/bukkit/GameEvent.java @@ -1,5 +1,7 @@ package org.bukkit; +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.data.GameEventRegistryEntry; import java.util.Collection; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; @@ -9,7 +11,7 @@ /** * Represents a generic Mojang game event. */ -public abstract class GameEvent implements Keyed { +public abstract class GameEvent implements Keyed, Registered.Buildable { // Start generate - GameEvent public static final GameEvent BLOCK_ACTIVATE = getEvent("block_activate"); diff --git a/paper-api/src/main/java/org/bukkit/JukeboxSong.java b/paper-api/src/main/java/org/bukkit/JukeboxSong.java index 67bf2ae75e42..bb1d3c381a34 100644 --- a/paper-api/src/main/java/org/bukkit/JukeboxSong.java +++ b/paper-api/src/main/java/org/bukkit/JukeboxSong.java @@ -1,7 +1,9 @@ package org.bukkit; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.JukeboxSongRegistryEntry; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import net.kyori.adventure.text.Component; @@ -11,7 +13,7 @@ * Represents a song which may play in a Jukebox. */ @NullMarked -public interface JukeboxSong extends Keyed, Translatable { +public interface JukeboxSong extends Keyed, Translatable, Registered.Buildable { // Start generate - JukeboxSong JukeboxSong ELEVEN = get("11"); diff --git a/paper-api/src/main/java/org/bukkit/MusicInstrument.java b/paper-api/src/main/java/org/bukkit/MusicInstrument.java index 33a43194d687..15bcac421f6e 100644 --- a/paper-api/src/main/java/org/bukkit/MusicInstrument.java +++ b/paper-api/src/main/java/org/bukkit/MusicInstrument.java @@ -1,5 +1,6 @@ package org.bukkit; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryKey; @@ -14,7 +15,7 @@ import org.jspecify.annotations.Nullable; @NullMarked -public abstract class MusicInstrument implements Keyed, net.kyori.adventure.translation.Translatable { +public abstract class MusicInstrument implements Keyed, net.kyori.adventure.translation.Translatable, Registered.Inlineable { /** * Creates an inlined music instrument. @@ -23,7 +24,7 @@ public abstract class MusicInstrument implements Keyed, net.kyori.adventure.tran * @return the created music instrument */ public static MusicInstrument create(final Consumer> value) { - return InlinedRegistryBuilderProvider.instance().createInstrument(value); + return InlinedRegistryBuilderProvider.instance().create(RegistryKey.INSTRUMENT, value); } // Start generate - MusicInstrument diff --git a/paper-api/src/main/java/org/bukkit/Sound.java b/paper-api/src/main/java/org/bukkit/Sound.java index d49582493850..ff67b5867f39 100644 --- a/paper-api/src/main/java/org/bukkit/Sound.java +++ b/paper-api/src/main/java/org/bukkit/Sound.java @@ -1,7 +1,9 @@ package org.bukkit; import com.google.common.base.Preconditions; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.SoundEventRegistryEntry; import java.util.Locale; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; @@ -21,7 +23,7 @@ * guarantee values will not be removed from this interface. As such, you should not * depend on the ordinal values of this class. */ -public interface Sound extends OldEnum, Keyed, net.kyori.adventure.sound.Sound.Type { // Paper - implement Sound.Type +public interface Sound extends OldEnum, Keyed, net.kyori.adventure.sound.Sound.Type, Registered.Buildable { // Paper - implement Sound.Type // Start generate - Sound Sound AMBIENT_BASALT_DELTAS_ADDITIONS = getSound("ambient.basalt_deltas.additions"); diff --git a/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java b/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java index 2fc0d61abe2f..a5e51176d702 100644 --- a/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java +++ b/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java @@ -1,8 +1,10 @@ package org.bukkit.block.banner; import com.google.common.base.Preconditions; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.BannerPatternRegistryEntry; import java.util.Locale; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; @@ -14,7 +16,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public interface PatternType extends OldEnum, Keyed { +public interface PatternType extends OldEnum, Keyed, Registered.Buildable { // Start generate - PatternType PatternType BASE = getType("base"); diff --git a/paper-api/src/main/java/org/bukkit/damage/DamageType.java b/paper-api/src/main/java/org/bukkit/damage/DamageType.java index 64b65a88ee0b..ed9fee94189f 100644 --- a/paper-api/src/main/java/org/bukkit/damage/DamageType.java +++ b/paper-api/src/main/java/org/bukkit/damage/DamageType.java @@ -1,7 +1,9 @@ package org.bukkit.damage; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.DamageTypeRegistryEntry; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import org.bukkit.Keyed; @@ -17,7 +19,7 @@ * * @see Minecraft Wiki */ -public interface DamageType extends Keyed, Translatable { +public interface DamageType extends Keyed, Translatable, Registered.Buildable { // Start generate - DamageType DamageType ARROW = getDamageType("arrow"); diff --git a/paper-api/src/main/java/org/bukkit/enchantments/Enchantment.java b/paper-api/src/main/java/org/bukkit/enchantments/Enchantment.java index eb2e88bffe89..75df3a8cd3d2 100644 --- a/paper-api/src/main/java/org/bukkit/enchantments/Enchantment.java +++ b/paper-api/src/main/java/org/bukkit/enchantments/Enchantment.java @@ -1,7 +1,9 @@ package org.bukkit.enchantments; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.EnchantmentRegistryEntry; import java.util.Locale; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; @@ -18,7 +20,7 @@ /** * The various type of enchantments that may be added to armour or weapons */ -public abstract class Enchantment implements Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations +public abstract class Enchantment implements Keyed, Translatable, net.kyori.adventure.translation.Translatable, Registered.Buildable { // Paper - Adventure translations /** * Provides protection against environmental damage */ diff --git a/paper-api/src/main/java/org/bukkit/entity/Cat.java b/paper-api/src/main/java/org/bukkit/entity/Cat.java index 72cdef500c8e..b1cea3dff2fe 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Cat.java +++ b/paper-api/src/main/java/org/bukkit/entity/Cat.java @@ -1,8 +1,10 @@ package org.bukkit.entity; import com.google.common.base.Preconditions; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.CatTypeRegistryEntry; import java.util.Locale; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; @@ -68,7 +70,7 @@ public interface Cat extends Tameable, Sittable, io.papermc.paper.entity.CollarC /** * Represents the various different cat types there are. */ - interface Type extends OldEnum, Keyed { + interface Type extends OldEnum, Keyed, Registered.Buildable { // Start generate - CatType Type ALL_BLACK = getType("all_black"); diff --git a/paper-api/src/main/java/org/bukkit/entity/Chicken.java b/paper-api/src/main/java/org/bukkit/entity/Chicken.java index 29511b7600be..7799e0870643 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Chicken.java +++ b/paper-api/src/main/java/org/bukkit/entity/Chicken.java @@ -1,7 +1,9 @@ package org.bukkit.entity; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.ChickenVariantRegistryEntry; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import org.bukkit.Keyed; @@ -72,7 +74,7 @@ public interface Chicken extends Animals { /** * Represents the variant of a chicken. */ - interface Variant extends Keyed { + interface Variant extends Keyed, Registered.Buildable { // Start generate - ChickenVariant Variant COLD = getVariant("cold"); diff --git a/paper-api/src/main/java/org/bukkit/entity/Cow.java b/paper-api/src/main/java/org/bukkit/entity/Cow.java index e257860c4e99..f3708900cdf8 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Cow.java +++ b/paper-api/src/main/java/org/bukkit/entity/Cow.java @@ -1,7 +1,9 @@ package org.bukkit.entity; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.CowVariantRegistryEntry; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import org.bukkit.Keyed; @@ -44,7 +46,7 @@ public interface Cow extends AbstractCow { /** * Represents the variant of a cow. */ - interface Variant extends Keyed { + interface Variant extends Keyed, Registered.Buildable { // Start generate - CowVariant Variant COLD = getVariant("cold"); diff --git a/paper-api/src/main/java/org/bukkit/entity/Frog.java b/paper-api/src/main/java/org/bukkit/entity/Frog.java index c6988c85ba4a..02214f604847 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Frog.java +++ b/paper-api/src/main/java/org/bukkit/entity/Frog.java @@ -1,8 +1,10 @@ package org.bukkit.entity; import com.google.common.base.Preconditions; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.FrogVariantRegistryEntry; import java.util.Locale; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; @@ -51,7 +53,7 @@ public interface Frog extends Animals { /** * Represents the variant of a frog - ie its color. */ - interface Variant extends OldEnum, Keyed { + interface Variant extends OldEnum, Keyed, Registered.Buildable { // Start generate - FrogVariant Variant COLD = getVariant("cold"); diff --git a/paper-api/src/main/java/org/bukkit/entity/Pig.java b/paper-api/src/main/java/org/bukkit/entity/Pig.java index 83a5432e1f92..4b961fd0ec18 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Pig.java +++ b/paper-api/src/main/java/org/bukkit/entity/Pig.java @@ -1,7 +1,9 @@ package org.bukkit.entity; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.PigVariantRegistryEntry; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import org.bukkit.Keyed; @@ -44,7 +46,7 @@ public interface Pig extends Steerable, Vehicle { /** * Represents the variant of a pig. */ - interface Variant extends Keyed { + interface Variant extends Keyed, Registered.Buildable { // Start generate - PigVariant Variant COLD = getVariant("cold"); diff --git a/paper-api/src/main/java/org/bukkit/entity/SulfurCube.java b/paper-api/src/main/java/org/bukkit/entity/SulfurCube.java index cc7cbf395665..5b0be6dc3c87 100644 --- a/paper-api/src/main/java/org/bukkit/entity/SulfurCube.java +++ b/paper-api/src/main/java/org/bukkit/entity/SulfurCube.java @@ -2,8 +2,10 @@ import io.papermc.paper.entity.Bucketable; import io.papermc.paper.entity.Shearable; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.SulfurCubeArchetypeRegistryEntry; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import org.bukkit.Keyed; @@ -78,7 +80,7 @@ default boolean ignite() { * which define a lot of possible behavior and interaction * throughout its lifetime. */ - interface Archetype extends Keyed { + interface Archetype extends Keyed, Registered.Buildable { // Start generate - SulfurCubeArchetype Archetype BOUNCY = getArchetype("bouncy"); diff --git a/paper-api/src/main/java/org/bukkit/entity/Wolf.java b/paper-api/src/main/java/org/bukkit/entity/Wolf.java index 95ee6d2be7eb..6853d5a7d9db 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Wolf.java +++ b/paper-api/src/main/java/org/bukkit/entity/Wolf.java @@ -1,7 +1,9 @@ package org.bukkit.entity; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.WolfVariantRegistryEntry; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import org.bukkit.DyeColor; @@ -108,7 +110,7 @@ public interface Wolf extends Tameable, Sittable, io.papermc.paper.entity.Collar /** * Represents the variant of a wolf. */ - interface Variant extends Keyed { + interface Variant extends Keyed, Registered.Buildable { // Start generate - WolfVariant // @GeneratedFrom 1.21.5 diff --git a/paper-api/src/main/java/org/bukkit/entity/ZombieNautilus.java b/paper-api/src/main/java/org/bukkit/entity/ZombieNautilus.java index 411790d700e8..37ef2c016c8e 100644 --- a/paper-api/src/main/java/org/bukkit/entity/ZombieNautilus.java +++ b/paper-api/src/main/java/org/bukkit/entity/ZombieNautilus.java @@ -1,7 +1,9 @@ package org.bukkit.entity; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.ZombieNautilusVariantRegistryEntry; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import org.bukkit.Keyed; @@ -27,7 +29,7 @@ public interface ZombieNautilus extends AbstractNautilus { /** * Represents the variant of a Zombie Nautilus. */ - interface Variant extends Keyed { + interface Variant extends Keyed, Registered.Buildable { // Start generate - ZombieNautilusVariant Variant TEMPERATE = getVariant("temperate"); diff --git a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java index bf88a0083329..952e08fcc13f 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java +++ b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java @@ -1,5 +1,6 @@ package org.bukkit.inventory.meta.trim; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryKey; @@ -19,7 +20,7 @@ * Represents a material that may be used in an {@link ArmorTrim}. */ @NullMarked -public interface TrimMaterial extends Keyed, Translatable { +public interface TrimMaterial extends Keyed, Translatable, Registered.Inlineable { /** * Creates an inlined trim material. @@ -28,7 +29,7 @@ public interface TrimMaterial extends Keyed, Translatable { * @return the created trim material */ static TrimMaterial create(final Consumer> value) { - return InlinedRegistryBuilderProvider.instance().createTrimMaterial(value); + return InlinedRegistryBuilderProvider.instance().create(RegistryKey.TRIM_MATERIAL, value); } // Start generate - TrimMaterial diff --git a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java index 37816d2be998..892da7b262c4 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java +++ b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java @@ -1,5 +1,6 @@ package org.bukkit.inventory.meta.trim; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryKey; @@ -19,7 +20,7 @@ * Represents a pattern that may be used in an {@link ArmorTrim}. */ @NullMarked -public interface TrimPattern extends Keyed, Translatable { +public interface TrimPattern extends Keyed, Translatable, Registered.Inlineable { /** * Creates an inlined trim pattern. @@ -28,7 +29,7 @@ public interface TrimPattern extends Keyed, Translatable { * @return the created trim pattern */ static TrimPattern create(final Consumer> value) { - return InlinedRegistryBuilderProvider.instance().createTrimPattern(value); + return InlinedRegistryBuilderProvider.instance().create(RegistryKey.TRIM_PATTERN, value); } // Start generate - TrimPattern diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java index 0ebef90e86ef..6c2f61bdaf8f 100644 --- a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java +++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java @@ -60,7 +60,12 @@ private void appendEntry(String indent, StringBuilder builder, RegistryEntry case MODIFIABLE -> builder.append(".modifiable("); case NONE -> builder.append(".create("); } - builder.append(this.importCollector.getShortName(this.classNamedView.findFirst(entry.apiRegistryBuilderImpl()).resolve(this.classResolver))).append("::new"); + // the builder impl is always nested in the base entry class; reference the base entry constructor first, then the builder constructor + final String builderImpl = entry.apiRegistryBuilderImpl(); + final String entryImpl = builderImpl.substring(0, builderImpl.lastIndexOf('.')); + builder.append(this.importCollector.getShortName(this.classNamedView.findFirst(entryImpl).resolve(this.classResolver))).append("::new"); + builder.append(", "); + builder.append(this.importCollector.getShortName(this.classNamedView.findFirst(builderImpl).resolve(this.classResolver))).append("::new"); if (entry.modificationApiSupport() == RegistryEntry.RegistryModificationApiSupport.NONE) { builder.append(", "); builder.append(Types.REGISTRY_MODIFICATION_API_SUPPORT.dottedNestedName()).append(".NONE"); diff --git a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistries.java b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistries.java index 17cf4ecbd97b..0956d00a50cf 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistries.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistries.java @@ -114,7 +114,7 @@ public final class PaperRegistries { REGISTRY_ENTRIES = List.of( // Start generate - RegistryDefinitions // built-in - start(Registries.GAME_EVENT, RegistryKey.GAME_EVENT).craft(GameEvent.class, CraftGameEvent::new).writable(PaperGameEventRegistryEntry.PaperBuilder::new), + start(Registries.GAME_EVENT, RegistryKey.GAME_EVENT).craft(GameEvent.class, CraftGameEvent::new).writable(PaperGameEventRegistryEntry::new, PaperGameEventRegistryEntry.PaperBuilder::new), start(Registries.STRUCTURE_TYPE, RegistryKey.STRUCTURE_TYPE).craft(StructureType.class, CraftStructureType::new).build(), start(Registries.MOB_EFFECT, RegistryKey.MOB_EFFECT).craft(PotionEffectType.class, CraftPotionEffectType::new).build(), start(Registries.BLOCK, RegistryKey.BLOCK).craft(BlockType.class, CraftBlockType::new).build(), @@ -125,7 +125,7 @@ public final class PaperRegistries { start(Registries.MENU, RegistryKey.MENU).craft(MenuType.class, CraftMenuType::new).build(), start(Registries.ATTRIBUTE, RegistryKey.ATTRIBUTE).craft(Attribute.class, CraftAttribute::new).serializationUpdater(FieldRename.ATTRIBUTE_RENAME).build(), start(Registries.FLUID, RegistryKey.FLUID).craft(Fluid.class, CraftFluid::new).build(), - start(Registries.SOUND_EVENT, RegistryKey.SOUND_EVENT).craft(Sound.class, CraftSound::new, true).create(PaperSoundEventRegistryEntry.PaperBuilder::new, RegistryEntryMeta.RegistryModificationApiSupport.NONE), + start(Registries.SOUND_EVENT, RegistryKey.SOUND_EVENT).craft(Sound.class, CraftSound::new, true).create(PaperSoundEventRegistryEntry::new, PaperSoundEventRegistryEntry.PaperBuilder::new, RegistryEntryMeta.RegistryModificationApiSupport.NONE), start(Registries.DATA_COMPONENT_TYPE, RegistryKey.DATA_COMPONENT_TYPE).craft(DataComponentTypes.class, PaperDataComponentType::of).build(), start(Registries.GAME_RULE, RegistryKey.GAME_RULE).craft(GameRule.class, CraftGameRule::new).build(), start(Registries.POINT_OF_INTEREST_TYPE, RegistryKey.POINT_OF_INTEREST_TYPE).craft(PoiTypes.class, PaperPoiType::new).build(), @@ -133,28 +133,28 @@ public final class PaperRegistries { // data-driven start(Registries.BIOME, RegistryKey.BIOME).craft(Biome.class, CraftBiome::new).build().delayed(), start(Registries.STRUCTURE, RegistryKey.STRUCTURE).craft(Structure.class, CraftStructure::new).build().delayed(), - start(Registries.TRIM_MATERIAL, RegistryKey.TRIM_MATERIAL).craft(TrimMaterial.class, CraftTrimMaterial::new, true).writable(PaperTrimMaterialRegistryEntry.PaperBuilder::new).delayed(), - start(Registries.TRIM_PATTERN, RegistryKey.TRIM_PATTERN).craft(TrimPattern.class, CraftTrimPattern::new, true).writable(PaperTrimPatternRegistryEntry.PaperBuilder::new).delayed(), - start(Registries.DAMAGE_TYPE, RegistryKey.DAMAGE_TYPE).craft(DamageType.class, CraftDamageType::new).writable(PaperDamageTypeRegistryEntry.PaperBuilder::new).delayed(), - start(Registries.WOLF_VARIANT, RegistryKey.WOLF_VARIANT).craft(Wolf.Variant.class, CraftWolf.CraftVariant::new).writable(PaperWolfVariantRegistryEntry.PaperBuilder::new).delayed(), + start(Registries.TRIM_MATERIAL, RegistryKey.TRIM_MATERIAL).craft(TrimMaterial.class, CraftTrimMaterial::new, true).writable(PaperTrimMaterialRegistryEntry::new, PaperTrimMaterialRegistryEntry.PaperBuilder::new).delayed(), + start(Registries.TRIM_PATTERN, RegistryKey.TRIM_PATTERN).craft(TrimPattern.class, CraftTrimPattern::new, true).writable(PaperTrimPatternRegistryEntry::new, PaperTrimPatternRegistryEntry.PaperBuilder::new).delayed(), + start(Registries.DAMAGE_TYPE, RegistryKey.DAMAGE_TYPE).craft(DamageType.class, CraftDamageType::new).writable(PaperDamageTypeRegistryEntry::new, PaperDamageTypeRegistryEntry.PaperBuilder::new).delayed(), + start(Registries.WOLF_VARIANT, RegistryKey.WOLF_VARIANT).craft(Wolf.Variant.class, CraftWolf.CraftVariant::new).writable(PaperWolfVariantRegistryEntry::new, PaperWolfVariantRegistryEntry.PaperBuilder::new).delayed(), start(Registries.WOLF_SOUND_VARIANT, RegistryKey.WOLF_SOUND_VARIANT).craft(Wolf.SoundVariant.class, CraftWolf.CraftSoundVariant::new).build(), - start(Registries.ENCHANTMENT, RegistryKey.ENCHANTMENT).craft(Enchantment.class, CraftEnchantment::new).serializationUpdater(FieldRename.ENCHANTMENT_RENAME).writable(PaperEnchantmentRegistryEntry.PaperBuilder::new).delayed(), - start(Registries.JUKEBOX_SONG, RegistryKey.JUKEBOX_SONG).craft(JukeboxSong.class, CraftJukeboxSong::new).writable(PaperJukeboxSongRegistryEntry.PaperBuilder::new).delayed(), - start(Registries.BANNER_PATTERN, RegistryKey.BANNER_PATTERN).craft(PatternType.class, CraftPatternType::new, true).writable(PaperBannerPatternRegistryEntry.PaperBuilder::new).delayed(), - start(Registries.PAINTING_VARIANT, RegistryKey.PAINTING_VARIANT).craft(Art.class, CraftArt::new).writable(PaperPaintingVariantRegistryEntry.PaperBuilder::new).delayed(), - start(Registries.INSTRUMENT, RegistryKey.INSTRUMENT).craft(MusicInstrument.class, CraftMusicInstrument::new, true).writable(PaperInstrumentRegistryEntry.PaperBuilder::new).delayed(), - start(Registries.CAT_VARIANT, RegistryKey.CAT_VARIANT).craft(Cat.Type.class, CraftCat.CraftType::new).writable(PaperCatTypeRegistryEntry.PaperBuilder::new).delayed(), + start(Registries.ENCHANTMENT, RegistryKey.ENCHANTMENT).craft(Enchantment.class, CraftEnchantment::new).serializationUpdater(FieldRename.ENCHANTMENT_RENAME).writable(PaperEnchantmentRegistryEntry::new, PaperEnchantmentRegistryEntry.PaperBuilder::new).delayed(), + start(Registries.JUKEBOX_SONG, RegistryKey.JUKEBOX_SONG).craft(JukeboxSong.class, CraftJukeboxSong::new).writable(PaperJukeboxSongRegistryEntry::new, PaperJukeboxSongRegistryEntry.PaperBuilder::new).delayed(), + start(Registries.BANNER_PATTERN, RegistryKey.BANNER_PATTERN).craft(PatternType.class, CraftPatternType::new, true).writable(PaperBannerPatternRegistryEntry::new, PaperBannerPatternRegistryEntry.PaperBuilder::new).delayed(), + start(Registries.PAINTING_VARIANT, RegistryKey.PAINTING_VARIANT).craft(Art.class, CraftArt::new).writable(PaperPaintingVariantRegistryEntry::new, PaperPaintingVariantRegistryEntry.PaperBuilder::new).delayed(), + start(Registries.INSTRUMENT, RegistryKey.INSTRUMENT).craft(MusicInstrument.class, CraftMusicInstrument::new, true).writable(PaperInstrumentRegistryEntry::new, PaperInstrumentRegistryEntry.PaperBuilder::new).delayed(), + start(Registries.CAT_VARIANT, RegistryKey.CAT_VARIANT).craft(Cat.Type.class, CraftCat.CraftType::new).writable(PaperCatTypeRegistryEntry::new, PaperCatTypeRegistryEntry.PaperBuilder::new).delayed(), start(Registries.CAT_SOUND_VARIANT, RegistryKey.CAT_SOUND_VARIANT).craft(Cat.SoundVariant.class, CraftCat.CraftSoundVariant::new).build(), - start(Registries.FROG_VARIANT, RegistryKey.FROG_VARIANT).craft(Frog.Variant.class, CraftFrog.CraftVariant::new).writable(PaperFrogVariantRegistryEntry.PaperBuilder::new).delayed(), - start(Registries.CHICKEN_VARIANT, RegistryKey.CHICKEN_VARIANT).craft(Chicken.Variant.class, CraftChicken.CraftVariant::new).writable(PaperChickenVariantRegistryEntry.PaperBuilder::new), + start(Registries.FROG_VARIANT, RegistryKey.FROG_VARIANT).craft(Frog.Variant.class, CraftFrog.CraftVariant::new).writable(PaperFrogVariantRegistryEntry::new, PaperFrogVariantRegistryEntry.PaperBuilder::new).delayed(), + start(Registries.CHICKEN_VARIANT, RegistryKey.CHICKEN_VARIANT).craft(Chicken.Variant.class, CraftChicken.CraftVariant::new).writable(PaperChickenVariantRegistryEntry::new, PaperChickenVariantRegistryEntry.PaperBuilder::new), start(Registries.CHICKEN_SOUND_VARIANT, RegistryKey.CHICKEN_SOUND_VARIANT).craft(Chicken.SoundVariant.class, CraftChicken.CraftSoundVariant::new).build(), - start(Registries.COW_VARIANT, RegistryKey.COW_VARIANT).craft(Cow.Variant.class, CraftCow.CraftVariant::new).writable(PaperCowVariantRegistryEntry.PaperBuilder::new), + start(Registries.COW_VARIANT, RegistryKey.COW_VARIANT).craft(Cow.Variant.class, CraftCow.CraftVariant::new).writable(PaperCowVariantRegistryEntry::new, PaperCowVariantRegistryEntry.PaperBuilder::new), start(Registries.COW_SOUND_VARIANT, RegistryKey.COW_SOUND_VARIANT).craft(Cow.SoundVariant.class, CraftCow.CraftSoundVariant::new).build(), - start(Registries.PIG_VARIANT, RegistryKey.PIG_VARIANT).craft(Pig.Variant.class, CraftPig.CraftVariant::new).writable(PaperPigVariantRegistryEntry.PaperBuilder::new), + start(Registries.PIG_VARIANT, RegistryKey.PIG_VARIANT).craft(Pig.Variant.class, CraftPig.CraftVariant::new).writable(PaperPigVariantRegistryEntry::new, PaperPigVariantRegistryEntry.PaperBuilder::new), start(Registries.PIG_SOUND_VARIANT, RegistryKey.PIG_SOUND_VARIANT).craft(Pig.SoundVariant.class, CraftPig.CraftSoundVariant::new).build(), - start(Registries.ZOMBIE_NAUTILUS_VARIANT, RegistryKey.ZOMBIE_NAUTILUS_VARIANT).craft(ZombieNautilus.Variant.class, CraftZombieNautilus.CraftVariant::new).writable(PaperZombieNautilusVariantRegistryEntry.PaperBuilder::new), - start(Registries.SULFUR_CUBE_ARCHETYPE, RegistryKey.SULFUR_CUBE_ARCHETYPE).craft(SulfurCube.Archetype.class, CraftSulfurCube.CraftArchetype::new).writable(PaperSulfurCubeArchetypeRegistryEntry.PaperBuilder::new), - start(Registries.DIALOG, RegistryKey.DIALOG).craft(Dialog.class, PaperDialog::new, true).writable(PaperDialogRegistryEntry.PaperBuilder::new), + start(Registries.ZOMBIE_NAUTILUS_VARIANT, RegistryKey.ZOMBIE_NAUTILUS_VARIANT).craft(ZombieNautilus.Variant.class, CraftZombieNautilus.CraftVariant::new).writable(PaperZombieNautilusVariantRegistryEntry::new, PaperZombieNautilusVariantRegistryEntry.PaperBuilder::new), + start(Registries.SULFUR_CUBE_ARCHETYPE, RegistryKey.SULFUR_CUBE_ARCHETYPE).craft(SulfurCube.Archetype.class, CraftSulfurCube.CraftArchetype::new).writable(PaperSulfurCubeArchetypeRegistryEntry::new, PaperSulfurCubeArchetypeRegistryEntry.PaperBuilder::new), + start(Registries.DIALOG, RegistryKey.DIALOG).craft(Dialog.class, PaperDialog::new, true).writable(PaperDialogRegistryEntry::new, PaperDialogRegistryEntry.PaperBuilder::new), // api-only start(Registries.ENTITY_TYPE, RegistryKey.ENTITY_TYPE).apiOnly(PaperSimpleRegistry::entityType), @@ -184,15 +184,15 @@ public final class PaperRegistries { } @SuppressWarnings("unchecked") - public static > RegistryEntryMeta.Buildable getBuildableMeta(final RegistryKey registryKey) { + public static > RegistryEntryMeta.Buildable getBuildableMeta(final RegistryKey registryKey) { final RegistryEntry entry = getEntry(registryKey); if (entry == null) { throw new IllegalArgumentException("No registry entry for " + registryKey); } - if (!(entry.meta() instanceof final RegistryEntryMeta.Buildable buildableMeta)) { + if (!(entry.meta() instanceof final RegistryEntryMeta.Buildable buildableMeta)) { throw new IllegalArgumentException("Registry entry for " + registryKey + " is not buildable"); } - return (RegistryEntryMeta.Buildable) buildableMeta; + return (RegistryEntryMeta.Buildable) buildableMeta; } @SuppressWarnings("unchecked") 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 24cd0d16ccc4..1bc643de7f71 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 @@ -101,14 +101,14 @@ public , R> R registerW if (entry == null || !entry.meta().modificationApiSupport().canModify() || !this.valueAddEventTypes.hasHandlers(entry.apiKey())) { return registerMethod.register((WritableRegistry) registry, key, nms, registrationInfo); } - final RegistryEntryMeta.Buildable modifiableEntry = (RegistryEntryMeta.Buildable) entry.meta(); + final RegistryEntryMeta.Buildable modifiableEntry = (RegistryEntryMeta.Buildable) entry.meta(); final B builder = modifiableEntry.builderFiller().fill(conversions, nms); return this.registerWithListeners(registry, modifiableEntry, key, nms, builder, registrationInfo, registerMethod, conversions); } > void registerWithListeners( // TODO remove Keyed final WritableRegistry registry, - final RegistryEntryMeta.Buildable entry, + final RegistryEntryMeta.Buildable entry, final ResourceKey key, final B builder, final RegistrationInfo registrationInfo, @@ -123,7 +123,7 @@ > void registerWithList public , R> R registerWithListeners( // TODO remove Keyed final Registry registry, - final RegistryEntryMeta.Buildable entry, + final RegistryEntryMeta.Buildable entry, final ResourceKey key, final @Nullable M oldNms, final B builder, @@ -161,7 +161,7 @@ public > void runFreeze if (entry == null || !entry.meta().modificationApiSupport().canAdd() || !this.composeEventType.hasHandlers(entry.apiKey())) { return; } - final RegistryEntryMeta.Buildable writableEntry = (RegistryEntryMeta.Buildable) entry.meta(); + final RegistryEntryMeta.Buildable writableEntry = (RegistryEntryMeta.Buildable) entry.meta(); final WritableCraftRegistry writableRegistry = PaperRegistryAccess.instance().getWritableRegistry(entry.apiKey()); final RegistryComposeEventImpl event = writableEntry.createPostLoadEvent(writableRegistry, conversions); LifecycleEventRunner.INSTANCE.callEvent(this.composeEventType.getEventType(entry.apiKey()), event); diff --git a/paper-server/src/main/java/io/papermc/paper/registry/WritableCraftRegistry.java b/paper-server/src/main/java/io/papermc/paper/registry/WritableCraftRegistry.java index 9e8672c705eb..3cbf0e908eea 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/WritableCraftRegistry.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/WritableCraftRegistry.java @@ -16,12 +16,12 @@ public class WritableCraftRegistry meta; + private final RegistryEntryMeta.Buildable meta; private final MappedRegistry registry; public WritableCraftRegistry( final MappedRegistry registry, - final RegistryEntryMeta.Buildable meta + final RegistryEntryMeta.Buildable meta ) { super(meta, registry); this.registry = registry; diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java index 417baceb961b..7fbda231a5ca 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java @@ -1,34 +1,20 @@ package io.papermc.paper.registry.data; -import io.papermc.paper.dialog.Dialog; +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryKey; -import io.papermc.paper.registry.data.dialog.DialogRegistryEntry; import io.papermc.paper.registry.data.util.Conversions; import java.util.function.Consumer; -import org.bukkit.MusicInstrument; -import org.bukkit.inventory.meta.trim.TrimMaterial; -import org.bukkit.inventory.meta.trim.TrimPattern; +import org.bukkit.Keyed; public final class InlinedRegistryBuilderProviderImpl implements InlinedRegistryBuilderProvider { @Override - public MusicInstrument createInstrument(final Consumer> value) { - return Conversions.global().createApiInstanceFromBuilder(RegistryKey.INSTRUMENT, value); - } - - @Override - public Dialog createDialog(final Consumer> value) { - return Conversions.global().createApiInstanceFromBuilder(RegistryKey.DIALOG, value); - } - - @Override - public TrimMaterial createTrimMaterial(final Consumer> value) { - return Conversions.global().createApiInstanceFromBuilder(RegistryKey.TRIM_MATERIAL, value); - } - - @Override - public TrimPattern createTrimPattern(final Consumer> value) { - return Conversions.global().createApiInstanceFromBuilder(RegistryKey.TRIM_PATTERN, value); + public & Keyed, B extends RegistryBuilder> T create( + final RegistryKey key, + final Consumer> value + ) { + return Conversions.global().createApiInstanceFromBuilder(key, value); } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/PaperInstrumentRegistryEntry.java b/paper-server/src/main/java/io/papermc/paper/registry/data/PaperInstrumentRegistryEntry.java index fc54264e0a52..42e2a4f778d9 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/PaperInstrumentRegistryEntry.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/PaperInstrumentRegistryEntry.java @@ -45,7 +45,7 @@ public PaperInstrumentRegistryEntry(final Conversions conversions, final @Nullab @Override public RegistryHolder soundEvent() { final Holder current = asConfigured(this.soundEvent, "soundEvent"); - return PaperRegistryHolders.create(current, e -> new PaperSoundEventRegistryEntry(this.conversions, e)); + return PaperRegistryHolders.create(RegistryKey.SOUND_EVENT, current, this.conversions); } @Override @@ -83,7 +83,7 @@ public Builder soundEvent(final Consumer soundEvent) { - this.soundEvent = PaperRegistryHolders.convert(soundEvent, this.conversions); + this.soundEvent = PaperRegistryHolders.convert(soundEvent); return this; } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/PaperJukeboxSongRegistryEntry.java b/paper-server/src/main/java/io/papermc/paper/registry/data/PaperJukeboxSongRegistryEntry.java index 3a508d41bfe2..abe5f3233df0 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/PaperJukeboxSongRegistryEntry.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/PaperJukeboxSongRegistryEntry.java @@ -48,7 +48,7 @@ public PaperJukeboxSongRegistryEntry(final Conversions conversions, final @Nulla @Override public RegistryHolder soundEvent() { final Holder current = asConfigured(this.soundEvent, "soundEvent"); - return PaperRegistryHolders.create(current, e -> new PaperSoundEventRegistryEntry(this.conversions, e)); + return PaperRegistryHolders.create(RegistryKey.SOUND_EVENT, current, this.conversions); } @Override @@ -86,7 +86,7 @@ public JukeboxSongRegistryEntry.Builder soundEvent(final Consumer soundEvent) { - this.soundEvent = PaperRegistryHolders.convert(soundEvent, this.conversions); + this.soundEvent = PaperRegistryHolders.convert(soundEvent); return this; } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/dialog/PaperDialogs.java b/paper-server/src/main/java/io/papermc/paper/registry/data/dialog/PaperDialogs.java index a0466da60602..50ebf48765b7 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/dialog/PaperDialogs.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/dialog/PaperDialogs.java @@ -32,7 +32,7 @@ public static DialogType extractType(final Dialog nmsDialog, final Conversions c case final ConfirmationDialog conf -> DialogType.confirmation(convertButton.apply(conf.yesButton()), convertButton.apply(conf.noButton())); case final DialogListDialog list -> { - final RegistrySet apiSet = PaperRegistrySets.convertToApiWithDirects(RegistryKey.DIALOG, list.dialogs()); + final RegistrySet apiSet = PaperRegistrySets.convertToApiWithDirects(RegistryKey.DIALOG, list.dialogs(), conversions); yield DialogType.dialogList( apiSet, list.exitAction().map(convertButton).orElse(null), diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java b/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java index 4625d82e6514..068d139d0dea 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java @@ -7,12 +7,26 @@ import io.papermc.paper.registry.PaperRegistries; import io.papermc.paper.registry.PaperRegistryBuilder; import io.papermc.paper.registry.PaperRegistryBuilderFactory; +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.TypedKey; import io.papermc.paper.registry.entry.RegistryEntryMeta; +import io.papermc.paper.registry.event.RegistryFactory; +import io.papermc.paper.registry.holder.PaperRegistryHolders; +import io.papermc.paper.registry.holder.RegistryHolder; +import io.papermc.paper.registry.set.NamedRegistryKeySetImpl; +import io.papermc.paper.registry.set.RegistryHolderSetBuilder; +import io.papermc.paper.registry.set.RegistryHolderSetBuilderImpl; +import io.papermc.paper.registry.tag.Tag; +import io.papermc.paper.registry.tag.TagKey; import java.util.function.Consumer; +import java.util.function.Function; import net.kyori.adventure.text.Component; import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; +import net.minecraft.core.HolderSet; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.RegistryOps; @@ -22,7 +36,7 @@ import org.jetbrains.annotations.Contract; import org.jspecify.annotations.Nullable; -public class Conversions { +public class Conversions implements RegistryFactory { private static @Nullable Conversions globalInstance; public static Conversions global() { @@ -56,6 +70,11 @@ public RegistryOps.RegistryInfoLookup lookup() { return this.lookup; } + public Holder.Reference getReferenceHolder(final TypedKey key) { + final ResourceKey nms = PaperRegistries.toNms(key); + return this.lookup.lookup(nms.registryKey()).orElseThrow().getter().getOrThrow(nms); + } + public Holder.Reference getReferenceHolder(final ResourceKey key) { return this.lookup.lookup(key.registryKey()).orElseThrow().getter().getOrThrow(key); } @@ -70,33 +89,62 @@ public Component asAdventure(final net.minecraft.network.chat.@Nullable Componen return vanilla == null ? Component.empty() : this.serializer.deserialize(vanilla); } - private static > RegistryEntryMeta.Buildable getDirectHolderBuildableMeta(final RegistryKey registryKey) { - final RegistryEntryMeta.Buildable buildableMeta = PaperRegistries.getBuildableMeta(registryKey); + private static > RegistryEntryMeta.Buildable getDirectHolderBuildableMeta(final RegistryKey registryKey) { + final RegistryEntryMeta.Buildable buildableMeta = PaperRegistries.getBuildableMeta(registryKey); Preconditions.checkArgument(buildableMeta.registryTypeMapper().supportsDirectHolders(), "Registry type mapper must support direct holders"); return buildableMeta; } + public , E> Function getEntryCreator(final RegistryKey registryKey) { + final RegistryEntryMeta.Buildable directHolderBuildableMeta = getDirectHolderBuildableMeta(registryKey); + return m -> directHolderBuildableMeta.entryFactory().create(this, m); + } + public > A createApiInstanceFromBuilder(final RegistryKey registryKey, final Consumer> value) { - final RegistryEntryMeta.Buildable meta = getDirectHolderBuildableMeta(registryKey); + final RegistryEntryMeta.Buildable meta = getDirectHolderBuildableMeta(registryKey); final PaperRegistryBuilderFactory builderFactory = this.createRegistryBuilderFactory(registryKey, meta); value.accept(builderFactory); return meta.registryTypeMapper().createBukkit(Holder.direct(builderFactory.requireBuilder().build())); } - public > Holder createHolderFromBuilder(final RegistryKey registryKey, final Consumer> value) { - final RegistryEntryMeta.Buildable meta = getDirectHolderBuildableMeta(registryKey); + public > Holder.Direct createHolderFromBuilder(final RegistryKey registryKey, final Consumer> value) { + final RegistryEntryMeta.Buildable meta = getDirectHolderBuildableMeta(registryKey); final PaperRegistryBuilderFactory builderFactory = this.createRegistryBuilderFactory(registryKey, meta); value.accept(builderFactory); - return Holder.direct(builderFactory.requireBuilder().build()); + return (Holder.Direct) Holder.direct(builderFactory.requireBuilder().build()); } private > PaperRegistryBuilderFactory createRegistryBuilderFactory( final RegistryKey registryKey, - final RegistryEntryMeta.Buildable buildableMeta + final RegistryEntryMeta.Buildable buildableMeta ) { final ResourceKey> resourceRegistryKey = PaperRegistries.registryToNms(registryKey); final HolderLookup.RegistryLookup lookupForBuilders = this.lookup.lookupForValueCopyViaBuilders().lookupOrThrow(resourceRegistryKey); return new PaperRegistryBuilderFactory<>(resourceRegistryKey, this, buildableMeta.builderFiller(), lookupForBuilders::getValueForCopying); } + + @Override + public Tag getOrCreateTag(final TagKey tagKey) { + final RegistryOps.RegistryInfo registryInfo = this.lookup().lookup(PaperRegistries.registryToNms(tagKey.registryKey())).orElseThrow(); + final HolderSet.Named tagSet = registryInfo.getter().getOrThrow(PaperRegistries.toNms(tagKey)); + return new NamedRegistryKeySetImpl<>(tagKey, tagSet); + } + + @Override + public , E, B extends RegistryBuilder> RegistryHolder.Reference getOrCreateReferenceHolder(final TypedKey key) { + final Holder.Reference reference = this.getReferenceHolder(key); + return PaperRegistryHolders.createReference(reference, this.getEntryCreator(key.registryKey())); + } + + @Override + public , E, B extends RegistryBuilder> RegistryHolder.Inlined getOrCreateInlinedHolder(final RegistryKey registryKey, final Consumer> value) { + final Holder.Direct directHolder = this.createHolderFromBuilder(registryKey, value); + return PaperRegistryHolders.createInlined(registryKey, directHolder, this.getEntryCreator(registryKey)); + } + + @Override + public , E, B extends RegistryBuilder> RegistryHolderSetBuilder createSetBuilder(final RegistryKey registryKey) { + return new RegistryHolderSetBuilderImpl<>(registryKey, this); + } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/entry/EntryFactory.java b/paper-server/src/main/java/io/papermc/paper/registry/entry/EntryFactory.java new file mode 100644 index 000000000000..62abf3b37d33 --- /dev/null +++ b/paper-server/src/main/java/io/papermc/paper/registry/entry/EntryFactory.java @@ -0,0 +1,16 @@ +package io.papermc.paper.registry.entry; + +import io.papermc.paper.registry.data.util.Conversions; +import org.jspecify.annotations.Nullable; + +/** + * Creates the base registry entry (not the builder) from an optional minecraft value. + * + * @param the minecraft type + * @param the registry entry type + */ +@FunctionalInterface +public interface EntryFactory { + + E create(Conversions conversions, @Nullable M nms); +} diff --git a/paper-server/src/main/java/io/papermc/paper/registry/entry/RegistryEntryBuilder.java b/paper-server/src/main/java/io/papermc/paper/registry/entry/RegistryEntryBuilder.java index 51c91cf018ec..a9c64cbd91c9 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/entry/RegistryEntryBuilder.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/entry/RegistryEntryBuilder.java @@ -73,20 +73,20 @@ public RegistryEntry build() { return new RegistryEntryImpl<>(new RegistryEntryMeta.Craft<>(this.mcKey, this.apiKey, this.classToPreload, this.minecraftToBukkit, this.serializationUpdater)); } - public > RegistryEntry modifiable(final PaperRegistryBuilder.Filler filler) { - return this.create(filler, MODIFIABLE); + public > RegistryEntry modifiable(final EntryFactory entryFactory, final PaperRegistryBuilder.Filler filler) { + return this.create(entryFactory, filler, MODIFIABLE); } - public > RegistryEntry addable(final PaperRegistryBuilder.Filler filler) { - return this.create(filler, ADDABLE); + public > RegistryEntry addable(final EntryFactory entryFactory, final PaperRegistryBuilder.Filler filler) { + return this.create(entryFactory, filler, ADDABLE); } - public > RegistryEntry writable(final PaperRegistryBuilder.Filler filler) { - return this.create(filler, WRITABLE); + public > RegistryEntry writable(final EntryFactory entryFactory, final PaperRegistryBuilder.Filler filler) { + return this.create(entryFactory, filler, WRITABLE); } - public > RegistryEntry create(final PaperRegistryBuilder.Filler filler, final RegistryEntryMeta.RegistryModificationApiSupport support) { - return new RegistryEntryImpl<>(new RegistryEntryMeta.Buildable<>(this.mcKey, this.apiKey, this.classToPreload, this.minecraftToBukkit, this.serializationUpdater, filler, support)); + public > RegistryEntry create(final EntryFactory entryFactory, final PaperRegistryBuilder.Filler filler, final RegistryEntryMeta.RegistryModificationApiSupport support) { + return new RegistryEntryImpl<>(new RegistryEntryMeta.Buildable<>(this.mcKey, this.apiKey, this.classToPreload, this.minecraftToBukkit, this.serializationUpdater, entryFactory, filler, support)); } } } 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 f606c523f680..5f60e8c54810 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 @@ -92,12 +92,13 @@ public boolean canModify() { } } - record Buildable>( // TODO remove Keyed + record Buildable>( // TODO remove Keyed ResourceKey> mcKey, RegistryKey apiKey, Class classToPreload, RegistryTypeMapper registryTypeMapper, BiFunction serializationUpdater, + EntryFactory entryFactory, PaperRegistryBuilder.Filler builderFiller, RegistryModificationApiSupport modificationApiSupport ) implements ServerSide { diff --git a/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryComposeEventImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryComposeEventImpl.java index dcf30db3afbd..dfd0e05d5fe4 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryComposeEventImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryComposeEventImpl.java @@ -1,27 +1,20 @@ package io.papermc.paper.registry.event; import io.papermc.paper.plugin.lifecycle.event.PaperLifecycleEvent; -import io.papermc.paper.registry.PaperRegistries; import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.RegistryKey; -import io.papermc.paper.registry.data.util.Conversions; -import io.papermc.paper.registry.set.NamedRegistryKeySetImpl; import io.papermc.paper.registry.tag.Tag; import io.papermc.paper.registry.tag.TagKey; -import net.minecraft.core.HolderSet; -import net.minecraft.resources.RegistryOps; import org.bukkit.Keyed; public record RegistryComposeEventImpl>( RegistryKey registryKey, WritableRegistry registry, - Conversions conversions + RegistryFactory factory ) implements RegistryComposeEvent, PaperLifecycleEvent { @Override public Tag getOrCreateTag(final TagKey tagKey) { - final RegistryOps.RegistryInfo registryInfo = this.conversions.lookup().lookup(PaperRegistries.registryToNms(tagKey.registryKey())).orElseThrow(); - final HolderSet.Named tagSet = registryInfo.getter().getOrThrow(PaperRegistries.toNms(tagKey)); - return new NamedRegistryKeySetImpl<>(tagKey, tagSet); + return this.factory.getOrCreateTag(tagKey); } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEventImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEventImpl.java index 332829c65ef4..3fc1cae46b6c 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEventImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEventImpl.java @@ -17,13 +17,11 @@ public record RegistryEntryAddEventImpl>( TypedKey key, B builder, RegistryKey registryKey, - Conversions conversions + RegistryFactory factory ) implements RegistryEntryAddEvent, PaperLifecycleEvent { @Override public Tag getOrCreateTag(final TagKey tagKey) { - final RegistryOps.RegistryInfo registryInfo = this.conversions.lookup().lookup(PaperRegistries.registryToNms(tagKey.registryKey())).orElseThrow(); - final HolderSet.Named tagSet = registryInfo.getter().getOrThrow(PaperRegistries.toNms(tagKey)); - return new NamedRegistryKeySetImpl<>(tagKey, tagSet); + return this.factory.getOrCreateTag(tagKey); } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java index fbb61b2d9aa4..7e65ef385ff9 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java @@ -1,6 +1,17 @@ package io.papermc.paper.registry.holder; +import io.papermc.paper.registry.PaperRegistries; +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryKey; import net.minecraft.core.Holder; +import org.bukkit.Keyed; +import org.bukkit.craftbukkit.CraftRegistry; -record InlinedRegistryHolderImpl(ENTRY entry, Holder.Direct holder) implements RegistryHolder.Inlined { +record InlinedRegistryHolderImpl, ENTRY, M>(RegistryKey registryKey, ENTRY entry, Holder.Direct holder) implements RegistryHolder.Inlined { // TODO remove Keyed + + @Override + public API value() { + //noinspection RedundantTypeArguments + return CraftRegistry.minecraftHolderToBukkit(this.holder, PaperRegistries.registryToNms(this.registryKey)); + } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java index 15536e07d679..286988eb53e1 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java @@ -1,26 +1,39 @@ package io.papermc.paper.registry.holder; -import io.papermc.paper.registry.PaperRegistries; +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.util.Conversions; import java.util.function.Function; import net.minecraft.core.Holder; +import org.bukkit.Keyed; public final class PaperRegistryHolders { - public static RegistryHolder create(final Holder holder, final Function entryCreator) { + public static , ENTRY, M> RegistryHolder create(final RegistryKey registryKey, final Holder holder, final Conversions conversions) { // TODO remove Keyed + final Function entryCreator = conversions.getEntryCreator(registryKey); + return create(registryKey, holder, entryCreator); + } + + public static , ENTRY, M> RegistryHolder create(final RegistryKey registryKey, final Holder holder, final Function entryCreator) { // TODO remove Keyed return switch (holder) { - case final Holder.Direct direct -> new InlinedRegistryHolderImpl<>(entryCreator.apply(direct.value()), direct); - case final Holder.Reference reference -> new ReferenceRegistryHolderImpl<>(PaperRegistries.fromNms(reference.key())); - default -> throw new IllegalArgumentException("Unsupported holder type: " + holder.getClass().getName()); + case final Holder.Direct direct -> createInlined(registryKey, direct, entryCreator); + case final Holder.Reference reference -> createReference(reference, entryCreator); }; } - public static Holder convert(final RegistryHolder holder, final Conversions conversions) { + public static , ENTRY, M> Holder convert(final RegistryHolder holder) { // TODO remove Keyed return switch (holder) { - case final RegistryHolder.Reference ref -> conversions.getReferenceHolder(PaperRegistries.toNms(ref.key())); + case final RegistryHolder.Reference ref -> ((ReferenceRegistryHolderImpl) ref).holder(); case final RegistryHolder.Inlined inlined -> ((InlinedRegistryHolderImpl) inlined).holder(); }; } + public static , ENTRY, M> RegistryHolder.Reference createReference(final Holder.Reference holder, final Function entryCreator) { // TODO remove Keyed + return new ReferenceRegistryHolderImpl<>(holder, entryCreator); + } + + public static , ENTRY, M> RegistryHolder.Inlined createInlined(final RegistryKey registryKey, final Holder.Direct holder, final Function entryCreator) { // TODO remove Keyed + return new InlinedRegistryHolderImpl<>(registryKey, entryCreator.apply(holder.value()), holder); + } private PaperRegistryHolders() {} } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java index ee2c2d4d962a..f05ee84ab3e1 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java @@ -1,6 +1,36 @@ package io.papermc.paper.registry.holder; +import io.papermc.paper.registry.PaperRegistries; +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; +import java.util.function.Function; +import net.minecraft.core.Holder; +import org.bukkit.craftbukkit.CraftRegistry; -record ReferenceRegistryHolderImpl(TypedKey key) implements RegistryHolder.Reference { +record ReferenceRegistryHolderImpl, ENTRY, M>( + RegistryKey registryKey, + Holder.Reference holder, + Function entryCreator +) implements RegistryHolder.Reference { + + ReferenceRegistryHolderImpl(final Holder.Reference holder, final Function entryCreator) { + this(PaperRegistries.registryFromNms(holder.key().registryKey()), holder, entryCreator); + } + + @Override + public TypedKey key() { + return PaperRegistries.fromNms(this.holder.key()); + } + + @Override + public API value() { + //noinspection unchecked + return CraftRegistry.minecraftHolderToBukkit(this.holder); + } + + @Override + public ENTRY entry() { + return this.entryCreator.apply(this.holder.value()); + } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/package-info.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/package-info.java new file mode 100644 index 000000000000..4e1ee380fa39 --- /dev/null +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package io.papermc.paper.registry.holder; + +import org.jspecify.annotations.NullMarked; diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/NamedRegistryKeySetImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/set/NamedRegistryKeySetImpl.java index e056d9407a1c..d7a312237c70 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/set/NamedRegistryKeySetImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/NamedRegistryKeySetImpl.java @@ -1,7 +1,6 @@ package io.papermc.paper.registry.set; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import io.papermc.paper.adventure.PaperAdventure; import io.papermc.paper.registry.PaperRegistries; import io.papermc.paper.registry.RegistryAccess; diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java b/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java index e865932d4166..2cea8a944925 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java @@ -1,8 +1,10 @@ package io.papermc.paper.registry.set; import io.papermc.paper.registry.PaperRegistries; +import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.data.util.Conversions; import io.papermc.paper.util.Holderable; import java.util.ArrayList; import java.util.List; @@ -12,7 +14,6 @@ import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceKey; import org.bukkit.Keyed; -import org.bukkit.craftbukkit.CraftRegistry; public final class PaperRegistrySets { @@ -27,7 +28,7 @@ public static HolderSet convertToNms(final ResourceKey HolderSet convertToNmsWithDirects(final ResourceKey> resourceKey, final RegistryOps.RegistryInfoLookup lookup, final RegistrySet registrySet) { // TODO remove Keyed + public static , E, M> HolderSet convertToNmsWithDirects(final ResourceKey> resourceKey, final RegistryOps.RegistryInfoLookup lookup, final RegistrySet registrySet) { // TODO remove Keyed if (registrySet instanceof NamedRegistryKeySetImpl) { return ((NamedRegistryKeySetImpl) registrySet).namedSet(); } else if (registrySet.isEmpty()) { @@ -43,9 +44,13 @@ public static HolderSet convertToNmsWithDirects(final Re return HolderSet.direct(directs); } else if (registrySet instanceof final RegistryKeySet keySet) { final RegistryOps.RegistryInfo registryInfo = lookup.lookup(resourceKey).orElseThrow(); - return HolderSet.direct(key -> { - return registryInfo.getter().getOrThrow(PaperRegistries.toNms(key)); - }, keySet.values()); + return HolderSet.direct( + key -> { + return registryInfo.getter().getOrThrow(PaperRegistries.toNms(key)); + }, keySet.values() + ); + } else if (registrySet instanceof final RegistryHolderSet registryHolderSet) { + return ((RegistryHolderSetImpl) registryHolderSet).nmsHolders(); } else { throw new UnsupportedOperationException("Cannot convert a registry set of type " + registrySet.getClass().getName()); } @@ -66,27 +71,13 @@ public static RegistryKeySet convertToApi(final Registry } } - public static RegistrySet convertToApiWithDirects(final RegistryKey registryKey, final HolderSet holders) { // TODO remove Keyed + public static , E, M> RegistrySet convertToApiWithDirects(final RegistryKey registryKey, final HolderSet holders, final Conversions conversions) { // TODO remove Keyed if (holders instanceof final HolderSet.Named named) { return new NamedRegistryKeySetImpl<>(PaperRegistries.fromNms(named.key()), named); + } else if (holders instanceof final HolderSet.Direct direct) { + return new RegistryHolderSetImpl<>(registryKey, direct, conversions.getEntryCreator(registryKey)); } else { - if (holders.size() == 0) { - return RegistrySet.keySet(registryKey); - } - if (holders.get(0) instanceof Holder.Direct) { - final List directs = new ArrayList<>(holders.size()); - final ResourceKey> nmsRegistryKey = PaperRegistries.registryToNms(registryKey); - for (final Holder holder : holders) { - directs.add(CraftRegistry.minecraftHolderToBukkit(holder, nmsRegistryKey)); - } - return RegistrySet.valueSet(registryKey, directs); - } else { - final List> keys = new ArrayList<>(holders.size()); - for (final Holder holder : holders) { - keys.add(PaperRegistries.fromNms(((Holder.Reference) holder).key())); - } - return RegistrySet.keySet(registryKey, keys); - } + throw new IllegalArgumentException("Unexpected holder set " + holders); } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilderImpl.java new file mode 100644 index 000000000000..bd59782b01a8 --- /dev/null +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilderImpl.java @@ -0,0 +1,50 @@ +package io.papermc.paper.registry.set; + +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.data.util.Conversions; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import org.bukkit.Keyed; +import org.bukkit.craftbukkit.CraftRegistry; + +public class RegistryHolderSetBuilderImpl & Keyed, E, B extends RegistryBuilder, M> implements RegistryHolderSetBuilder { // TODO remove Keyed + + private final RegistryKey registryKey; + final List> holders = new ArrayList<>(); + final Conversions conversions; + + public RegistryHolderSetBuilderImpl(final RegistryKey registryKey, final Conversions conversions) { + this.registryKey = registryKey; + this.conversions = conversions; + } + + @Override + public RegistryHolderSetBuilder add(final T value) { + this.holders.add(CraftRegistry.bukkitToMinecraftHolder(value)); + return this; + } + + @Override + public RegistryHolderSetBuilder add(final TypedKey key) { + this.holders.add(this.conversions.getReferenceHolder(key)); + return this; + } + + @Override + public RegistryHolderSetBuilder add(final Consumer> value) { + this.holders.add(this.conversions.createHolderFromBuilder(this.registryKey, value)); + return this; + } + + @Override + public RegistryHolderSet build() { + return new RegistryHolderSetImpl<>(this.registryKey, HolderSet.direct(this.holders), this.conversions.getEntryCreator(this.registryKey)); + } +} diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java new file mode 100644 index 000000000000..eed5b5c01b43 --- /dev/null +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java @@ -0,0 +1,70 @@ +package io.papermc.paper.registry.set; + +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.holder.PaperRegistryHolders; +import io.papermc.paper.registry.holder.RegistryHolder; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.function.Function; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import org.bukkit.Keyed; +import org.jspecify.annotations.Nullable; + +final class RegistryHolderSetImpl, E, M> implements RegistryHolderSet { // TODO remove Keyed + + private final RegistryKey registryKey; + private final Function entryCreator; + private final int size; + private HolderSet.@Nullable Direct holders; + private @Nullable List> apiHolders; + + RegistryHolderSetImpl(final RegistryKey registryKey, final HolderSet.Direct holders, final Function entryCreator) { + this.registryKey = registryKey; + this.entryCreator = entryCreator; + this.holders = holders; + this.size = this.holders.size(); + } + + RegistryHolderSetImpl(final RegistryKey registryKey, final List> apiHolders, final Function entryCreator) { + this.registryKey = registryKey; + this.entryCreator = entryCreator; + this.apiHolders = List.copyOf(apiHolders); + this.size = this.apiHolders.size(); + } + + public HolderSet.Direct nmsHolders() { + if (this.holders == null) { + final List> newHolders = new ArrayList<>(); + for (final RegistryHolder holder : this.holders()) { + newHolders.add(PaperRegistryHolders.convert(holder)); + } + this.holders = HolderSet.direct(newHolders); + } + return this.holders; + } + + @Override + public Collection> holders() { + if (this.apiHolders == null) { + final List> newHolders = new ArrayList<>(); + for (final Holder holder : this.nmsHolders()) { + newHolders.add(PaperRegistryHolders.create(this.registryKey, holder, this.entryCreator)); + } + this.apiHolders = List.copyOf(newHolders); + } + return this.apiHolders; + } + + @Override + public RegistryKey registryKey() { + return this.registryKey; + } + + @Override + public int size() { + return this.size; + } +} diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistrySetProviderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistrySetProviderImpl.java new file mode 100644 index 000000000000..2e7ce40868bf --- /dev/null +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistrySetProviderImpl.java @@ -0,0 +1,15 @@ +package io.papermc.paper.registry.set; + +import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.util.Conversions; +import org.bukkit.Keyed; + +public class RegistrySetProviderImpl implements RegistrySetProvider { + + @Override + public , E, B extends RegistryBuilder> RegistryHolderSetBuilder registryHolderSetBuilder(final RegistryKey registryKey) { // TODO remove Keyed + return new RegistryHolderSetBuilderImpl<>(registryKey, Conversions.global()); + } +} diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryValueSetBuilderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryValueSetBuilderImpl.java index dabd34b289d0..4bd8e99807f6 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryValueSetBuilderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryValueSetBuilderImpl.java @@ -9,6 +9,7 @@ import java.util.function.Consumer; import org.bukkit.Keyed; +@Deprecated(forRemoval = true) public class RegistryValueSetBuilderImpl> implements RegistryValueSetBuilder { // TODO remove Keyed private final RegistryKey registryKey; diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java index 75639c5701ad..cb33b3dc4e67 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftRegistry.java @@ -73,6 +73,10 @@ public static B minecraftToBukkit(M minecraft, ResourceKey< return bukkit; } + public static B minecraftHolderToBukkit(final Holder.Reference minecraft) { + return minecraftHolderToBukkit(minecraft, minecraft.key().registryKey()); + } + public static B minecraftHolderToBukkit(final Holder minecraft, final ResourceKey> registryKey) { Preconditions.checkArgument(minecraft != null); diff --git a/paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.set.RegistrySetProvider b/paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.set.RegistrySetProvider new file mode 100644 index 000000000000..7dce5aec7723 --- /dev/null +++ b/paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.set.RegistrySetProvider @@ -0,0 +1 @@ +io.papermc.paper.registry.set.RegistrySetProviderImpl diff --git a/paper-server/src/test/java/io/papermc/paper/registry/RegistryBuilderTest.java b/paper-server/src/test/java/io/papermc/paper/registry/RegistryBuilderTest.java index faadfafd776e..eff5a680f2a6 100644 --- a/paper-server/src/test/java/io/papermc/paper/registry/RegistryBuilderTest.java +++ b/paper-server/src/test/java/io/papermc/paper/registry/RegistryBuilderTest.java @@ -28,7 +28,7 @@ static Stream registries() { @ParameterizedTest @MethodSource("registries") - void testEquality(final RegistryEntryMeta.Buildable registryEntry) { // TODO remove Keyed + void testEquality(final RegistryEntryMeta.Buildable registryEntry) { // TODO remove Keyed final Registry registry = RegistryHelper.registryAccess().lookupOrThrow(registryEntry.mcKey()); for (final Map.Entry, M> entry : registry.entrySet()) { final M built = registryEntry.builderFiller().fill(Conversions.global(), entry.getValue()).build(); From 4ee96debfd72622cb0337780fdee3a226d0e8bde Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Sat, 28 Feb 2026 17:21:49 +0100 Subject: [PATCH 2/9] merge registry element api --- .../datacomponent/DataComponentType.java | 3 +- .../java/io/papermc/paper/dialog/Dialog.java | 4 +- .../io/papermc/paper/entity/poi/PoiType.java | 3 +- .../io/papermc/paper/registry/Registered.java | 33 --------- .../paper/registry/RegistryElement.java | 71 +++++++++++++++++++ .../data/InlinedRegistryBuilderProvider.java | 4 +- .../paper/registry/event/RegistryFactory.java | 8 +-- .../paper/registry/holder/RegistryHolder.java | 8 +-- .../paper/registry/set/RegistryHolderSet.java | 4 +- .../set/RegistryHolderSetBuilder.java | 4 +- .../paper/registry/set/RegistrySet.java | 6 +- .../registry/set/RegistrySetProvider.java | 4 +- paper-api/src/main/java/org/bukkit/Art.java | 4 +- paper-api/src/main/java/org/bukkit/Fluid.java | 3 +- .../src/main/java/org/bukkit/GameEvent.java | 4 +- .../src/main/java/org/bukkit/GameRule.java | 3 +- .../src/main/java/org/bukkit/JukeboxSong.java | 4 +- .../main/java/org/bukkit/MusicInstrument.java | 4 +- paper-api/src/main/java/org/bukkit/Sound.java | 4 +- .../java/org/bukkit/attribute/Attribute.java | 3 +- .../src/main/java/org/bukkit/block/Biome.java | 3 +- .../main/java/org/bukkit/block/BlockType.java | 3 +- .../org/bukkit/block/banner/PatternType.java | 4 +- .../java/org/bukkit/damage/DamageType.java | 4 +- .../org/bukkit/enchantments/Enchantment.java | 4 +- .../src/main/java/org/bukkit/entity/Cat.java | 6 +- .../main/java/org/bukkit/entity/Chicken.java | 6 +- .../src/main/java/org/bukkit/entity/Cow.java | 6 +- .../src/main/java/org/bukkit/entity/Frog.java | 4 +- .../src/main/java/org/bukkit/entity/Pig.java | 6 +- .../java/org/bukkit/entity/SulfurCube.java | 4 +- .../main/java/org/bukkit/entity/Villager.java | 9 +-- .../src/main/java/org/bukkit/entity/Wolf.java | 6 +- .../org/bukkit/entity/ZombieNautilus.java | 4 +- .../bukkit/generator/structure/Structure.java | 3 +- .../generator/structure/StructureType.java | 3 +- .../java/org/bukkit/inventory/ItemType.java | 3 +- .../java/org/bukkit/inventory/MenuType.java | 3 +- .../inventory/meta/trim/TrimMaterial.java | 4 +- .../inventory/meta/trim/TrimPattern.java | 4 +- .../main/java/org/bukkit/map/MapCursor.java | 3 +- .../org/bukkit/potion/PotionEffectType.java | 3 +- .../datacomponent/PaperDataComponentType.java | 2 +- .../io/papermc/paper/dialog/PaperDialog.java | 2 +- .../paper/entity/poi/PaperPoiType.java | 2 +- .../paper/registry/HolderableBase.java | 14 ++-- .../paper/registry/PaperRegistryElement.java | 23 ++++++ .../InlinedRegistryBuilderProviderImpl.java | 4 +- .../paper/registry/data/util/Conversions.java | 10 +-- .../holder/InlinedRegistryHolderImpl.java | 12 +++- .../registry/holder/PaperRegistryHolders.java | 12 ++-- .../holder/ReferenceRegistryHolderImpl.java | 12 +++- .../paper/registry/set/PaperRegistrySets.java | 6 +- .../set/RegistryHolderSetBuilderImpl.java | 4 +- .../registry/set/RegistryHolderSetImpl.java | 4 +- .../registry/set/RegistrySetProviderImpl.java | 4 +- .../papermc/paper/util/HolderableElement.java | 6 ++ .../papermc/paper/util/OldEnumHolderable.java | 7 +- .../bukkit/craftbukkit/CraftGameEvent.java | 12 ++-- .../org/bukkit/craftbukkit/CraftGameRule.java | 11 +-- .../bukkit/craftbukkit/CraftJukeboxSong.java | 2 +- .../craftbukkit/CraftMusicInstrument.java | 6 +- .../bukkit/craftbukkit/block/CraftBiome.java | 12 ++++ .../craftbukkit/block/CraftBlockType.java | 2 +- .../craftbukkit/damage/CraftDamageType.java | 2 +- .../enchantments/CraftEnchantment.java | 14 ++-- .../bukkit/craftbukkit/entity/CraftCat.java | 2 +- .../craftbukkit/entity/CraftChicken.java | 4 +- .../bukkit/craftbukkit/entity/CraftCow.java | 4 +- .../bukkit/craftbukkit/entity/CraftPig.java | 4 +- .../craftbukkit/entity/CraftSulfurCube.java | 2 +- .../bukkit/craftbukkit/entity/CraftWolf.java | 4 +- .../entity/CraftZombieNautilus.java | 9 +-- .../generator/structure/CraftStructure.java | 12 ++-- .../structure/CraftStructureType.java | 12 ++-- .../craftbukkit/inventory/CraftItemType.java | 2 +- .../craftbukkit/inventory/CraftMenuType.java | 2 +- .../inventory/trim/CraftTrimMaterial.java | 2 +- .../inventory/trim/CraftTrimPattern.java | 2 +- .../potion/CraftPotionEffectType.java | 4 +- 80 files changed, 315 insertions(+), 211 deletions(-) delete mode 100644 paper-api/src/main/java/io/papermc/paper/registry/Registered.java create mode 100644 paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java create mode 100644 paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryElement.java create mode 100644 paper-server/src/main/java/io/papermc/paper/util/HolderableElement.java diff --git a/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentType.java b/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentType.java index e154370bf486..0c9e19967ba0 100644 --- a/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentType.java +++ b/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentType.java @@ -1,12 +1,13 @@ package io.papermc.paper.datacomponent; +import io.papermc.paper.registry.RegistryElement; import org.bukkit.Keyed; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @NullMarked @ApiStatus.NonExtendable -public interface DataComponentType extends Keyed { +public interface DataComponentType extends RegistryElement, Keyed { /** * Checks if this data component type is persistent, or diff --git a/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java b/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java index ef6f99e40bac..973892c2bea4 100644 --- a/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java +++ b/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java @@ -1,8 +1,8 @@ package io.papermc.paper.dialog; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.InlinedRegistryBuilderProvider; import io.papermc.paper.registry.data.dialog.DialogRegistryEntry; @@ -20,7 +20,7 @@ * Can also be created during bootstrap via {@link io.papermc.paper.registry.event.RegistryEvents#DIALOG}. */ @ApiStatus.NonExtendable -public interface Dialog extends Keyed, DialogLike, Registered.Inlineable { +public interface Dialog extends RegistryElement.Inlineable, Keyed, DialogLike { /** * Creates a new dialog using the provided builder. diff --git a/paper-api/src/main/java/io/papermc/paper/entity/poi/PoiType.java b/paper-api/src/main/java/io/papermc/paper/entity/poi/PoiType.java index c0d5718a2756..2c2e6be240e6 100644 --- a/paper-api/src/main/java/io/papermc/paper/entity/poi/PoiType.java +++ b/paper-api/src/main/java/io/papermc/paper/entity/poi/PoiType.java @@ -1,6 +1,7 @@ package io.papermc.paper.entity.poi; import io.papermc.paper.InternalAPIBridge; +import io.papermc.paper.registry.RegistryElement; import org.bukkit.Keyed; import org.bukkit.block.data.BlockData; import org.jspecify.annotations.NullMarked; @@ -15,7 +16,7 @@ * @see PoiTypes */ @NullMarked -public interface PoiType extends Keyed { +public interface PoiType extends RegistryElement, Keyed { /** * Determines whether the provided BlockState is relevant to this diff --git a/paper-api/src/main/java/io/papermc/paper/registry/Registered.java b/paper-api/src/main/java/io/papermc/paper/registry/Registered.java deleted file mode 100644 index 43a1b559086e..000000000000 --- a/paper-api/src/main/java/io/papermc/paper/registry/Registered.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.papermc.paper.registry; - -import org.jetbrains.annotations.ApiStatus; - -/** - * Marker interface for API types that are, or relate to, values in a registry. - */ -@ApiStatus.Experimental -public interface Registered { - - /** - * Marker interface for registered types that link an API type to its - * registry entry and builder types. - * - * @param the API type - * @param the registry entry type - * @param the builder type - */ - @ApiStatus.Experimental - interface Buildable> extends Registered { - } - - /** - * Marker interface for registered types that are valid to be constructed inline. - * - * @param the API type - * @param the registry entry type - * @param the builder type - */ - @ApiStatus.Experimental - interface Inlineable> extends Registered.Buildable { - } -} diff --git a/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java b/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java new file mode 100644 index 000000000000..d97aabdd0b34 --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java @@ -0,0 +1,71 @@ +package io.papermc.paper.registry; + +import io.papermc.paper.registry.tag.TagKey; +import net.kyori.adventure.key.Key; +import org.jetbrains.annotations.ApiStatus; +import org.jspecify.annotations.NullMarked; + +/** + * An element tied to a registry. + *

    + * For unregistered element, the equality methods exposed here will always return {@code false} + * as there's no way to identify them with a key. + * + * @see RegistryKey + * @see org.bukkit.Registry + * @see org.bukkit.Registry#getKey(org.bukkit.Keyed) + */ +@NullMarked +@ApiStatus.Experimental +public interface RegistryElement { + + /** + * Checks whether this element is identified by the given key. + * + * @param type the key + * @return whether this element is identified by the given key. + */ + default boolean is(final TypedKey type) { // TypedKey shouldn't extend Key + return this.is(type.key()); + } + + /** + * Checks whether this element is identified by the given key. + * + * @param type the key + * @return whether this element is identified by the given key + */ + boolean is(Key type); + + /** + * Checks whether this element is contained in the + * tag identified by the given tag key. + * + * @param type the tag key + * @return whether this element is contained in the tag + */ + boolean is(TagKey type); + + /** + * Marker interface for registered types that link an API type to its + * registry entry and builder types. + * + * @param the API type + * @param the registry entry type + * @param the builder type + */ + @ApiStatus.Experimental + interface Buildable> extends RegistryElement { + } + + /** + * Marker interface for registered types that are valid to be constructed inline. + * + * @param the API type + * @param the registry entry type + * @param the builder type + */ + @ApiStatus.Experimental + interface Inlineable> extends RegistryElement.Buildable { + } +} diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java b/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java index e653327251f6..57c881c6605b 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java @@ -1,8 +1,8 @@ package io.papermc.paper.registry.data; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import java.util.Optional; import java.util.ServiceLoader; @@ -24,5 +24,5 @@ final class Holder { return Holder.INSTANCE.orElseThrow(); } - & Keyed, B extends RegistryBuilder> T create(final RegistryKey key, final Consumer> value); + & Keyed, B extends RegistryBuilder> T create(final RegistryKey key, final Consumer> value); } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java index 77a2326788bd..3e0cbcf85fe4 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java @@ -1,8 +1,8 @@ package io.papermc.paper.registry.event; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; import io.papermc.paper.registry.holder.RegistryHolder; @@ -41,7 +41,7 @@ public interface RegistryFactory { * @param the registry entry type * @param the builder type */ - , E, B extends RegistryBuilder> RegistryHolder.Reference getOrCreateReferenceHolder(TypedKey key); // TODO remove Keyed + , E, B extends RegistryBuilder> RegistryHolder.Reference getOrCreateReferenceHolder(TypedKey key); // TODO remove Keyed /** * Creates an inlined holder wrapping an anonymous value built from the @@ -54,7 +54,7 @@ public interface RegistryFactory { * @param the registry entry type * @param the builder type */ - , E, B extends RegistryBuilder> RegistryHolder.Inlined getOrCreateInlinedHolder(RegistryKey registryKey, final Consumer> value); // TODO remove Keyed + , E, B extends RegistryBuilder> RegistryHolder.Inlined getOrCreateInlinedHolder(RegistryKey registryKey, final Consumer> value); // TODO remove Keyed /** * Creates a new builder for a {@link RegistryHolderSetBuilder holder set} of the given registry. @@ -65,5 +65,5 @@ public interface RegistryFactory { * @param the registry entry type * @param the builder type */ - , E, B extends RegistryBuilder> RegistryHolderSetBuilder createSetBuilder(RegistryKey registryKey);// TODO remove Keyed + , E, B extends RegistryBuilder> RegistryHolderSetBuilder createSetBuilder(RegistryKey registryKey); // TODO remove Keyed } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/holder/RegistryHolder.java b/paper-api/src/main/java/io/papermc/paper/registry/holder/RegistryHolder.java index 798e1d1f7a8b..75d61dd96665 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/holder/RegistryHolder.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/holder/RegistryHolder.java @@ -1,6 +1,6 @@ package io.papermc.paper.registry.holder; -import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; import org.jetbrains.annotations.ApiStatus; @@ -14,7 +14,7 @@ * @param the type of the registry entry (for inlined values) */ @ApiStatus.Experimental -public sealed interface RegistryHolder, ENTRY> permits RegistryHolder.Reference, RegistryHolder.Inlined { +public sealed interface RegistryHolder, ENTRY> permits RegistryHolder.Reference, RegistryHolder.Inlined { /** * Gets the registry key of the registry this holder's value belongs to. @@ -45,7 +45,7 @@ public sealed interface RegistryHolder the type of the registry entry */ @ApiStatus.NonExtendable - non-sealed interface Reference, ENTRY> extends RegistryHolder { + non-sealed interface Reference, ENTRY> extends RegistryHolder { /** * The key of the referenced value. @@ -62,7 +62,7 @@ non-sealed interface Reference, * @param the type of the registry entry */ @ApiStatus.NonExtendable - non-sealed interface Inlined, ENTRY> extends RegistryHolder { + non-sealed interface Inlined, ENTRY> extends RegistryHolder { /** * The inlined entry. diff --git a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSet.java b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSet.java index 09a4a2637b89..dfb32ae39d7b 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSet.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSet.java @@ -1,6 +1,6 @@ package io.papermc.paper.registry.set; -import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.holder.RegistryHolder; import java.util.Collection; @@ -17,7 +17,7 @@ * @param the API type * @param the registry entry type */ -public non-sealed interface RegistryHolderSet, E> extends RegistrySet { +public non-sealed interface RegistryHolderSet, E> extends RegistrySet { /** * Gets the holders in this set. diff --git a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilder.java b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilder.java index a32a8376a23e..bbb0badd94aa 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilder.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilder.java @@ -1,8 +1,8 @@ package io.papermc.paper.registry.set; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.TypedKey; import java.util.function.Consumer; @@ -13,7 +13,7 @@ * @param the registry entry type * @param the builder type */ -public interface RegistryHolderSetBuilder, E, B extends RegistryBuilder> { +public interface RegistryHolderSetBuilder, E, B extends RegistryBuilder> { /** * Adds a value to the set. diff --git a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySet.java b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySet.java index 61c1c5a2afca..a40a59ac35fc 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySet.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySet.java @@ -1,8 +1,8 @@ package io.papermc.paper.registry.set; import com.google.common.collect.Lists; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; import io.papermc.paper.registry.tag.Tag; @@ -39,7 +39,7 @@ public sealed interface RegistrySet permits RegistryHolderSet, RegistryKeySet * @param the builder type */ @Contract(value = "_ -> new", pure = true) - static , E, B extends RegistryBuilder> RegistryHolderSetBuilder holderSetBuilder(final RegistryKey registryKey) { // TODO remove Keyed + static , E, B extends RegistryBuilder> RegistryHolderSetBuilder holderSetBuilder(final RegistryKey registryKey) { // TODO remove Keyed return RegistrySetProvider.instance().registryHolderSetBuilder(registryKey); } @@ -62,7 +62,7 @@ static RegistryValueSet valueSet(final RegistryKey registryKey, final /** * Creates a {@link RegistryKeySet} from registry-backed values. *

    All values provided must have keys in the given registry. - *

    + * For anonymous values, use {@link #valueSet(RegistryKey, Iterable)}.

    *

    If references to actual objects are not available yet, use {@link #keySet(RegistryKey, Iterable)} to * create an equivalent {@link RegistryKeySet} using just {@link TypedKey TypedKeys}.

    * diff --git a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySetProvider.java b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySetProvider.java index d576dec228b6..7a4e79b38bb9 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySetProvider.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistrySetProvider.java @@ -1,7 +1,7 @@ package io.papermc.paper.registry.set; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import java.util.Optional; import java.util.ServiceLoader; @@ -22,5 +22,5 @@ final class Holder { return Holder.INSTANCE.orElseThrow(); } - , E, B extends RegistryBuilder> RegistryHolderSetBuilder registryHolderSetBuilder(RegistryKey registryKey); // TODO remove Keyed + , E, B extends RegistryBuilder> RegistryHolderSetBuilder registryHolderSetBuilder(RegistryKey registryKey); // TODO remove Keyed } diff --git a/paper-api/src/main/java/org/bukkit/Art.java b/paper-api/src/main/java/org/bukkit/Art.java index 6d25ec08af18..5f226b48c8f8 100644 --- a/paper-api/src/main/java/org/bukkit/Art.java +++ b/paper-api/src/main/java/org/bukkit/Art.java @@ -1,8 +1,8 @@ package org.bukkit; import com.google.common.base.Preconditions; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.PaintingVariantRegistryEntry; import java.util.Locale; @@ -20,7 +20,7 @@ * There may be additional arts present in the server, for example from a {@link io.papermc.paper.datapack.Datapack} * which can be accessed via {@link RegistryAccess#registryAccess()} and {@link RegistryKey#PAINTING_VARIANT}. */ -public interface Art extends OldEnum, Keyed, Registered.Buildable { +public interface Art extends RegistryElement.Buildable, OldEnum, Keyed { // Start generate - Art Art ALBAN = getArt("alban"); diff --git a/paper-api/src/main/java/org/bukkit/Fluid.java b/paper-api/src/main/java/org/bukkit/Fluid.java index 22c25f2bda7d..25ba37f7a516 100644 --- a/paper-api/src/main/java/org/bukkit/Fluid.java +++ b/paper-api/src/main/java/org/bukkit/Fluid.java @@ -1,6 +1,7 @@ package org.bukkit; import com.google.common.base.Preconditions; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import java.util.Locale; import net.kyori.adventure.key.Key; @@ -11,7 +12,7 @@ /** * Represents a fluid type. */ -public interface Fluid extends OldEnum, Keyed { +public interface Fluid extends RegistryElement, OldEnum, Keyed { // Start generate - Fluid Fluid EMPTY = getFluid("empty"); diff --git a/paper-api/src/main/java/org/bukkit/GameEvent.java b/paper-api/src/main/java/org/bukkit/GameEvent.java index 47be8f3717ab..6ab16024fa6b 100644 --- a/paper-api/src/main/java/org/bukkit/GameEvent.java +++ b/paper-api/src/main/java/org/bukkit/GameEvent.java @@ -1,6 +1,6 @@ package org.bukkit; -import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.data.GameEventRegistryEntry; import java.util.Collection; import net.kyori.adventure.key.Key; @@ -11,7 +11,7 @@ /** * Represents a generic Mojang game event. */ -public abstract class GameEvent implements Keyed, Registered.Buildable { +public abstract class GameEvent implements RegistryElement.Buildable, Keyed { // Start generate - GameEvent public static final GameEvent BLOCK_ACTIVATE = getEvent("block_activate"); diff --git a/paper-api/src/main/java/org/bukkit/GameRule.java b/paper-api/src/main/java/org/bukkit/GameRule.java index a9b9b12e4b62..e679a83aa222 100644 --- a/paper-api/src/main/java/org/bukkit/GameRule.java +++ b/paper-api/src/main/java/org/bukkit/GameRule.java @@ -2,6 +2,7 @@ import com.google.common.base.Preconditions; import io.papermc.paper.InternalAPIBridge; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.world.flag.FeatureDependant; import java.util.function.UnaryOperator; import org.jetbrains.annotations.ApiStatus; @@ -19,7 +20,7 @@ * @see GameRules */ @ApiStatus.NonExtendable -public abstract class GameRule implements net.kyori.adventure.translation.Translatable, FeatureDependant, Keyed { +public abstract class GameRule implements RegistryElement>, net.kyori.adventure.translation.Translatable, FeatureDependant, Keyed { // Boolean rules /** diff --git a/paper-api/src/main/java/org/bukkit/JukeboxSong.java b/paper-api/src/main/java/org/bukkit/JukeboxSong.java index bb1d3c381a34..f105686fe80e 100644 --- a/paper-api/src/main/java/org/bukkit/JukeboxSong.java +++ b/paper-api/src/main/java/org/bukkit/JukeboxSong.java @@ -1,7 +1,7 @@ package org.bukkit; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.JukeboxSongRegistryEntry; import net.kyori.adventure.key.Key; @@ -13,7 +13,7 @@ * Represents a song which may play in a Jukebox. */ @NullMarked -public interface JukeboxSong extends Keyed, Translatable, Registered.Buildable { +public interface JukeboxSong extends RegistryElement.Buildable, Keyed, Translatable { // Start generate - JukeboxSong JukeboxSong ELEVEN = get("11"); diff --git a/paper-api/src/main/java/org/bukkit/MusicInstrument.java b/paper-api/src/main/java/org/bukkit/MusicInstrument.java index 15bcac421f6e..e1c284df4ce6 100644 --- a/paper-api/src/main/java/org/bukkit/MusicInstrument.java +++ b/paper-api/src/main/java/org/bukkit/MusicInstrument.java @@ -1,8 +1,8 @@ package org.bukkit; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.InlinedRegistryBuilderProvider; import io.papermc.paper.registry.data.InstrumentRegistryEntry; @@ -15,7 +15,7 @@ import org.jspecify.annotations.Nullable; @NullMarked -public abstract class MusicInstrument implements Keyed, net.kyori.adventure.translation.Translatable, Registered.Inlineable { +public abstract class MusicInstrument implements RegistryElement.Inlineable, Keyed, net.kyori.adventure.translation.Translatable { /** * Creates an inlined music instrument. diff --git a/paper-api/src/main/java/org/bukkit/Sound.java b/paper-api/src/main/java/org/bukkit/Sound.java index ff67b5867f39..90d1608738e1 100644 --- a/paper-api/src/main/java/org/bukkit/Sound.java +++ b/paper-api/src/main/java/org/bukkit/Sound.java @@ -1,7 +1,7 @@ package org.bukkit; import com.google.common.base.Preconditions; -import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.SoundEventRegistryEntry; import java.util.Locale; @@ -23,7 +23,7 @@ * guarantee values will not be removed from this interface. As such, you should not * depend on the ordinal values of this class. */ -public interface Sound extends OldEnum, Keyed, net.kyori.adventure.sound.Sound.Type, Registered.Buildable { // Paper - implement Sound.Type +public interface Sound extends RegistryElement.Buildable, OldEnum, Keyed, net.kyori.adventure.sound.Sound.Type { // Paper - implement Sound.Type // Start generate - Sound Sound AMBIENT_BASALT_DELTAS_ADDITIONS = getSound("ambient.basalt_deltas.additions"); diff --git a/paper-api/src/main/java/org/bukkit/attribute/Attribute.java b/paper-api/src/main/java/org/bukkit/attribute/Attribute.java index dc19e5f57a12..845a19e63f39 100644 --- a/paper-api/src/main/java/org/bukkit/attribute/Attribute.java +++ b/paper-api/src/main/java/org/bukkit/attribute/Attribute.java @@ -1,6 +1,7 @@ package org.bukkit.attribute; import com.google.common.base.Preconditions; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import java.util.Locale; import net.kyori.adventure.key.Key; @@ -17,7 +18,7 @@ /** * Types of attributes which may be present on an {@link Attributable}. */ -public interface Attribute extends OldEnum, Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations +public interface Attribute extends RegistryElement, OldEnum, Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations /** * Maximum health of an Entity. diff --git a/paper-api/src/main/java/org/bukkit/block/Biome.java b/paper-api/src/main/java/org/bukkit/block/Biome.java index bbaf6bfcdb18..d964c44f51ed 100644 --- a/paper-api/src/main/java/org/bukkit/block/Biome.java +++ b/paper-api/src/main/java/org/bukkit/block/Biome.java @@ -3,6 +3,7 @@ import com.google.common.base.Preconditions; import io.papermc.paper.InternalAPIBridge; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import java.util.Locale; import net.kyori.adventure.key.Key; @@ -23,7 +24,7 @@ * There may be additional biomes present in the server, for example from a {@link io.papermc.paper.datapack.Datapack} * which can be accessed via {@link io.papermc.paper.registry.RegistryAccess#getRegistry(RegistryKey)} and {@link RegistryKey#BIOME}. */ -public interface Biome extends OldEnum, Keyed, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations +public interface Biome extends RegistryElement, OldEnum, Keyed, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations // Start generate - Biome Biome BADLANDS = getBiome("badlands"); diff --git a/paper-api/src/main/java/org/bukkit/block/BlockType.java b/paper-api/src/main/java/org/bukkit/block/BlockType.java index 6045210bdd9a..af3a4b77389e 100644 --- a/paper-api/src/main/java/org/bukkit/block/BlockType.java +++ b/paper-api/src/main/java/org/bukkit/block/BlockType.java @@ -1,5 +1,6 @@ package org.bukkit.block; +import io.papermc.paper.registry.RegistryElement; import java.util.Collection; import java.util.function.Consumer; import net.kyori.adventure.key.Key; @@ -133,7 +134,7 @@ * Represents a block type. */ @NullMarked -public interface BlockType extends Keyed, Translatable, net.kyori.adventure.translation.Translatable, io.papermc.paper.world.flag.FeatureDependant { // Paper - add translatable & feature flag API +public interface BlockType extends RegistryElement, Keyed, Translatable, net.kyori.adventure.translation.Translatable, io.papermc.paper.world.flag.FeatureDependant { // Paper - add translatable & feature flag API /** * Typed represents a subtype of {@link BlockType}s that have a known block diff --git a/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java b/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java index a5e51176d702..9ef823939be2 100644 --- a/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java +++ b/paper-api/src/main/java/org/bukkit/block/banner/PatternType.java @@ -1,8 +1,8 @@ package org.bukkit.block.banner; import com.google.common.base.Preconditions; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.BannerPatternRegistryEntry; import java.util.Locale; @@ -16,7 +16,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public interface PatternType extends OldEnum, Keyed, Registered.Buildable { +public interface PatternType extends RegistryElement.Buildable, OldEnum, Keyed { // Start generate - PatternType PatternType BASE = getType("base"); diff --git a/paper-api/src/main/java/org/bukkit/damage/DamageType.java b/paper-api/src/main/java/org/bukkit/damage/DamageType.java index ed9fee94189f..929cce9d8262 100644 --- a/paper-api/src/main/java/org/bukkit/damage/DamageType.java +++ b/paper-api/src/main/java/org/bukkit/damage/DamageType.java @@ -1,7 +1,7 @@ package org.bukkit.damage; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.DamageTypeRegistryEntry; import net.kyori.adventure.key.Key; @@ -19,7 +19,7 @@ * * @see
    Minecraft Wiki */ -public interface DamageType extends Keyed, Translatable, Registered.Buildable { +public interface DamageType extends RegistryElement.Buildable, Keyed, Translatable { // Start generate - DamageType DamageType ARROW = getDamageType("arrow"); diff --git a/paper-api/src/main/java/org/bukkit/enchantments/Enchantment.java b/paper-api/src/main/java/org/bukkit/enchantments/Enchantment.java index 75df3a8cd3d2..c96b99e47198 100644 --- a/paper-api/src/main/java/org/bukkit/enchantments/Enchantment.java +++ b/paper-api/src/main/java/org/bukkit/enchantments/Enchantment.java @@ -1,7 +1,7 @@ package org.bukkit.enchantments; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.EnchantmentRegistryEntry; import java.util.Locale; @@ -20,7 +20,7 @@ /** * The various type of enchantments that may be added to armour or weapons */ -public abstract class Enchantment implements Keyed, Translatable, net.kyori.adventure.translation.Translatable, Registered.Buildable { // Paper - Adventure translations +public abstract class Enchantment implements RegistryElement.Buildable, Keyed, Translatable, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations /** * Provides protection against environmental damage */ diff --git a/paper-api/src/main/java/org/bukkit/entity/Cat.java b/paper-api/src/main/java/org/bukkit/entity/Cat.java index b1cea3dff2fe..80a202f3a984 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Cat.java +++ b/paper-api/src/main/java/org/bukkit/entity/Cat.java @@ -1,8 +1,8 @@ package org.bukkit.entity; import com.google.common.base.Preconditions; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.CatTypeRegistryEntry; import java.util.Locale; @@ -70,7 +70,7 @@ public interface Cat extends Tameable, Sittable, io.papermc.paper.entity.CollarC /** * Represents the various different cat types there are. */ - interface Type extends OldEnum, Keyed, Registered.Buildable { + interface Type extends RegistryElement.Buildable, OldEnum, Keyed { // Start generate - CatType Type ALL_BLACK = getType("all_black"); @@ -129,7 +129,7 @@ static Type[] values() { /** * Represents the sound variant of a cat. */ - interface SoundVariant extends Keyed { + interface SoundVariant extends RegistryElement, Keyed { // Start generate - CatSoundVariant SoundVariant CLASSIC = getSoundVariant("classic"); diff --git a/paper-api/src/main/java/org/bukkit/entity/Chicken.java b/paper-api/src/main/java/org/bukkit/entity/Chicken.java index 7799e0870643..09e95332cc06 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Chicken.java +++ b/paper-api/src/main/java/org/bukkit/entity/Chicken.java @@ -1,7 +1,7 @@ package org.bukkit.entity; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.ChickenVariantRegistryEntry; import net.kyori.adventure.key.Key; @@ -74,7 +74,7 @@ public interface Chicken extends Animals { /** * Represents the variant of a chicken. */ - interface Variant extends Keyed, Registered.Buildable { + interface Variant extends RegistryElement.Buildable, Keyed { // Start generate - ChickenVariant Variant COLD = getVariant("cold"); @@ -92,7 +92,7 @@ private static Variant getVariant(@KeyPattern.Value final String key) { /** * Represents the sound variant of a chicken. */ - interface SoundVariant extends Keyed { + interface SoundVariant extends RegistryElement, Keyed { // Start generate - ChickenSoundVariant SoundVariant CLASSIC = getSoundVariant("classic"); diff --git a/paper-api/src/main/java/org/bukkit/entity/Cow.java b/paper-api/src/main/java/org/bukkit/entity/Cow.java index f3708900cdf8..b6605bf664e9 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Cow.java +++ b/paper-api/src/main/java/org/bukkit/entity/Cow.java @@ -1,7 +1,7 @@ package org.bukkit.entity; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.CowVariantRegistryEntry; import net.kyori.adventure.key.Key; @@ -46,7 +46,7 @@ public interface Cow extends AbstractCow { /** * Represents the variant of a cow. */ - interface Variant extends Keyed, Registered.Buildable { + interface Variant extends RegistryElement.Buildable, Keyed { // Start generate - CowVariant Variant COLD = getVariant("cold"); @@ -64,7 +64,7 @@ private static Variant getVariant(@KeyPattern.Value final String key) { /** * Represents the sound variant of a cow. */ - interface SoundVariant extends Keyed { + interface SoundVariant extends RegistryElement, Keyed { // Start generate - CowSoundVariant SoundVariant CLASSIC = getSoundVariant("classic"); diff --git a/paper-api/src/main/java/org/bukkit/entity/Frog.java b/paper-api/src/main/java/org/bukkit/entity/Frog.java index 02214f604847..1bfcc5641967 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Frog.java +++ b/paper-api/src/main/java/org/bukkit/entity/Frog.java @@ -1,8 +1,8 @@ package org.bukkit.entity; import com.google.common.base.Preconditions; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.FrogVariantRegistryEntry; import java.util.Locale; @@ -53,7 +53,7 @@ public interface Frog extends Animals { /** * Represents the variant of a frog - ie its color. */ - interface Variant extends OldEnum, Keyed, Registered.Buildable { + interface Variant extends RegistryElement.Buildable, OldEnum, Keyed { // Start generate - FrogVariant Variant COLD = getVariant("cold"); diff --git a/paper-api/src/main/java/org/bukkit/entity/Pig.java b/paper-api/src/main/java/org/bukkit/entity/Pig.java index 4b961fd0ec18..4379270ba4ff 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Pig.java +++ b/paper-api/src/main/java/org/bukkit/entity/Pig.java @@ -1,7 +1,7 @@ package org.bukkit.entity; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.PigVariantRegistryEntry; import net.kyori.adventure.key.Key; @@ -46,7 +46,7 @@ public interface Pig extends Steerable, Vehicle { /** * Represents the variant of a pig. */ - interface Variant extends Keyed, Registered.Buildable { + interface Variant extends RegistryElement.Buildable, Keyed { // Start generate - PigVariant Variant COLD = getVariant("cold"); @@ -64,7 +64,7 @@ private static Variant getVariant(@KeyPattern.Value final String key) { /** * Represents the sound variant of a pig. */ - interface SoundVariant extends Keyed { + interface SoundVariant extends RegistryElement, Keyed { // Start generate - PigSoundVariant SoundVariant BIG = getSoundVariant("big"); diff --git a/paper-api/src/main/java/org/bukkit/entity/SulfurCube.java b/paper-api/src/main/java/org/bukkit/entity/SulfurCube.java index 5b0be6dc3c87..8986087697d6 100644 --- a/paper-api/src/main/java/org/bukkit/entity/SulfurCube.java +++ b/paper-api/src/main/java/org/bukkit/entity/SulfurCube.java @@ -2,8 +2,8 @@ import io.papermc.paper.entity.Bucketable; import io.papermc.paper.entity.Shearable; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.SulfurCubeArchetypeRegistryEntry; import net.kyori.adventure.key.Key; @@ -80,7 +80,7 @@ default boolean ignite() { * which define a lot of possible behavior and interaction * throughout its lifetime. */ - interface Archetype extends Keyed, Registered.Buildable { + interface Archetype extends RegistryElement.Buildable, Keyed { // Start generate - SulfurCubeArchetype Archetype BOUNCY = getArchetype("bouncy"); diff --git a/paper-api/src/main/java/org/bukkit/entity/Villager.java b/paper-api/src/main/java/org/bukkit/entity/Villager.java index a2024b5dda03..e3b0ac1ae94c 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Villager.java +++ b/paper-api/src/main/java/org/bukkit/entity/Villager.java @@ -1,9 +1,10 @@ package org.bukkit.entity; import com.google.common.base.Preconditions; +import io.papermc.paper.registry.RegistryElement; import java.util.Locale; -import java.util.Map; // Paper -import java.util.UUID; // Paper +import java.util.Map; +import java.util.UUID; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import org.bukkit.Keyed; @@ -166,7 +167,7 @@ public interface Villager extends AbstractVillager { * Represents Villager type, usually corresponding to what biome they spawn * in. */ - interface Type extends OldEnum, Keyed { + interface Type extends RegistryElement, OldEnum, Keyed { // Start generate - VillagerType Type DESERT = getType("desert"); @@ -218,7 +219,7 @@ static Type[] values() { * Represents the various different Villager professions there may be. * Villagers have different trading options depending on their profession, */ - interface Profession extends OldEnum, Keyed, net.kyori.adventure.translation.Translatable { + interface Profession extends RegistryElement, OldEnum, Keyed, net.kyori.adventure.translation.Translatable { // Start generate - VillagerProfession /** diff --git a/paper-api/src/main/java/org/bukkit/entity/Wolf.java b/paper-api/src/main/java/org/bukkit/entity/Wolf.java index 6853d5a7d9db..51050c89d378 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Wolf.java +++ b/paper-api/src/main/java/org/bukkit/entity/Wolf.java @@ -1,7 +1,7 @@ package org.bukkit.entity; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.WolfVariantRegistryEntry; import net.kyori.adventure.key.Key; @@ -110,7 +110,7 @@ public interface Wolf extends Tameable, Sittable, io.papermc.paper.entity.Collar /** * Represents the variant of a wolf. */ - interface Variant extends Keyed, Registered.Buildable { + interface Variant extends RegistryElement.Buildable, Keyed { // Start generate - WolfVariant // @GeneratedFrom 1.21.5 @@ -142,7 +142,7 @@ private static Variant getVariant(@NotNull @KeyPattern.Value String key) { /** * Represents the sound variant of a wolf. */ - interface SoundVariant extends Keyed { + interface SoundVariant extends RegistryElement, Keyed { // Start generate - WolfSoundVariant SoundVariant ANGRY = getSoundVariant("angry"); diff --git a/paper-api/src/main/java/org/bukkit/entity/ZombieNautilus.java b/paper-api/src/main/java/org/bukkit/entity/ZombieNautilus.java index 37ef2c016c8e..8ad3ec95469b 100644 --- a/paper-api/src/main/java/org/bukkit/entity/ZombieNautilus.java +++ b/paper-api/src/main/java/org/bukkit/entity/ZombieNautilus.java @@ -1,7 +1,7 @@ package org.bukkit.entity; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.ZombieNautilusVariantRegistryEntry; import net.kyori.adventure.key.Key; @@ -29,7 +29,7 @@ public interface ZombieNautilus extends AbstractNautilus { /** * Represents the variant of a Zombie Nautilus. */ - interface Variant extends Keyed, Registered.Buildable { + interface Variant extends RegistryElement.Buildable, Keyed { // Start generate - ZombieNautilusVariant Variant TEMPERATE = getVariant("temperate"); diff --git a/paper-api/src/main/java/org/bukkit/generator/structure/Structure.java b/paper-api/src/main/java/org/bukkit/generator/structure/Structure.java index aac9c5ff15f5..78333a4315ca 100644 --- a/paper-api/src/main/java/org/bukkit/generator/structure/Structure.java +++ b/paper-api/src/main/java/org/bukkit/generator/structure/Structure.java @@ -1,6 +1,7 @@ package org.bukkit.generator.structure; import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; @@ -16,7 +17,7 @@ * there might be additional structures present (for example structures added by * data packs), which can be received via {@link io.papermc.paper.registry.RegistryAccess#getRegistry(io.papermc.paper.registry.RegistryKey)} and {@link io.papermc.paper.registry.RegistryKey#STRUCTURE}. */ -public abstract class Structure implements Keyed { +public abstract class Structure implements RegistryElement, Keyed { // Start generate - Structure public static final Structure ANCIENT_CITY = getStructure("ancient_city"); diff --git a/paper-api/src/main/java/org/bukkit/generator/structure/StructureType.java b/paper-api/src/main/java/org/bukkit/generator/structure/StructureType.java index d8ce890a8f0f..78f38b385e06 100644 --- a/paper-api/src/main/java/org/bukkit/generator/structure/StructureType.java +++ b/paper-api/src/main/java/org/bukkit/generator/structure/StructureType.java @@ -1,5 +1,6 @@ package org.bukkit.generator.structure; +import io.papermc.paper.registry.RegistryElement; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import org.bukkit.Keyed; @@ -14,7 +15,7 @@ * structure types added by data packs), which can be received via * {@link Registry#STRUCTURE_TYPE}. */ -public abstract class StructureType implements Keyed { +public abstract class StructureType implements RegistryElement, Keyed { // Start generate - StructureType public static final StructureType BURIED_TREASURE = getStructureType("buried_treasure"); diff --git a/paper-api/src/main/java/org/bukkit/inventory/ItemType.java b/paper-api/src/main/java/org/bukkit/inventory/ItemType.java index a9660476c739..fc391c7f6ceb 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/ItemType.java +++ b/paper-api/src/main/java/org/bukkit/inventory/ItemType.java @@ -2,6 +2,7 @@ import com.google.common.collect.Multimap; import io.papermc.paper.datacomponent.DataComponentType; +import io.papermc.paper.registry.RegistryElement; import java.util.Set; import java.util.function.Consumer; import net.kyori.adventure.key.Key; @@ -47,7 +48,7 @@ * Represents an item type. */ @NullMarked -public interface ItemType extends Keyed, Translatable, net.kyori.adventure.translation.Translatable, io.papermc.paper.world.flag.FeatureDependant { // Paper - add Translatable & feature flag API +public interface ItemType extends RegistryElement, Keyed, Translatable, net.kyori.adventure.translation.Translatable, io.papermc.paper.world.flag.FeatureDependant { // Paper - add Translatable & feature flag API /** * Typed represents a subtype of {@link ItemType}s that have a known item meta type diff --git a/paper-api/src/main/java/org/bukkit/inventory/MenuType.java b/paper-api/src/main/java/org/bukkit/inventory/MenuType.java index d6e7d019059c..6469409a99ba 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/MenuType.java +++ b/paper-api/src/main/java/org/bukkit/inventory/MenuType.java @@ -1,5 +1,6 @@ package org.bukkit.inventory; +import io.papermc.paper.registry.RegistryElement; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import net.kyori.adventure.text.Component; @@ -27,7 +28,7 @@ * created and viewed by the player. */ @NullMarked -public interface MenuType extends Keyed, io.papermc.paper.world.flag.FeatureDependant { // Paper - make FeatureDependant +public interface MenuType extends RegistryElement, Keyed, io.papermc.paper.world.flag.FeatureDependant { // Paper - make FeatureDependant /** * A MenuType which represents a chest with 1 row. diff --git a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java index 952e08fcc13f..fd74939e0471 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java +++ b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimMaterial.java @@ -1,8 +1,8 @@ package org.bukkit.inventory.meta.trim; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.InlinedRegistryBuilderProvider; import io.papermc.paper.registry.data.TrimMaterialRegistryEntry; @@ -20,7 +20,7 @@ * Represents a material that may be used in an {@link ArmorTrim}. */ @NullMarked -public interface TrimMaterial extends Keyed, Translatable, Registered.Inlineable { +public interface TrimMaterial extends RegistryElement.Inlineable, Keyed, Translatable { /** * Creates an inlined trim material. diff --git a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java index 892da7b262c4..746b0dc9877c 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java +++ b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java @@ -1,8 +1,8 @@ package org.bukkit.inventory.meta.trim; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.InlinedRegistryBuilderProvider; import io.papermc.paper.registry.data.TrimPatternRegistryEntry; @@ -20,7 +20,7 @@ * Represents a pattern that may be used in an {@link ArmorTrim}. */ @NullMarked -public interface TrimPattern extends Keyed, Translatable, Registered.Inlineable { +public interface TrimPattern extends RegistryElement.Inlineable, Keyed, Translatable { /** * Creates an inlined trim pattern. diff --git a/paper-api/src/main/java/org/bukkit/map/MapCursor.java b/paper-api/src/main/java/org/bukkit/map/MapCursor.java index 7deade045772..3cccb63a831b 100644 --- a/paper-api/src/main/java/org/bukkit/map/MapCursor.java +++ b/paper-api/src/main/java/org/bukkit/map/MapCursor.java @@ -1,6 +1,7 @@ package org.bukkit.map; import com.google.common.base.Preconditions; +import io.papermc.paper.registry.RegistryElement; import java.util.Locale; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; @@ -287,7 +288,7 @@ public void setCaption(@Nullable String caption) { * index in the file './assets/minecraft/textures/map/map_icons.png' from minecraft.jar or from a * resource pack. */ - public interface Type extends OldEnum, Keyed { + public interface Type extends RegistryElement, OldEnum, Keyed { // Start generate - MapCursorType Type BANNER_BLACK = getType("banner_black"); diff --git a/paper-api/src/main/java/org/bukkit/potion/PotionEffectType.java b/paper-api/src/main/java/org/bukkit/potion/PotionEffectType.java index 60571a074c26..6f1ade3c5f11 100644 --- a/paper-api/src/main/java/org/bukkit/potion/PotionEffectType.java +++ b/paper-api/src/main/java/org/bukkit/potion/PotionEffectType.java @@ -3,6 +3,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; +import io.papermc.paper.registry.RegistryElement; import java.util.Locale; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; @@ -18,7 +19,7 @@ /** * Represents a type of potion and its effect on an entity. */ -public abstract class PotionEffectType implements Keyed, Translatable, net.kyori.adventure.translation.Translatable, io.papermc.paper.world.flag.FeatureDependant { // Paper - implement Translatable & feature flag API +public abstract class PotionEffectType implements RegistryElement, Keyed, Translatable, net.kyori.adventure.translation.Translatable, io.papermc.paper.world.flag.FeatureDependant { // Paper - implement Translatable & feature flag API private static final BiMap ID_MAP = HashBiMap.create(); /** diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/PaperDataComponentType.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/PaperDataComponentType.java index 8b123740e888..c3eceda8fb8e 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/PaperDataComponentType.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/PaperDataComponentType.java @@ -11,7 +11,7 @@ import org.bukkit.craftbukkit.CraftRegistry; import org.jspecify.annotations.Nullable; -public abstract class PaperDataComponentType extends HolderableBase> implements DataComponentType { +public abstract class PaperDataComponentType extends HolderableBase, DataComponentType> implements DataComponentType { static { DataComponentAdapters.bootstrap(); diff --git a/paper-server/src/main/java/io/papermc/paper/dialog/PaperDialog.java b/paper-server/src/main/java/io/papermc/paper/dialog/PaperDialog.java index ef42f1b74366..864d3d9792da 100644 --- a/paper-server/src/main/java/io/papermc/paper/dialog/PaperDialog.java +++ b/paper-server/src/main/java/io/papermc/paper/dialog/PaperDialog.java @@ -5,7 +5,7 @@ import net.minecraft.core.registries.Registries; import org.bukkit.craftbukkit.CraftRegistry; -public final class PaperDialog extends HolderableBase implements Dialog { +public final class PaperDialog extends HolderableBase implements Dialog { public static Holder bukkitToMinecraftHolder(final Dialog bukkit) { return CraftRegistry.bukkitToMinecraftHolder(bukkit); diff --git a/paper-server/src/main/java/io/papermc/paper/entity/poi/PaperPoiType.java b/paper-server/src/main/java/io/papermc/paper/entity/poi/PaperPoiType.java index c9e0fd15b3f7..055fb94db639 100644 --- a/paper-server/src/main/java/io/papermc/paper/entity/poi/PaperPoiType.java +++ b/paper-server/src/main/java/io/papermc/paper/entity/poi/PaperPoiType.java @@ -10,7 +10,7 @@ import org.jspecify.annotations.NullMarked; @NullMarked -public class PaperPoiType extends HolderableBase implements PoiType { +public class PaperPoiType extends HolderableBase implements PoiType { public static PaperPoiType minecraftHolderToBukkit(final Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.POINT_OF_INTEREST_TYPE); diff --git a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java index 1881884d30c9..dd5cc4292f92 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java @@ -1,10 +1,10 @@ package io.papermc.paper.registry; -import io.papermc.paper.util.Holderable; +import io.papermc.paper.util.HolderableElement; import net.minecraft.core.Holder; import org.bukkit.NamespacedKey; -public abstract class HolderableBase implements Holderable { +public abstract class HolderableBase implements HolderableElement { protected final Holder holder; @@ -20,26 +20,26 @@ public final Holder getHolder() { @Override public final M getHandle() { - return Holderable.super.getHandle(); + return HolderableElement.super.getHandle(); } @Override public final int hashCode() { - return Holderable.super.implHashCode(); + return HolderableElement.super.implHashCode(); } @Override public final boolean equals(final Object obj) { - return Holderable.super.implEquals(obj); + return HolderableElement.super.implEquals(obj); } @Override public String toString() { - return Holderable.super.implToString(); + return HolderableElement.super.implToString(); } @Override public final NamespacedKey getKey() { - return Holderable.super.getKey(); + return HolderableElement.super.getKey(); } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryElement.java b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryElement.java new file mode 100644 index 000000000000..14092ad7ef7d --- /dev/null +++ b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryElement.java @@ -0,0 +1,23 @@ +package io.papermc.paper.registry; + +import io.papermc.paper.adventure.PaperAdventure; +import io.papermc.paper.registry.tag.TagKey; +import net.kyori.adventure.key.Key; +import net.minecraft.core.Holder; +import org.jspecify.annotations.NullMarked; + +@NullMarked +public interface PaperRegistryElement extends RegistryElement { + + Holder getHolder(); + + @Override + default boolean is(final Key type) { + return this.getHolder().is(PaperAdventure.asVanilla(type)); + } + + @Override + default boolean is(final TagKey type) { + return this.getHolder().is(PaperRegistries.toNms(type)); + } +} diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java index 7fbda231a5ca..66040a080dd9 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java @@ -1,8 +1,8 @@ package io.papermc.paper.registry.data; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.util.Conversions; import java.util.function.Consumer; @@ -11,7 +11,7 @@ public final class InlinedRegistryBuilderProviderImpl implements InlinedRegistryBuilderProvider { @Override - public & Keyed, B extends RegistryBuilder> T create( + public & Keyed, B extends RegistryBuilder> T create( final RegistryKey key, final Consumer> value ) { diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java b/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java index 068d139d0dea..327541138683 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java @@ -7,9 +7,9 @@ import io.papermc.paper.registry.PaperRegistries; import io.papermc.paper.registry.PaperRegistryBuilder; import io.papermc.paper.registry.PaperRegistryBuilderFactory; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; import io.papermc.paper.registry.entry.RegistryEntryMeta; @@ -95,7 +95,7 @@ private static > Reg return buildableMeta; } - public , E> Function getEntryCreator(final RegistryKey registryKey) { + public , E> Function getEntryCreator(final RegistryKey registryKey) { final RegistryEntryMeta.Buildable directHolderBuildableMeta = getDirectHolderBuildableMeta(registryKey); return m -> directHolderBuildableMeta.entryFactory().create(this, m); } @@ -132,19 +132,19 @@ public Tag getOrCreateTag(final TagKey tagKey) { } @Override - public , E, B extends RegistryBuilder> RegistryHolder.Reference getOrCreateReferenceHolder(final TypedKey key) { + public , E, B extends RegistryBuilder> RegistryHolder.Reference getOrCreateReferenceHolder(final TypedKey key) { final Holder.Reference reference = this.getReferenceHolder(key); return PaperRegistryHolders.createReference(reference, this.getEntryCreator(key.registryKey())); } @Override - public , E, B extends RegistryBuilder> RegistryHolder.Inlined getOrCreateInlinedHolder(final RegistryKey registryKey, final Consumer> value) { + public , E, B extends RegistryBuilder> RegistryHolder.Inlined getOrCreateInlinedHolder(final RegistryKey registryKey, final Consumer> value) { final Holder.Direct directHolder = this.createHolderFromBuilder(registryKey, value); return PaperRegistryHolders.createInlined(registryKey, directHolder, this.getEntryCreator(registryKey)); } @Override - public , E, B extends RegistryBuilder> RegistryHolderSetBuilder createSetBuilder(final RegistryKey registryKey) { + public , E, B extends RegistryBuilder> RegistryHolderSetBuilder createSetBuilder(final RegistryKey registryKey) { return new RegistryHolderSetBuilderImpl<>(registryKey, this); } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java index 7e65ef385ff9..9bfa66ef1a90 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java @@ -1,17 +1,25 @@ package io.papermc.paper.registry.holder; import io.papermc.paper.registry.PaperRegistries; -import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.PaperRegistryElement; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import net.minecraft.core.Holder; import org.bukkit.Keyed; import org.bukkit.craftbukkit.CraftRegistry; -record InlinedRegistryHolderImpl, ENTRY, M>(RegistryKey registryKey, ENTRY entry, Holder.Direct holder) implements RegistryHolder.Inlined { // TODO remove Keyed +record InlinedRegistryHolderImpl, ENTRY, M>( + RegistryKey registryKey, ENTRY entry, Holder.Direct holder +) implements RegistryHolder.Inlined, PaperRegistryElement { // TODO remove Keyed @Override public API value() { //noinspection RedundantTypeArguments return CraftRegistry.minecraftHolderToBukkit(this.holder, PaperRegistries.registryToNms(this.registryKey)); } + + @Override + public Holder getHolder() { + return this.holder; + } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java index 286988eb53e1..7dfedc7bf33d 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java @@ -1,6 +1,6 @@ package io.papermc.paper.registry.holder; -import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.util.Conversions; import java.util.function.Function; @@ -9,30 +9,30 @@ public final class PaperRegistryHolders { - public static , ENTRY, M> RegistryHolder create(final RegistryKey registryKey, final Holder holder, final Conversions conversions) { // TODO remove Keyed + public static , ENTRY, M> RegistryHolder create(final RegistryKey registryKey, final Holder holder, final Conversions conversions) { // TODO remove Keyed final Function entryCreator = conversions.getEntryCreator(registryKey); return create(registryKey, holder, entryCreator); } - public static , ENTRY, M> RegistryHolder create(final RegistryKey registryKey, final Holder holder, final Function entryCreator) { // TODO remove Keyed + public static , ENTRY, M> RegistryHolder create(final RegistryKey registryKey, final Holder holder, final Function entryCreator) { // TODO remove Keyed return switch (holder) { case final Holder.Direct direct -> createInlined(registryKey, direct, entryCreator); case final Holder.Reference reference -> createReference(reference, entryCreator); }; } - public static , ENTRY, M> Holder convert(final RegistryHolder holder) { // TODO remove Keyed + public static , ENTRY, M> Holder convert(final RegistryHolder holder) { // TODO remove Keyed return switch (holder) { case final RegistryHolder.Reference ref -> ((ReferenceRegistryHolderImpl) ref).holder(); case final RegistryHolder.Inlined inlined -> ((InlinedRegistryHolderImpl) inlined).holder(); }; } - public static , ENTRY, M> RegistryHolder.Reference createReference(final Holder.Reference holder, final Function entryCreator) { // TODO remove Keyed + public static , ENTRY, M> RegistryHolder.Reference createReference(final Holder.Reference holder, final Function entryCreator) { // TODO remove Keyed return new ReferenceRegistryHolderImpl<>(holder, entryCreator); } - public static , ENTRY, M> RegistryHolder.Inlined createInlined(final RegistryKey registryKey, final Holder.Direct holder, final Function entryCreator) { // TODO remove Keyed + public static , ENTRY, M> RegistryHolder.Inlined createInlined(final RegistryKey registryKey, final Holder.Direct holder, final Function entryCreator) { // TODO remove Keyed return new InlinedRegistryHolderImpl<>(registryKey, entryCreator.apply(holder.value()), holder); } private PaperRegistryHolders() {} diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java index f05ee84ab3e1..e08dac8b1058 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java @@ -1,18 +1,19 @@ package io.papermc.paper.registry.holder; import io.papermc.paper.registry.PaperRegistries; -import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.PaperRegistryElement; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; import java.util.function.Function; import net.minecraft.core.Holder; import org.bukkit.craftbukkit.CraftRegistry; -record ReferenceRegistryHolderImpl, ENTRY, M>( +record ReferenceRegistryHolderImpl, ENTRY, M>( RegistryKey registryKey, Holder.Reference holder, Function entryCreator -) implements RegistryHolder.Reference { +) implements RegistryHolder.Reference, PaperRegistryElement { ReferenceRegistryHolderImpl(final Holder.Reference holder, final Function entryCreator) { this(PaperRegistries.registryFromNms(holder.key().registryKey()), holder, entryCreator); @@ -33,4 +34,9 @@ public API value() { public ENTRY entry() { return this.entryCreator.apply(this.holder.value()); } + + @Override + public Holder getHolder() { + return this.holder; + } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java b/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java index 2cea8a944925..795bab3568c4 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java @@ -1,7 +1,7 @@ package io.papermc.paper.registry.set; import io.papermc.paper.registry.PaperRegistries; -import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; import io.papermc.paper.registry.data.util.Conversions; @@ -28,7 +28,7 @@ public static HolderSet convertToNms(final ResourceKey, E, M> HolderSet convertToNmsWithDirects(final ResourceKey> resourceKey, final RegistryOps.RegistryInfoLookup lookup, final RegistrySet registrySet) { // TODO remove Keyed + public static , E, M> HolderSet convertToNmsWithDirects(final ResourceKey> resourceKey, final RegistryOps.RegistryInfoLookup lookup, final RegistrySet registrySet) { // TODO remove Keyed if (registrySet instanceof NamedRegistryKeySetImpl) { return ((NamedRegistryKeySetImpl) registrySet).namedSet(); } else if (registrySet.isEmpty()) { @@ -71,7 +71,7 @@ public static RegistryKeySet convertToApi(final Registry } } - public static , E, M> RegistrySet convertToApiWithDirects(final RegistryKey registryKey, final HolderSet holders, final Conversions conversions) { // TODO remove Keyed + public static , E, M> RegistrySet convertToApiWithDirects(final RegistryKey registryKey, final HolderSet holders, final Conversions conversions) { // TODO remove Keyed if (holders instanceof final HolderSet.Named named) { return new NamedRegistryKeySetImpl<>(PaperRegistries.fromNms(named.key()), named); } else if (holders instanceof final HolderSet.Direct direct) { diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilderImpl.java index bd59782b01a8..cff64052667d 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetBuilderImpl.java @@ -1,8 +1,8 @@ package io.papermc.paper.registry.set; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.RegistryBuilderFactory; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; import io.papermc.paper.registry.data.util.Conversions; @@ -14,7 +14,7 @@ import org.bukkit.Keyed; import org.bukkit.craftbukkit.CraftRegistry; -public class RegistryHolderSetBuilderImpl & Keyed, E, B extends RegistryBuilder, M> implements RegistryHolderSetBuilder { // TODO remove Keyed +public class RegistryHolderSetBuilderImpl & Keyed, E, B extends RegistryBuilder, M> implements RegistryHolderSetBuilder { // TODO remove Keyed private final RegistryKey registryKey; final List> holders = new ArrayList<>(); diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java index eed5b5c01b43..a058de09208b 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java @@ -1,6 +1,6 @@ package io.papermc.paper.registry.set; -import io.papermc.paper.registry.Registered; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.holder.PaperRegistryHolders; import io.papermc.paper.registry.holder.RegistryHolder; @@ -13,7 +13,7 @@ import org.bukkit.Keyed; import org.jspecify.annotations.Nullable; -final class RegistryHolderSetImpl, E, M> implements RegistryHolderSet { // TODO remove Keyed +final class RegistryHolderSetImpl, E, M> implements RegistryHolderSet { // TODO remove Keyed private final RegistryKey registryKey; private final Function entryCreator; diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistrySetProviderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistrySetProviderImpl.java index 2e7ce40868bf..752d7dc02ea0 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistrySetProviderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistrySetProviderImpl.java @@ -1,7 +1,7 @@ package io.papermc.paper.registry.set; -import io.papermc.paper.registry.Registered; import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.util.Conversions; import org.bukkit.Keyed; @@ -9,7 +9,7 @@ public class RegistrySetProviderImpl implements RegistrySetProvider { @Override - public , E, B extends RegistryBuilder> RegistryHolderSetBuilder registryHolderSetBuilder(final RegistryKey registryKey) { // TODO remove Keyed + public , E, B extends RegistryBuilder> RegistryHolderSetBuilder registryHolderSetBuilder(final RegistryKey registryKey) { // TODO remove Keyed return new RegistryHolderSetBuilderImpl<>(registryKey, Conversions.global()); } } diff --git a/paper-server/src/main/java/io/papermc/paper/util/HolderableElement.java b/paper-server/src/main/java/io/papermc/paper/util/HolderableElement.java new file mode 100644 index 000000000000..1f09fbaee19b --- /dev/null +++ b/paper-server/src/main/java/io/papermc/paper/util/HolderableElement.java @@ -0,0 +1,6 @@ +package io.papermc.paper.util; + +import io.papermc.paper.registry.PaperRegistryElement; + +public interface HolderableElement extends Holderable, PaperRegistryElement { +} diff --git a/paper-server/src/main/java/io/papermc/paper/util/OldEnumHolderable.java b/paper-server/src/main/java/io/papermc/paper/util/OldEnumHolderable.java index 5b1fa5bd5495..c8ee6880c54e 100644 --- a/paper-server/src/main/java/io/papermc/paper/util/OldEnumHolderable.java +++ b/paper-server/src/main/java/io/papermc/paper/util/OldEnumHolderable.java @@ -13,7 +13,7 @@ @SuppressWarnings({"removal", "DeprecatedIsStillUsed"}) @Deprecated @NullMarked -public abstract class OldEnumHolderable, M> extends HolderableBase implements Holderable, OldEnum, Keyed { +public abstract class OldEnumHolderable, M> extends HolderableBase implements Holderable, OldEnum, Keyed { private final int ordinal; private final @Nullable String name; @@ -60,9 +60,4 @@ public int ordinal() { private void checkIsReference() { Preconditions.checkState(this.holder.kind() == Holder.Kind.REFERENCE, "Cannot call method for this registry item, because it is not registered."); } - - @Override - public String toString() { - return this.implToString(); - } } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameEvent.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameEvent.java index 4a05855086bb..83dc65aa2951 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameEvent.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameEvent.java @@ -1,12 +1,12 @@ package org.bukkit.craftbukkit; -import io.papermc.paper.util.Holderable; +import io.papermc.paper.util.HolderableElement; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import org.bukkit.GameEvent; import org.bukkit.NamespacedKey; -public class CraftGameEvent extends GameEvent implements Holderable { +public class CraftGameEvent extends GameEvent implements HolderableElement { public static GameEvent minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.GAME_EVENT); @@ -39,21 +39,21 @@ public int getVibrationLevel() { @Override public NamespacedKey getKey() { - return Holderable.super.getKey(); + return HolderableElement.super.getKey(); } @Override public boolean equals(Object other) { - return Holderable.super.implEquals(other); + return HolderableElement.super.implEquals(other); } @Override public int hashCode() { - return Holderable.super.implHashCode(); + return HolderableElement.super.implHashCode(); } @Override public String toString() { - return Holderable.super.implToString(); + return HolderableElement.super.implToString(); } } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java index f31b215d9419..6a9cb9b9758f 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java @@ -1,6 +1,7 @@ package org.bukkit.craftbukkit; import com.mojang.serialization.DataResult; +import io.papermc.paper.util.HolderableElement; import io.papermc.paper.world.flag.PaperFeatureDependent; import java.util.function.BiFunction; import java.util.function.Function; @@ -11,7 +12,7 @@ import org.jspecify.annotations.NullMarked; @NullMarked -public class CraftGameRule extends GameRule implements PaperFeatureDependent> { +public class CraftGameRule extends GameRule implements HolderableElement, GameRule>, PaperFeatureDependent> { public static final BiFunction, IllegalArgumentException> INVALID_VALUE = (value, error) -> { return new IllegalArgumentException("Invalid value: %s (%s)".formatted(value, error.message())); @@ -44,22 +45,22 @@ public Holder> getHolder() { @Override public NamespacedKey getKey() { - return PaperFeatureDependent.super.getKey(); + return HolderableElement.super.getKey(); } @Override public int hashCode() { - return PaperFeatureDependent.super.implHashCode(); + return HolderableElement.super.implHashCode(); } @Override public boolean equals(final Object obj) { - return PaperFeatureDependent.super.implEquals(obj); + return HolderableElement.super.implEquals(obj); } @Override public String toString() { - return PaperFeatureDependent.super.implToString(); + return HolderableElement.super.implToString(); } @Override diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftJukeboxSong.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftJukeboxSong.java index 5f8868b2350e..77baae4f6fec 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftJukeboxSong.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftJukeboxSong.java @@ -11,7 +11,7 @@ import org.jspecify.annotations.NullMarked; @NullMarked -public class CraftJukeboxSong extends HolderableBase implements JukeboxSong { +public class CraftJukeboxSong extends HolderableBase implements JukeboxSong { public static JukeboxSong minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.JUKEBOX_SONG); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftMusicInstrument.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftMusicInstrument.java index 610bebdf860a..6501f6f11a7b 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftMusicInstrument.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftMusicInstrument.java @@ -3,7 +3,7 @@ import com.google.common.base.Preconditions; import io.papermc.paper.adventure.PaperAdventure; import io.papermc.paper.registry.RegistryKey; -import io.papermc.paper.util.Holderable; +import io.papermc.paper.util.HolderableElement; import net.kyori.adventure.text.Component; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; @@ -13,7 +13,7 @@ import org.bukkit.Sound; import org.jetbrains.annotations.NotNull; -public class CraftMusicInstrument extends MusicInstrument implements io.papermc.paper.util.Holderable { +public class CraftMusicInstrument extends MusicInstrument implements HolderableElement { public static MusicInstrument minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.INSTRUMENT); // Paper - switch to Holder @@ -84,7 +84,7 @@ public Sound getSound() { @NotNull @Override public NamespacedKey getKey() { - return Holderable.super.getKey(); + return HolderableElement.super.getKey(); } @Override diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBiome.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBiome.java index 14e6fb69e9af..5a9e91ce7efc 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBiome.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBiome.java @@ -1,7 +1,9 @@ package org.bukkit.craftbukkit.block; +import io.papermc.paper.registry.tag.TagKey; import io.papermc.paper.util.OldEnumHolderable; import java.util.Objects; +import net.kyori.adventure.key.Key; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import org.bukkit.NamespacedKey; @@ -83,5 +85,15 @@ public int hashCode() { public String toString() { return "CUSTOM"; } + + @Override + public boolean is(final Key type) { + return this.getKey().equals(type); + } + + @Override + public boolean is(final TagKey type) { + return false; + } } } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java index 15a8d8c6f168..04c8b3f0fc23 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockType.java @@ -40,7 +40,7 @@ import org.jspecify.annotations.Nullable; @NullMarked -public class CraftBlockType extends HolderableBase implements BlockType.Typed, io.papermc.paper.world.flag.PaperFeatureDependent { // Paper - feature flag API +public class CraftBlockType extends HolderableBase implements BlockType.Typed, io.papermc.paper.world.flag.PaperFeatureDependent { // Paper - feature flag API public static Material minecraftToBukkit(Block block) { diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/damage/CraftDamageType.java b/paper-server/src/main/java/org/bukkit/craftbukkit/damage/CraftDamageType.java index 1f3f7f83fd24..bcf7ed72bd3e 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/damage/CraftDamageType.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/damage/CraftDamageType.java @@ -11,7 +11,7 @@ import org.jspecify.annotations.NullMarked; @NullMarked -public class CraftDamageType extends HolderableBase implements DamageType { +public class CraftDamageType extends HolderableBase implements DamageType { public CraftDamageType(final Holder holder) { super(holder); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/paper-server/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java index 45b70a28e0c3..6b0f3b644995 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java @@ -2,12 +2,12 @@ import com.google.common.base.Preconditions; import io.papermc.paper.registry.RegistryKey; -import io.papermc.paper.util.Holderable; +import io.papermc.paper.util.HolderableElement; import java.util.Locale; -import net.minecraft.util.Util; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import net.minecraft.tags.EnchantmentTags; +import net.minecraft.util.Util; import org.bukkit.NamespacedKey; import org.bukkit.craftbukkit.CraftRegistry; import org.bukkit.craftbukkit.inventory.CraftItemStack; @@ -18,7 +18,7 @@ import org.bukkit.enchantments.EnchantmentWrapper; import org.bukkit.inventory.ItemStack; -public class CraftEnchantment extends Enchantment implements Holderable { +public class CraftEnchantment extends Enchantment implements HolderableElement { public static Enchantment minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.ENCHANTMENT); @@ -60,7 +60,7 @@ public Holder getHolder() { @Override public NamespacedKey getKey() { - return Holderable.super.getKey(); + return HolderableElement.super.getKey(); } @Override @@ -233,16 +233,16 @@ public String getTranslationKey() { @Override public boolean equals(Object other) { - return Holderable.super.implEquals(other); + return HolderableElement.super.implEquals(other); } @Override public int hashCode() { - return Holderable.super.implHashCode(); + return HolderableElement.super.implHashCode(); } @Override public String toString() { - return Holderable.super.implToString(); + return HolderableElement.super.implToString(); } } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java index 8eb1d46ec221..894cd44e85c2 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java @@ -73,7 +73,7 @@ public CraftType(final Holder holder) { } } - public static class CraftSoundVariant extends HolderableBase implements SoundVariant { + public static class CraftSoundVariant extends HolderableBase implements SoundVariant { public static SoundVariant minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.CAT_SOUND_VARIANT); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java index 855ddda60c1a..ee8dedc86203 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java @@ -47,7 +47,7 @@ public void setSoundVariant(final SoundVariant variant) { this.getHandle().setSoundVariant(CraftSoundVariant.bukkitToMinecraftHolder(variant)); } - public static class CraftVariant extends HolderableBase implements Variant { + public static class CraftVariant extends HolderableBase implements Variant { public static Variant minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.CHICKEN_VARIANT); @@ -62,7 +62,7 @@ public CraftVariant(Holder holder) { } } - public static class CraftSoundVariant extends HolderableBase implements SoundVariant { + public static class CraftSoundVariant extends HolderableBase implements SoundVariant { public static SoundVariant minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.CHICKEN_SOUND_VARIANT); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java index 8403fb7872e3..23cd448f27ec 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java @@ -47,7 +47,7 @@ public void setSoundVariant(SoundVariant variant) { this.getHandle().setSoundVariant(CraftSoundVariant.bukkitToMinecraftHolder(variant)); } - public static class CraftVariant extends HolderableBase implements Variant { + public static class CraftVariant extends HolderableBase implements Variant { public static Variant minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.COW_VARIANT); @@ -62,7 +62,7 @@ public CraftVariant(final Holder holder) { } } - public static class CraftSoundVariant extends HolderableBase implements SoundVariant { + public static class CraftSoundVariant extends HolderableBase implements SoundVariant { public static SoundVariant minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.COW_SOUND_VARIANT); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java index 9802062711bd..4d855fe60710 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java @@ -95,7 +95,7 @@ public void setSoundVariant(SoundVariant variant) { this.getHandle().setSoundVariant(CraftSoundVariant.bukkitToMinecraftHolder(variant)); } - public static class CraftVariant extends HolderableBase implements Variant { + public static class CraftVariant extends HolderableBase implements Variant { public static Variant minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.PIG_VARIANT); @@ -110,7 +110,7 @@ public CraftVariant(final Holder holder) { } } - public static class CraftSoundVariant extends HolderableBase implements SoundVariant { + public static class CraftSoundVariant extends HolderableBase implements SoundVariant { public static SoundVariant minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.PIG_SOUND_VARIANT); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftSulfurCube.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftSulfurCube.java index 7a2e9c8d693c..46aa1628d61b 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftSulfurCube.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftSulfurCube.java @@ -88,7 +88,7 @@ public boolean canBreed() { public void setBreed(final boolean breed) { } - public static class CraftArchetype extends HolderableBase implements Archetype { + public static class CraftArchetype extends HolderableBase implements Archetype { public static Archetype minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.SULFUR_CUBE_ARCHETYPE); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java index 1e24ae852691..24e2caf08280 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java @@ -90,7 +90,7 @@ public void setSoundVariant(SoundVariant soundVariant) { this.getHandle().setSoundVariant(CraftSoundVariant.bukkitToMinecraftHolder(soundVariant)); } - public static class CraftVariant extends HolderableBase implements Variant { + public static class CraftVariant extends HolderableBase implements Variant { public static Variant minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.WOLF_VARIANT); @@ -105,7 +105,7 @@ public CraftVariant(final Holder holder) { } } - public static class CraftSoundVariant extends HolderableBase implements SoundVariant { + public static class CraftSoundVariant extends HolderableBase implements SoundVariant { public static SoundVariant minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.WOLF_SOUND_VARIANT); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftZombieNautilus.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftZombieNautilus.java index 6ad86ba7abac..c2e0338aceb2 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftZombieNautilus.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftZombieNautilus.java @@ -4,14 +4,15 @@ import io.papermc.paper.registry.HolderableBase; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; -import net.minecraft.world.entity.animal.nautilus.ZombieNautilusVariant; import net.minecraft.world.entity.animal.nautilus.ZombieNautilus; +import net.minecraft.world.entity.animal.nautilus.ZombieNautilusVariant; import org.bukkit.craftbukkit.CraftRegistry; import org.bukkit.craftbukkit.CraftServer; import org.jspecify.annotations.NullMarked; @NullMarked public class CraftZombieNautilus extends CraftAbstractNautilus implements org.bukkit.entity.ZombieNautilus { + public CraftZombieNautilus(final CraftServer server, final ZombieNautilus entity) { super(server, entity); } @@ -22,18 +23,18 @@ public ZombieNautilus getHandle() { } @Override - public org.bukkit.entity.ZombieNautilus.Variant getVariant() { + public Variant getVariant() { return CraftVariant.minecraftHolderToBukkit(this.getHandle().getVariant()); } @Override - public void setVariant(org.bukkit.entity.ZombieNautilus.Variant variant) { + public void setVariant(Variant variant) { Preconditions.checkArgument(variant != null, "variant cannot be null"); this.getHandle().setVariant(CraftVariant.bukkitToMinecraftHolder(variant)); } - public static class CraftVariant extends HolderableBase implements org.bukkit.entity.ZombieNautilus.Variant { + public static class CraftVariant extends HolderableBase implements Variant { public static org.bukkit.entity.ZombieNautilus.Variant minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.ZOMBIE_NAUTILUS_VARIANT); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/generator/structure/CraftStructure.java b/paper-server/src/main/java/org/bukkit/craftbukkit/generator/structure/CraftStructure.java index 524c28b4c876..a7bf53bb1cdf 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/generator/structure/CraftStructure.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/generator/structure/CraftStructure.java @@ -1,6 +1,6 @@ package org.bukkit.craftbukkit.generator.structure; -import io.papermc.paper.util.Holderable; +import io.papermc.paper.util.HolderableElement; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import org.bukkit.NamespacedKey; @@ -8,7 +8,7 @@ import org.bukkit.generator.structure.Structure; import org.bukkit.generator.structure.StructureType; -public class CraftStructure extends Structure implements Holderable { +public class CraftStructure extends Structure implements HolderableElement { public static Structure minecraftToBukkit(net.minecraft.world.level.levelgen.structure.Structure minecraft) { return CraftRegistry.minecraftToBukkit(minecraft, Registries.STRUCTURE); @@ -44,21 +44,21 @@ public StructureType getStructureType() { @Override public NamespacedKey getKey() { - return Holderable.super.getKey(); + return HolderableElement.super.getKey(); } @Override public int hashCode() { - return Holderable.super.implHashCode(); + return HolderableElement.super.implHashCode(); } @Override public boolean equals(final Object obj) { - return Holderable.super.implEquals(obj); + return HolderableElement.super.implEquals(obj); } @Override public String toString() { - return Holderable.super.implToString(); + return HolderableElement.super.implToString(); } } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/generator/structure/CraftStructureType.java b/paper-server/src/main/java/org/bukkit/craftbukkit/generator/structure/CraftStructureType.java index 8f1ea18e02fe..b6458f2f3765 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/generator/structure/CraftStructureType.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/generator/structure/CraftStructureType.java @@ -1,13 +1,13 @@ package org.bukkit.craftbukkit.generator.structure; -import io.papermc.paper.util.Holderable; +import io.papermc.paper.util.HolderableElement; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import org.bukkit.NamespacedKey; import org.bukkit.craftbukkit.CraftRegistry; import org.bukkit.generator.structure.StructureType; -public class CraftStructureType extends StructureType implements Holderable> { +public class CraftStructureType extends StructureType implements HolderableElement, StructureType> { public static StructureType minecraftToBukkit(net.minecraft.world.level.levelgen.structure.StructureType minecraft) { return CraftRegistry.minecraftToBukkit(minecraft, Registries.STRUCTURE_TYPE); @@ -30,21 +30,21 @@ public Holder> get @Override public NamespacedKey getKey() { - return Holderable.super.getKey(); + return HolderableElement.super.getKey(); } @Override public int hashCode() { - return Holderable.super.implHashCode(); + return HolderableElement.super.implHashCode(); } @Override public boolean equals(final Object obj) { - return Holderable.super.implEquals(obj); + return HolderableElement.super.implEquals(obj); } @Override public String toString() { - return Holderable.super.implToString(); + return HolderableElement.super.implToString(); } } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java index b1f7fbf5f534..a9ceed4ea188 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemType.java @@ -39,7 +39,7 @@ import org.jspecify.annotations.Nullable; @NullMarked -public class CraftItemType extends HolderableBase implements ItemType.Typed, io.papermc.paper.world.flag.PaperFeatureDependent { +public class CraftItemType extends HolderableBase implements ItemType.Typed, io.papermc.paper.world.flag.PaperFeatureDependent { private final Supplier> itemMetaData; diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMenuType.java b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMenuType.java index 065309bf3e41..378941441352 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMenuType.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMenuType.java @@ -18,7 +18,7 @@ import org.jspecify.annotations.Nullable; @NullMarked -public class CraftMenuType> extends HolderableBase> implements MenuType.Typed, io.papermc.paper.world.flag.PaperFeatureDependent> { // Paper - make FeatureDependant +public class CraftMenuType> extends HolderableBase, MenuType> implements MenuType.Typed, io.papermc.paper.world.flag.PaperFeatureDependent> { // Paper - make FeatureDependant private final Supplier> typeData; diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/trim/CraftTrimMaterial.java b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/trim/CraftTrimMaterial.java index 1df7df13a602..917d76f06d59 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/trim/CraftTrimMaterial.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/trim/CraftTrimMaterial.java @@ -10,7 +10,7 @@ import org.bukkit.inventory.meta.trim.TrimMaterial; import org.jetbrains.annotations.NotNull; -public class CraftTrimMaterial extends HolderableBase implements TrimMaterial { +public class CraftTrimMaterial extends HolderableBase implements TrimMaterial { public static TrimMaterial minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.TRIM_MATERIAL); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/trim/CraftTrimPattern.java b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/trim/CraftTrimPattern.java index 5bb67269b055..1669045d6776 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/trim/CraftTrimPattern.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/trim/CraftTrimPattern.java @@ -10,7 +10,7 @@ import org.bukkit.inventory.meta.trim.TrimPattern; import org.jetbrains.annotations.NotNull; -public class CraftTrimPattern extends HolderableBase implements TrimPattern { +public class CraftTrimPattern extends HolderableBase implements TrimPattern { public static TrimPattern minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.TRIM_PATTERN); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java b/paper-server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java index 362486f47d65..6bd7af9ac1b8 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java @@ -2,7 +2,7 @@ import com.google.common.base.Preconditions; import com.google.common.base.Suppliers; -import io.papermc.paper.util.Holderable; +import io.papermc.paper.util.HolderableElement; import io.papermc.paper.world.flag.PaperFeatureDependent; import java.util.Map; import java.util.function.Supplier; @@ -23,7 +23,7 @@ import org.jspecify.annotations.NullMarked; @NullMarked -public class CraftPotionEffectType extends PotionEffectType implements Holderable, io.papermc.paper.world.flag.PaperFeatureDependent { +public class CraftPotionEffectType extends PotionEffectType implements HolderableElement, io.papermc.paper.world.flag.PaperFeatureDependent { public static PotionEffectType minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.MOB_EFFECT); From 4461b2642b9d967a568282e39b520193807deb4b Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Sat, 8 Aug 2026 19:47:55 +0200 Subject: [PATCH 3/9] TypedKey is not a Key --- .../paper/registry/RegistryElement.java | 4 +--- .../io/papermc/paper/registry/TypedKey.java | 5 +---- .../papermc/paper/registry/TypedKeyImpl.java | 18 ------------------ .../inventory/ItemTypeRecipeChoiceImpl.java | 2 +- .../registry/PaperRegistryBuilderFactory.java | 7 +------ .../paper/registry/PaperRegistryElement.java | 5 +++++ .../paper/registry/WritableCraftRegistry.java | 2 +- .../paper/registry/data/util/Conversions.java | 2 +- .../bukkit/craftbukkit/block/CraftBiome.java | 6 ++++++ 9 files changed, 17 insertions(+), 34 deletions(-) diff --git a/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java b/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java index d97aabdd0b34..6c7dae44fd9e 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java @@ -25,9 +25,7 @@ public interface RegistryElement { * @param type the key * @return whether this element is identified by the given key. */ - default boolean is(final TypedKey type) { // TypedKey shouldn't extend Key - return this.is(type.key()); - } + boolean is(final TypedKey type); /** * Checks whether this element is identified by the given key. diff --git a/paper-api/src/main/java/io/papermc/paper/registry/TypedKey.java b/paper-api/src/main/java/io/papermc/paper/registry/TypedKey.java index a1a25c3ca9d9..1680c506d3c1 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/TypedKey.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/TypedKey.java @@ -2,8 +2,6 @@ import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; -import net.kyori.adventure.key.Keyed; -import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; /** @@ -12,14 +10,13 @@ * @param the value type for the registry */ @NullMarked -public sealed interface TypedKey extends Key permits TypedKeyImpl { +public sealed interface TypedKey permits TypedKeyImpl { /** * Gets the key for the value in the registry. * * @return the value's key */ - @Override Key key(); /** diff --git a/paper-api/src/main/java/io/papermc/paper/registry/TypedKeyImpl.java b/paper-api/src/main/java/io/papermc/paper/registry/TypedKeyImpl.java index a4063783c318..99375deaa6b9 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/TypedKeyImpl.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/TypedKeyImpl.java @@ -1,26 +1,8 @@ package io.papermc.paper.registry; import net.kyori.adventure.key.Key; -import net.kyori.adventure.key.KeyPattern; import org.jspecify.annotations.NullMarked; @NullMarked record TypedKeyImpl(Key key, RegistryKey registryKey) implements TypedKey { - // Wrap key methods to make this easier to use - @KeyPattern.Namespace - @Override - public String namespace() { - return this.key.namespace(); - } - - @KeyPattern.Value - @Override - public String value() { - return this.key.value(); - } - - @Override - public String asString() { - return this.key.asString(); - } } diff --git a/paper-api/src/main/java/org/bukkit/inventory/ItemTypeRecipeChoiceImpl.java b/paper-api/src/main/java/org/bukkit/inventory/ItemTypeRecipeChoiceImpl.java index 07444c87a050..118f3375df16 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/ItemTypeRecipeChoiceImpl.java +++ b/paper-api/src/main/java/org/bukkit/inventory/ItemTypeRecipeChoiceImpl.java @@ -70,7 +70,7 @@ public List getChoices() { if (this.legacyChoices == null) { final List choices = new ArrayList<>(); for (final TypedKey itemTypeKey : this.itemTypes) { - choices.add(Registry.MATERIAL.getOrThrow(itemTypeKey)); + choices.add(Registry.MATERIAL.getOrThrow(itemTypeKey.key())); } this.legacyChoices = Collections.unmodifiableList(choices); } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryBuilderFactory.java b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryBuilderFactory.java index 712b88b42353..6cf80f28cc33 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryBuilderFactory.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryBuilderFactory.java @@ -1,29 +1,24 @@ package io.papermc.paper.registry; -import io.papermc.paper.adventure.PaperAdventure; import io.papermc.paper.registry.data.util.Conversions; import java.util.Optional; import java.util.function.Function; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import org.bukkit.Keyed; import org.jspecify.annotations.Nullable; public class PaperRegistryBuilderFactory> implements RegistryBuilderFactory { // TODO remove Keyed - private final ResourceKey> registryKey; private final Conversions conversions; private final PaperRegistryBuilder.Filler builderFiller; private final Function, Optional> existingValueGetter; private @Nullable B builder; public PaperRegistryBuilderFactory( - final ResourceKey> registryKey, final Conversions conversions, final PaperRegistryBuilder.Filler builderFiller, final Function, Optional> existingValueGetter ) { - this.registryKey = registryKey; this.conversions = conversions; this.builderFiller = builderFiller; this.existingValueGetter = existingValueGetter; @@ -51,7 +46,7 @@ public B empty() { @Override public B copyFrom(final TypedKey key) { this.validate(); - final Optional existing = this.existingValueGetter.apply(PaperAdventure.asVanilla(this.registryKey, key)); + final Optional existing = this.existingValueGetter.apply(PaperRegistries.toNms(key)); if (existing.isEmpty()) { throw new IllegalArgumentException("Key " + key + " doesn't exist"); } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryElement.java b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryElement.java index 14092ad7ef7d..dcfd8494b609 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryElement.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/PaperRegistryElement.java @@ -11,6 +11,11 @@ public interface PaperRegistryElement extends RegistryElement { Holder getHolder(); + @Override + default boolean is(final TypedKey type) { + return this.getHolder().is(PaperRegistries.toNms(type)); + } + @Override default boolean is(final Key type) { return this.getHolder().is(PaperAdventure.asVanilla(type)); diff --git a/paper-server/src/main/java/io/papermc/paper/registry/WritableCraftRegistry.java b/paper-server/src/main/java/io/papermc/paper/registry/WritableCraftRegistry.java index 3cbf0e908eea..a92ab0dd51d2 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/WritableCraftRegistry.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/WritableCraftRegistry.java @@ -31,7 +31,7 @@ public WritableCraftRegistry( public void register(final TypedKey key, final Consumer> value, final Conversions conversions) { final ResourceKey resourceKey = PaperRegistries.toNms(key); this.registry.validateWrite(resourceKey); - final PaperRegistryBuilderFactory builderFactory = new PaperRegistryBuilderFactory<>(this.registry.key(), conversions, this.meta.builderFiller(), this.registry::getValueForCopying); + final PaperRegistryBuilderFactory builderFactory = new PaperRegistryBuilderFactory<>(conversions, this.meta.builderFiller(), this.registry::getValueForCopying); value.accept(builderFactory); PaperRegistryListenerManager.INSTANCE.registerWithListeners( this.registry, diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java b/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java index 327541138683..02d60f9db8ad 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java @@ -120,7 +120,7 @@ private > PaperRegistry ) { final ResourceKey> resourceRegistryKey = PaperRegistries.registryToNms(registryKey); final HolderLookup.RegistryLookup lookupForBuilders = this.lookup.lookupForValueCopyViaBuilders().lookupOrThrow(resourceRegistryKey); - return new PaperRegistryBuilderFactory<>(resourceRegistryKey, this, buildableMeta.builderFiller(), lookupForBuilders::getValueForCopying); + return new PaperRegistryBuilderFactory<>(this, buildableMeta.builderFiller(), lookupForBuilders::getValueForCopying); } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBiome.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBiome.java index 5a9e91ce7efc..b0e1411a0f45 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBiome.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBiome.java @@ -1,5 +1,6 @@ package org.bukkit.craftbukkit.block; +import io.papermc.paper.registry.TypedKey; import io.papermc.paper.registry.tag.TagKey; import io.papermc.paper.util.OldEnumHolderable; import java.util.Objects; @@ -86,6 +87,11 @@ public String toString() { return "CUSTOM"; } + @Override + public boolean is(final TypedKey type) { + return this.is(type.key()); + } + @Override public boolean is(final Key type) { return this.getKey().equals(type); From 40af9fc7fec6154b117d4460e0846fa2986d76b2 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sat, 8 Aug 2026 12:03:19 -0700 Subject: [PATCH 4/9] Resolve sulfur cube issue --- .../data/InlinedRegistryBuilderProvider.java | 8 +++++ .../SulfurCubeArchetypeRegistryEntry.java | 30 ++++++++++++---- .../InlinedRegistryBuilderProviderImpl.java | 8 +++++ .../data/PaperInstrumentRegistryEntry.java | 2 +- .../data/PaperJukeboxSongRegistryEntry.java | 2 +- ...PaperSulfurCubeArchetypeRegistryEntry.java | 5 +-- .../registry/data/dialog/PaperDialogs.java | 2 +- .../holder/InlinedRegistryHolderImpl.java | 7 +--- .../registry/holder/PaperReferenceHolder.java | 10 ++++++ .../registry/holder/PaperRegistryHolders.java | 4 +-- .../holder/ReferenceRegistryHolderImpl.java | 26 +++++++++----- .../TransientReferenceRegistryHolder.java | 35 +++++++++++++++++++ .../paper/registry/set/PaperRegistrySets.java | 4 +-- .../registry/set/RegistryHolderSetImpl.java | 17 ++------- 14 files changed, 114 insertions(+), 46 deletions(-) create mode 100644 paper-server/src/main/java/io/papermc/paper/registry/holder/PaperReferenceHolder.java create mode 100644 paper-server/src/main/java/io/papermc/paper/registry/holder/TransientReferenceRegistryHolder.java diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java b/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java index 57c881c6605b..cdbbb423dcda 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java @@ -4,6 +4,8 @@ import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.holder.RegistryHolder; import java.util.Optional; import java.util.ServiceLoader; import java.util.function.Consumer; @@ -24,5 +26,11 @@ final class Holder { return Holder.INSTANCE.orElseThrow(); } + static , E> RegistryHolder transientHolder(final TypedKey key) { + return instance().createTransientReferenceHolder(key); + } + & Keyed, B extends RegistryBuilder> T create(final RegistryKey key, final Consumer> value); + + , E> RegistryHolder.Reference createTransientReferenceHolder(final TypedKey key); } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java b/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java index 07bb37472a38..2dee48e03ac9 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java @@ -2,6 +2,7 @@ import io.papermc.paper.registry.RegistryBuilder; import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.holder.RegistryHolder; import io.papermc.paper.registry.set.RegistryKeySet; import java.util.List; import org.bukkit.Sound; @@ -16,6 +17,7 @@ import org.jetbrains.annotations.Contract; import org.jspecify.annotations.Nullable; +import static io.papermc.paper.registry.data.InlinedRegistryBuilderProvider.transientHolder; import static io.papermc.paper.util.BoundChecker.requireNonNegative; import static io.papermc.paper.util.BoundChecker.requirePositive; @@ -180,18 +182,15 @@ record Impl(float horizontalPower, float verticalPower) implements KnockbackModi @ApiStatus.NonExtendable interface SoundSettings { - // todo The sounds should take a RegistryHolder but need more thoughts on the create method /** * {@return the sound played once the sulfur cube is knocked} */ - @ApiStatus.Experimental - TypedKey hitSound(); + RegistryHolder hitSound(); /** * {@return the sound played once the sulfur cube is pushed} */ - @ApiStatus.Experimental - TypedKey pushSound(); + RegistryHolder pushSound(); /** * {@return the smallest impulse required to play the push sound} @@ -209,13 +208,30 @@ interface SoundSettings { * @param hitSound the sound played once the sulfur cube is knocked, as returned by {@link #hitSound()} * @param pushSound the sound played once the sulfur cube is pushed, as returned by {@link #pushSound()} * @param pushSoundImpulseThreshold the smallest impulse required to play the push sound, as returned by {@link #pushSoundImpulseThreshold()} - * @param pushSoundCooldown the amount of seconds before the push sound can be played again, as returned by {@link #pushSoundCooldown()} + * @param pushSoundCooldown the number of seconds before the push sound can be played again, as returned by {@link #pushSoundCooldown()} * @return the created instance */ @Contract(value = "_, _, _, _ -> new", pure = true) @ApiStatus.Experimental static SoundSettings of(final TypedKey hitSound, final TypedKey pushSound, final float pushSoundImpulseThreshold, final float pushSoundCooldown) { - record Impl(TypedKey hitSound, TypedKey pushSound, float pushSoundImpulseThreshold, float pushSoundCooldown) implements SoundSettings { + return of(transientHolder(hitSound), transientHolder(pushSound), pushSoundImpulseThreshold, pushSoundCooldown); + } + + /** + * Creates a new sound settings instance based on the passed values. + *

    + * {@link RegistryHolder} instances can be created with {@link io.papermc.paper.registry.event.RegistryFactory}. + * + * @param hitSound the sound played once the sulfur cube is knocked, as returned by {@link #hitSound()} + * @param pushSound the sound played once the sulfur cube is pushed, as returned by {@link #pushSound()} + * @param pushSoundImpulseThreshold the smallest impulse required to play the push sound, as returned by {@link #pushSoundImpulseThreshold()} + * @param pushSoundCooldown the number of seconds before the push sound can be played again, as returned by {@link #pushSoundCooldown()} + * @return the created instance + */ + @Contract(value = "_, _, _, _ -> new", pure = true) + @ApiStatus.Experimental + static SoundSettings of(final RegistryHolder hitSound, final RegistryHolder pushSound, final float pushSoundImpulseThreshold, final float pushSoundCooldown) { + record Impl(RegistryHolder hitSound, RegistryHolder pushSound, float pushSoundImpulseThreshold, float pushSoundCooldown) implements SoundSettings { } return new Impl(hitSound, pushSound, pushSoundImpulseThreshold, pushSoundCooldown); diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java index 66040a080dd9..3a6dc9590ae2 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java @@ -4,7 +4,10 @@ import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.TypedKey; import io.papermc.paper.registry.data.util.Conversions; +import io.papermc.paper.registry.holder.RegistryHolder; +import io.papermc.paper.registry.holder.TransientReferenceRegistryHolder; import java.util.function.Consumer; import org.bukkit.Keyed; @@ -17,4 +20,9 @@ public final class InlinedRegistryBuilderProviderImpl implements InlinedRegistry ) { return Conversions.global().createApiInstanceFromBuilder(key, value); } + + @Override + public , E> RegistryHolder.Reference createTransientReferenceHolder(final TypedKey key) { + return new TransientReferenceRegistryHolder<>(key); + } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/PaperInstrumentRegistryEntry.java b/paper-server/src/main/java/io/papermc/paper/registry/data/PaperInstrumentRegistryEntry.java index 42e2a4f778d9..a2d687aac4ac 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/PaperInstrumentRegistryEntry.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/PaperInstrumentRegistryEntry.java @@ -83,7 +83,7 @@ public Builder soundEvent(final Consumer soundEvent) { - this.soundEvent = PaperRegistryHolders.convert(soundEvent); + this.soundEvent = PaperRegistryHolders.convert(soundEvent, this.conversions); return this; } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/PaperJukeboxSongRegistryEntry.java b/paper-server/src/main/java/io/papermc/paper/registry/data/PaperJukeboxSongRegistryEntry.java index abe5f3233df0..4edee5e15632 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/PaperJukeboxSongRegistryEntry.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/PaperJukeboxSongRegistryEntry.java @@ -86,7 +86,7 @@ public JukeboxSongRegistryEntry.Builder soundEvent(final Consumer soundEvent) { - this.soundEvent = PaperRegistryHolders.convert(soundEvent); + this.soundEvent = PaperRegistryHolders.convert(soundEvent, this.conversions); return this; } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/PaperSulfurCubeArchetypeRegistryEntry.java b/paper-server/src/main/java/io/papermc/paper/registry/data/PaperSulfurCubeArchetypeRegistryEntry.java index 922d09622aa5..506a406ae8ba 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/PaperSulfurCubeArchetypeRegistryEntry.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/PaperSulfurCubeArchetypeRegistryEntry.java @@ -6,6 +6,7 @@ import io.papermc.paper.registry.PaperRegistryBuilder; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.util.Conversions; +import io.papermc.paper.registry.holder.PaperRegistryHolders; import io.papermc.paper.registry.set.PaperRegistrySets; import io.papermc.paper.registry.set.RegistryKeySet; import io.papermc.paper.util.MCUtil; @@ -181,8 +182,8 @@ public Builder knockbackModifiers(final KnockbackModifiers modifiers) { @Override public Builder soundSettings(final SoundSettings settings) { this.soundSettings = new SulfurCubeArchetype.SoundSettings( - this.conversions.getReferenceHolder(PaperRegistries.toNms(settings.hitSound())), - this.conversions.getReferenceHolder(PaperRegistries.toNms(settings.pushSound())), + PaperRegistryHolders.convert(settings.hitSound(), this.conversions), + PaperRegistryHolders.convert(settings.pushSound(), this.conversions), settings.pushSoundImpulseThreshold(), settings.pushSoundCooldown() ); diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/dialog/PaperDialogs.java b/paper-server/src/main/java/io/papermc/paper/registry/data/dialog/PaperDialogs.java index 50ebf48765b7..ff080801981b 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/dialog/PaperDialogs.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/dialog/PaperDialogs.java @@ -59,7 +59,7 @@ public static Dialog constructDialog(final DialogBase dialogBase, final DialogTy case final DialogListType list -> { return new DialogListDialog( common, - PaperRegistrySets.convertToNmsWithDirects(Registries.DIALOG, conversions.lookup(), list.dialogs()), + PaperRegistrySets.convertToNmsWithDirects(Registries.DIALOG, conversions, list.dialogs()), Optional.ofNullable(list.exitAction()).map(convertButton), list.columns(), list.buttonWidth() diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java index 9bfa66ef1a90..b5f51c35972b 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java @@ -10,16 +10,11 @@ record InlinedRegistryHolderImpl, ENTRY, M>( RegistryKey registryKey, ENTRY entry, Holder.Direct holder -) implements RegistryHolder.Inlined, PaperRegistryElement { // TODO remove Keyed +) implements RegistryHolder.Inlined { // TODO remove Keyed @Override public API value() { //noinspection RedundantTypeArguments return CraftRegistry.minecraftHolderToBukkit(this.holder, PaperRegistries.registryToNms(this.registryKey)); } - - @Override - public Holder getHolder() { - return this.holder; - } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperReferenceHolder.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperReferenceHolder.java new file mode 100644 index 000000000000..b8422a97784a --- /dev/null +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperReferenceHolder.java @@ -0,0 +1,10 @@ +package io.papermc.paper.registry.holder; + +import io.papermc.paper.registry.RegistryElement; +import io.papermc.paper.registry.data.util.Conversions; +import net.minecraft.core.Holder; + +public interface PaperReferenceHolder, E, M> extends RegistryHolder.Reference { + + Holder.Reference getHolder(final Conversions conversions); +} diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java index 7dfedc7bf33d..d99b693845bf 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java @@ -21,9 +21,9 @@ public final class PaperRegistryHolders { }; } - public static , ENTRY, M> Holder convert(final RegistryHolder holder) { // TODO remove Keyed + public static , ENTRY, M> Holder convert(final RegistryHolder holder, final Conversions conversions) { // TODO remove Keyed return switch (holder) { - case final RegistryHolder.Reference ref -> ((ReferenceRegistryHolderImpl) ref).holder(); + case final RegistryHolder.Reference ref -> ((PaperReferenceHolder) ref).getHolder(conversions); case final RegistryHolder.Inlined inlined -> ((InlinedRegistryHolderImpl) inlined).holder(); }; } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java index e08dac8b1058..0a61c20f71d1 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/ReferenceRegistryHolderImpl.java @@ -1,42 +1,50 @@ package io.papermc.paper.registry.holder; import io.papermc.paper.registry.PaperRegistries; -import io.papermc.paper.registry.PaperRegistryElement; import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.data.util.Conversions; import java.util.function.Function; import net.minecraft.core.Holder; +import org.bukkit.Keyed; import org.bukkit.craftbukkit.CraftRegistry; -record ReferenceRegistryHolderImpl, ENTRY, M>( +record ReferenceRegistryHolderImpl, ENTRY, M>( // TODO remove Keyed RegistryKey registryKey, Holder.Reference holder, Function entryCreator -) implements RegistryHolder.Reference, PaperRegistryElement { +) implements PaperReferenceHolder { ReferenceRegistryHolderImpl(final Holder.Reference holder, final Function entryCreator) { this(PaperRegistries.registryFromNms(holder.key().registryKey()), holder, entryCreator); } + @Override + public Holder.Reference getHolder(final Conversions conversions) { + return this.holder; + } + @Override public TypedKey key() { return PaperRegistries.fromNms(this.holder.key()); } + private void checkBound() { + if (!this.holder.isBound()) { + throw new IllegalStateException("Holder for " + this.key() + " is not bound"); + } + } + @Override public API value() { - //noinspection unchecked + this.checkBound(); return CraftRegistry.minecraftHolderToBukkit(this.holder); } @Override public ENTRY entry() { + this.checkBound(); return this.entryCreator.apply(this.holder.value()); } - - @Override - public Holder getHolder() { - return this.holder; - } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/TransientReferenceRegistryHolder.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/TransientReferenceRegistryHolder.java new file mode 100644 index 000000000000..a4e0464293c2 --- /dev/null +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/TransientReferenceRegistryHolder.java @@ -0,0 +1,35 @@ +package io.papermc.paper.registry.holder; + +import io.papermc.paper.registry.PaperRegistries; +import io.papermc.paper.registry.RegistryElement; +import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.data.util.Conversions; +import net.minecraft.core.Holder; + +/** + * This is useful for api-only types and implementations that need to represent a typed key as a holder + * during the bootstrap phase. Should never be a return value from any type that has a server-side implementation. + */ +public record TransientReferenceRegistryHolder, E, M>(TypedKey key) implements PaperReferenceHolder { + + @Override + public Holder.Reference getHolder(final Conversions conversions) { + return conversions.getReferenceHolder(this.key); + } + + @Override + public RegistryKey registryKey() { + return this.key.registryKey(); + } + + @Override + public API value() { + throw new IllegalStateException("Holder for " + this.key + " is not bound"); + } + + @Override + public E entry() { + throw new IllegalStateException("Holder for " + this.key + " is not bound"); + } +} diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java b/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java index 795bab3568c4..cf7e503dee58 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/PaperRegistrySets.java @@ -28,7 +28,7 @@ public static HolderSet convertToNms(final ResourceKey, E, M> HolderSet convertToNmsWithDirects(final ResourceKey> resourceKey, final RegistryOps.RegistryInfoLookup lookup, final RegistrySet registrySet) { // TODO remove Keyed + public static , E, M> HolderSet convertToNmsWithDirects(final ResourceKey> resourceKey, final Conversions conversions, final RegistrySet registrySet) { // TODO remove Keyed if (registrySet instanceof NamedRegistryKeySetImpl) { return ((NamedRegistryKeySetImpl) registrySet).namedSet(); } else if (registrySet.isEmpty()) { @@ -43,7 +43,7 @@ public static HolderSet convertToNms(final ResourceKey keySet) { - final RegistryOps.RegistryInfo registryInfo = lookup.lookup(resourceKey).orElseThrow(); + final RegistryOps.RegistryInfo registryInfo = conversions.lookup().lookup(resourceKey).orElseThrow(); return HolderSet.direct( key -> { return registryInfo.getter().getOrThrow(PaperRegistries.toNms(key)); diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java index a058de09208b..7baf768c097d 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java @@ -2,6 +2,7 @@ import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.util.Conversions; import io.papermc.paper.registry.holder.PaperRegistryHolders; import io.papermc.paper.registry.holder.RegistryHolder; import java.util.ArrayList; @@ -18,7 +19,7 @@ final class RegistryHolderSetImpl registryKey; private final Function entryCreator; private final int size; - private HolderSet.@Nullable Direct holders; + private final HolderSet.Direct holders; private @Nullable List> apiHolders; RegistryHolderSetImpl(final RegistryKey registryKey, final HolderSet.Direct holders, final Function entryCreator) { @@ -28,21 +29,7 @@ final class RegistryHolderSetImpl registryKey, final List> apiHolders, final Function entryCreator) { - this.registryKey = registryKey; - this.entryCreator = entryCreator; - this.apiHolders = List.copyOf(apiHolders); - this.size = this.apiHolders.size(); - } - public HolderSet.Direct nmsHolders() { - if (this.holders == null) { - final List> newHolders = new ArrayList<>(); - for (final RegistryHolder holder : this.holders()) { - newHolders.add(PaperRegistryHolders.convert(holder)); - } - this.holders = HolderSet.direct(newHolders); - } return this.holders; } From 04beece4d9cfa903d8aa26684c27be9504d0b8a7 Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Sat, 8 Aug 2026 22:07:28 +0200 Subject: [PATCH 5/9] [ci skip] format --- .../io/papermc/paper/registry/RegistryElement.java | 3 ++- .../registry/data/InlinedRegistryBuilderProvider.java | 4 ++-- .../data/SulfurCubeArchetypeRegistryEntry.java | 4 +--- .../registry/data/dialog/input/TextDialogInput.java | 10 +++++----- .../registry/data/dialog/type/DialogListType.java | 6 +++--- .../registry/data/dialog/type/MultiActionType.java | 4 ++-- .../papermc/paper/registry/event/RegistryFactory.java | 2 +- .../io/papermc/paper/registry/set/RegistryKeySet.java | 2 +- .../types/registry/PaperRegistriesRewriter.java | 4 ++-- .../java/io/papermc/paper/registry/HolderableBase.java | 2 +- .../registry/holder/InlinedRegistryHolderImpl.java | 1 - .../paper/registry/holder/PaperReferenceHolder.java | 2 +- .../paper/registry/holder/PaperRegistryHolders.java | 1 + .../holder/TransientReferenceRegistryHolder.java | 1 - .../paper/registry/set/RegistryHolderSetImpl.java | 7 +++---- 15 files changed, 25 insertions(+), 28 deletions(-) diff --git a/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java b/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java index 6c7dae44fd9e..8be40e3b2a7c 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java @@ -25,7 +25,7 @@ public interface RegistryElement { * @param type the key * @return whether this element is identified by the given key. */ - boolean is(final TypedKey type); + boolean is(TypedKey type); /** * Checks whether this element is identified by the given key. @@ -52,6 +52,7 @@ public interface RegistryElement { * @param the registry entry type * @param the builder type */ + @SuppressWarnings("unused") @ApiStatus.Experimental interface Buildable> extends RegistryElement { } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java b/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java index cdbbb423dcda..5882ed34625d 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java @@ -30,7 +30,7 @@ final class Holder { return instance().createTransientReferenceHolder(key); } - & Keyed, B extends RegistryBuilder> T create(final RegistryKey key, final Consumer> value); + & Keyed, B extends RegistryBuilder> T create(RegistryKey key, Consumer> value); - , E> RegistryHolder.Reference createTransientReferenceHolder(final TypedKey key); + , E> RegistryHolder.Reference createTransientReferenceHolder(TypedKey key); } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java b/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java index 2dee48e03ac9..edd0fd7f7f1e 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java @@ -198,7 +198,7 @@ interface SoundSettings { float pushSoundImpulseThreshold(); /** - * {@return the amount of seconds before the push sound can be played again} + * {@return the number of seconds before the push sound can be played again} */ float pushSoundCooldown(); @@ -212,7 +212,6 @@ interface SoundSettings { * @return the created instance */ @Contract(value = "_, _, _, _ -> new", pure = true) - @ApiStatus.Experimental static SoundSettings of(final TypedKey hitSound, final TypedKey pushSound, final float pushSoundImpulseThreshold, final float pushSoundCooldown) { return of(transientHolder(hitSound), transientHolder(pushSound), pushSoundImpulseThreshold, pushSoundCooldown); } @@ -229,7 +228,6 @@ static SoundSettings of(final TypedKey hitSound, final TypedKey pu * @return the created instance */ @Contract(value = "_, _, _, _ -> new", pure = true) - @ApiStatus.Experimental static SoundSettings of(final RegistryHolder hitSound, final RegistryHolder pushSound, final float pushSoundImpulseThreshold, final float pushSoundCooldown) { record Impl(RegistryHolder hitSound, RegistryHolder pushSound, float pushSoundImpulseThreshold, float pushSoundCooldown) implements SoundSettings { } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/input/TextDialogInput.java b/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/input/TextDialogInput.java index f69f5de62943..374f707cf022 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/input/TextDialogInput.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/input/TextDialogInput.java @@ -114,7 +114,7 @@ interface Builder { * @return this builder */ @Contract(value = "_ -> this", mutates = "this") - Builder width(final @Range(from = 1, to = 1024) int width); + Builder width(@Range(from = 1, to = 1024) int width); /** * Sets whether the label should be visible. @@ -123,7 +123,7 @@ interface Builder { * @return this builder */ @Contract(value = "_ -> this", mutates = "this") - Builder labelVisible(final boolean labelVisible); + Builder labelVisible(boolean labelVisible); /** * Sets the initial value of the input. @@ -132,7 +132,7 @@ interface Builder { * @return this builder */ @Contract(value = "_ -> this", mutates = "this") - Builder initial(final String initial); + Builder initial(String initial); /** * Sets the maximum length of the input. @@ -141,7 +141,7 @@ interface Builder { * @return this builder */ @Contract(value = "_ -> this", mutates = "this") - Builder maxLength(final @Positive int maxLength); + Builder maxLength(@Positive int maxLength); /** * Sets the multiline options for the input. @@ -150,7 +150,7 @@ interface Builder { * @return this builder */ @Contract(value = "_ -> this", mutates = "this") - Builder multiline(final @Nullable MultilineOptions multiline); + Builder multiline(@Nullable MultilineOptions multiline); /** * Builds the text dialog input. diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/type/DialogListType.java b/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/type/DialogListType.java index d5c1cbd99ac4..9a4dc34997a0 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/type/DialogListType.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/type/DialogListType.java @@ -61,7 +61,7 @@ interface Builder { * @return the builder */ @Contract(value = "_ -> this", mutates = "this") - Builder exitAction(final @Nullable ActionButton exitAction); + Builder exitAction(@Nullable ActionButton exitAction); /** * Sets the number of columns to display in the dialog list. @@ -70,7 +70,7 @@ interface Builder { * @return the builder */ @Contract(value = "_ -> this", mutates = "this") - Builder columns(final @Positive int columns); + Builder columns(@Positive int columns); /** * Sets the width of each button in the dialog list. @@ -79,7 +79,7 @@ interface Builder { * @return the builder */ @Contract(value = "_ -> this", mutates = "this") - Builder buttonWidth(final @Range(from = 1, to = 1024) int buttonWidth); + Builder buttonWidth(@Range(from = 1, to = 1024) int buttonWidth); /** * Builds the dialog list type. diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/type/MultiActionType.java b/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/type/MultiActionType.java index 195e9aadc14a..a9ea16688503 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/type/MultiActionType.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/dialog/type/MultiActionType.java @@ -53,7 +53,7 @@ interface Builder { * @return the builder */ @Contract(value = "_ -> this", mutates = "this") - Builder exitAction(final @Nullable ActionButton exitAction); + Builder exitAction(@Nullable ActionButton exitAction); /** * Sets the number of columns to display in the dialog. @@ -62,7 +62,7 @@ interface Builder { * @return the builder */ @Contract(value = "_ -> this", mutates = "this") - Builder columns(final @Positive int columns); + Builder columns(@Positive int columns); /** * Builds the multi-action dialog. diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java index 3e0cbcf85fe4..a21f721b2e8c 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java @@ -54,7 +54,7 @@ public interface RegistryFactory { * @param the registry entry type * @param the builder type */ - , E, B extends RegistryBuilder> RegistryHolder.Inlined getOrCreateInlinedHolder(RegistryKey registryKey, final Consumer> value); // TODO remove Keyed + , E, B extends RegistryBuilder> RegistryHolder.Inlined getOrCreateInlinedHolder(RegistryKey registryKey, Consumer> value); // TODO remove Keyed /** * Creates a new builder for a {@link RegistryHolderSetBuilder holder set} of the given registry. diff --git a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryKeySet.java b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryKeySet.java index c552c19288d5..a01f14be06bd 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryKeySet.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/set/RegistryKeySet.java @@ -48,7 +48,7 @@ default int size() { * @see RegistryKeySet#values() * @see Registry#getTagValues(TagKey) */ - @Unmodifiable Collection resolve(final Registry registry); + @Unmodifiable Collection resolve(Registry registry); /** * Checks if this set contains the value with the given key. diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java index 6c2f61bdaf8f..028c0a2b85b4 100644 --- a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java +++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java @@ -61,8 +61,8 @@ private void appendEntry(String indent, StringBuilder builder, RegistryEntry case NONE -> builder.append(".create("); } // the builder impl is always nested in the base entry class; reference the base entry constructor first, then the builder constructor - final String builderImpl = entry.apiRegistryBuilderImpl(); - final String entryImpl = builderImpl.substring(0, builderImpl.lastIndexOf('.')); + String builderImpl = entry.apiRegistryBuilderImpl(); + String entryImpl = builderImpl.substring(0, builderImpl.lastIndexOf('.')); builder.append(this.importCollector.getShortName(this.classNamedView.findFirst(entryImpl).resolve(this.classResolver))).append("::new"); builder.append(", "); builder.append(this.importCollector.getShortName(this.classNamedView.findFirst(builderImpl).resolve(this.classResolver))).append("::new"); diff --git a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java index dd5cc4292f92..7f05f97eb93e 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/HolderableBase.java @@ -34,7 +34,7 @@ public final boolean equals(final Object obj) { } @Override - public String toString() { + public final String toString() { return HolderableElement.super.implToString(); } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java index b5f51c35972b..4f627d8151a5 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/InlinedRegistryHolderImpl.java @@ -1,7 +1,6 @@ package io.papermc.paper.registry.holder; import io.papermc.paper.registry.PaperRegistries; -import io.papermc.paper.registry.PaperRegistryElement; import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import net.minecraft.core.Holder; diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperReferenceHolder.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperReferenceHolder.java index b8422a97784a..a5861054f678 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperReferenceHolder.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperReferenceHolder.java @@ -6,5 +6,5 @@ public interface PaperReferenceHolder, E, M> extends RegistryHolder.Reference { - Holder.Reference getHolder(final Conversions conversions); + Holder.Reference getHolder(Conversions conversions); } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java index d99b693845bf..685864b3f714 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/PaperRegistryHolders.java @@ -35,5 +35,6 @@ public final class PaperRegistryHolders { public static , ENTRY, M> RegistryHolder.Inlined createInlined(final RegistryKey registryKey, final Holder.Direct holder, final Function entryCreator) { // TODO remove Keyed return new InlinedRegistryHolderImpl<>(registryKey, entryCreator.apply(holder.value()), holder); } + private PaperRegistryHolders() {} } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/holder/TransientReferenceRegistryHolder.java b/paper-server/src/main/java/io/papermc/paper/registry/holder/TransientReferenceRegistryHolder.java index a4e0464293c2..8e4145310fb7 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/holder/TransientReferenceRegistryHolder.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/holder/TransientReferenceRegistryHolder.java @@ -1,6 +1,5 @@ package io.papermc.paper.registry.holder; -import io.papermc.paper.registry.PaperRegistries; import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; diff --git a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java index 7baf768c097d..2386bed17b0f 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/set/RegistryHolderSetImpl.java @@ -2,7 +2,6 @@ import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; -import io.papermc.paper.registry.data.util.Conversions; import io.papermc.paper.registry.holder.PaperRegistryHolders; import io.papermc.paper.registry.holder.RegistryHolder; import java.util.ArrayList; @@ -26,7 +25,7 @@ final class RegistryHolderSetImpl nmsHolders() { @@ -36,8 +35,8 @@ public HolderSet.Direct nmsHolders() { @Override public Collection> holders() { if (this.apiHolders == null) { - final List> newHolders = new ArrayList<>(); - for (final Holder holder : this.nmsHolders()) { + final List> newHolders = new ArrayList<>(this.size); + for (final Holder holder : this.holders) { newHolders.add(PaperRegistryHolders.create(this.registryKey, holder, this.entryCreator)); } this.apiHolders = List.copyOf(newHolders); From 86f056a018d33fcd50a8530c6bdd2887caac44fc Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sat, 8 Aug 2026 14:30:23 -0700 Subject: [PATCH 6/9] Simplify registry event registration --- .../registry/event/RegistryComposeEvent.java | 2 +- .../registry/event/RegistryEntryAddEvent.java | 4 +- .../registry/event/RegistryEventProvider.java | 5 +- .../event/RegistryEventProviderImpl.java | 9 +- .../event/RegistryEventTypeProvider.java | 6 +- .../paper/registry/event/RegistryEvents.java | 118 +++++++++++++++++- .../paper/registry/event/RegistryFactory.java | 2 +- paper-api/src/main/java/org/bukkit/Sound.java | 2 +- .../java/io/papermc/generator/Rewriters.java | 1 - .../registry/RegistryBootstrapper.java | 7 -- .../registry/RegistryEventsRewriter.java | 34 ----- .../PaperRegistryListenerManager.java | 23 ++-- .../paper/registry/data/util/Conversions.java | 2 +- .../event/RegistryEventTypeProviderImpl.java | 10 +- 14 files changed, 150 insertions(+), 75 deletions(-) delete mode 100644 paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryEventsRewriter.java 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 index bf21a856d20a..0db22dca98d3 100644 --- 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 @@ -7,7 +7,7 @@ import org.jetbrains.annotations.ApiStatus; /** - * Event object for {@link RegistryEventProvider#compose()}. This + * Event object for {@link RegistryEvents#compose(io.papermc.paper.registry.RegistryKey)}. 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. * diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEvent.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEvent.java index 549e7fe8981c..2c825a0981cc 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEvent.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryEntryAddEvent.java @@ -8,8 +8,8 @@ import org.jetbrains.annotations.ApiStatus; /** - * Event object for {@link RegistryEventProvider#entryAdd()}. This - * event is fired right before a specific entry is registered in/added to registry. + * Event object for {@link RegistryEvents#entryAdd(io.papermc.paper.registry.RegistryKey)}. This + * event is fired right before a specific entry is registered in/added to the registry. * It provides a way for plugins to modify parts of this entry. * * @param registry entry type 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 727cddf418de..9bdf1896bb3b 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 @@ -4,6 +4,7 @@ import io.papermc.paper.plugin.lifecycle.event.handler.LifecycleEventHandler; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEventType; import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.event.type.RegistryEntryAddEventType; import org.jetbrains.annotations.ApiStatus; @@ -19,9 +20,11 @@ * * @param registry entry type * @param registry entry builder type + * @deprecated use {@link RegistryEvents#compose(RegistryKey)} and {@link RegistryEvents#entryAdd(RegistryKey)} */ @ApiStatus.NonExtendable -public interface RegistryEventProvider> { +@Deprecated(forRemoval = true, since = "26.3") +public interface RegistryEventProvider, B extends RegistryBuilder> { /** * Gets the event type for {@link RegistryEntryAddEvent} which is fired just before 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 16eb6bc8a45d..4a308250e953 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 @@ -3,24 +3,25 @@ import io.papermc.paper.plugin.bootstrap.BootstrapContext; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEventType; import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.event.type.RegistryEntryAddEventType; import org.jetbrains.annotations.ApiStatus; @ApiStatus.Internal -record RegistryEventProviderImpl>(RegistryKey registryKey) implements RegistryEventProvider { +record RegistryEventProviderImpl, E, B extends RegistryBuilder>(RegistryKey registryKey) implements RegistryEventProvider { - static > RegistryEventProvider create(final RegistryKey registryKey) { + static , E, B extends RegistryBuilder> RegistryEventProvider create(final RegistryKey registryKey) { return new RegistryEventProviderImpl<>(registryKey); } @Override public RegistryEntryAddEventType entryAdd() { - return RegistryEventTypeProvider.provider().registryEntryAdd(this); + return RegistryEvents.entryAdd(this.registryKey); } @Override public LifecycleEventType.Prioritizable> compose() { - return RegistryEventTypeProvider.provider().registryCompose(this); + return RegistryEvents.compose(this.registryKey); } } 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 af8686038f09..4ed3019075ac 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 @@ -3,6 +3,8 @@ import io.papermc.paper.plugin.bootstrap.BootstrapContext; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEventType; import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryElement; +import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.event.type.RegistryEntryAddEventType; import java.util.Optional; import java.util.ServiceLoader; @@ -17,7 +19,7 @@ static RegistryEventTypeProvider provider() { return PROVIDER.orElseThrow(() -> new IllegalStateException("Could not find a %s service implementation".formatted(RegistryEventTypeProvider.class.getSimpleName()))); } - > RegistryEntryAddEventType registryEntryAdd(RegistryEventProvider type); + , E, B extends RegistryBuilder> RegistryEntryAddEventType registryEntryAdd(RegistryKey key); - > LifecycleEventType.Prioritizable> registryCompose(RegistryEventProvider type); + , E, B extends RegistryBuilder> LifecycleEventType.Prioritizable> registryCompose(RegistryKey key); } 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 cfe47a108b22..413df059db27 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 @@ -1,6 +1,10 @@ package io.papermc.paper.registry.event; import io.papermc.paper.dialog.Dialog; +import io.papermc.paper.plugin.bootstrap.BootstrapContext; +import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEventType; +import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.data.BannerPatternRegistryEntry; import io.papermc.paper.registry.data.CatTypeRegistryEntry; @@ -20,6 +24,7 @@ import io.papermc.paper.registry.data.WolfVariantRegistryEntry; import io.papermc.paper.registry.data.ZombieNautilusVariantRegistryEntry; import io.papermc.paper.registry.data.dialog.DialogRegistryEntry; +import io.papermc.paper.registry.event.type.RegistryEntryAddEventType; import org.bukkit.Art; import org.bukkit.GameEvent; import org.bukkit.JukeboxSong; @@ -41,31 +46,136 @@ import static io.papermc.paper.registry.event.RegistryEventProviderImpl.create; /** - * Holds providers for {@link RegistryEntryAddEvent} and {@link RegistryComposeEvent} - * handlers for each applicable registry. + * Holds methods to create registry event types for various registry-related events. */ public final class RegistryEvents { - // Start generate - RegistryEvents + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider GAME_EVENT = create(RegistryKey.GAME_EVENT); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider TRIM_MATERIAL = create(RegistryKey.TRIM_MATERIAL); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider TRIM_PATTERN = create(RegistryKey.TRIM_PATTERN); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider DAMAGE_TYPE = create(RegistryKey.DAMAGE_TYPE); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider WOLF_VARIANT = create(RegistryKey.WOLF_VARIANT); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider ENCHANTMENT = create(RegistryKey.ENCHANTMENT); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider JUKEBOX_SONG = create(RegistryKey.JUKEBOX_SONG); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider BANNER_PATTERN = create(RegistryKey.BANNER_PATTERN); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider PAINTING_VARIANT = create(RegistryKey.PAINTING_VARIANT); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider INSTRUMENT = create(RegistryKey.INSTRUMENT); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider CAT_VARIANT = create(RegistryKey.CAT_VARIANT); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider FROG_VARIANT = create(RegistryKey.FROG_VARIANT); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider CHICKEN_VARIANT = create(RegistryKey.CHICKEN_VARIANT); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider COW_VARIANT = create(RegistryKey.COW_VARIANT); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider PIG_VARIANT = create(RegistryKey.PIG_VARIANT); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider ZOMBIE_NAUTILUS_VARIANT = create(RegistryKey.ZOMBIE_NAUTILUS_VARIANT); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider SULFUR_CUBE_ARCHETYPE = create(RegistryKey.SULFUR_CUBE_ARCHETYPE); + /** + * @deprecated use {@link #entryAdd(RegistryKey)} and {@link #compose(RegistryKey)} + */ + @Deprecated(forRemoval = true, since = "26.3") public static final RegistryEventProvider DIALOG = create(RegistryKey.DIALOG); - // End generate - RegistryEvents + + /** + * Gets the event type for {@link RegistryEntryAddEvent} which is fired just before + * an object is added to a registry. + *

    + * Can be used in {@link io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager#registerEventHandler(LifecycleEventType, io.papermc.paper.plugin.lifecycle.event.handler.LifecycleEventHandler)} + * to register a handler for {@link RegistryEntryAddEvent}. + * + * @param registryKey the registry key + * @param the api type + * @param the registry entry type + * @param the registry entry builder type + * + * @return the registry entry add event type + */ + public static , E, B extends RegistryBuilder> RegistryEntryAddEventType entryAdd(final RegistryKey registryKey) { + return RegistryEventTypeProvider.provider().registryEntryAdd(registryKey); + } + + /** + * 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, io.papermc.paper.plugin.lifecycle.event.handler.LifecycleEventHandler)} + * to register a handler for {@link RegistryComposeEvent}. + * + * @param registryKey the registry key + * @param the api type + * @param the registry entry type + * @param the registry entry builder type + * + * @return the registry compose event type + */ + public static , E, B extends RegistryBuilder> LifecycleEventType.Prioritizable> compose(final RegistryKey registryKey) { + return RegistryEventTypeProvider.provider().registryCompose(registryKey); + } private RegistryEvents() { } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java index a21f721b2e8c..1a9be7344b56 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java @@ -54,7 +54,7 @@ public interface RegistryFactory { * @param the registry entry type * @param the builder type */ - , E, B extends RegistryBuilder> RegistryHolder.Inlined getOrCreateInlinedHolder(RegistryKey registryKey, Consumer> value); // TODO remove Keyed + , E, B extends RegistryBuilder> RegistryHolder.Inlined createInlinedHolder(RegistryKey registryKey, Consumer> value); // TODO remove Keyed /** * Creates a new builder for a {@link RegistryHolderSetBuilder holder set} of the given registry. diff --git a/paper-api/src/main/java/org/bukkit/Sound.java b/paper-api/src/main/java/org/bukkit/Sound.java index 90d1608738e1..f501acd660ec 100644 --- a/paper-api/src/main/java/org/bukkit/Sound.java +++ b/paper-api/src/main/java/org/bukkit/Sound.java @@ -23,7 +23,7 @@ * guarantee values will not be removed from this interface. As such, you should not * depend on the ordinal values of this class. */ -public interface Sound extends RegistryElement.Buildable, OldEnum, Keyed, net.kyori.adventure.sound.Sound.Type { // Paper - implement Sound.Type +public interface Sound extends RegistryElement.Inlineable, OldEnum, Keyed, net.kyori.adventure.sound.Sound.Type { // Paper - implement Sound.Type // Start generate - Sound Sound AMBIENT_BASALT_DELTAS_ADDITIONS = getSound("ambient.basalt_deltas.additions"); diff --git a/paper-generator/src/main/java/io/papermc/generator/Rewriters.java b/paper-generator/src/main/java/io/papermc/generator/Rewriters.java index 1e98011fac71..818a7b4a421f 100644 --- a/paper-generator/src/main/java/io/papermc/generator/Rewriters.java +++ b/paper-generator/src/main/java/io/papermc/generator/Rewriters.java @@ -241,7 +241,6 @@ protected String rewriteFieldType(Holder.Reference generators) { } public static void bootstrap(PatternSourceSetRewriter apiSourceSet, PatternSourceSetRewriter serverSourceSet) { - bootstrapApi(apiSourceSet); bootstrapServer(serverSourceSet); } - public static void bootstrapApi(PatternSourceSetRewriter sourceSet) { - sourceSet.register("RegistryEvents", RegistryEvents.class, new RegistryEventsRewriter()); - } - public static void bootstrapServer(PatternSourceSetRewriter sourceSet) { sourceSet.register("RegistryDefinitions", Types.PAPER_REGISTRIES, new PaperRegistriesRewriter()); } diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryEventsRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryEventsRewriter.java deleted file mode 100644 index ef9735652c3a..000000000000 --- a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/RegistryEventsRewriter.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.papermc.generator.rewriter.types.registry; - -import io.papermc.generator.registry.RegistryEntries; -import io.papermc.generator.registry.RegistryEntry; -import io.papermc.paper.registry.RegistryKey; -import io.papermc.paper.registry.event.RegistryEventProvider; -import io.papermc.typewriter.replace.SearchMetadata; -import io.papermc.typewriter.replace.SearchReplaceRewriter; -import org.jspecify.annotations.NullMarked; - -import static javax.lang.model.element.Modifier.FINAL; -import static javax.lang.model.element.Modifier.PUBLIC; -import static javax.lang.model.element.Modifier.STATIC; - -@NullMarked -public class RegistryEventsRewriter extends SearchReplaceRewriter { - - @Override - public void insert(SearchMetadata metadata, StringBuilder builder) { - RegistryEntries.forEach(entry -> { - if (entry.apiRegistryBuilder() != null && entry.modificationApiSupport() != RegistryEntry.RegistryModificationApiSupport.NONE) { - builder.append(metadata.indent()); - builder.append("%s %s %s ".formatted(PUBLIC, STATIC, FINAL)); - builder.append(RegistryEventProvider.class.getSimpleName()); - builder.append("<").append(this.importCollector.getShortName(entry.apiClass())).append(", ").append(this.importCollector.getShortName(entry.apiRegistryBuilder())).append('>'); - builder.append(' '); - builder.append(entry.registryKeyField()); - builder.append(" = "); - builder.append("create(").append(RegistryKey.class.getSimpleName()).append('.').append(entry.registryKeyField()).append(");"); - builder.append('\n'); - } - }); - } -} 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 1bc643de7f71..4a784c8639ac 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,12 +10,11 @@ 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.RegistryComposeEvent; +import io.papermc.paper.registry.event.RegistryComposeEventImpl; 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.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; @@ -27,8 +26,8 @@ import net.minecraft.core.Registry; import net.minecraft.core.WritableRegistry; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceKey; import net.minecraft.resources.Identifier; +import net.minecraft.resources.ResourceKey; import org.bukkit.Keyed; import org.intellij.lang.annotations.Subst; import org.jspecify.annotations.Nullable; @@ -167,19 +166,19 @@ public > void runFreeze LifecycleEventRunner.INSTANCE.callEvent(this.composeEventType.getEventType(entry.apiKey()), event); } - public > RegistryEntryAddEventType getRegistryValueAddEventType(final RegistryEventProvider type) { - final RegistryEntry entry = PaperRegistries.getEntry(type.registryKey()); + public , E, B extends RegistryBuilder> RegistryEntryAddEventType getRegistryValueAddEventType(final RegistryKey registryKey) { + final RegistryEntry entry = PaperRegistries.getEntry(registryKey); if (entry == null || !entry.meta().modificationApiSupport().canModify()) { - throw new IllegalArgumentException(type.registryKey() + " does not support " + RegistryEntryAddEvent.class.getSimpleName()); + throw new IllegalArgumentException(registryKey + " does not support " + RegistryEntryAddEvent.class.getSimpleName()); } - return this.valueAddEventTypes.getOrCreate(type.registryKey(), RegistryEntryAddEventTypeImpl::new); + return this.valueAddEventTypes.getOrCreate(registryKey, RegistryEntryAddEventTypeImpl::new); } - public > LifecycleEventType.Prioritizable> getRegistryComposeEventType(final RegistryEventProvider type) { - final RegistryEntry entry = PaperRegistries.getEntry(type.registryKey()); + public , E, B extends RegistryBuilder> LifecycleEventType.Prioritizable> getRegistryComposeEventType(final RegistryKey registryKey) { + final RegistryEntry entry = PaperRegistries.getEntry(registryKey); if (entry == null || !entry.meta().modificationApiSupport().canAdd()) { - throw new IllegalArgumentException(type.registryKey() + " does not support " + RegistryComposeEvent.class.getSimpleName()); + throw new IllegalArgumentException(registryKey + " does not support " + RegistryComposeEvent.class.getSimpleName()); } - return this.composeEventType.getOrCreate(type.registryKey(), RegistryLifecycleEventType::new); + return this.composeEventType.getOrCreate(registryKey, RegistryLifecycleEventType::new); } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java b/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java index 02d60f9db8ad..35fd6610864c 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java @@ -138,7 +138,7 @@ public , E, B extends Regis } @Override - public , E, B extends RegistryBuilder> RegistryHolder.Inlined getOrCreateInlinedHolder(final RegistryKey registryKey, final Consumer> value) { + public , E, B extends RegistryBuilder> RegistryHolder.Inlined createInlinedHolder(final RegistryKey registryKey, final Consumer> value) { final Holder.Direct directHolder = this.createHolderFromBuilder(registryKey, value); return PaperRegistryHolders.createInlined(registryKey, directHolder, this.getEntryCreator(registryKey)); } 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 02390a7df521..08e3a6fa1247 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 @@ -4,6 +4,8 @@ import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEventType; import io.papermc.paper.registry.PaperRegistryListenerManager; import io.papermc.paper.registry.RegistryBuilder; +import io.papermc.paper.registry.RegistryElement; +import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.event.type.RegistryEntryAddEventType; public class RegistryEventTypeProviderImpl implements RegistryEventTypeProvider { @@ -13,12 +15,12 @@ public static RegistryEventTypeProviderImpl instance() { } @Override - public > RegistryEntryAddEventType registryEntryAdd(final RegistryEventProvider type) { - return PaperRegistryListenerManager.INSTANCE.getRegistryValueAddEventType(type); + public , E, B extends RegistryBuilder> RegistryEntryAddEventType registryEntryAdd(final RegistryKey key) { + return PaperRegistryListenerManager.INSTANCE.getRegistryValueAddEventType(key); } @Override - public > LifecycleEventType.Prioritizable> registryCompose(final RegistryEventProvider type) { - return PaperRegistryListenerManager.INSTANCE.getRegistryComposeEventType(type); + public , E, B extends RegistryBuilder> LifecycleEventType.Prioritizable> registryCompose(final RegistryKey key) { + return PaperRegistryListenerManager.INSTANCE.getRegistryComposeEventType(key); } } From 6c4ddf5f84e55bb6e1fc7661daeed785df4c22b0 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sat, 8 Aug 2026 15:00:49 -0700 Subject: [PATCH 7/9] Clarify registry layers --- .../io/papermc/paper/registry/event/RegistryFactory.java | 7 +++++++ .../io/papermc/paper/registry/data/util/Conversions.java | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java index 1a9be7344b56..04609747f6dd 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/event/RegistryFactory.java @@ -34,12 +34,18 @@ public interface RegistryFactory { /** * Gets or creates a reference holder for the given key. The referenced * value does not need to be present in the registry yet. + *

    + * You can only create new reference holders for registries in the same registry layer. For example, + * since {@link RegistryKey#SOUND_EVENT} is a built-in registry, you cannot create new + * reference holders while in an event for {@link RegistryKey#SULFUR_CUBE_ARCHETYPE} as that + * is in a later layer. Try a {@link #createInlinedHolder(RegistryKey, Consumer)}. * * @param key the key of the referenced value * @return the reference holder * @param the API type * @param the registry entry type * @param the builder type + * @see #createInlinedHolder(RegistryKey, Consumer) */ , E, B extends RegistryBuilder> RegistryHolder.Reference getOrCreateReferenceHolder(TypedKey key); // TODO remove Keyed @@ -53,6 +59,7 @@ public interface RegistryFactory { * @param the API type * @param the registry entry type * @param the builder type + * @see #getOrCreateReferenceHolder(TypedKey) */ , E, B extends RegistryBuilder> RegistryHolder.Inlined createInlinedHolder(RegistryKey registryKey, Consumer> value); // TODO remove Keyed diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java b/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java index 35fd6610864c..532b2d872c97 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/util/Conversions.java @@ -72,11 +72,15 @@ public RegistryOps.RegistryInfoLookup lookup() { public Holder.Reference getReferenceHolder(final TypedKey key) { final ResourceKey nms = PaperRegistries.toNms(key); - return this.lookup.lookup(nms.registryKey()).orElseThrow().getter().getOrThrow(nms); + return this.getReferenceHolder(nms); } public Holder.Reference getReferenceHolder(final ResourceKey key) { - return this.lookup.lookup(key.registryKey()).orElseThrow().getter().getOrThrow(key); + try { + return this.lookup.lookup(key.registryKey()).orElseThrow().getter().getOrThrow(key); + } catch (final IllegalStateException ex) { + throw new IllegalStateException("Did you try to create a reference holder for a registry in a later layer? Try a inlined holder instead.", ex); + } } @Contract("null -> null; !null -> !null") From db3bf3cb242d56063feaa0066f284985520191b0 Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Sun, 9 Aug 2026 15:52:06 +0200 Subject: [PATCH 8/9] only attempt to import registry entry class once --- .../src/main/java/io/papermc/generator/Main.java | 4 ++-- .../main/java/io/papermc/generator/Rewriters.java | 6 +++--- .../types/registry/PaperFeatureFlagMapping.java | 4 ++-- .../types/registry/PaperRegistriesRewriter.java | 12 +++++------- .../types/simple/CraftPotionUtilRewriter.java | 4 ++-- .../rewriter/types/simple/MapPaletteRewriter.java | 2 +- .../rewriter/types/simple/MemoryKeyRewriter.java | 4 ++-- .../rewriter/types/simple/StatisticRewriter.java | 4 ++-- 8 files changed, 19 insertions(+), 21 deletions(-) diff --git a/paper-generator/src/main/java/io/papermc/generator/Main.java b/paper-generator/src/main/java/io/papermc/generator/Main.java index 41dd028d2d0e..e0a651c9623a 100644 --- a/paper-generator/src/main/java/io/papermc/generator/Main.java +++ b/paper-generator/src/main/java/io/papermc/generator/Main.java @@ -17,14 +17,13 @@ import java.util.function.Consumer; import java.util.stream.Stream; import net.minecraft.SharedConstants; -import net.minecraft.util.Util; import net.minecraft.commands.Commands; import net.minecraft.core.HolderLookup; import net.minecraft.core.LayeredRegistryAccess; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; -import net.minecraft.resources.RegistryDataLoader; import net.minecraft.resources.Identifier; +import net.minecraft.resources.RegistryDataLoader; import net.minecraft.server.Bootstrap; import net.minecraft.server.MinecraftServer; import net.minecraft.server.RegistryLayer; @@ -37,6 +36,7 @@ import net.minecraft.server.permissions.LevelBasedPermissionSet; import net.minecraft.tags.TagKey; import net.minecraft.tags.TagLoader; +import net.minecraft.util.Util; import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.level.DataPackConfig; diff --git a/paper-generator/src/main/java/io/papermc/generator/Rewriters.java b/paper-generator/src/main/java/io/papermc/generator/Rewriters.java index 818a7b4a421f..b1b5b95052f0 100644 --- a/paper-generator/src/main/java/io/papermc/generator/Rewriters.java +++ b/paper-generator/src/main/java/io/papermc/generator/Rewriters.java @@ -189,12 +189,12 @@ protected EnumValue.Builder rewriteEnumValue(Rarity rarity) { .register("JukeboxSong", JukeboxSong.class, new RegistryFieldRewriter<>(Registries.JUKEBOX_SONG, "get") { @Override protected String rewriteFieldName(Holder.Reference reference) { - String keyedName = super.rewriteFieldName(reference); - if (!SourceVersion.isIdentifier(keyedName)) { + String constantName = super.rewriteFieldName(reference); + if (!SourceVersion.isIdentifier(constantName)) { // fallback to field names for invalid identifier (happens for 5, 11, 13 etc.) return RegistryEntries.byRegistryKey(Registries.JUKEBOX_SONG).getFieldNames().get(reference.key()); } - return keyedName; + return constantName; } }) .register("GameRules", GameRules.class, new RegistryFieldRewriter<>(Registries.GAME_RULE, "getRule") { diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperFeatureFlagMapping.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperFeatureFlagMapping.java index 8f21f8306b6e..adc234b92eb2 100644 --- a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperFeatureFlagMapping.java +++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperFeatureFlagMapping.java @@ -18,9 +18,9 @@ protected void insert(SearchMetadata metadata, StringBuilder builder) { while (flagIterator.hasNext()) { Identifier name = flagIterator.next(); - String keyedName = Formatting.formatKeyAsField(name.getPath()); + String fieldName = Formatting.formatKeyAsField(name.getPath()); builder.append(metadata.indent()); - builder.append("%s.%s, %s.%s".formatted(FeatureFlag.class.getSimpleName(), keyedName, FeatureFlags.class.getSimpleName(), keyedName)); + builder.append("%s.%s, %s.%s".formatted(FeatureFlag.class.getSimpleName(), fieldName, FeatureFlags.class.getSimpleName(), fieldName)); if (flagIterator.hasNext()) { builder.append(','); } diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java index 028c0a2b85b4..f5cf9ec6fbc2 100644 --- a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java +++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/registry/PaperRegistriesRewriter.java @@ -4,6 +4,7 @@ import io.papermc.generator.registry.RegistryEntries; import io.papermc.generator.registry.RegistryEntry; import io.papermc.generator.rewriter.types.Types; +import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; import io.papermc.typewriter.ClassNamed; import io.papermc.typewriter.replace.SearchMetadata; @@ -11,14 +12,12 @@ import java.lang.constant.ConstantDescs; import java.util.stream.Stream; import net.minecraft.core.registries.Registries; -import org.bukkit.Keyed; import org.bukkit.Registry; import org.jspecify.annotations.NullMarked; @NullMarked public class PaperRegistriesRewriter extends SearchReplaceRewriter { - private void appendEntry(String indent, StringBuilder builder, RegistryEntry entry, boolean canBeDelayed, boolean apiOnly) { builder.append(indent); builder.append("start"); @@ -61,11 +60,10 @@ private void appendEntry(String indent, StringBuilder builder, RegistryEntry case NONE -> builder.append(".create("); } // the builder impl is always nested in the base entry class; reference the base entry constructor first, then the builder constructor - String builderImpl = entry.apiRegistryBuilderImpl(); - String entryImpl = builderImpl.substring(0, builderImpl.lastIndexOf('.')); - builder.append(this.importCollector.getShortName(this.classNamedView.findFirst(entryImpl).resolve(this.classResolver))).append("::new"); + ClassNamed builderImpl = this.classNamedView.findFirst(entry.apiRegistryBuilderImpl()).resolve(this.classResolver); + builder.append(this.importCollector.getShortName(builderImpl.topLevel())).append("::new"); builder.append(", "); - builder.append(this.importCollector.getShortName(this.classNamedView.findFirst(builderImpl).resolve(this.classResolver))).append("::new"); + builder.append(builderImpl.dottedNestedName()).append("::new"); if (entry.modificationApiSupport() == RegistryEntry.RegistryModificationApiSupport.NONE) { builder.append(", "); builder.append(Types.REGISTRY_MODIFICATION_API_SUPPORT.dottedNestedName()).append(".NONE"); @@ -113,7 +111,7 @@ public void insert(SearchMetadata metadata, StringBuilder builder) { private ClassNamed getImplClassName(RegistryEntry entry) { try (Stream stream = this.classNamedView.find(entry.implClass())) { return stream.map(klass -> klass.resolve(this.classResolver)) - .filter(klass -> Keyed.class.isAssignableFrom(klass.knownClass())) // todo check handleable/holderable once keyed is gone + .filter(klass -> RegistryElement.class.isAssignableFrom(klass.knownClass())) .findFirst().orElseThrow(); } } diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftPotionUtilRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftPotionUtilRewriter.java index 08e8a84de610..41357d8caa5c 100644 --- a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftPotionUtilRewriter.java +++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/CraftPotionUtilRewriter.java @@ -23,9 +23,9 @@ protected void insert(SearchMetadata metadata, StringBuilder builder) { BuiltInRegistries.POTION.keySet().stream() .filter(key -> BuiltInRegistries.POTION.containsKey(key.withPath(path -> this.statePrefix + "_" + path))) .sorted(Formatting.alphabeticKeyOrder(Identifier::getPath)).forEach(key -> { - String keyedName = Formatting.formatKeyAsField(key.getPath()); + String fieldName = Formatting.formatKeyAsField(key.getPath()); builder.append(metadata.indent()); - builder.append(".put(%s.%s, %s.%s_%s)".formatted(PotionType.class.getSimpleName(), keyedName, PotionType.class.getSimpleName(), upperStatePrefix, keyedName)); + builder.append(".put(%s.%s, %s.%s_%s)".formatted(PotionType.class.getSimpleName(), fieldName, PotionType.class.getSimpleName(), upperStatePrefix, fieldName)); builder.append('\n'); }); } diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MapPaletteRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MapPaletteRewriter.java index 18f49023892c..a1593d3e66e2 100644 --- a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MapPaletteRewriter.java +++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MapPaletteRewriter.java @@ -18,7 +18,7 @@ protected void insert(SearchMetadata metadata, StringBuilder builder) { int count = 0; for (@Nullable MapColor mapColor : MapColor.MATERIAL_COLORS) { if (mapColor == null) { - continue; + break; } for (MapColor.Brightness brightness : MapColor.Brightness.values()) { diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java index 265c6f432e18..f23ffd9f736c 100644 --- a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java +++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java @@ -102,8 +102,8 @@ protected String rewriteFieldType(Holder.Reference> referenc @Override protected String rewriteFieldName(Holder.Reference> reference) { - String keyedName = super.rewriteFieldName(reference); - return FIELD_RENAMES.getOrDefault(keyedName, keyedName); + String constantName = super.rewriteFieldName(reference); + return FIELD_RENAMES.getOrDefault(constantName, constantName); } @Override diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/StatisticRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/StatisticRewriter.java index fa2b6d42a38c..3346a796345f 100644 --- a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/StatisticRewriter.java +++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/StatisticRewriter.java @@ -81,11 +81,11 @@ public CraftCustom() { @Override protected EnumValue.Builder rewriteEnumValue(Holder.Reference reference) { - String keyedName = Formatting.formatKeyAsField(reference.key().identifier().getPath()); + String fieldName = Formatting.formatKeyAsField(reference.key().identifier().getPath()); return super.rewriteEnumValue(reference) .rename(name -> FIELD_RENAMES.getOrDefault(name, name)) - .argument("%s.%s".formatted(Stats.class.getSimpleName(), INTERNAL_FIELD_RENAMES.getOrDefault(keyedName, keyedName))); + .argument("%s.%s".formatted(Stats.class.getSimpleName(), INTERNAL_FIELD_RENAMES.getOrDefault(fieldName, fieldName))); } } From 426ee4eedaa7858ef1b3e2db6edfc98d28eb57ea Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sun, 9 Aug 2026 12:09:19 -0700 Subject: [PATCH 9/9] Support proper inlined sound events --- .../datacomponent/DataComponentTypes.java | 3 +- .../datacomponent/item/BlocksAttacks.java | 35 ++++++++++++----- .../paper/datacomponent/item/Consumable.java | 7 ++-- .../paper/datacomponent/item/Equippable.java | 19 ++++----- .../datacomponent/item/KineticWeapon.java | 27 ++++++++++--- .../datacomponent/item/PiercingWeapon.java | 25 ++++++++++-- .../consumable/ConsumableTypesBridge.java | 3 +- .../item/consumable/ConsumeEffect.java | 9 +++-- .../java/io/papermc/paper/dialog/Dialog.java | 4 +- ...ider.java => RegistryBuilderProvider.java} | 6 +-- .../SulfurCubeArchetypeRegistryEntry.java | 2 +- .../main/java/org/bukkit/MusicInstrument.java | 4 +- paper-api/src/main/java/org/bukkit/Sound.java | 39 +++++++++++++++---- .../inventory/meta/trim/TrimMaterial.java | 4 +- .../inventory/meta/trim/TrimPattern.java | 4 +- .../paper/adventure/PaperAdventure.java | 11 ------ .../datacomponent/DataComponentAdapters.java | 3 +- .../datacomponent/PaperDataComponentType.java | 1 - .../item/PaperBlocksAttacks.java | 24 ++++++------ .../datacomponent/item/PaperConsumable.java | 12 +++--- .../datacomponent/item/PaperEquippable.java | 20 +++++----- .../item/PaperKineticWeapon.java | 34 ++++++---------- .../item/PaperPiercingWeapon.java | 34 ++++++---------- .../consumable/ConsumableTypesBridgeImpl.java | 8 ++-- .../item/consumable/PaperPlaySound.java | 8 ++-- ....java => RegistryBuilderProviderImpl.java} | 2 +- ...gistry.data.InlinedRegistryBuilderProvider | 1 - ...aper.registry.data.RegistryBuilderProvider | 1 + 28 files changed, 200 insertions(+), 150 deletions(-) rename paper-api/src/main/java/io/papermc/paper/registry/data/{InlinedRegistryBuilderProvider.java => RegistryBuilderProvider.java} (79%) rename paper-server/src/main/java/io/papermc/paper/registry/data/{InlinedRegistryBuilderProviderImpl.java => RegistryBuilderProviderImpl.java} (91%) delete mode 100644 paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.data.InlinedRegistryBuilderProvider create mode 100644 paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.data.RegistryBuilderProvider diff --git a/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentTypes.java b/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentTypes.java index 24704d1865d2..a3e70327a3ce 100644 --- a/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentTypes.java +++ b/paper-api/src/main/java/io/papermc/paper/datacomponent/DataComponentTypes.java @@ -57,6 +57,7 @@ import org.bukkit.FireworkEffect; import org.bukkit.MusicInstrument; import org.bukkit.Registry; +import org.bukkit.Sound; import org.bukkit.block.banner.PatternType; import org.bukkit.damage.DamageType; import org.bukkit.entity.Axolotl; @@ -365,7 +366,7 @@ public final class DataComponentTypes { * Holds the unresolved loot table and seed of a container-like block. */ public static final DataComponentType.Valued CONTAINER_LOOT = valued("container_loot"); - public static final DataComponentType.Valued BREAK_SOUND = valued("break_sound"); + public static final DataComponentType.Valued BREAK_SOUND = valued("break_sound"); public static final DataComponentType.Valued VILLAGER_VARIANT = valued("villager/variant"); public static final DataComponentType.Valued WOLF_VARIANT = valued("wolf/variant"); public static final DataComponentType.Valued WOLF_SOUND_VARIANT = valued("wolf/sound_variant"); diff --git a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/BlocksAttacks.java b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/BlocksAttacks.java index e613f9ecac32..0380ecd10887 100644 --- a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/BlocksAttacks.java +++ b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/BlocksAttacks.java @@ -6,6 +6,7 @@ import io.papermc.paper.registry.set.RegistryKeySet; import java.util.List; import net.kyori.adventure.key.Key; +import org.bukkit.Sound; import org.bukkit.damage.DamageType; import org.checkerframework.checker.index.qual.NonNegative; import org.jetbrains.annotations.ApiStatus; @@ -70,20 +71,20 @@ static Builder blocksAttacks() { @Nullable RegistryKeySet bypassedBy(); /** - * Gets the key sound to play when an attack is successfully blocked. + * Gets the sound to play when an attack is successfully blocked. * - * @return a key of the sound + * @return the sound */ @Contract(pure = true) - @Nullable Key blockSound(); + @Nullable Sound blockSound(); /** - * Gets the key sound to play when the item goes on its disabled cooldown due to an attack. + * Gets the sound to play when the item goes on its disabled cooldown due to an attack. * - * @return a key of the sound + * @return the sound */ @Contract(pure = true) - @Nullable Key disableSound(); + @Nullable Sound disableSound(); /** * Builder for {@link BlocksAttacks}. @@ -109,10 +110,26 @@ interface Builder extends DataComponentBuilder { @Contract(value = "_ -> this", mutates = "this") Builder bypassedBy(@Nullable RegistryKeySet bypassedBy); + /** + * Sets the sound to play when an attack is successfully blocked. + * + * @param sound the sound, or null to play no sound + * @return the builder for chaining + * @see Sound#create(net.kyori.adventure.key.Key, Float) + * @see Sound#create(java.util.function.Consumer) + */ @Contract(value = "_ -> this", mutates = "this") - Builder blockSound(@Nullable Key sound); - + Builder blockSound(@Nullable Sound sound); + + /** + * Sets the sound to play when the item goes on its disabled cooldown due to an attack. + * + * @param sound the sound, or null to play no sound + * @return the builder for chaining + * @see Sound#create(net.kyori.adventure.key.Key, Float) + * @see Sound#create(java.util.function.Consumer) + */ @Contract(value = "_ -> this", mutates = "this") - Builder disableSound(@Nullable Key sound); + Builder disableSound(@Nullable Sound sound); } } diff --git a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/Consumable.java b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/Consumable.java index 1ac3c35edd0b..b8610d707166 100644 --- a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/Consumable.java +++ b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/Consumable.java @@ -6,6 +6,7 @@ import io.papermc.paper.datacomponent.item.consumable.ItemUseAnimation; import java.util.List; import net.kyori.adventure.key.Key; +import org.bukkit.Sound; import org.checkerframework.checker.index.qual.NonNegative; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Contract; @@ -32,7 +33,7 @@ static Consumable.Builder consumable() { ItemUseAnimation animation(); @Contract(pure = true) - Key sound(); + Sound sound(); @Contract(pure = true) boolean hasConsumeParticles(); @@ -67,11 +68,11 @@ interface Builder extends DataComponentBuilder { /** * Sets the sound played when consuming the item. * - * @param sound the {@link Key} representing the sound to be used + * @param sound the sound to be used * @return the builder for chaining */ @Contract(value = "_ -> this", mutates = "this") - Builder sound(Key sound); + Builder sound(Sound sound); /** * Sets whether consuming the item results in particle effects. diff --git a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/Equippable.java b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/Equippable.java index 113654bbf5a3..e4d79b258271 100644 --- a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/Equippable.java +++ b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/Equippable.java @@ -4,6 +4,7 @@ import io.papermc.paper.datacomponent.DataComponentBuilder; import io.papermc.paper.registry.set.RegistryKeySet; import net.kyori.adventure.key.Key; +import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.inventory.EquipmentSlot; import org.jetbrains.annotations.ApiStatus; @@ -39,12 +40,12 @@ static Equippable.Builder equippable(final EquipmentSlot slot) { EquipmentSlot slot(); /** - * Gets the equip sound key. + * Gets the equip sound. * - * @return the equip sound key + * @return the equip sound */ @Contract(pure = true) - Key equipSound(); + Sound equipSound(); /** * Gets the asset id if present. @@ -117,7 +118,7 @@ static Equippable.Builder equippable(final EquipmentSlot slot) { * @return shear sound */ @Contract(pure = true) - Key shearSound(); + Sound shearSound(); /** * Builder for {@link Equippable}. @@ -126,13 +127,13 @@ static Equippable.Builder equippable(final EquipmentSlot slot) { interface Builder extends DataComponentBuilder { /** - * Sets the equip sound key for this item. + * Sets the equip sound for this item. * - * @param sound the equip sound key + * @param sound the equip sound * @return the builder for chaining */ @Contract(value = "_ -> this", mutates = "this") - Builder equipSound(Key sound); + Builder equipSound(Sound sound); /** * Sets the asset id for this item. @@ -209,10 +210,10 @@ interface Builder extends DataComponentBuilder { /** * Sets the sound that is played when shearing this equipment off an entity. * - * @param shearSound the shear sound key + * @param shearSound the shear sound * @return the builder for chaining */ @Contract(value = "_ -> this", mutates = "this") - Builder shearSound(Key shearSound); + Builder shearSound(Sound shearSound); } } diff --git a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/KineticWeapon.java b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/KineticWeapon.java index 0aac81093307..0d07c04d4cc5 100644 --- a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/KineticWeapon.java +++ b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/KineticWeapon.java @@ -2,6 +2,7 @@ import io.papermc.paper.datacomponent.DataComponentBuilder; import net.kyori.adventure.key.Key; +import org.bukkit.Sound; import org.checkerframework.checker.index.qual.NonNegative; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Contract; @@ -51,10 +52,10 @@ static Condition condition(final @NonNegative int maxDurationTicks, final float float damageMultiplier(); @Contract(pure = true) - @Nullable Key sound(); + @Nullable Sound sound(); @Contract(pure = true) - @Nullable Key hitSound(); + @Nullable Sound hitSound(); interface Condition { @@ -95,10 +96,26 @@ interface Builder extends DataComponentBuilder { @Contract(value = "_ -> this", mutates = "this") Builder damageMultiplier(float damageMultiplier); + /** + * Sets the sound to play while this weapon is active. + * + * @param sound the sound, or null to play no sound + * @return the builder for chaining + * @see Sound#create(net.kyori.adventure.key.Key, Float) + * @see Sound#create(java.util.function.Consumer) + */ @Contract(value = "_ -> this", mutates = "this") - Builder sound(@Nullable Key sound); - + Builder sound(@Nullable Sound sound); + + /** + * Sets the sound to play when this weapon hits an entity. + * + * @param sound the sound, or null to play no sound + * @return the builder for chaining + * @see Sound#create(net.kyori.adventure.key.Key, Float) + * @see Sound#create(java.util.function.Consumer) + */ @Contract(value = "_ -> this", mutates = "this") - Builder hitSound(@Nullable Key sound); + Builder hitSound(@Nullable Sound sound); } } diff --git a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/PiercingWeapon.java b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/PiercingWeapon.java index 802a96fc06ed..56e088e06a31 100644 --- a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/PiercingWeapon.java +++ b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/PiercingWeapon.java @@ -2,6 +2,7 @@ import io.papermc.paper.datacomponent.DataComponentBuilder; import net.kyori.adventure.key.Key; +import org.bukkit.Sound; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.Range; @@ -25,9 +26,9 @@ static Builder piercingWeapon() { boolean dismounts(); - @Nullable Key sound(); + @Nullable Sound sound(); - @Nullable Key hitSound(); + @Nullable Sound hitSound(); /** * Builder for {@link PiercingWeapon}. @@ -41,10 +42,26 @@ interface Builder extends DataComponentBuilder { @Contract(value = "_ -> this", mutates = "this") Builder dismounts(boolean dismounts); + /** + * Sets the sound to play while this weapon is active. + * + * @param sound the sound, or null to play no sound + * @return the builder for chaining + * @see Sound#create(net.kyori.adventure.key.Key, Float) + * @see Sound#create(java.util.function.Consumer) + */ @Contract(value = "_ -> this", mutates = "this") - Builder sound(@Nullable Key sound); + Builder sound(@Nullable Sound sound); + /** + * Sets the sound to play when this weapon hits an entity. + * + * @param sound the sound, or null to play no sound + * @return the builder for chaining + * @see Sound#create(net.kyori.adventure.key.Key, Float) + * @see Sound#create(java.util.function.Consumer) + */ @Contract(value = "_ -> this", mutates = "this") - Builder hitSound(@Nullable Key sound); + Builder hitSound(@Nullable Sound sound); } } diff --git a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumableTypesBridge.java b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumableTypesBridge.java index 298a8fb69b3f..f3d3a67f68f0 100644 --- a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumableTypesBridge.java +++ b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumableTypesBridge.java @@ -5,6 +5,7 @@ import java.util.Optional; import java.util.ServiceLoader; import net.kyori.adventure.key.Key; +import org.bukkit.Sound; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.jetbrains.annotations.ApiStatus; @@ -26,7 +27,7 @@ static ConsumableTypesBridge bridge() { ConsumeEffect.ClearAllStatusEffects clearAllStatusEffects(); - ConsumeEffect.PlaySound playSoundEffect(Key sound); + ConsumeEffect.PlaySound playSoundEffect(Sound sound); ConsumeEffect.TeleportRandomly teleportRandomlyEffect(float diameter); } diff --git a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumeEffect.java b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumeEffect.java index 55e92d537d85..e3c71be194f6 100644 --- a/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumeEffect.java +++ b/paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumeEffect.java @@ -3,6 +3,7 @@ import io.papermc.paper.registry.set.RegistryKeySet; import java.util.List; import net.kyori.adventure.key.Key; +import org.bukkit.Sound; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.jetbrains.annotations.ApiStatus; @@ -41,12 +42,12 @@ static RemoveStatusEffects removeEffects(final RegistryKeySet /** * Creates a consume effect that plays a sound on consumption. * - * @param key the key sound effect to play + * @param sound the sound effect to play * @return the effect instance */ @Contract(value = "_ -> new", pure = true) - static PlaySound playSoundConsumeEffect(final Key key) { - return ConsumableTypesBridge.bridge().playSoundEffect(key); + static PlaySound playSoundConsumeEffect(final Sound sound) { + return ConsumableTypesBridge.bridge().playSoundEffect(sound); } /** @@ -110,7 +111,7 @@ interface PlaySound extends ConsumeEffect { * * @return sound effect */ - Key sound(); + Sound sound(); } /** diff --git a/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java b/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java index 973892c2bea4..6e4a5564e6ff 100644 --- a/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java +++ b/paper-api/src/main/java/io/papermc/paper/dialog/Dialog.java @@ -4,7 +4,7 @@ import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; -import io.papermc.paper.registry.data.InlinedRegistryBuilderProvider; +import io.papermc.paper.registry.data.RegistryBuilderProvider; import io.papermc.paper.registry.data.dialog.DialogRegistryEntry; import java.util.function.Consumer; import net.kyori.adventure.dialog.DialogLike; @@ -29,7 +29,7 @@ public interface Dialog extends RegistryElement.Inlineable> value) { - return InlinedRegistryBuilderProvider.instance().create(RegistryKey.DIALOG, value); + return RegistryBuilderProvider.instance().create(RegistryKey.DIALOG, value); } // Start generate - Dialog diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java b/paper-api/src/main/java/io/papermc/paper/registry/data/RegistryBuilderProvider.java similarity index 79% rename from paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java rename to paper-api/src/main/java/io/papermc/paper/registry/data/RegistryBuilderProvider.java index 5882ed34625d..d2441d966705 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProvider.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/RegistryBuilderProvider.java @@ -17,11 +17,11 @@ */ @ApiStatus.Internal @ApiStatus.NonExtendable -public interface InlinedRegistryBuilderProvider { +public interface RegistryBuilderProvider { - static InlinedRegistryBuilderProvider instance() { + static RegistryBuilderProvider instance() { final class Holder { - static final Optional INSTANCE = ServiceLoader.load(InlinedRegistryBuilderProvider.class, InlinedRegistryBuilderProvider.class.getClassLoader()).findFirst(); + static final Optional INSTANCE = ServiceLoader.load(RegistryBuilderProvider.class, RegistryBuilderProvider.class.getClassLoader()).findFirst(); } return Holder.INSTANCE.orElseThrow(); } diff --git a/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java b/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java index edd0fd7f7f1e..0de24f298096 100644 --- a/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java +++ b/paper-api/src/main/java/io/papermc/paper/registry/data/SulfurCubeArchetypeRegistryEntry.java @@ -17,7 +17,7 @@ import org.jetbrains.annotations.Contract; import org.jspecify.annotations.Nullable; -import static io.papermc.paper.registry.data.InlinedRegistryBuilderProvider.transientHolder; +import static io.papermc.paper.registry.data.RegistryBuilderProvider.transientHolder; import static io.papermc.paper.util.BoundChecker.requireNonNegative; import static io.papermc.paper.util.BoundChecker.requirePositive; diff --git a/paper-api/src/main/java/org/bukkit/MusicInstrument.java b/paper-api/src/main/java/org/bukkit/MusicInstrument.java index e1c284df4ce6..803a430d517b 100644 --- a/paper-api/src/main/java/org/bukkit/MusicInstrument.java +++ b/paper-api/src/main/java/org/bukkit/MusicInstrument.java @@ -4,8 +4,8 @@ import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; -import io.papermc.paper.registry.data.InlinedRegistryBuilderProvider; import io.papermc.paper.registry.data.InstrumentRegistryEntry; +import io.papermc.paper.registry.data.RegistryBuilderProvider; import java.util.Collection; import java.util.function.Consumer; import net.kyori.adventure.key.Key; @@ -24,7 +24,7 @@ public abstract class MusicInstrument implements RegistryElement.Inlineable> value) { - return InlinedRegistryBuilderProvider.instance().create(RegistryKey.INSTRUMENT, value); + return RegistryBuilderProvider.instance().create(RegistryKey.INSTRUMENT, value); } // Start generate - MusicInstrument diff --git a/paper-api/src/main/java/org/bukkit/Sound.java b/paper-api/src/main/java/org/bukkit/Sound.java index f501acd660ec..a8fa13dca757 100644 --- a/paper-api/src/main/java/org/bukkit/Sound.java +++ b/paper-api/src/main/java/org/bukkit/Sound.java @@ -1,14 +1,18 @@ package org.bukkit; import com.google.common.base.Preconditions; +import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.data.RegistryBuilderProvider; import io.papermc.paper.registry.data.SoundEventRegistryEntry; import java.util.Locale; +import java.util.function.Consumer; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; import org.bukkit.util.OldEnum; -import org.jetbrains.annotations.NotNull; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * An interface of Sounds the server is able to send to players. @@ -23,8 +27,30 @@ * guarantee values will not be removed from this interface. As such, you should not * depend on the ordinal values of this class. */ +@NullMarked public interface Sound extends RegistryElement.Inlineable, OldEnum, Keyed, net.kyori.adventure.sound.Sound.Type { // Paper - implement Sound.Type + /** + * Creates an inlined sound event. + * + * @param key the sound location + * @param range an optional fixed range + * @return the created sound + */ + static Sound create(final Key key, final @Nullable Float range) { + return create(builder -> builder.empty().location(key).fixedRange(range)); + } + + /** + * Creates an inlined sound event. + * + * @param value a consumer for the builder factory + * @return the created sound + */ + static Sound create(final Consumer> value) { + return RegistryBuilderProvider.instance().create(RegistryKey.SOUND_EVENT, value); + } + // Start generate - Sound Sound AMBIENT_BASALT_DELTAS_ADDITIONS = getSound("ambient.basalt_deltas.additions"); @@ -3963,8 +3989,7 @@ public interface Sound extends RegistryElement.Inlineable> value) { - return InlinedRegistryBuilderProvider.instance().create(RegistryKey.TRIM_MATERIAL, value); + return RegistryBuilderProvider.instance().create(RegistryKey.TRIM_MATERIAL, value); } // Start generate - TrimMaterial diff --git a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java index 746b0dc9877c..2598a9cc22bb 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java +++ b/paper-api/src/main/java/org/bukkit/inventory/meta/trim/TrimPattern.java @@ -4,7 +4,7 @@ import io.papermc.paper.registry.RegistryBuilderFactory; import io.papermc.paper.registry.RegistryElement; import io.papermc.paper.registry.RegistryKey; -import io.papermc.paper.registry.data.InlinedRegistryBuilderProvider; +import io.papermc.paper.registry.data.RegistryBuilderProvider; import io.papermc.paper.registry.data.TrimPatternRegistryEntry; import java.util.function.Consumer; import net.kyori.adventure.key.Key; @@ -29,7 +29,7 @@ public interface TrimPattern extends RegistryElement.Inlineable> value) { - return InlinedRegistryBuilderProvider.instance().create(RegistryKey.TRIM_PATTERN, value); + return RegistryBuilderProvider.instance().create(RegistryKey.TRIM_PATTERN, value); } // Start generate - TrimPattern diff --git a/paper-server/src/main/java/io/papermc/paper/adventure/PaperAdventure.java b/paper-server/src/main/java/io/papermc/paper/adventure/PaperAdventure.java index bef2c6b6cbd5..8558147516d2 100644 --- a/paper-server/src/main/java/io/papermc/paper/adventure/PaperAdventure.java +++ b/paper-server/src/main/java/io/papermc/paper/adventure/PaperAdventure.java @@ -158,17 +158,6 @@ public static Key asAdventureKey(final ResourceKey key) { return asVanilla(key); } - public static Holder resolveSound(final Key key) { - Identifier id = asVanilla(key); - Optional> vanilla = BuiltInRegistries.SOUND_EVENT.get(id); - if (vanilla.isPresent()) { - return vanilla.get(); - } - - // sound is not known so not in the registry but might be used by the client with a resource pack - return Holder.direct(SoundEvent.createVariableRangeEvent(id)); - } - // Component public static @NotNull Component asAdventure(final net.minecraft.network.chat.@Nullable Component component) { diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/DataComponentAdapters.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/DataComponentAdapters.java index a775db74a447..9671688a9a9f 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/DataComponentAdapters.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/DataComponentAdapters.java @@ -64,6 +64,7 @@ import org.bukkit.DyeColor; import org.bukkit.craftbukkit.CraftArt; import org.bukkit.craftbukkit.CraftMusicInstrument; +import org.bukkit.craftbukkit.CraftSound; import org.bukkit.craftbukkit.damage.CraftDamageType; import org.bukkit.craftbukkit.entity.CraftCat; import org.bukkit.craftbukkit.entity.CraftChicken; @@ -177,7 +178,7 @@ public static void bootstrap() { register(DataComponents.SULFUR_CUBE_CONTENT, PaperSulfurCubeContent::new); // register(DataComponents.LOCK, PaperLockCode::new); register(DataComponents.CONTAINER_LOOT, PaperSeededContainerLoot::new); - register(DataComponents.BREAK_SOUND, nms -> PaperAdventure.asAdventure(nms.value().location()), PaperAdventure::resolveSound); + register(DataComponents.BREAK_SOUND, CraftSound::minecraftHolderToBukkit, CraftSound::bukkitToMinecraftHolder); register(DataComponents.TOOLTIP_DISPLAY, PaperTooltipDisplay::new); register(DataComponents.WEAPON, PaperWeapon::new); register(DataComponents.BLOCKS_ATTACKS, PaperBlocksAttacks::new); diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/PaperDataComponentType.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/PaperDataComponentType.java index c3eceda8fb8e..9b4ae1b18865 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/PaperDataComponentType.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/PaperDataComponentType.java @@ -6,7 +6,6 @@ import java.util.Set; import net.minecraft.core.Holder; import net.minecraft.core.component.DataComponentGetter; -import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.registries.Registries; import org.bukkit.craftbukkit.CraftRegistry; import org.jspecify.annotations.Nullable; diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperBlocksAttacks.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperBlocksAttacks.java index 9aaa0d93c0cb..cf4875b2c567 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperBlocksAttacks.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperBlocksAttacks.java @@ -1,6 +1,5 @@ package io.papermc.paper.datacomponent.item; -import io.papermc.paper.adventure.PaperAdventure; import io.papermc.paper.datacomponent.item.blocksattacks.DamageReduction; import io.papermc.paper.datacomponent.item.blocksattacks.ItemDamageFunction; import io.papermc.paper.datacomponent.item.blocksattacks.PaperDamageReduction; @@ -12,8 +11,9 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import java.util.List; import java.util.Optional; -import net.kyori.adventure.key.Key; import net.minecraft.core.registries.Registries; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.CraftSound; import org.bukkit.craftbukkit.util.Handleable; import org.bukkit.damage.DamageType; import org.checkerframework.checker.index.qual.NonNegative; @@ -56,13 +56,13 @@ public ItemDamageFunction itemDamage() { } @Override - public @Nullable Key blockSound() { - return this.impl.blockSound().map(holder -> PaperAdventure.asAdventure(holder.value().location())).orElse(null); + public @Nullable Sound blockSound() { + return this.impl.blockSound().map(CraftSound::minecraftHolderToBukkit).orElse(null); } @Override - public @Nullable Key disableSound() { - return this.impl.disableSound().map(holder -> PaperAdventure.asAdventure(holder.value().location())).orElse(null); + public @Nullable Sound disableSound() { + return this.impl.disableSound().map(CraftSound::minecraftHolderToBukkit).orElse(null); } static final class BuilderImpl implements Builder { @@ -72,8 +72,8 @@ static final class BuilderImpl implements Builder { private List damageReductions = new ObjectArrayList<>(); private ItemDamageFunction itemDamage = new PaperItemDamageFunction(net.minecraft.world.item.component.BlocksAttacks.ItemDamageFunction.DEFAULT); private @Nullable RegistryKeySet bypassedBy; - private @Nullable Key blockSound; - private @Nullable Key disableSound; + private @Nullable Sound blockSound; + private @Nullable Sound disableSound; @Override public Builder blockDelaySeconds(final @NonNegative float delay) { @@ -112,13 +112,13 @@ public Builder bypassedBy(final @Nullable RegistryKeySet bypassedBy) } @Override - public Builder blockSound(final @Nullable Key sound) { + public Builder blockSound(final @Nullable Sound sound) { this.blockSound = sound; return this; } @Override - public Builder disableSound(final @Nullable Key sound) { + public Builder disableSound(final @Nullable Sound sound) { this.disableSound = sound; return this; } @@ -131,8 +131,8 @@ public BlocksAttacks build() { this.damageReductions.stream().map(damageReduction -> ((PaperDamageReduction) damageReduction).internal()).toList(), ((PaperItemDamageFunction) this.itemDamage).internal(), Optional.ofNullable(this.bypassedBy).map(holders -> PaperRegistrySets.convertToNms(Registries.DAMAGE_TYPE, Conversions.global().lookup(), holders)), - Optional.ofNullable(this.blockSound).map(PaperAdventure::resolveSound), - Optional.ofNullable(this.disableSound).map(PaperAdventure::resolveSound) + Optional.ofNullable(this.blockSound).map(CraftSound::bukkitToMinecraftHolder), + Optional.ofNullable(this.disableSound).map(CraftSound::bukkitToMinecraftHolder) )); } } diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperConsumable.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperConsumable.java index c15bf575d602..c2e95369a300 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperConsumable.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperConsumable.java @@ -1,16 +1,16 @@ package io.papermc.paper.datacomponent.item; -import io.papermc.paper.adventure.PaperAdventure; import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect; import io.papermc.paper.datacomponent.item.consumable.ItemUseAnimation; import io.papermc.paper.datacomponent.item.consumable.PaperConsumableEffect; import io.papermc.paper.util.MCUtil; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import java.util.List; -import net.kyori.adventure.key.Key; import net.minecraft.core.Holder; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.CraftSound; import org.bukkit.craftbukkit.util.Handleable; import org.checkerframework.checker.index.qual.NonNegative; import org.jetbrains.annotations.Unmodifiable; @@ -39,8 +39,8 @@ public ItemUseAnimation animation() { } @Override - public Key sound() { - return PaperAdventure.asAdventure(this.impl.sound().value().location()); + public Sound sound() { + return CraftSound.minecraftHolderToBukkit(this.impl.sound()); } @Override @@ -85,8 +85,8 @@ public Builder animation(final ItemUseAnimation animation) { } @Override - public Builder sound(final Key sound) { - this.eatSound = PaperAdventure.resolveSound(sound); + public Builder sound(final Sound sound) { + this.eatSound = CraftSound.bukkitToMinecraftHolder(sound); return this; } diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperEquippable.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperEquippable.java index 146ea7aba6ae..40612c0e2bea 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperEquippable.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperEquippable.java @@ -17,7 +17,9 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.equipment.EquipmentAsset; import net.minecraft.world.item.equipment.EquipmentAssets; +import org.bukkit.Sound; import org.bukkit.craftbukkit.CraftEquipmentSlot; +import org.bukkit.craftbukkit.CraftSound; import org.bukkit.craftbukkit.util.Handleable; import org.bukkit.entity.EntityType; import org.bukkit.inventory.EquipmentSlot; @@ -38,8 +40,8 @@ public EquipmentSlot slot() { } @Override - public Key equipSound() { - return PaperAdventure.asAdventure(this.impl.equipSound().value().location()); + public Sound equipSound() { + return CraftSound.minecraftHolderToBukkit(this.impl.equipSound()); } @Override @@ -89,8 +91,8 @@ public boolean canBeSheared() { } @Override - public Key shearSound() { - return PaperAdventure.asAdventure(this.impl.shearingSound().value().location()); + public Sound shearSound() { + return CraftSound.minecraftHolderToBukkit(this.impl.shearingSound()); } @Override @@ -128,8 +130,8 @@ static final class BuilderImpl implements Builder { } @Override - public Builder equipSound(final Key sound) { - this.equipSound = PaperAdventure.resolveSound(sound); + public Builder equipSound(final Sound sound) { + this.equipSound = CraftSound.bukkitToMinecraftHolder(sound); return this; } @@ -142,7 +144,7 @@ public Builder assetId(final @Nullable Key assetId) { } @Override - public Builder cameraOverlay(@Nullable final Key cameraOverlay) { + public Builder cameraOverlay(final @Nullable Key cameraOverlay) { this.cameraOverlay = Optional.ofNullable(cameraOverlay) .map(PaperAdventure::asVanilla); @@ -187,8 +189,8 @@ public Builder canBeSheared(final boolean canBeSheared) { } @Override - public Builder shearSound(final Key shearSound) { - this.shearSound = PaperAdventure.resolveSound(shearSound); + public Builder shearSound(final Sound shearSound) { + this.shearSound = CraftSound.bukkitToMinecraftHolder(shearSound); return this; } diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperKineticWeapon.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperKineticWeapon.java index 52521025fa29..57ff76cb23ed 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperKineticWeapon.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperKineticWeapon.java @@ -1,10 +1,8 @@ package io.papermc.paper.datacomponent.item; -import io.papermc.paper.adventure.PaperAdventure; import java.util.Optional; -import net.kyori.adventure.key.Key; -import net.minecraft.core.Holder; -import net.minecraft.sounds.SoundEvent; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.CraftSound; import org.bukkit.craftbukkit.util.Handleable; import org.checkerframework.checker.index.qual.NonNegative; import org.jspecify.annotations.Nullable; @@ -69,21 +67,13 @@ public float damageMultiplier() { } @Override - public @Nullable Key sound() { - return this.impl.sound() - .map(Holder::value) - .map(SoundEvent::location) - .map(PaperAdventure::asAdventure) - .orElse(null); + public @Nullable Sound sound() { + return this.impl.sound().map(CraftSound::minecraftHolderToBukkit).orElse(null); } @Override - public @Nullable Key hitSound() { - return this.impl.hitSound() - .map(Holder::value) - .map(SoundEvent::location) - .map(PaperAdventure::asAdventure) - .orElse(null); + public @Nullable Sound hitSound() { + return this.impl.hitSound().map(CraftSound::minecraftHolderToBukkit).orElse(null); } public record PaperKineticWeaponCondition( @@ -120,8 +110,8 @@ static final class BuilderImpl implements KineticWeapon.Builder { private net.minecraft.world.item.component.KineticWeapon.@Nullable Condition knockbackConditions; private net.minecraft.world.item.component.KineticWeapon.@Nullable Condition damageConditions; - private @Nullable Key sound = null; - private @Nullable Key hitSound = null; + private @Nullable Sound sound = null; + private @Nullable Sound hitSound = null; private float damageMultiplier = 1; private float forwardMovement = 0.0F; @@ -169,13 +159,13 @@ public Builder forwardMovement(float forwardMovement) { } @Override - public KineticWeapon.Builder sound(final @Nullable Key sound) { + public KineticWeapon.Builder sound(final @Nullable Sound sound) { this.sound = sound; return this; } @Override - public KineticWeapon.Builder hitSound(final @Nullable Key sound) { + public KineticWeapon.Builder hitSound(final @Nullable Sound sound) { this.hitSound = sound; return this; } @@ -191,8 +181,8 @@ public KineticWeapon build() { Optional.ofNullable(this.damageConditions), this.forwardMovement, this.damageMultiplier, - Optional.ofNullable(this.sound).map(PaperAdventure::resolveSound), - Optional.ofNullable(this.hitSound).map(PaperAdventure::resolveSound) + Optional.ofNullable(this.sound).map(CraftSound::bukkitToMinecraftHolder), + Optional.ofNullable(this.hitSound).map(CraftSound::bukkitToMinecraftHolder) ) ); } diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperPiercingWeapon.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperPiercingWeapon.java index 7843e88b2c5a..9dc1c70e6b49 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperPiercingWeapon.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/PaperPiercingWeapon.java @@ -1,10 +1,8 @@ package io.papermc.paper.datacomponent.item; -import io.papermc.paper.adventure.PaperAdventure; import java.util.Optional; -import net.kyori.adventure.key.Key; -import net.minecraft.core.Holder; -import net.minecraft.sounds.SoundEvent; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.CraftSound; import org.bukkit.craftbukkit.util.Handleable; import org.jspecify.annotations.Nullable; @@ -28,21 +26,13 @@ public boolean dismounts() { } @Override - public @Nullable Key sound() { - return this.impl.sound() - .map(Holder::value) - .map(SoundEvent::location) - .map(PaperAdventure::asAdventure) - .orElse(null); + public @Nullable Sound sound() { + return this.impl.sound().map(CraftSound::minecraftHolderToBukkit).orElse(null); } @Override - public @Nullable Key hitSound() { - return this.impl.hitSound() - .map(Holder::value) - .map(SoundEvent::location) - .map(PaperAdventure::asAdventure) - .orElse(null); + public @Nullable Sound hitSound() { + return this.impl.hitSound().map(CraftSound::minecraftHolderToBukkit).orElse(null); } static final class BuilderImpl implements PiercingWeapon.Builder { @@ -50,8 +40,8 @@ static final class BuilderImpl implements PiercingWeapon.Builder { private boolean dealsKnockback = true; private boolean dismounts = false; - private @Nullable Key sound = null; - private @Nullable Key hitSound = null; + private @Nullable Sound sound = null; + private @Nullable Sound hitSound = null; @Override public PiercingWeapon.Builder dealsKnockback(final boolean dealsKnockback) { @@ -66,13 +56,13 @@ public PiercingWeapon.Builder dismounts(final boolean dismounts) { } @Override - public PiercingWeapon.Builder sound(final @Nullable Key sound) { + public PiercingWeapon.Builder sound(final @Nullable Sound sound) { this.sound = sound; return this; } @Override - public PiercingWeapon.Builder hitSound(final @Nullable Key sound) { + public PiercingWeapon.Builder hitSound(final @Nullable Sound sound) { this.hitSound = sound; return this; } @@ -83,8 +73,8 @@ public PiercingWeapon build() { new net.minecraft.world.item.component.PiercingWeapon( this.dealsKnockback, this.dismounts, - Optional.ofNullable(this.sound).map(PaperAdventure::resolveSound), - Optional.ofNullable(this.hitSound).map(PaperAdventure::resolveSound) + Optional.ofNullable(this.sound).map(CraftSound::bukkitToMinecraftHolder), + Optional.ofNullable(this.hitSound).map(CraftSound::bukkitToMinecraftHolder) ) ); } diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumableTypesBridgeImpl.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumableTypesBridgeImpl.java index 63147d503198..fc526b74bb77 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumableTypesBridgeImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/consumable/ConsumableTypesBridgeImpl.java @@ -1,14 +1,14 @@ package io.papermc.paper.datacomponent.item.consumable; import com.google.common.collect.Lists; -import io.papermc.paper.adventure.PaperAdventure; import io.papermc.paper.registry.data.util.Conversions; import io.papermc.paper.registry.set.PaperRegistrySets; import io.papermc.paper.registry.set.RegistryKeySet; import java.util.ArrayList; import java.util.List; -import net.kyori.adventure.key.Key; import net.minecraft.core.registries.Registries; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.CraftSound; import org.bukkit.craftbukkit.potion.CraftPotionUtil; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -45,9 +45,9 @@ public ConsumeEffect.ClearAllStatusEffects clearAllStatusEffects() { } @Override - public ConsumeEffect.PlaySound playSoundEffect(final Key sound) { + public ConsumeEffect.PlaySound playSoundEffect(final Sound sound) { return new PaperPlaySound( - new net.minecraft.world.item.consume_effects.PlaySoundConsumeEffect(PaperAdventure.resolveSound(sound)) + new net.minecraft.world.item.consume_effects.PlaySoundConsumeEffect(CraftSound.bukkitToMinecraftHolder(sound)) ); } diff --git a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/consumable/PaperPlaySound.java b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/consumable/PaperPlaySound.java index 57dd3e90e94b..be86aa4a9893 100644 --- a/paper-server/src/main/java/io/papermc/paper/datacomponent/item/consumable/PaperPlaySound.java +++ b/paper-server/src/main/java/io/papermc/paper/datacomponent/item/consumable/PaperPlaySound.java @@ -1,15 +1,15 @@ package io.papermc.paper.datacomponent.item.consumable; -import io.papermc.paper.adventure.PaperAdventure; -import net.kyori.adventure.key.Key; import net.minecraft.world.item.consume_effects.PlaySoundConsumeEffect; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.CraftSound; public record PaperPlaySound( PlaySoundConsumeEffect internal ) implements ConsumeEffect.PlaySound, PaperConsumableEffect { @Override - public Key sound() { - return PaperAdventure.asAdventure(this.internal.sound().value().location()); + public Sound sound() { + return CraftSound.minecraftHolderToBukkit(this.internal.sound()); } } diff --git a/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java b/paper-server/src/main/java/io/papermc/paper/registry/data/RegistryBuilderProviderImpl.java similarity index 91% rename from paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java rename to paper-server/src/main/java/io/papermc/paper/registry/data/RegistryBuilderProviderImpl.java index 3a6dc9590ae2..5e0717c8b095 100644 --- a/paper-server/src/main/java/io/papermc/paper/registry/data/InlinedRegistryBuilderProviderImpl.java +++ b/paper-server/src/main/java/io/papermc/paper/registry/data/RegistryBuilderProviderImpl.java @@ -11,7 +11,7 @@ import java.util.function.Consumer; import org.bukkit.Keyed; -public final class InlinedRegistryBuilderProviderImpl implements InlinedRegistryBuilderProvider { +public final class RegistryBuilderProviderImpl implements RegistryBuilderProvider { @Override public & Keyed, B extends RegistryBuilder> T create( diff --git a/paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.data.InlinedRegistryBuilderProvider b/paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.data.InlinedRegistryBuilderProvider deleted file mode 100644 index 9540695b2ee1..000000000000 --- a/paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.data.InlinedRegistryBuilderProvider +++ /dev/null @@ -1 +0,0 @@ -io.papermc.paper.registry.data.InlinedRegistryBuilderProviderImpl diff --git a/paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.data.RegistryBuilderProvider b/paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.data.RegistryBuilderProvider new file mode 100644 index 000000000000..c7e2e04685ad --- /dev/null +++ b/paper-server/src/main/resources/META-INF/services/io.papermc.paper.registry.data.RegistryBuilderProvider @@ -0,0 +1 @@ +io.papermc.paper.registry.data.RegistryBuilderProviderImpl