本站文本内容除另有声明外,转载时均必须注明出处。(详情…本站文本内容除另有声明外,转载时均必须注明出处。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。需要管理员的协助?在管理员告示板留言也许可以帮到您。
各位用户:为了让我们能更好了解您的需求,提供更优良的服务,请帮助我们填写一份问卷。编者问卷读者问卷(需要花费7分钟左右)

Hi Gamepedia users and contributors! Please complete this survey to help us learn how to better meet your needs in the future. We have one for editors and readers. This should only take about 7 minutes!

命名空间ID

来自Minecraft Wiki
(重定向自命名空间
跳转至: 导航搜索
Information icon.svg
此特性为Java版基岩版独有。
本条目的标题并非官方正式名称。
一旦官方名称揭晓,本条目名称可能会随时改变。

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

用法[编辑 | 编辑源代码]

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

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

  • 游戏内置
    • 方块
    • 方块实体
    • 液体
    • 物品
    • 实体种类
    • 生物的记忆
    • 画的名字
    • 村民的职业
    • 村民的种类
    • 状态效果
    • 药水效果
    • 魔咒
    • 颗粒的种类
    • 维度
    • 生物群系
    • 统计
    • 配方的种类
    • 配方的序列化器
  • 声音事件
  • 数据包内容
    • 进度
    • 战利品表
    • 函数
    • 结构文件
    • 配方表
    • 方块标签
    • 液体标签
    • 物品标签
    • 实体种类标签
    • 函数标签
  • 资源包内容
    • 方块状态文件
    • 模型
    • 材质
    • 声音
  • 其他可修改的
    • Boss栏
  • 其他不可修改的(无mod)
    • 战利品表的函数
    • 战利品表的条件
    • 战利品表的种类
    • 战利品表随机池被抽出项的种类
    • 命令参数的种类

合法字符[编辑 | 编辑源代码]

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

  • 0123456789 数字
  • abcdefghijklmnopqrstuvwxyz 小写字母
  • _ 下划线
  • - 连字符号
  • / 斜杠
    • 用于划分目录,不能用于命名空间。
  • .
    • 区分文件后缀名,不能用于命名空间。

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

输出为字符串[编辑 | 编辑源代码]

游戏通常会将命名空间ID使用字符串表示。命名空间ID的字符串格式为命名空间:名称,且字符必须符合合法字符的限制。

例子:

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

从字符串识别[编辑 | 编辑源代码]

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

一些限制:

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

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

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

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

实际文件路径[编辑 | 编辑源代码]

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

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

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

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

命名空间[编辑 | 编辑源代码]

Dinnerbone-twitter.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。只有当项目需要覆盖或修改现有的“minecraft”数据或将内容加入到原版标签时,才应该使用minecraft命名空间。比如在minecraft:load 函数标签中加入函数

其他内置的命名空间[编辑 | 编辑源代码]

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

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

历史[编辑 | 编辑源代码]

Java版
??加入了命名空间ID和minecraft前缀。
1.7.2 ?命令现在在接受数字ID的同时也可以接受名称ID了。
1.11 16w32a 命名空间ID有了一个字符限制
命名空间ID中不允许使用大写字母。
1.13 17w47a 扁平化之后,命名空间ID是惟一可接受的ID形式,不再接受数字ID。
基岩版
1.12.0 beta 1.12.0.2 加入了命名空间ID和minecraft前缀以支持通过附加包加入自定义项。

另见[编辑 | 编辑源代码]

参考[编辑 | 编辑源代码]

外部链接[编辑 | 编辑源代码]