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");
}