package io.papermc.paper.registry; import net.kyori.adventure.key.Keyed; import org.bukkit.Art; import org.bukkit.Fluid; import org.bukkit.GameEvent; import org.bukkit.JukeboxSong; import org.bukkit.MusicInstrument; import org.bukkit.Particle; import org.bukkit.Sound; import org.bukkit.attribute.Attribute; import org.bukkit.block.Biome; import org.bukkit.block.BlockType; import org.bukkit.block.banner.PatternType; import org.bukkit.damage.DamageType; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Cat; import org.bukkit.entity.EntityType; import org.bukkit.entity.Frog; import org.bukkit.entity.Villager; import org.bukkit.entity.Wolf; import org.bukkit.entity.memory.MemoryKey; import org.bukkit.generator.structure.Structure; import org.bukkit.generator.structure.StructureType; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.MenuType; import org.bukkit.inventory.meta.trim.TrimMaterial; import org.bukkit.inventory.meta.trim.TrimPattern; import org.bukkit.map.MapCursor; import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionType; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; import static io.papermc.paper.registry.RegistryKeyImpl.create; /** * Identifier for a specific registry. For use with * {@link TypedKey} and the registry modification API. *

* There are 2 types of registries, identified as "built-in" * or "data-driven". The former are not changeable by datapacks (which * doesn't necessarily mean they aren't changeable in the API) and * are loaded first. "Data-driven" registries are all created by * reading in data from the vanilla and other datapacks. * * @param the value type */ @SuppressWarnings("unused") @NullMarked public sealed interface RegistryKey extends Keyed permits RegistryKeyImpl { /* ******************* * * Built-in Registries * * ******************* */ /** * Built-in registry for game events * @see io.papermc.paper.registry.keys.GameEventKeys */ RegistryKey GAME_EVENT = create("game_event"); /** * Built-in registry for structure types. * @see io.papermc.paper.registry.keys.StructureTypeKeys */ RegistryKey STRUCTURE_TYPE = create("worldgen/structure_type"); /** * Built-in registry for potion effect types (mob effects). * @see io.papermc.paper.registry.keys.MobEffectKeys */ RegistryKey MOB_EFFECT = create("mob_effect"); /** * @apiNote DO NOT USE */ @ApiStatus.Internal RegistryKey BLOCK = create("block"); /** * @apiNote DO NOT USE */ @ApiStatus.Internal RegistryKey ITEM = create("item"); /** * Built-in registry for cat variants. * @see io.papermc.paper.registry.keys.CatVariantKeys */ RegistryKey CAT_VARIANT = create("cat_variant"); /** * Built-in registry for frog variants. * @see io.papermc.paper.registry.keys.FrogVariantKeys */ RegistryKey FROG_VARIANT = create("frog_variant"); /** * Built-in registry for villager professions. * @see io.papermc.paper.registry.keys.VillagerProfessionKeys */ RegistryKey VILLAGER_PROFESSION = create("villager_profession"); /** * Built-in registry for villager types. * @see io.papermc.paper.registry.keys.VillagerTypeKeys */ RegistryKey VILLAGER_TYPE = create("villager_type"); /** * Built-in registry for map decoration types. * @see io.papermc.paper.registry.keys.MapDecorationTypeKeys */ RegistryKey MAP_DECORATION_TYPE = create("map_decoration_type"); /** * Built-in registry for menu types. * @see io.papermc.paper.registry.keys.MenuTypeKeys */ RegistryKey MENU = create("menu"); /** * Built-in registry for attributes. * @see io.papermc.paper.registry.keys.AttributeKeys */ RegistryKey ATTRIBUTE = create("attribute"); /** * Built-in registry for fluids. * @see io.papermc.paper.registry.keys.FluidKeys */ RegistryKey FLUID = create("fluid"); /** * Built-in registry for sound events. * @see io.papermc.paper.registry.keys.SoundEventKeys */ RegistryKey SOUND_EVENT = create("sound_event"); /* ********************** * * Data-driven Registries * * ********************** */ /** * Data-driven registry for biomes. * @see io.papermc.paper.registry.keys.BiomeKeys */ RegistryKey BIOME = create("worldgen/biome"); /** * Data-driven registry for structures. * @see io.papermc.paper.registry.keys.StructureKeys */ RegistryKey STRUCTURE = create("worldgen/structure"); /** * Data-driven registry for trim materials. * @see io.papermc.paper.registry.keys.TrimMaterialKeys */ RegistryKey TRIM_MATERIAL = create("trim_material"); /** * Data-driven registry for trim patterns. * @see io.papermc.paper.registry.keys.TrimPatternKeys */ RegistryKey TRIM_PATTERN = create("trim_pattern"); /** * Data-driven registry for damage types. * @see io.papermc.paper.registry.keys.DamageTypeKeys */ RegistryKey DAMAGE_TYPE = create("damage_type"); /** * Data-driven registry for wolf variants. * @see io.papermc.paper.registry.keys.WolfVariantKeys */ RegistryKey WOLF_VARIANT = create("wolf_variant"); /** * Data-driven registry for enchantments. * @see io.papermc.paper.registry.keys.EnchantmentKeys */ RegistryKey ENCHANTMENT = create("enchantment"); /** * Data-driven registry for jukebox songs. * @see io.papermc.paper.registry.keys.JukeboxSongKeys */ RegistryKey JUKEBOX_SONG = create("jukebox_song"); /** * Data-driven registry for banner patterns. * @see io.papermc.paper.registry.keys.BannerPatternKeys */ RegistryKey BANNER_PATTERN = create("banner_pattern"); /** * Data-driven registry for painting variants. * @see io.papermc.paper.registry.keys.PaintingVariantKeys */ RegistryKey PAINTING_VARIANT = create("painting_variant"); /** * Data-driven registry for instruments. * @see io.papermc.paper.registry.keys.InstrumentKeys */ RegistryKey INSTRUMENT = create("instrument"); /* ******************* * * API-only Registries * * ******************* */ RegistryKey ENTITY_TYPE = create("entity_type"); RegistryKey PARTICLE_TYPE = create("particle_type"); RegistryKey POTION = create("potion"); RegistryKey> MEMORY_MODULE_TYPE = create("memory_module_type"); }