Skip to content

条目类型

类型层级

RegistryEntry<R, T> (extends DeferredHolder<R, T>, NonNullSupplier<T>)
├── ItemProviderEntry<R extends ItemLike, T> (implements ItemLike)
│   ├── BlockEntry<T extends Block>
│   └── ItemEntry<T extends Item>
├── BlockEntityEntry<T extends BlockEntity>
├── EntityEntry<T extends Entity>
├── MenuEntry<T extends AbstractContainerMenu>
├── FluidEntry<T extends BaseFlowingFluid>
├── SoundEventEntry
├── AttachmentEntry<E> (R = AttachmentType<?>, T = AttachmentType<E>)
├── DataComponentEntry<E> (R = DataComponentType<?>, T = DataComponentType<E>)
├── ConditionEntry<T extends ICondition> (R = MapCodec<?>, T = MapCodec<T>)
├── BiomeModifierEntry<T extends BiomeModifier> (R = MapCodec<?>, T = MapCodec<T>)
├── GlobalLootModifierEntry<T extends IGlobalLootModifier> (R = MapCodec<?>, T = MapCodec<T>)
└── StructureModifierEntry<T extends StructureModifier> (R = MapCodec<?>, T = MapCodec<T>)

RegistryEntry

通用注册条目,包装 DeferredHolder 并提供 Registrum 特有功能。

java
public class RegistryEntry<R, S extends R>
        extends DeferredHolder<R, S>
        implements NonNullSupplier<S> {

核心方法

方法说明
get()获取注册的对象(继承自 DeferredHolder
getSibling(ResourceKey<Registry<X>>)获取同名其他注册表的兄弟条目
getSibling(Registry<X>)同上,通过 Registry 实例
filter(Predicate<R>)如果谓词匹配则返回 Optional.of(this)
is(X entry)引用相等检查(get() == entry
cast(Class<E>, RegistryEntry)安全类型转换(检查类型参数)

使用示例

java
// 从方块条目获取对应的 BlockItem 条目
RegistryEntry<Block, MyBlock> blockEntry = ...;
ItemEntry<BlockItem> itemEntry = blockEntry.getSibling(Registries.ITEM);

// 安全转换
BlockEntry<MyBlock> casted = BlockEntry.cast(registryEntry);

ItemProviderEntry

可当作 ItemLike 使用的注册条目。

java
public class ItemProviderEntry<R extends ItemLike, T extends R>
        extends RegistryEntry<R, T>
        implements ItemLike {

方法

方法说明
asStack()返回数量 1 的 ItemStack
asStack(int count)返回指定数量的 ItemStack
isIn(ItemStack stack)检查物品是否匹配
is(Item item)检查特定物品
asItem()返回 Item 实例

使用示例

java
// 直接用于需要 ItemLike 的地方
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, MY_ITEM);
// ItemProviderEntry 实现了 ItemLike

// 生成 ItemStack
ItemStack stack = MY_ITEM.asStack(64);

BlockEntry

java
public class BlockEntry<T extends Block> extends ItemProviderEntry<Block, T> {

方法

方法说明
getDefaultState()返回方块的默认 BlockState
has(BlockState state)检查 BlockState 是否属于此方块
cast(RegistryEntry<Block, T>)静态安全转换

ItemEntry

java
public class ItemEntry<T extends Item> extends ItemProviderEntry<Item, T> {

方法

方法说明
cast(RegistryEntry<Item, T>)静态安全转换

BlockEntityEntry

java
public class BlockEntityEntry<T extends BlockEntity>
        extends RegistryEntry<BlockEntityType<?>, BlockEntityType<T>> {

方法

方法说明
create(BlockPos, BlockState)创建方块实体实例
is(@Nullable BlockEntity)类型检查
get(BlockGetter, BlockPos)从世界获取 Optional
getNullable(BlockGetter, BlockPos)从世界获取或 null
cast(RegistryEntry)静态安全转换

使用示例

java
BlockEntityEntry<MyBE> MY_BE = ...;
Optional<MyBE> be = MY_BE.get(level, pos);
if (MY_BE.is(be)) { ... }

EntityEntry

java
public class EntityEntry<T extends Entity>
        extends RegistryEntry<EntityType<?>, EntityType<T>> {

方法

方法说明
create(Level, EntitySpawnReason)创建实体实例
is(Entity)类型检查
cast(RegistryEntry)静态安全转换
java
public class MenuEntry<T extends AbstractContainerMenu>
        extends RegistryEntry<MenuType<?>, MenuType<T>> {

方法

方法说明
create(int windowId, Inventory)创建菜单实例
asProvider()包装为 MenuConstructor
open(ServerPlayer, Component)打开菜单
open(ServerPlayer, Component, Consumer<RegistryFriendlyByteBuf>)打开菜单 + 额外数据

FluidEntry

java
public class FluidEntry<T extends BaseFlowingFluid>
        extends RegistryEntry<Fluid, T> {

方法

方法说明
getSource()获取 Source 流体
getType()获取 FluidType
getBlock()获取 LiquidBlock(Optional)
getBucket()获取 BucketItem(Optional)

SoundEventEntry

java
public class SoundEventEntry extends RegistryEntry<SoundEvent, SoundEvent>

SoundEvent 注册条目的包装器。由 SoundEventBuilder 生成。提供 cast() 方法用于类型安全转换。

AttachmentEntry

java
public class AttachmentEntry<E> extends RegistryEntry<AttachmentType<?>, AttachmentType<E>> {

用于 AttachmentType 的注册条目,由 AttachmentBuilder 生成。

方法

方法说明
cast(RegistryEntry)静态安全转换

DataComponentEntry

java
public class DataComponentEntry<E> extends RegistryEntry<DataComponentType<?>, DataComponentType<E>> {

用于 DataComponentType 的注册条目,由 DataComponentBuilder 生成。

方法

方法说明
cast(RegistryEntry)静态安全转换

ConditionEntry

java
public class ConditionEntry<T extends ICondition> extends RegistryEntry<MapCodec<? extends ICondition>, MapCodec<T>> {

用于条件编解码器的注册条目,由 ConditionBuilder 生成。注册的是 MapCodec 而非条件实例本身,使 NeoForge 数据驱动条件系统能识别自定义条件类型。

方法

方法说明
cast(RegistryEntry)静态安全转换

BiomeModifierEntry

java
public class BiomeModifierEntry<T extends BiomeModifier> extends RegistryEntry<MapCodec<? extends BiomeModifier>, MapCodec<T>> {

用于生物群系修改器序列化器的注册条目,由 BiomeModifierBuilder 生成。

方法

方法说明
cast(RegistryEntry)静态安全转换

GlobalLootModifierEntry

java
public class GlobalLootModifierEntry<T extends IGlobalLootModifier> extends RegistryEntry<MapCodec<? extends IGlobalLootModifier>, MapCodec<T>> {

用于全局战利品修改器序列化器的注册条目,由 GlobalLootModifierBuilder 生成。

方法

方法说明
cast(RegistryEntry)静态安全转换

StructureModifierEntry

java
public class StructureModifierEntry<T extends StructureModifier> extends RegistryEntry<MapCodec<? extends StructureModifier>, MapCodec<T>> {

用于结构修改器序列化器的注册条目,由 StructureModifierBuilder 生成。

方法

方法说明
cast(RegistryEntry)静态安全转换

LazyRegistryEntry

延迟解析的条目引用。

java
public class LazyRegistryEntry<R, T extends R> implements NonNullSupplier<T> {
    public LazyRegistryEntry(NonNullSupplier<? extends RegistryEntry<R, T>> supplier);
    public T get(); // 首次调用时解析并丢弃 supplier
}

用于 AbstractBuilder 内部,防止 Builder 被长时间持有导致内存泄漏。

Released under the CC-BY-NC-SA 4.0 License.