diff --git a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/DamageTypeTagKeys.java b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/DamageTypeTagKeys.java index 54670346e3e1..4c80dac63ebd 100644 --- a/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/DamageTypeTagKeys.java +++ b/paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/DamageTypeTagKeys.java @@ -81,6 +81,13 @@ public final class DamageTypeTagKeys { */ public static final TagKey BYPASSES_ARMOR = create(key("bypasses_armor")); + /** + * {@code #minecraft:bypasses_cooldown} + * + * @apiNote This field is version-dependant and may be removed in future Minecraft versions + */ + public static final TagKey BYPASSES_COOLDOWN = create(key("bypasses_cooldown")); + /** * {@code #minecraft:bypasses_effects} * 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 e2266d86a4dd..8b3d64d2557a 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,5 +1,6 @@ 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; @@ -7,7 +8,7 @@ @NullMarked @ApiStatus.Experimental @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 3c7cc44bd0f1..41bdf9a74175 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 @@ -2,6 +2,7 @@ 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; @@ -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 RegistryElement, Keyed, DialogLike { /** * Creates a new dialog using the provided builder. 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..06539787ec8d --- /dev/null +++ b/paper-api/src/main/java/io/papermc/paper/registry/RegistryElement.java @@ -0,0 +1,48 @@ +package io.papermc.paper.registry; + +import io.papermc.paper.registry.tag.TagKey; +import net.kyori.adventure.key.Key; +import org.bukkit.Keyed; +import org.jspecify.annotations.NullMarked; + +/** + * An element of a registry which might or might not be registered. + *

+ * For unregistered element, the equality methods exposed here will 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(Keyed) + */ +@NullMarked +public interface RegistryElement { + + /** + * Checks whether this element is identified by the + * given key extracted from this keyed. + * + * @param type the keyed to extract the key from + * @return the result + */ + default boolean is(Keyed type) { + return this.is(type.key()); + } + + /** + * Checks whether this element is identified by the given key. + * + * @param type the key + * @return the result + */ + 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 the result + */ + boolean is(TagKey type); +} 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..fc9b4e5dac8f 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 @@ -41,7 +41,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/org/bukkit/Art.java b/paper-api/src/main/java/org/bukkit/Art.java index c8c100ee4fd5..0916bb5a20b8 100644 --- a/paper-api/src/main/java/org/bukkit/Art.java +++ b/paper-api/src/main/java/org/bukkit/Art.java @@ -2,6 +2,7 @@ import com.google.common.base.Preconditions; 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; @@ -18,7 +19,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 RegistryElement, 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 9627a90843db..6e13db4ff205 100644 --- a/paper-api/src/main/java/org/bukkit/GameEvent.java +++ b/paper-api/src/main/java/org/bukkit/GameEvent.java @@ -1,5 +1,6 @@ package org.bukkit; +import io.papermc.paper.registry.RegistryElement; import java.util.Collection; import net.kyori.adventure.key.Key; import net.kyori.adventure.key.KeyPattern; @@ -9,7 +10,7 @@ /** * Represents a generic Mojang game event. */ -public abstract class GameEvent implements Keyed { +public abstract class GameEvent implements RegistryElement, 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 032c64831f79..92ddbed1c1a5 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 3dd6d79abccb..9b4aa4f009bd 100644 --- a/paper-api/src/main/java/org/bukkit/JukeboxSong.java +++ b/paper-api/src/main/java/org/bukkit/JukeboxSong.java @@ -1,6 +1,7 @@ package org.bukkit; 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; @@ -11,7 +12,7 @@ * Represents a song which may play in a Jukebox. */ @NullMarked -public interface JukeboxSong extends Keyed, Translatable { +public interface JukeboxSong extends RegistryElement, 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 7f7b1d606d84..10658125a1e6 100644 --- a/paper-api/src/main/java/org/bukkit/MusicInstrument.java +++ b/paper-api/src/main/java/org/bukkit/MusicInstrument.java @@ -2,6 +2,7 @@ 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 +16,7 @@ import org.jspecify.annotations.Nullable; @NullMarked -public abstract class MusicInstrument implements Keyed, net.kyori.adventure.translation.Translatable { +public abstract class MusicInstrument implements RegistryElement, 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 fd00f98962db..ab1b0da97cc3 100644 --- a/paper-api/src/main/java/org/bukkit/Sound.java +++ b/paper-api/src/main/java/org/bukkit/Sound.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; @@ -21,7 +22,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 RegistryElement, 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 beb839aa6f80..5b2dd18c65df 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; @@ -16,7 +17,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 8c4fd26c7782..16e898c369ea 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 dc2d24162deb..d2dfeec3a84b 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; @@ -132,7 +133,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 2fc0d61abe2f..86ddb2f1fb30 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 @@ -2,6 +2,7 @@ import com.google.common.base.Preconditions; 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; @@ -14,7 +15,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public interface PatternType extends OldEnum, Keyed { +public interface PatternType extends RegistryElement, 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 f43147f81f45..d8bc97e93cc1 100644 --- a/paper-api/src/main/java/org/bukkit/damage/DamageType.java +++ b/paper-api/src/main/java/org/bukkit/damage/DamageType.java @@ -1,6 +1,7 @@ package org.bukkit.damage; 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; @@ -17,7 +18,7 @@ * * @see Minecraft Wiki */ -public interface DamageType extends Keyed, Translatable { +public interface DamageType extends RegistryElement, 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 bbcde935e373..66edb34c23c3 100644 --- a/paper-api/src/main/java/org/bukkit/enchantments/Enchantment.java +++ b/paper-api/src/main/java/org/bukkit/enchantments/Enchantment.java @@ -1,6 +1,7 @@ package org.bukkit.enchantments; 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; @@ -17,7 +18,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 RegistryElement, 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 4b1cde949236..d11a1c3b8bdb 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Cat.java +++ b/paper-api/src/main/java/org/bukkit/entity/Cat.java @@ -2,6 +2,7 @@ import com.google.common.base.Preconditions; 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; @@ -53,7 +54,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 RegistryElement, OldEnum, Keyed { // 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 4673b73c81da..57eb94eb75e0 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Chicken.java +++ b/paper-api/src/main/java/org/bukkit/entity/Chicken.java @@ -1,6 +1,7 @@ package org.bukkit.entity; 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; @@ -58,7 +59,7 @@ public interface Chicken extends Animals { /** * Represents the variant of a chicken. */ - interface Variant extends Keyed { + interface Variant extends RegistryElement, Keyed { // 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 106fb9966465..8aa5895c469f 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Cow.java +++ b/paper-api/src/main/java/org/bukkit/entity/Cow.java @@ -1,6 +1,7 @@ package org.bukkit.entity; 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; @@ -30,7 +31,7 @@ public interface Cow extends AbstractCow { /** * Represents the variant of a cow. */ - interface Variant extends Keyed { + interface Variant extends RegistryElement, Keyed { // Start generate - CowVariant Variant COLD = getVariant("cold"); diff --git a/paper-api/src/main/java/org/bukkit/entity/EntityType.java b/paper-api/src/main/java/org/bukkit/entity/EntityType.java index e84da0628407..89c74747aa78 100644 --- a/paper-api/src/main/java/org/bukkit/entity/EntityType.java +++ b/paper-api/src/main/java/org/bukkit/entity/EntityType.java @@ -37,8 +37,6 @@ import org.bukkit.entity.minecart.RideableMinecart; import org.bukkit.entity.minecart.SpawnerMinecart; import org.bukkit.entity.minecart.StorageMinecart; -import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.PotionEffectType; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; 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..3d27b662e331 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Frog.java +++ b/paper-api/src/main/java/org/bukkit/entity/Frog.java @@ -2,6 +2,7 @@ import com.google.common.base.Preconditions; 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; @@ -51,7 +52,7 @@ public interface Frog extends Animals { /** * Represents the variant of a frog - ie its color. */ - interface Variant extends OldEnum, Keyed { + interface Variant extends RegistryElement, 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 37651c414a4a..aed2f2a581d7 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Pig.java +++ b/paper-api/src/main/java/org/bukkit/entity/Pig.java @@ -1,6 +1,7 @@ package org.bukkit.entity; 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; @@ -30,7 +31,7 @@ public interface Pig extends Steerable, Vehicle { /** * Represents the variant of a pig. */ - interface Variant extends Keyed { + interface Variant extends RegistryElement, Keyed { // Start generate - PigVariant Variant COLD = getVariant("cold"); 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 87af6c758040..55b44f3d0f3a 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; @@ -170,7 +171,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"); @@ -222,7 +223,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 95ee6d2be7eb..97998ec4a779 100644 --- a/paper-api/src/main/java/org/bukkit/entity/Wolf.java +++ b/paper-api/src/main/java/org/bukkit/entity/Wolf.java @@ -1,6 +1,7 @@ package org.bukkit.entity; 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; @@ -108,7 +109,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 RegistryElement, Keyed { // Start generate - WolfVariant // @GeneratedFrom 1.21.5 @@ -140,7 +141,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 411790d700e8..7924d9bdd5d2 100644 --- a/paper-api/src/main/java/org/bukkit/entity/ZombieNautilus.java +++ b/paper-api/src/main/java/org/bukkit/entity/ZombieNautilus.java @@ -1,6 +1,7 @@ package org.bukkit.entity; 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; @@ -27,7 +28,7 @@ public interface ZombieNautilus extends AbstractNautilus { /** * Represents the variant of a Zombie Nautilus. */ - interface Variant extends Keyed { + interface Variant extends RegistryElement, 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 d1a5e35ccc6e..087c7b5dfd5c 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 349422376cba..671461460893 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; @@ -29,7 +30,7 @@ */ @NullMarked @ApiStatus.Experimental -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 c8521e0b39a3..9149fa8f6ce0 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,6 +1,7 @@ package org.bukkit.inventory.meta.trim; 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; @@ -12,7 +13,7 @@ /** * Represents a material that may be used in an {@link ArmorTrim}. */ -public interface TrimMaterial extends Keyed, Translatable { +public interface TrimMaterial extends RegistryElement, Keyed, Translatable { // Start generate - TrimMaterial TrimMaterial AMETHYST = getTrimMaterial("amethyst"); 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 5882b709af0e..67e89ab636dc 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,6 +1,7 @@ package org.bukkit.inventory.meta.trim; 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; @@ -12,7 +13,7 @@ /** * Represents a pattern that may be used in an {@link ArmorTrim}. */ -public interface TrimPattern extends Keyed, Translatable { +public interface TrimPattern extends RegistryElement, Keyed, Translatable { // Start generate - TrimPattern TrimPattern BOLT = getTrimPattern("bolt"); 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-generator/src/main/java/io/papermc/generator/registry/RegistryBootstrapper.java b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryBootstrapper.java index c84fcee51835..bdcf720b7264 100644 --- a/paper-generator/src/main/java/io/papermc/generator/registry/RegistryBootstrapper.java +++ b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryBootstrapper.java @@ -22,12 +22,12 @@ public static void bootstrap(List generators) { RegistryEntries.forEach(entry -> { generators.add(new GeneratedKeyType<>(PAPER_REGISTRY_PACKAGE + ".keys", entry)); if (entry.registry().listTags().findAny().isPresent()) { - generators.add(new GeneratedTagKeyType(entry, PAPER_REGISTRY_PACKAGE + ".keys.tags")); + generators.add(new GeneratedTagKeyType<>(entry, PAPER_REGISTRY_PACKAGE + ".keys.tags")); } }); // todo remove once entity type is a registry - generators.add(new GeneratedTagKeyType(RegistryEntries.byRegistryKey(Registries.ENTITY_TYPE), PAPER_REGISTRY_PACKAGE + ".keys.tags")); + generators.add(new GeneratedTagKeyType<>(RegistryEntries.byRegistryKey(Registries.ENTITY_TYPE), PAPER_REGISTRY_PACKAGE + ".keys.tags")); } public static void bootstrap(PatternSourceSetRewriter apiSourceSet, PatternSourceSetRewriter serverSourceSet) { diff --git a/paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntries.java b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntries.java index 0a9f1e9a68f7..a69daf107959 100644 --- a/paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntries.java +++ b/paper-generator/src/main/java/io/papermc/generator/registry/RegistryEntries.java @@ -39,16 +39,17 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.server.dialog.Dialogs; import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.DamageTypeTags; import net.minecraft.world.damagesource.DamageTypes; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.memory.MemoryModuleType; -import net.minecraft.world.entity.animal.feline.CatVariants; import net.minecraft.world.entity.animal.chicken.ChickenVariants; import net.minecraft.world.entity.animal.cow.CowVariants; -import net.minecraft.world.entity.animal.pig.PigVariants; -import net.minecraft.world.entity.animal.nautilus.ZombieNautilusVariants; +import net.minecraft.world.entity.animal.feline.CatVariants; import net.minecraft.world.entity.animal.frog.FrogVariants; +import net.minecraft.world.entity.animal.nautilus.ZombieNautilusVariants; +import net.minecraft.world.entity.animal.pig.PigVariants; import net.minecraft.world.entity.animal.wolf.WolfSoundVariants; import net.minecraft.world.entity.animal.wolf.WolfVariants; import net.minecraft.world.entity.decoration.painting.PaintingVariants; @@ -178,7 +179,7 @@ private static RegistryEntry inconsistentEntry(ResourceKey { private String apiAccessName = ConstantDescs.INIT_NAME; private Optional apiRegistryField = Optional.empty(); private int genericArgCount = 0; + private @Nullable List> unregisteredTags; private @Nullable Map, String> fieldNames; @@ -111,6 +116,11 @@ public RegistryEntry serializationUpdater(String fieldName) { return this; } + public RegistryEntry unregisteredTags(List> keys) { + this.unregisteredTags = keys; + return this; + } + public boolean canAllowDirect() { return this.allowDirect; } @@ -131,6 +141,23 @@ public Class preloadClass() { return this.fieldRename; } + public void lookupTagKeys(Consumer> callback) { + this.registry().listTagIds().forEach(callback); + + if (this.unregisteredTags != null) { + this.unregisteredTags.forEach(callback); + } + } + + public Stream> tagKeys() { + Stream> keys = this.registry().listTagIds(); + + if (this.unregisteredTags != null) { + keys = Stream.concat(keys, this.unregisteredTags.stream()); + } + return keys; + } + public @Nullable Class apiRegistryBuilder() { return this.apiRegistryBuilder; } diff --git a/paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedTagKeyType.java b/paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedTagKeyType.java index 1d8810710c81..abc4e06c473f 100644 --- a/paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedTagKeyType.java +++ b/paper-generator/src/main/java/io/papermc/generator/types/registry/GeneratedTagKeyType.java @@ -31,11 +31,11 @@ import static javax.lang.model.element.Modifier.STATIC; @NullMarked -public class GeneratedTagKeyType extends SimpleGenerator { +public class GeneratedTagKeyType extends SimpleGenerator { - private final RegistryEntry entry; + private final RegistryEntry entry; - public GeneratedTagKeyType(RegistryEntry entry, String packageName) { + public GeneratedTagKeyType(RegistryEntry entry, String packageName) { super(entry.keyClassName().concat("TagKeys"), packageName); this.entry = entry; } @@ -84,7 +84,7 @@ protected TypeSpec getTypeSpec() { MethodSpec.Builder createMethod = this.createMethod(tagKeyType); AtomicBoolean allExperimental = new AtomicBoolean(true); - this.entry.registry().listTagIds().sorted(Formatting.TAG_ORDER).forEach(tagKey -> { + this.entry.tagKeys().sorted(Formatting.TAG_ORDER).forEach(tagKey -> { String fieldName = Formatting.formatKeyAsField(tagKey.location().getPath()); FieldSpec.Builder fieldBuilder = FieldSpec.builder(tagKeyType, fieldName, PUBLIC, STATIC, FINAL) .initializer("$N(key($S))", createMethod.build(), tagKey.location().getPath()) 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 f2a31526c56c..c7d162ea1227 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 @@ -10,7 +10,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/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/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 5d42203a9079..66a3e6627d67 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftGameRule.java @@ -1,7 +1,7 @@ package org.bukkit.craftbukkit; import com.mojang.serialization.DataResult; -import io.papermc.paper.util.Holderable; +import io.papermc.paper.util.HolderableElement; import java.util.function.BiFunction; import java.util.function.Function; import net.minecraft.core.Holder; @@ -11,7 +11,7 @@ import org.jspecify.annotations.NullMarked; @NullMarked -public class CraftGameRule extends GameRule implements Holderable> { +public class CraftGameRule extends GameRule implements HolderableElement, GameRule> { public static final BiFunction, IllegalArgumentException> INVALID_VALUE = (value, error) -> { return new IllegalArgumentException("Invalid value: %s (%s)".formatted(value, error.message())); @@ -44,22 +44,22 @@ public Holder> getHolder() { @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(); } @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 ace48e7b45e1..2b5bd2efb987 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/CraftChicken.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java index 1e015dc87c62..1584ee59a837 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 @@ -34,7 +34,7 @@ public void setVariant(Variant variant) { this.getHandle().setVariant(CraftVariant.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); 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 e0adc2c33c26..1158363c3af6 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 @@ -34,7 +34,7 @@ public void setVariant(Variant variant) { this.getHandle().setVariant(CraftVariant.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); 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 b127a2b4b36d..07358c5f4706 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 @@ -82,7 +82,7 @@ public void setVariant(Variant variant) { this.getHandle().setVariant(CraftVariant.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); 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 ae571d4de2b4..347943da81d8 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 @@ -38,7 +38,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 4881e366c8d4..a4ca9351c2aa 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,6 +2,7 @@ import com.google.common.base.Preconditions; import com.google.common.base.Suppliers; +import io.papermc.paper.registry.PaperRegistryElement; import io.papermc.paper.util.Holderable; import io.papermc.paper.world.flag.PaperFeatureDependent; import java.util.Map; @@ -23,7 +24,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 Holderable, PaperRegistryElement, io.papermc.paper.world.flag.PaperFeatureDependent { public static PotionEffectType minecraftHolderToBukkit(Holder minecraft) { return CraftRegistry.minecraftHolderToBukkit(minecraft, Registries.MOB_EFFECT);