- 致编者:请牢记我们的域名wiki.mcbe-dev.net!
- 致编者:欢迎加入本Wiki的官方交流QQ群或Discord服务器!
- 基岩版1.19.31现已发布!(了解更多)
- Inner Core现已支持Xbox模组联机!(了解更多)
- 如果您是第一次来到本Wiki,欢迎注册一个账户
- 点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
- 请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
赋命名空间标识符
赋命名空间标识符(Namespaced identifier)是用来指明和识别游戏中特定对象而又能避免潜在的歧义和冲突的一种方式,其主要由命名空间(Namespace)和标识符(Identifier,简写ID)两部分组成[注 1]。通常来说,命名空间是内容的区界,标识符相当于对应区界下此内容的名称;有时命名空间也直接充当名称来使用。部分游戏内容(例如方块、物品等)拥有数字ID,这个数字ID即数字标识符。
模式
附加包中的部分内容使用一个模式赋命名空间标识符(或标识符)来定义该JSON文件内容的模式,它们通常是JSON文件中二级对象的对象名。例如方块JSON的模式赋命名空间标识符是minecraft:block
,它告诉游戏这个文件采用的模式为方块。它在JSON文件中的关系如下:
{
"format_version": 1.17.0,
"minecraft:block": {
…
}
}
下表列出了附加包中各种文件的模式赋命名空间标识符(部分仅标识符或命名空间):
赋命名空间标识符 | 域
| |
---|---|---|
animations
|
动画 | |
animation_controllers
|
动画控制器 | |
minecraft:attachable
|
附着物 | |
minecraft:biome
|
生物群系 | |
minecraft:client_entity
|
实体客户端 | |
minecraft:entity
|
实体服务端 | |
minecraft:<地物名称>_feature
|
地物 | |
minecraft:feature_rules
|
地物规则 | |
minecraft:fog_settings
|
迷雾 | |
minecraft:item
|
物品 | |
minecraft:geometry [注 2]
|
几何 | |
particle_effect
|
粒子 | |
minecraft:recipe_shaped
|
有序 | 配方 |
minecraft:recipe_shapeless
|
无序 | |
minecraft:furnace
|
烧炼 | |
minecraft:recipe_brewing_container
|
酿造(首次/多次加工) | |
render_controllers
|
渲染控制器 | |
minecraft:spawn_rules
|
实体生成规则 | |
minecraft:texture_set
|
纹理集 | |
<命名空间> [注 3]
|
JSON UI | |
minecraft:behavior_tree
|
行为树 |
格式
赋命名空间标识符用作普通字符串来指明游戏中的方块、物品、实体、配方、函数等对象。
有效的赋命名空间标识符的格式为<命名空间>:<标识符>
,其中只能使用合法字符。
以下对象可以使用赋命名空间标识符(此处列出的对象不考虑模式的赋命名空间标识符,下同):
以下对象仅使用标识符:
合法字符
命名空间和标识符可以包含任何符号,斜杠“/
”和冒号“:
”除外。
斜杠“/
”在命名空间中是非法的,但在战利品表、交易、函数和声音中表示路径时是可接受的[注 4]。
命名空间和标识符的最好命名方法是小写单词加下划线(snake_case
)。
输出为字符串
游戏通常会将赋命名空间标识符使用字符串表示。赋命名空间标识符的字符串格式为<命名空间>:<标识符>
。
例子:
命名空间 | 标识符 | 字符串表示 |
---|---|---|
minecraft |
diamond |
minecraft:diamond
|
foo |
bar.baz |
foo:bar.baz
|
从字符串识别
游戏可以识别用户输入的赋命名空间标识符字符串,错误的字符串无法正确识别为赋命名空间标识符。
字符串被正确识别的前提是必须符合合法字符的规则,在此条件下通过添加不同的符号可以更改被识别的内容:
- 在方块或物品的赋命名空间标识符字符串后使用冒号,并在冒号后加上数据值可用于指定该赋命名空间标识符下某个数据值的方块或物品。例如:
minecraft:wool:3
(淡蓝色羊毛)。 - 在几何的标识符字符串后使用冒号,并在冒号后加上另一个几何的标识符可继承该几何的内容。例如:
geometry.armor:geometry.base
。
命名空间
这不是一个新概念,但是我想我应重申一下什么是“命名空间”。游戏中的大多数东西都有一个命名空间,以便在我们加入了something
的同时一个模组(或地图,或其他)也加入了something
时来区分它们两个。当您要为某个东西命名时,例如一个战利品表,您还需要指定这个东西所属的命名空间。如果您不指定命名空间,我们默认它是minecraft
。这意味着something
和minecraft:something
是一回事[注 5]。
命名空间是内容的区界。它是为了防止潜在的内容冲突或无意中覆盖了相同名称的对象。
例如,两个附加包里都有一个标识符为start
的方块。向游戏加入这两个附加包,如果没有命名空间,这两个方块就会发生冲突。当它们具有one
和two
两个不同的命名空间时,则方块将变为one:start
和two:start
,不再冲突。
minecraft
命名空间
游戏本身使用minecraft
命名空间。只有当项目需要覆盖或修改现有的“minecraft”数据时,才应该使用minecraft
命名空间。
附加包组件使用<命名空间>:<组件名称>
的方式来区分,在国际版中所有含命名空间的组件均使用minecraft
命名空间,在中国版中新增的组件则使用netease
命名空间。
为了避免和附加包冲突,在Inner Core中自定义的物品、方块和实体当前皆默认以minecraft
为命名空间。
自定义命名空间
不同的项目或内容创作(例如附加包),命名空间应该是不同的,仅当需要覆盖其他项目的时候,才使用与其他项目相同的命名空间。
为了防止潜在的冲突,命名空间应该尽可能的特殊。
- 避免使用一堆字母的组合。例如,一个名为“nuclear craft”的项目不应该使用命名空间
nc
,因为太简单了。 - 避免使用过于模糊的词语。
battle_royale
也不能提供便于查找的信息,不过player_name_battle_royale
会更好些。
这些不当的命名空间都会减少项目的适应程度,并在将多个项目加入到游戏时给调试带来困难。
列表
历史
携带版(Alpha) | |||||
---|---|---|---|---|---|
0.16.0 | build 1 | 加入了命令,支持字符串ID,但这些ID没有命名空间。 | |||
基岩版 | |||||
1.12.0 | 1.12.0.2 | 加入了赋命名空间标识符和minecraft 前缀以支持通过附加包加入自定义项。 |
参见
注释
- ↑ 附加包中一般简称赋命名空间标识符为“identifier”或"name"。例如:。
"identifier": "example:test_block"
- ↑ 几何JSON文件可以使用模式赋命名空间标识符也可以不使用;单个模型的几何JSON只使用标识符,不带有命名空间。
- ↑ JSON UI文件中以开头作为此UI的命名空间。每两个JSON UI之间使用不同的命名空间来区分。
"namespace": "<example>"
- ↑ 战利品表、交易、函数和声音的命名空间即其文件名(函数和声音的命名空间不含文件拓展名),若包含在一个或多个次级目录下则命名空间为其文件路径,用斜杠划分目录。例如:
- 引用另一个战利品表:
"name": "loot_tables/gameplay/fishing/junk.json"
- 在命令中填写函数的命名空间:
/function check/testblock
- 引用另一个战利品表:
- ↑ 在基岩版中如果不指定命名空间,游戏不会默认加上
minecraft
,但附加包中部分JSON文件的模式赋命名空间标识符仅为一个标识符(例如动画JSON的模式赋命名空间标识符是animations
而不是minecraft:animations
),这似乎是默认为minecraft
命名空间下的内容。