User Tools

Site Tools


zh_cn:tutorial:registry

注册表系统

你需要将你添加到游戏的绝大多数内容注册进去,这有利于:

  • 让游戏知道你的内容存在
  • 在客户端和服务器之间验证游戏内容
  • 存储时处理无效内容
  • 避免不同模组之间的冲突
  • 利于客户端和服务器之间的沟通和数据储存
  • 抽象化隐藏数字 ID

注册任何类型内容时,你传入一个 Identifier,也就是你需要加入的内容的标识符。标识符,简称 ID,通常拥有一个命名空间(namespace)和路径(path)。大多数情况下,命名空间是你的模组的ID,路径则是你要注册的内容的(英文)名称。比如,标准的泥土方块的 ID 为 minecraft:dirt

不注册就使用自定义内容容易导致bug,比如缺失材质、世界保存问题和崩溃。游戏通常会让你知道你是否忘记注册了某个东西。

注册类型

注册内容时,你需要指定将内容加入哪个注册表。基本的游戏提供所有原版内容的注册表,可以在 Registries(1.19.3 以上)或 Registry(1.19.2 以下)中找到。例如,你很有可能会使用用于物品的 Registries.ITEM(1.19.3 以上)/Registry.ITEM(1.19.2 以下)和用于方块的 Registries.BLOCK(1.19.3 以上)/Registry.BLOCK(1.19.2 以下)。

如需详细了解所有可用的注册表,请阅读注册表类型页面。

注册内容

使用Registry.register以将内容添加到注册表:

public static <T> T register(Registry<? super T> registry, Identifier id, T entry) {
    return ((MutableRegistry)registry).add(id, entry);
}
registry - 你需要将内容添加到的注册表的实例。位于Registry中的所有原版注册表的列表,可以在注册表类型页面中找到。

id - 注册表内,你的内容的一个标识符。标准的格式为模组ID:名称,就像minecraft:dirt这样。

entry - 你需要注册的内容的实例。

注册表方法

get - 返回与注册表内ID关联的项(entry)。如果项不存在,DefaultedRegistry返回默认注册表值,SimpleRegistry返回null。

@Nullable
public abstract T get(@Nullable Identifier id);

getId - 返回注册表内与项关联的Identifier。如果项不存在,DefaultedRegistry返回默认注册表标识符,SimpleRegistry返回null。

@Nullable
public abstract Identifier getId(T entry);

getRawId - 返回注册表内与项关联的内部整数ID。如果项不存在,DefaultedRegistry返回默认注册表值的原始ID,SimpleRegistry返回-1。

public abstract int getRawId(@Nullable T entry);
zh_cn/tutorial/registry.txt · Last modified: 2023/05/19 14:11 by solidblock