BuiltInRegistries.java

net.minecraft.core.registries.BuiltInRegistries

信息

  • 全限定名:net.minecraft.core.registries.BuiltInRegistries
  • 类型:public class
  • 包:net.minecraft.core.registries
  • 源码路径:src/main/java/net/minecraft/core/registries/BuiltInRegistries.java
  • 起始行号:L169
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L170
    • 说明:

      TODO

  • LOADERS

    • 类型: Map<Identifier,Supplier<?>>
    • 修饰符: private static final
    • 源码定位: L171
    • 说明:

      TODO

  • WRITABLE_REGISTRY

    • 类型: WritableRegistry<WritableRegistry<?>>
    • 修饰符: private static final
    • 源码定位: L172
    • 说明:

      TODO

  • DATA_COMPONENT_INITIALIZERS

    • 类型: DataComponentInitializers
    • 修饰符: public static final
    • 源码定位: L175
    • 说明:

      TODO

  • GAME_EVENT

    • 类型: DefaultedRegistry<GameEvent>
    • 修饰符: public static final
    • 源码定位: L176
    • 说明:

      TODO

  • SOUND_EVENT

    • 类型: Registry<SoundEvent>
    • 修饰符: public static final
    • 源码定位: L177
    • 说明:

      TODO

  • FLUID

    • 类型: DefaultedRegistry<Fluid>
    • 修饰符: public static final
    • 源码定位: L178
    • 说明:

      TODO

  • MOB_EFFECT

    • 类型: Registry<MobEffect>
    • 修饰符: public static final
    • 源码定位: L179
    • 说明:

      TODO

  • BLOCK

    • 类型: DefaultedRegistry<Block>
    • 修饰符: public static final
    • 源码定位: L180
    • 说明:

      TODO

  • DEBUG_SUBSCRIPTION

    • 类型: Registry<DebugSubscription<?>>
    • 修饰符: public static final
    • 源码定位: L181
    • 说明:

      TODO

  • ENTITY_TYPE

    • 类型: DefaultedRegistry<EntityType<?>>
    • 修饰符: public static final
    • 源码定位: L182
    • 说明:

      TODO

  • ITEM

    • 类型: DefaultedRegistry<Item>
    • 修饰符: public static final
    • 源码定位: L185
    • 说明:

      TODO

  • POTION

    • 类型: Registry<Potion>
    • 修饰符: public static final
    • 源码定位: L186
    • 说明:

      TODO

  • PARTICLE_TYPE

    • 类型: Registry<ParticleType<?>>
    • 修饰符: public static final
    • 源码定位: L187
    • 说明:

      TODO

  • BLOCK_ENTITY_TYPE

    • 类型: Registry<BlockEntityType<?>>
    • 修饰符: public static final
    • 源码定位: L188
    • 说明:

      TODO

  • CUSTOM_STAT

    • 类型: Registry<Identifier>
    • 修饰符: public static final
    • 源码定位: L191
    • 说明:

      TODO

  • CHUNK_STATUS

    • 类型: DefaultedRegistry<ChunkStatus>
    • 修饰符: public static final
    • 源码定位: L192
    • 说明:

      TODO

  • RULE_TEST

    • 类型: Registry<RuleTestType<?>>
    • 修饰符: public static final
    • 源码定位: L193
    • 说明:

      TODO

  • RULE_BLOCK_ENTITY_MODIFIER

    • 类型: Registry<RuleBlockEntityModifierType<?>>
    • 修饰符: public static final
    • 源码定位: L194
    • 说明:

      TODO

  • POS_RULE_TEST

    • 类型: Registry<PosRuleTestType<?>>
    • 修饰符: public static final
    • 源码定位: L197
    • 说明:

      TODO

  • MENU

    • 类型: Registry<MenuType<?>>
    • 修饰符: public static final
    • 源码定位: L198
    • 说明:

      TODO

  • RECIPE_TYPE

    • 类型: Registry<RecipeType<?>>
    • 修饰符: public static final
    • 源码定位: L199
    • 说明:

      TODO

  • RECIPE_SERIALIZER

    • 类型: Registry<RecipeSerializer<?>>
    • 修饰符: public static final
    • 源码定位: L200
    • 说明:

      TODO

  • ATTRIBUTE

    • 类型: Registry<Attribute>
    • 修饰符: public static final
    • 源码定位: L201
    • 说明:

      TODO

  • POSITION_SOURCE_TYPE

    • 类型: Registry<PositionSourceType<?>>
    • 修饰符: public static final
    • 源码定位: L202
    • 说明:

      TODO

  • COMMAND_ARGUMENT_TYPE

    • 类型: Registry<ArgumentTypeInfo<?,?>>
    • 修饰符: public static final
    • 源码定位: L205
    • 说明:

      TODO

  • STAT_TYPE

    • 类型: Registry<StatType<?>>
    • 修饰符: public static final
    • 源码定位: L206
    • 说明:

      TODO

  • VILLAGER_TYPE

    • 类型: DefaultedRegistry<VillagerType>
    • 修饰符: public static final
    • 源码定位: L207
    • 说明:

      TODO

  • VILLAGER_PROFESSION

    • 类型: DefaultedRegistry<VillagerProfession>
    • 修饰符: public static final
    • 源码定位: L208
    • 说明:

      TODO

  • POINT_OF_INTEREST_TYPE

    • 类型: Registry<PoiType>
    • 修饰符: public static final
    • 源码定位: L211
    • 说明:

      TODO

  • MEMORY_MODULE_TYPE

    • 类型: DefaultedRegistry<MemoryModuleType<?>>
    • 修饰符: public static final
    • 源码定位: L212
    • 说明:

      TODO

  • SENSOR_TYPE

    • 类型: DefaultedRegistry<SensorType<?>>
    • 修饰符: public static final
    • 源码定位: L215
    • 说明:

      TODO

  • ACTIVITY

    • 类型: Registry<Activity>
    • 修饰符: public static final
    • 源码定位: L216
    • 说明:

      TODO

  • LOOT_POOL_ENTRY_TYPE

    • 类型: Registry<MapCodec<?extends LootPoolEntryContainer>>
    • 修饰符: public static final
    • 源码定位: L217
    • 说明:

      TODO

  • LOOT_FUNCTION_TYPE

    • 类型: Registry<MapCodec<?extends LootItemFunction>>
    • 修饰符: public static final
    • 源码定位: L220
    • 说明:

      TODO

  • LOOT_CONDITION_TYPE

    • 类型: Registry<MapCodec<?extends LootItemCondition>>
    • 修饰符: public static final
    • 源码定位: L223
    • 说明:

      TODO

  • LOOT_NUMBER_PROVIDER_TYPE

    • 类型: Registry<MapCodec<?extends NumberProvider>>
    • 修饰符: public static final
    • 源码定位: L226
    • 说明:

      TODO

  • LOOT_NBT_PROVIDER_TYPE

    • 类型: Registry<MapCodec<?extends NbtProvider>>
    • 修饰符: public static final
    • 源码定位: L229
    • 说明:

      TODO

  • LOOT_SCORE_PROVIDER_TYPE

    • 类型: Registry<MapCodec<?extends ScoreboardNameProvider>>
    • 修饰符: public static final
    • 源码定位: L232
    • 说明:

      TODO

  • FLOAT_PROVIDER_TYPE

    • 类型: Registry<MapCodec<?extends FloatProvider>>
    • 修饰符: public static final
    • 源码定位: L235
    • 说明:

      TODO

  • INT_PROVIDER_TYPE

    • 类型: Registry<MapCodec<?extends IntProvider>>
    • 修饰符: public static final
    • 源码定位: L238
    • 说明:

      TODO

  • HEIGHT_PROVIDER_TYPE

    • 类型: Registry<HeightProviderType<?>>
    • 修饰符: public static final
    • 源码定位: L239
    • 说明:

      TODO

  • BLOCK_PREDICATE_TYPE

    • 类型: Registry<BlockPredicateType<?>>
    • 修饰符: public static final
    • 源码定位: L242
    • 说明:

      TODO

  • CARVER

    • 类型: Registry<WorldCarver<?>>
    • 修饰符: public static final
    • 源码定位: L245
    • 说明:

      TODO

  • FEATURE

    • 类型: Registry<Feature<?>>
    • 修饰符: public static final
    • 源码定位: L246
    • 说明:

      TODO

  • STRUCTURE_PLACEMENT

    • 类型: Registry<StructurePlacementType<?>>
    • 修饰符: public static final
    • 源码定位: L247
    • 说明:

      TODO

  • STRUCTURE_PIECE

    • 类型: Registry<StructurePieceType>
    • 修饰符: public static final
    • 源码定位: L250
    • 说明:

      TODO

  • STRUCTURE_TYPE

    • 类型: Registry<StructureType<?>>
    • 修饰符: public static final
    • 源码定位: L253
    • 说明:

      TODO

  • PLACEMENT_MODIFIER_TYPE

    • 类型: Registry<PlacementModifierType<?>>
    • 修饰符: public static final
    • 源码定位: L254
    • 说明:

      TODO

  • BLOCKSTATE_PROVIDER_TYPE

    • 类型: Registry<BlockStateProviderType<?>>
    • 修饰符: public static final
    • 源码定位: L257
    • 说明:

      TODO

  • FOLIAGE_PLACER_TYPE

    • 类型: Registry<FoliagePlacerType<?>>
    • 修饰符: public static final
    • 源码定位: L260
    • 说明:

      TODO

  • TRUNK_PLACER_TYPE

    • 类型: Registry<TrunkPlacerType<?>>
    • 修饰符: public static final
    • 源码定位: L263
    • 说明:

      TODO

  • ROOT_PLACER_TYPE

    • 类型: Registry<RootPlacerType<?>>
    • 修饰符: public static final
    • 源码定位: L266
    • 说明:

      TODO

  • TREE_DECORATOR_TYPE

    • 类型: Registry<TreeDecoratorType<?>>
    • 修饰符: public static final
    • 源码定位: L269
    • 说明:

      TODO

  • FEATURE_SIZE_TYPE

    • 类型: Registry<FeatureSizeType<?>>
    • 修饰符: public static final
    • 源码定位: L272
    • 说明:

      TODO

  • BIOME_SOURCE

    • 类型: Registry<MapCodec<?extends BiomeSource>>
    • 修饰符: public static final
    • 源码定位: L275
    • 说明:

      TODO

  • CHUNK_GENERATOR

    • 类型: Registry<MapCodec<?extends ChunkGenerator>>
    • 修饰符: public static final
    • 源码定位: L276
    • 说明:

      TODO

  • MATERIAL_CONDITION

    • 类型: Registry<MapCodec<?extends SurfaceRules.ConditionSource>>
    • 修饰符: public static final
    • 源码定位: L277
    • 说明:

      TODO

  • MATERIAL_RULE

    • 类型: Registry<MapCodec<?extends SurfaceRules.RuleSource>>
    • 修饰符: public static final
    • 源码定位: L280
    • 说明:

      TODO

  • DENSITY_FUNCTION_TYPE

    • 类型: Registry<MapCodec<?extends DensityFunction>>
    • 修饰符: public static final
    • 源码定位: L283
    • 说明:

      TODO

  • BLOCK_TYPE

    • 类型: Registry<MapCodec<?extends Block>>
    • 修饰符: public static final
    • 源码定位: L286
    • 说明:

      TODO

  • STRUCTURE_PROCESSOR

    • 类型: Registry<StructureProcessorType<?>>
    • 修饰符: public static final
    • 源码定位: L287
    • 说明:

      TODO

  • STRUCTURE_POOL_ELEMENT

    • 类型: Registry<StructurePoolElementType<?>>
    • 修饰符: public static final
    • 源码定位: L290
    • 说明:

      TODO

  • POOL_ALIAS_BINDING_TYPE

    • 类型: Registry<MapCodec<?extends PoolAliasBinding>>
    • 修饰符: public static final
    • 源码定位: L293
    • 说明:

      TODO

  • DECORATED_POT_PATTERN

    • 类型: Registry<DecoratedPotPattern>
    • 修饰符: public static final
    • 源码定位: L296
    • 说明:

      TODO

  • CREATIVE_MODE_TAB

    • 类型: Registry<CreativeModeTab>
    • 修饰符: public static final
    • 源码定位: L297
    • 说明:

      TODO

  • TRIGGER_TYPES

    • 类型: Registry<CriterionTrigger<?>>
    • 修饰符: public static final
    • 源码定位: L298
    • 说明:

      TODO

  • NUMBER_FORMAT_TYPE

    • 类型: Registry<NumberFormatType<?>>
    • 修饰符: public static final
    • 源码定位: L299
    • 说明:

      TODO

  • DATA_COMPONENT_TYPE

    • 类型: Registry<DataComponentType<?>>
    • 修饰符: public static final
    • 源码定位: L300
    • 说明:

      TODO

  • GAME_RULE

    • 类型: Registry<GameRule<?>>
    • 修饰符: public static final
    • 源码定位: L301
    • 说明:

      TODO

  • ENTITY_SUB_PREDICATE_TYPE

    • 类型: Registry<MapCodec<?extends EntitySubPredicate>>
    • 修饰符: public static final
    • 源码定位: L302
    • 说明:

      TODO

  • DATA_COMPONENT_PREDICATE_TYPE

    • 类型: Registry<DataComponentPredicate.Type<?>>
    • 修饰符: public static final
    • 源码定位: L305
    • 说明:

      TODO

  • MAP_DECORATION_TYPE

    • 类型: Registry<MapDecorationType>
    • 修饰符: public static final
    • 源码定位: L308
    • 说明:

      TODO

  • ENCHANTMENT_EFFECT_COMPONENT_TYPE

    • 类型: Registry<DataComponentType<?>>
    • 修饰符: public static final
    • 源码定位: L309
    • 说明:

      TODO

  • ENCHANTMENT_LEVEL_BASED_VALUE_TYPE

    • 类型: Registry<MapCodec<?extends LevelBasedValue>>
    • 修饰符: public static final
    • 源码定位: L312
    • 说明:

      TODO

  • ENCHANTMENT_ENTITY_EFFECT_TYPE

    • 类型: Registry<MapCodec<?extends EnchantmentEntityEffect>>
    • 修饰符: public static final
    • 源码定位: L315
    • 说明:

      TODO

  • ENCHANTMENT_LOCATION_BASED_EFFECT_TYPE

    • 类型: Registry<MapCodec<?extends EnchantmentLocationBasedEffect>>
    • 修饰符: public static final
    • 源码定位: L318
    • 说明:

      TODO

  • ENCHANTMENT_VALUE_EFFECT_TYPE

    • 类型: Registry<MapCodec<?extends EnchantmentValueEffect>>
    • 修饰符: public static final
    • 源码定位: L321
    • 说明:

      TODO

  • ENCHANTMENT_PROVIDER_TYPE

    • 类型: Registry<MapCodec<?extends EnchantmentProvider>>
    • 修饰符: public static final
    • 源码定位: L324
    • 说明:

      TODO

  • CONSUME_EFFECT_TYPE

    • 类型: Registry<ConsumeEffect.Type<?>>
    • 修饰符: public static final
    • 源码定位: L327
    • 说明:

      TODO

  • RECIPE_DISPLAY

    • 类型: Registry<RecipeDisplay.Type<?>>
    • 修饰符: public static final
    • 源码定位: L330
    • 说明:

      TODO

  • SLOT_DISPLAY

    • 类型: Registry<SlotDisplay.Type<?>>
    • 修饰符: public static final
    • 源码定位: L331
    • 说明:

      TODO

  • RECIPE_BOOK_CATEGORY

    • 类型: Registry<RecipeBookCategory>
    • 修饰符: public static final
    • 源码定位: L332
    • 说明:

      TODO

  • TICKET_TYPE

    • 类型: Registry<TicketType>
    • 修饰符: public static final
    • 源码定位: L333
    • 说明:

      TODO

  • INCOMING_RPC_METHOD

    • 类型: Registry<IncomingRpcMethod<?,?>>
    • 修饰符: public static final
    • 源码定位: L334
    • 说明:

      TODO

  • OUTGOING_RPC_METHOD

    • 类型: Registry<OutgoingRpcMethod<?,?>>
    • 修饰符: public static final
    • 源码定位: L335
    • 说明:

      TODO

  • TEST_ENVIRONMENT_DEFINITION_TYPE

    • 类型: Registry<MapCodec<?extends TestEnvironmentDefinition<?>>>
    • 修饰符: public static final
    • 源码定位: L338
    • 说明:

      TODO

  • TEST_INSTANCE_TYPE

    • 类型: Registry<MapCodec<?extends GameTestInstance>>
    • 修饰符: public static final
    • 源码定位: L341
    • 说明:

      TODO

  • SPAWN_CONDITION_TYPE

    • 类型: Registry<MapCodec<?extends SpawnCondition>>
    • 修饰符: public static final
    • 源码定位: L344
    • 说明:

      TODO

  • DIALOG_TYPE

    • 类型: Registry<MapCodec<?extends Dialog>>
    • 修饰符: public static final
    • 源码定位: L347
    • 说明:

      TODO

  • DIALOG_ACTION_TYPE

    • 类型: Registry<MapCodec<?extends Action>>
    • 修饰符: public static final
    • 源码定位: L348
    • 说明:

      TODO

  • INPUT_CONTROL_TYPE

    • 类型: Registry<MapCodec<?extends InputControl>>
    • 修饰符: public static final
    • 源码定位: L349
    • 说明:

      TODO

  • DIALOG_BODY_TYPE

    • 类型: Registry<MapCodec<?extends DialogBody>>
    • 修饰符: public static final
    • 源码定位: L352
    • 说明:

      TODO

  • PERMISSION_TYPE

    • 类型: Registry<MapCodec<?extends Permission>>
    • 修饰符: public static final
    • 源码定位: L353
    • 说明:

      TODO

  • PERMISSION_CHECK_TYPE

    • 类型: Registry<MapCodec<?extends PermissionCheck>>
    • 修饰符: public static final
    • 源码定位: L354
    • 说明:

      TODO

  • ENVIRONMENT_ATTRIBUTE

    • 类型: Registry<EnvironmentAttribute<?>>
    • 修饰符: public static final
    • 源码定位: L357
    • 说明:

      TODO

  • ATTRIBUTE_TYPE

    • 类型: Registry<AttributeType<?>>
    • 修饰符: public static final
    • 源码定位: L360
    • 说明:

      TODO

  • SLOT_SOURCE_TYPE

    • 类型: Registry<MapCodec<?extends SlotSource>>
    • 修饰符: public static final
    • 源码定位: L361
    • 说明:

      TODO

  • TEST_FUNCTION

    • 类型: Registry<Consumer<GameTestHelper>>
    • 修饰符: public static final
    • 源码定位: L362
    • 说明:

      TODO

  • REGISTRY

    • 类型: Registry<?extends Registry<?>>
    • 修饰符: public static final
    • 源码定位: L363
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.core.registries.BuiltInRegistries.RegistryBootstrap
    • 类型: interface
    • 修饰符: private
    • 源码定位: L440
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

private static <T> Registry<T> registerSimple(ResourceKey<?extends Registry<T>> name, BuiltInRegistries.RegistryBootstrap<T> loader) @ L365

  • 方法名:registerSimple
  • 源码定位:L365
  • 返回类型: Registry
  • 修饰符:private static

参数:

  • name: ResourceKey<?extends Registry>
  • loader: BuiltInRegistries.RegistryBootstrap

说明:

TODO

private static <T> Registry<T> registerSimpleWithIntrusiveHolders(ResourceKey<?extends Registry<T>> name, BuiltInRegistries.RegistryBootstrap<T> loader) @ L369

  • 方法名:registerSimpleWithIntrusiveHolders
  • 源码定位:L369
  • 返回类型: Registry
  • 修饰符:private static

参数:

  • name: ResourceKey<?extends Registry>
  • loader: BuiltInRegistries.RegistryBootstrap

说明:

TODO

private static <T> DefaultedRegistry<T> registerDefaulted(ResourceKey<?extends Registry<T>> name, String defaultKey, BuiltInRegistries.RegistryBootstrap<T> loader) @ L373

  • 方法名:registerDefaulted
  • 源码定位:L373
  • 返回类型: DefaultedRegistry
  • 修饰符:private static

参数:

  • name: ResourceKey<?extends Registry>
  • defaultKey: String
  • loader: BuiltInRegistries.RegistryBootstrap

说明:

TODO

private static <T> DefaultedRegistry<T> registerDefaultedWithIntrusiveHolders(ResourceKey<?extends Registry<T>> name, String defaultKey, BuiltInRegistries.RegistryBootstrap<T> loader) @ L379

  • 方法名:registerDefaultedWithIntrusiveHolders
  • 源码定位:L379
  • 返回类型: DefaultedRegistry
  • 修饰符:private static

参数:

  • name: ResourceKey<?extends Registry>
  • defaultKey: String
  • loader: BuiltInRegistries.RegistryBootstrap

说明:

TODO

private static <T,R extends WritableRegistry<T>> R internalRegister(ResourceKey<?extends Registry<T>> name, R registry, BuiltInRegistries.RegistryBootstrap<T> loader) @ L385

  • 方法名:internalRegister
  • 源码定位:L385
  • 返回类型:<T,R extends WritableRegistry> R
  • 修饰符:private static

参数:

  • name: ResourceKey<?extends Registry>
  • registry: R
  • loader: BuiltInRegistries.RegistryBootstrap

说明:

TODO

public static void bootStrap() @ L395

  • 方法名:bootStrap
  • 源码定位:L395
  • 返回类型:void
  • 修饰符:public static

参数:

说明:

TODO

private static void createContents() @ L401

  • 方法名:createContents
  • 源码定位:L401
  • 返回类型:void
  • 修饰符:private static

参数:

说明:

TODO

private static void freeze() @ L409

  • 方法名:freeze
  • 源码定位:L409
  • 返回类型:void
  • 修饰符:private static

参数:

说明:

TODO

private static <T extends Registry<?>> void validate(Registry<T> registry) @ L418

  • 方法名:validate
  • 源码定位:L418
  • 返回类型:<T extends Registry<?>> void
  • 修饰符:private static

参数:

  • registry: Registry

说明:

TODO

public static <T> HolderGetter<T> acquireBootstrapRegistrationLookup(Registry<T> registry) @ L431

  • 方法名:acquireBootstrapRegistrationLookup
  • 源码定位:L431
  • 返回类型: HolderGetter
  • 修饰符:public static

参数:

  • registry: Registry

说明:

TODO

private static void bindBootstrappedTagsToEmpty(Registry<?> registry) @ L435

  • 方法名:bindBootstrappedTagsToEmpty
  • 源码定位:L435
  • 返回类型:void
  • 修饰符:private static

参数:

  • registry: Registry<?>

说明:

TODO

代码

public class BuiltInRegistries {
    private static final Logger LOGGER = LogUtils.getLogger();
    private static final Map<Identifier, Supplier<?>> LOADERS = Maps.newLinkedHashMap();
    private static final WritableRegistry<WritableRegistry<?>> WRITABLE_REGISTRY = new MappedRegistry<>(
        ResourceKey.createRegistryKey(Registries.ROOT_REGISTRY_NAME), Lifecycle.stable()
    );
    public static final DataComponentInitializers DATA_COMPONENT_INITIALIZERS = new DataComponentInitializers();
    public static final DefaultedRegistry<GameEvent> GAME_EVENT = registerDefaulted(Registries.GAME_EVENT, "step", GameEvent::bootstrap);
    public static final Registry<SoundEvent> SOUND_EVENT = registerSimple(Registries.SOUND_EVENT, registry -> SoundEvents.ITEM_PICKUP);
    public static final DefaultedRegistry<Fluid> FLUID = registerDefaultedWithIntrusiveHolders(Registries.FLUID, "empty", registry -> Fluids.EMPTY);
    public static final Registry<MobEffect> MOB_EFFECT = registerSimple(Registries.MOB_EFFECT, MobEffects::bootstrap);
    public static final DefaultedRegistry<Block> BLOCK = registerDefaultedWithIntrusiveHolders(Registries.BLOCK, "air", registry -> Blocks.AIR);
    public static final Registry<DebugSubscription<?>> DEBUG_SUBSCRIPTION = registerSimple(Registries.DEBUG_SUBSCRIPTION, DebugSubscriptions::bootstrap);
    public static final DefaultedRegistry<EntityType<?>> ENTITY_TYPE = registerDefaultedWithIntrusiveHolders(
        Registries.ENTITY_TYPE, "pig", registry -> EntityType.PIG
    );
    public static final DefaultedRegistry<Item> ITEM = registerDefaultedWithIntrusiveHolders(Registries.ITEM, "air", registry -> Items.AIR);
    public static final Registry<Potion> POTION = registerSimple(Registries.POTION, Potions::bootstrap);
    public static final Registry<ParticleType<?>> PARTICLE_TYPE = registerSimple(Registries.PARTICLE_TYPE, registry -> ParticleTypes.BLOCK);
    public static final Registry<BlockEntityType<?>> BLOCK_ENTITY_TYPE = registerSimpleWithIntrusiveHolders(
        Registries.BLOCK_ENTITY_TYPE, registry -> BlockEntityType.FURNACE
    );
    public static final Registry<Identifier> CUSTOM_STAT = registerSimple(Registries.CUSTOM_STAT, registry -> Stats.JUMP);
    public static final DefaultedRegistry<ChunkStatus> CHUNK_STATUS = registerDefaulted(Registries.CHUNK_STATUS, "empty", registry -> ChunkStatus.EMPTY);
    public static final Registry<RuleTestType<?>> RULE_TEST = registerSimple(Registries.RULE_TEST, registry -> RuleTestType.ALWAYS_TRUE_TEST);
    public static final Registry<RuleBlockEntityModifierType<?>> RULE_BLOCK_ENTITY_MODIFIER = registerSimple(
        Registries.RULE_BLOCK_ENTITY_MODIFIER, registry -> RuleBlockEntityModifierType.PASSTHROUGH
    );
    public static final Registry<PosRuleTestType<?>> POS_RULE_TEST = registerSimple(Registries.POS_RULE_TEST, registry -> PosRuleTestType.ALWAYS_TRUE_TEST);
    public static final Registry<MenuType<?>> MENU = registerSimple(Registries.MENU, registry -> MenuType.ANVIL);
    public static final Registry<RecipeType<?>> RECIPE_TYPE = registerSimple(Registries.RECIPE_TYPE, registry -> RecipeType.CRAFTING);
    public static final Registry<RecipeSerializer<?>> RECIPE_SERIALIZER = registerSimple(Registries.RECIPE_SERIALIZER, RecipeSerializers::bootstrap);
    public static final Registry<Attribute> ATTRIBUTE = registerSimple(Registries.ATTRIBUTE, Attributes::bootstrap);
    public static final Registry<PositionSourceType<?>> POSITION_SOURCE_TYPE = registerSimple(
        Registries.POSITION_SOURCE_TYPE, registry -> PositionSourceType.BLOCK
    );
    public static final Registry<ArgumentTypeInfo<?, ?>> COMMAND_ARGUMENT_TYPE = registerSimple(Registries.COMMAND_ARGUMENT_TYPE, ArgumentTypeInfos::bootstrap);
    public static final Registry<StatType<?>> STAT_TYPE = registerSimple(Registries.STAT_TYPE, registry -> Stats.ITEM_USED);
    public static final DefaultedRegistry<VillagerType> VILLAGER_TYPE = registerDefaulted(Registries.VILLAGER_TYPE, "plains", VillagerType::bootstrap);
    public static final DefaultedRegistry<VillagerProfession> VILLAGER_PROFESSION = registerDefaulted(
        Registries.VILLAGER_PROFESSION, "none", VillagerProfession::bootstrap
    );
    public static final Registry<PoiType> POINT_OF_INTEREST_TYPE = registerSimple(Registries.POINT_OF_INTEREST_TYPE, PoiTypes::bootstrap);
    public static final DefaultedRegistry<MemoryModuleType<?>> MEMORY_MODULE_TYPE = registerDefaulted(
        Registries.MEMORY_MODULE_TYPE, "dummy", registry -> MemoryModuleType.DUMMY
    );
    public static final DefaultedRegistry<SensorType<?>> SENSOR_TYPE = registerDefaulted(Registries.SENSOR_TYPE, "dummy", registry -> SensorType.DUMMY);
    public static final Registry<Activity> ACTIVITY = registerSimple(Registries.ACTIVITY, registry -> Activity.IDLE);
    public static final Registry<MapCodec<? extends LootPoolEntryContainer>> LOOT_POOL_ENTRY_TYPE = registerSimple(
        Registries.LOOT_POOL_ENTRY_TYPE, LootPoolEntries::bootstrap
    );
    public static final Registry<MapCodec<? extends LootItemFunction>> LOOT_FUNCTION_TYPE = registerSimple(
        Registries.LOOT_FUNCTION_TYPE, LootItemFunctions::bootstrap
    );
    public static final Registry<MapCodec<? extends LootItemCondition>> LOOT_CONDITION_TYPE = registerSimple(
        Registries.LOOT_CONDITION_TYPE, LootItemConditions::bootstrap
    );
    public static final Registry<MapCodec<? extends NumberProvider>> LOOT_NUMBER_PROVIDER_TYPE = registerSimple(
        Registries.LOOT_NUMBER_PROVIDER_TYPE, NumberProviders::bootstrap
    );
    public static final Registry<MapCodec<? extends NbtProvider>> LOOT_NBT_PROVIDER_TYPE = registerSimple(
        Registries.LOOT_NBT_PROVIDER_TYPE, NbtProviders::bootstrap
    );
    public static final Registry<MapCodec<? extends ScoreboardNameProvider>> LOOT_SCORE_PROVIDER_TYPE = registerSimple(
        Registries.LOOT_SCORE_PROVIDER_TYPE, ScoreboardNameProviders::bootstrap
    );
    public static final Registry<MapCodec<? extends FloatProvider>> FLOAT_PROVIDER_TYPE = registerSimple(
        Registries.FLOAT_PROVIDER_TYPE, FloatProviders::bootstrap
    );
    public static final Registry<MapCodec<? extends IntProvider>> INT_PROVIDER_TYPE = registerSimple(Registries.INT_PROVIDER_TYPE, IntProviders::bootstrap);
    public static final Registry<HeightProviderType<?>> HEIGHT_PROVIDER_TYPE = registerSimple(
        Registries.HEIGHT_PROVIDER_TYPE, registry -> HeightProviderType.CONSTANT
    );
    public static final Registry<BlockPredicateType<?>> BLOCK_PREDICATE_TYPE = registerSimple(
        Registries.BLOCK_PREDICATE_TYPE, registry -> BlockPredicateType.NOT
    );
    public static final Registry<WorldCarver<?>> CARVER = registerSimple(Registries.CARVER, registry -> WorldCarver.CAVE);
    public static final Registry<Feature<?>> FEATURE = registerSimple(Registries.FEATURE, registry -> Feature.ORE);
    public static final Registry<StructurePlacementType<?>> STRUCTURE_PLACEMENT = registerSimple(
        Registries.STRUCTURE_PLACEMENT, registry -> StructurePlacementType.RANDOM_SPREAD
    );
    public static final Registry<StructurePieceType> STRUCTURE_PIECE = registerSimple(
        Registries.STRUCTURE_PIECE, registry -> StructurePieceType.MINE_SHAFT_ROOM
    );
    public static final Registry<StructureType<?>> STRUCTURE_TYPE = registerSimple(Registries.STRUCTURE_TYPE, registry -> StructureType.JIGSAW);
    public static final Registry<PlacementModifierType<?>> PLACEMENT_MODIFIER_TYPE = registerSimple(
        Registries.PLACEMENT_MODIFIER_TYPE, registry -> PlacementModifierType.COUNT
    );
    public static final Registry<BlockStateProviderType<?>> BLOCKSTATE_PROVIDER_TYPE = registerSimple(
        Registries.BLOCK_STATE_PROVIDER_TYPE, registry -> BlockStateProviderType.SIMPLE_STATE_PROVIDER
    );
    public static final Registry<FoliagePlacerType<?>> FOLIAGE_PLACER_TYPE = registerSimple(
        Registries.FOLIAGE_PLACER_TYPE, registry -> FoliagePlacerType.BLOB_FOLIAGE_PLACER
    );
    public static final Registry<TrunkPlacerType<?>> TRUNK_PLACER_TYPE = registerSimple(
        Registries.TRUNK_PLACER_TYPE, registry -> TrunkPlacerType.STRAIGHT_TRUNK_PLACER
    );
    public static final Registry<RootPlacerType<?>> ROOT_PLACER_TYPE = registerSimple(
        Registries.ROOT_PLACER_TYPE, registry -> RootPlacerType.MANGROVE_ROOT_PLACER
    );
    public static final Registry<TreeDecoratorType<?>> TREE_DECORATOR_TYPE = registerSimple(
        Registries.TREE_DECORATOR_TYPE, registry -> TreeDecoratorType.LEAVE_VINE
    );
    public static final Registry<FeatureSizeType<?>> FEATURE_SIZE_TYPE = registerSimple(
        Registries.FEATURE_SIZE_TYPE, registry -> FeatureSizeType.TWO_LAYERS_FEATURE_SIZE
    );
    public static final Registry<MapCodec<? extends BiomeSource>> BIOME_SOURCE = registerSimple(Registries.BIOME_SOURCE, BiomeSources::bootstrap);
    public static final Registry<MapCodec<? extends ChunkGenerator>> CHUNK_GENERATOR = registerSimple(Registries.CHUNK_GENERATOR, ChunkGenerators::bootstrap);
    public static final Registry<MapCodec<? extends SurfaceRules.ConditionSource>> MATERIAL_CONDITION = registerSimple(
        Registries.MATERIAL_CONDITION, SurfaceRules.ConditionSource::bootstrap
    );
    public static final Registry<MapCodec<? extends SurfaceRules.RuleSource>> MATERIAL_RULE = registerSimple(
        Registries.MATERIAL_RULE, SurfaceRules.RuleSource::bootstrap
    );
    public static final Registry<MapCodec<? extends DensityFunction>> DENSITY_FUNCTION_TYPE = registerSimple(
        Registries.DENSITY_FUNCTION_TYPE, DensityFunctions::bootstrap
    );
    public static final Registry<MapCodec<? extends Block>> BLOCK_TYPE = registerSimple(Registries.BLOCK_TYPE, BlockTypes::bootstrap);
    public static final Registry<StructureProcessorType<?>> STRUCTURE_PROCESSOR = registerSimple(
        Registries.STRUCTURE_PROCESSOR, registry -> StructureProcessorType.BLOCK_IGNORE
    );
    public static final Registry<StructurePoolElementType<?>> STRUCTURE_POOL_ELEMENT = registerSimple(
        Registries.STRUCTURE_POOL_ELEMENT, registry -> StructurePoolElementType.EMPTY
    );
    public static final Registry<MapCodec<? extends PoolAliasBinding>> POOL_ALIAS_BINDING_TYPE = registerSimple(
        Registries.POOL_ALIAS_BINDING, PoolAliasBindings::bootstrap
    );
    public static final Registry<DecoratedPotPattern> DECORATED_POT_PATTERN = registerSimple(Registries.DECORATED_POT_PATTERN, DecoratedPotPatterns::bootstrap);
    public static final Registry<CreativeModeTab> CREATIVE_MODE_TAB = registerSimple(Registries.CREATIVE_MODE_TAB, CreativeModeTabs::bootstrap);
    public static final Registry<CriterionTrigger<?>> TRIGGER_TYPES = registerSimple(Registries.TRIGGER_TYPE, CriteriaTriggers::bootstrap);
    public static final Registry<NumberFormatType<?>> NUMBER_FORMAT_TYPE = registerSimple(Registries.NUMBER_FORMAT_TYPE, NumberFormatTypes::bootstrap);
    public static final Registry<DataComponentType<?>> DATA_COMPONENT_TYPE = registerSimple(Registries.DATA_COMPONENT_TYPE, DataComponents::bootstrap);
    public static final Registry<GameRule<?>> GAME_RULE = registerSimple(Registries.GAME_RULE, GameRules::bootstrap);
    public static final Registry<MapCodec<? extends EntitySubPredicate>> ENTITY_SUB_PREDICATE_TYPE = registerSimple(
        Registries.ENTITY_SUB_PREDICATE_TYPE, EntitySubPredicates::bootstrap
    );
    public static final Registry<DataComponentPredicate.Type<?>> DATA_COMPONENT_PREDICATE_TYPE = registerSimple(
        Registries.DATA_COMPONENT_PREDICATE_TYPE, DataComponentPredicates::bootstrap
    );
    public static final Registry<MapDecorationType> MAP_DECORATION_TYPE = registerSimple(Registries.MAP_DECORATION_TYPE, MapDecorationTypes::bootstrap);
    public static final Registry<DataComponentType<?>> ENCHANTMENT_EFFECT_COMPONENT_TYPE = registerSimple(
        Registries.ENCHANTMENT_EFFECT_COMPONENT_TYPE, EnchantmentEffectComponents::bootstrap
    );
    public static final Registry<MapCodec<? extends LevelBasedValue>> ENCHANTMENT_LEVEL_BASED_VALUE_TYPE = registerSimple(
        Registries.ENCHANTMENT_LEVEL_BASED_VALUE_TYPE, LevelBasedValue::bootstrap
    );
    public static final Registry<MapCodec<? extends EnchantmentEntityEffect>> ENCHANTMENT_ENTITY_EFFECT_TYPE = registerSimple(
        Registries.ENCHANTMENT_ENTITY_EFFECT_TYPE, EnchantmentEntityEffect::bootstrap
    );
    public static final Registry<MapCodec<? extends EnchantmentLocationBasedEffect>> ENCHANTMENT_LOCATION_BASED_EFFECT_TYPE = registerSimple(
        Registries.ENCHANTMENT_LOCATION_BASED_EFFECT_TYPE, EnchantmentLocationBasedEffect::bootstrap
    );
    public static final Registry<MapCodec<? extends EnchantmentValueEffect>> ENCHANTMENT_VALUE_EFFECT_TYPE = registerSimple(
        Registries.ENCHANTMENT_VALUE_EFFECT_TYPE, EnchantmentValueEffect::bootstrap
    );
    public static final Registry<MapCodec<? extends EnchantmentProvider>> ENCHANTMENT_PROVIDER_TYPE = registerSimple(
        Registries.ENCHANTMENT_PROVIDER_TYPE, EnchantmentProviderTypes::bootstrap
    );
    public static final Registry<ConsumeEffect.Type<?>> CONSUME_EFFECT_TYPE = registerSimple(
        Registries.CONSUME_EFFECT_TYPE, registry -> ConsumeEffect.Type.APPLY_EFFECTS
    );
    public static final Registry<RecipeDisplay.Type<?>> RECIPE_DISPLAY = registerSimple(Registries.RECIPE_DISPLAY, RecipeDisplays::bootstrap);
    public static final Registry<SlotDisplay.Type<?>> SLOT_DISPLAY = registerSimple(Registries.SLOT_DISPLAY, SlotDisplays::bootstrap);
    public static final Registry<RecipeBookCategory> RECIPE_BOOK_CATEGORY = registerSimple(Registries.RECIPE_BOOK_CATEGORY, RecipeBookCategories::bootstrap);
    public static final Registry<TicketType> TICKET_TYPE = registerSimple(Registries.TICKET_TYPE, registry -> TicketType.UNKNOWN);
    public static final Registry<IncomingRpcMethod<?, ?>> INCOMING_RPC_METHOD = registerSimple(Registries.INCOMING_RPC_METHOD, IncomingRpcMethods::bootstrap);
    public static final Registry<OutgoingRpcMethod<?, ?>> OUTGOING_RPC_METHOD = registerSimple(
        Registries.OUTGOING_RPC_METHOD, registry -> OutgoingRpcMethods.SERVER_STARTED
    );
    public static final Registry<MapCodec<? extends TestEnvironmentDefinition<?>>> TEST_ENVIRONMENT_DEFINITION_TYPE = registerSimple(
        Registries.TEST_ENVIRONMENT_DEFINITION_TYPE, TestEnvironmentDefinition::bootstrap
    );
    public static final Registry<MapCodec<? extends GameTestInstance>> TEST_INSTANCE_TYPE = registerSimple(
        Registries.TEST_INSTANCE_TYPE, GameTestInstance::bootstrap
    );
    public static final Registry<MapCodec<? extends SpawnCondition>> SPAWN_CONDITION_TYPE = registerSimple(
        Registries.SPAWN_CONDITION_TYPE, SpawnConditions::bootstrap
    );
    public static final Registry<MapCodec<? extends Dialog>> DIALOG_TYPE = registerSimple(Registries.DIALOG_TYPE, DialogTypes::bootstrap);
    public static final Registry<MapCodec<? extends Action>> DIALOG_ACTION_TYPE = registerSimple(Registries.DIALOG_ACTION_TYPE, ActionTypes::bootstrap);
    public static final Registry<MapCodec<? extends InputControl>> INPUT_CONTROL_TYPE = registerSimple(
        Registries.INPUT_CONTROL_TYPE, InputControlTypes::bootstrap
    );
    public static final Registry<MapCodec<? extends DialogBody>> DIALOG_BODY_TYPE = registerSimple(Registries.DIALOG_BODY_TYPE, DialogBodyTypes::bootstrap);
    public static final Registry<MapCodec<? extends Permission>> PERMISSION_TYPE = registerSimple(Registries.PERMISSION_TYPE, PermissionTypes::bootstrap);
    public static final Registry<MapCodec<? extends PermissionCheck>> PERMISSION_CHECK_TYPE = registerSimple(
        Registries.PERMISSION_CHECK_TYPE, PermissionCheckTypes::bootstrap
    );
    public static final Registry<EnvironmentAttribute<?>> ENVIRONMENT_ATTRIBUTE = registerSimple(
        Registries.ENVIRONMENT_ATTRIBUTE, EnvironmentAttributes::bootstrap
    );
    public static final Registry<AttributeType<?>> ATTRIBUTE_TYPE = registerSimple(Registries.ATTRIBUTE_TYPE, AttributeTypes::bootstrap);
    public static final Registry<MapCodec<? extends SlotSource>> SLOT_SOURCE_TYPE = registerSimple(Registries.SLOT_SOURCE_TYPE, SlotSources::bootstrap);
    public static final Registry<Consumer<GameTestHelper>> TEST_FUNCTION = registerSimple(Registries.TEST_FUNCTION, BuiltinTestFunctions::bootstrap);
    public static final Registry<? extends Registry<?>> REGISTRY = WRITABLE_REGISTRY;
 
    private static <T> Registry<T> registerSimple(ResourceKey<? extends Registry<T>> name, BuiltInRegistries.RegistryBootstrap<T> loader) {
        return internalRegister(name, new MappedRegistry<>(name, Lifecycle.stable(), false), loader);
    }
 
    private static <T> Registry<T> registerSimpleWithIntrusiveHolders(ResourceKey<? extends Registry<T>> name, BuiltInRegistries.RegistryBootstrap<T> loader) {
        return internalRegister(name, new MappedRegistry<>(name, Lifecycle.stable(), true), loader);
    }
 
    private static <T> DefaultedRegistry<T> registerDefaulted(
        ResourceKey<? extends Registry<T>> name, String defaultKey, BuiltInRegistries.RegistryBootstrap<T> loader
    ) {
        return internalRegister(name, new DefaultedMappedRegistry<>(defaultKey, name, Lifecycle.stable(), false), loader);
    }
 
    private static <T> DefaultedRegistry<T> registerDefaultedWithIntrusiveHolders(
        ResourceKey<? extends Registry<T>> name, String defaultKey, BuiltInRegistries.RegistryBootstrap<T> loader
    ) {
        return internalRegister(name, new DefaultedMappedRegistry<>(defaultKey, name, Lifecycle.stable(), true), loader);
    }
 
    private static <T, R extends WritableRegistry<T>> R internalRegister(
        ResourceKey<? extends Registry<T>> name, R registry, BuiltInRegistries.RegistryBootstrap<T> loader
    ) {
        Bootstrap.checkBootstrapCalled(() -> "registry " + name.identifier());
        Identifier key = name.identifier();
        LOADERS.put(key, () -> loader.run(registry));
        WRITABLE_REGISTRY.register((ResourceKey)name, registry, RegistrationInfo.BUILT_IN);
        return registry;
    }
 
    public static void bootStrap() {
        createContents();
        freeze();
        validate(REGISTRY);
    }
 
    private static void createContents() {
        LOADERS.forEach((key, value) -> {
            if (value.get() == null) {
                LOGGER.error("Unable to bootstrap registry '{}'", key);
            }
        });
    }
 
    private static void freeze() {
        REGISTRY.freeze();
 
        for (Registry<?> registry : REGISTRY) {
            bindBootstrappedTagsToEmpty(registry);
            registry.freeze();
        }
    }
 
    private static <T extends Registry<?>> void validate(Registry<T> registry) {
        registry.forEach(r -> {
            if (r.keySet().isEmpty()) {
                Util.logAndPauseIfInIde("Registry '" + registry.getKey((T)r) + "' was empty after loading");
            }
 
            if (r instanceof DefaultedRegistry) {
                Identifier key = ((DefaultedRegistry)r).getDefaultKey();
                Objects.requireNonNull(r.getValue(key), "Missing default of DefaultedMappedRegistry: " + key);
            }
        });
    }
 
    public static <T> HolderGetter<T> acquireBootstrapRegistrationLookup(Registry<T> registry) {
        return ((WritableRegistry)registry).createRegistrationLookup();
    }
 
    private static void bindBootstrappedTagsToEmpty(Registry<?> registry) {
        ((MappedRegistry)registry).bindAllTagsToEmpty();
    }
 
    @FunctionalInterface
    private interface RegistryBootstrap<T> {
        Object run(Registry<T> registry);
    }
}

引用的其他类