本站文本内容除另有声明外,转载时均必须注明出处,并遵守CC BY-NC-SA 3.0协议。(转载须知
本站是中文Minecraft Wiki的镜像站,与Mojang AB、Gamepedia没有从属关系。(免责声明

命名空间ID

来自Minecraft WIKI
跳到导航 跳到搜索
页面贡献者 :
中文mcwiki机器人
本条目的标题并非官方正式名称。

一旦官方名称揭晓,本条目名称可能会随时改变。

命名空间ID(Namespaced identifier)资源路径(Resource location)[1]命名空间字符串(Namespaced string)[2]是用来指明和识别游戏中特定对象而又能避免潜在的歧义和冲突的一种方式。

用法

命名空间ID用作普通字符串来指明游戏中的方块物品实体类型配方函数进度标签等对象。特别地,方块状态不使用命名空间ID。

有效的命名空间ID的格式为命名空间:名称,其中只能使用合法字符。

以下对象可以使用命名空间ID:

游戏内置:
附加包内容‌‌[仅基岩版]
  • 战利品表
  • 函数
数据包内容‌‌[仅Java版]
资源包内容‌‌[仅Java版]
其他可修改的‌‌[仅Java版]
其他不可修改的(不通过mod)
  • 战利品表的函数
  • 战利品表的条件
  • 战利品表的种类
  • 命令参数的种类

合法字符

Java版

命名空间和名称只能包含以下字符:

  • 0123456789 数字
  • abcdefghijklmnopqrstuvwxyz 小写字母
  • _ 下划线
  • - 连字符号

以下字符在命名空间中是非法的,但在名称中可以接受:

  • / 斜杠
    • 用于划分目录。
  • .
    • 区分文件后缀名。

命名空间和名称的最好命名方法是小写单词加下划线。

基岩版

ID的命名空间和名称可以包含任何符号,斜杠“/”和冒号“:”除外。

以下字符在命名空间中是非法的,但在战利品表和函数的名称中是可接受的。

  • / 斜杠
    • 用于划分目录。

命名空间和名称的最好命名方法是小写单词加下划线。

输出为字符串

游戏通常会将命名空间ID使用字符串表示。命名空间ID的字符串格式为命名空间:名称

例子:

命名空间 名称 字符串表示
minecraft diamond minecraft:diamond
foo bar.baz foo:bar.baz
foo bar/baz foo:bar/baz

从字符串识别

游戏可以识别用户输入的命名空间ID字符串,错误的字符串无法正确识别为命名空间ID。

一些限制:

  • 字符串最多只能有一个:(冒号)。
  • 字符串的命名空间和名称部分必须符合#合法字符的限制。
  • 如果有::前面不能有/.

当存在:时,其前面的部分将被识别为命名空间,其后面的部分则是名称。

当不存在:时,minecraft将被作为为命名空间,整个字符串则是名称。‌‌[仅Java版]

建议使用时始终包含命名空间和:

例子:
字符串 识别的命名空间 识别的名称 游戏再输出为字符串
bar:code bar code bar:code
minecraft:zombie minecraft zombie minecraft:zombie
diamond minecraft‌‌[仅Java版]
无‌‌[仅基岩版]
diamond minecraft:diamond‌‌[仅Java版]
diamond‌‌[仅基岩版]
foo/bar:coal 无效字符/
minecraft/villager minecraft‌‌[仅Java版]
无‌‌[仅基岩版]
minecraft/villager minecraft:minecraft/villager‌‌[仅Java版]
minecraft/villager‌‌[仅基岩版]
mypack_recipe minecraft‌‌[仅Java版]
无‌‌[仅基岩版]
mypack_recipe minecraft:mypack_recipe‌‌[仅Java版]
mypack_recipe‌‌[仅基岩版]
mymap:schrödingers_var mymap 无效字符ö‌‌[仅Java版]
schrödingers_var‌‌[仅基岩版]
mymap:schrödingers_var‌‌[仅基岩版]
custom_pack:Capital custom_pack 无效字符C‌‌[仅Java版]
Capital‌‌[仅基岩版]
custom_pack:Capital‌‌[仅基岩版]

实际文件路径

Information icon.png
此特性为Java版独有。

命名空间ID指定的对象可能是资源包数据包里的文件。

通常,资源包数据包中文件的路径是包类型/命名空间/对象类型/名称.后缀名,就有相应的形如 命名空间:名称 的命名空间ID。所有的/(可能在对象类型名称中)都是用来划分文件目录的。

注意:资源包中的某些元素不一定依靠具有命名空间ID的对象(如GUI材质)。

在知道实际文件路径后,我们就可以通过它知道命名空间ID。同样的,在知道命名空间ID指定的对象的类型后,我们就可以通过它找到实际文件路径。

命名空间

Nathan Adams Mojang avatar.png 这不是一个新概念,但是我想我应重申一下什么是“命名空间”。游戏中的大多数东西都有一个命名空间,以便在我们加入了something的同时一个mod(或地图,或其他)也加入了something时来区分它们两个。当您要为某个东西命名时,例如一个战利品表,您还需要指定这个东西所属的命名空间。如果您不指定命名空间,我们默认它是minecraft。这意味着somethingminecraft:something是一回事。
——Dinnerbone评论于命名空间[3]

命名空间是内容的区界。它是为了防止潜在的内容冲突或无意中覆盖了相同名称的对象。

例如,两个数据包里都有一个名为start函数。向游戏加入这两个数据包,如果没有命名空间,这两个函数就会发生冲突。当它们具有onetwo两个不同的命名空间时,则函数将变为one:starttwo:start,不再冲突。

自定义命名空间

不同的项目或内容创作(例如数据包资源包mod等),命名空间应该是不同的,仅当需要覆盖其他项目,或是追加标签的时候,才使用与其他项目相同的命名空间。

为了防止潜在的冲突,命名空间应该尽可能的特殊。

  • 避免使用一堆字母的组合。例如,一个名为“nuclear craft”的项目不应该使用命名空间nc,因为太简单了。
  • 避免使用过于模糊的词语。battle_royale也不能提供便于查找的信息,不过"player_name"_battle_royale会更好些。

这些不当的命名空间都会减少项目的适应程度,并在将多个项目加入到游戏时给调试带来困难。

minecraft命名空间

游戏本身使用minecraft命名空间。当没有指定命名空间时,将默认为minecraft‌‌[仅Java版]。只有当项目需要覆盖或修改现有的“minecraft”数据或将内容加入到原版标签时,才应该使用minecraft命名空间。比如在minecraft:load 函数标签中加入函数

其他内置的命名空间

虽然翻译关键字并不使用命名空间ID,但游戏的默认资源包声明了realms命名空间来储存面向Realms语言文件(位于assets/realms/lang/<语言代码>.json),而minecraft命名空间储存与游戏相关的语言文件。Realm的jar文件本身也在realms命名空间中声明了它的en_us.json语言文件及各种材质。

在命令参数类型中,还有一个brigadier命名空间存在于brigadier中。[4]

历史

Java版
??加入了命名空间ID和minecraft前缀。
1.7.2?命令现在在接受数字ID的同时也可以接受名称ID了。
1.1116w32a命名空间ID有了一个字符限制
命名空间ID中不允许使用大写字母。
1.1317w47a扁平化之后,命名空间ID是唯一可接受的ID形式,不再接受数字ID。
pre4名称空间ID现在用于标识插件消息通道。[5]
1.14.4pre1Client.jar的内置资源包中加入了命名空间realms
携带版(Alpha)
0.16.0build 1加入了命令,支持字符串ID,但这些ID没有命名空间。
基岩版
1.12.0beta 1.12.0.2加入了命名空间ID和minecraft前缀以支持通过附加包加入自定义项。

另见

参考

外部链接