命名空间

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

命名空间

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

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

minecraft命名空间

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

自定义命名空间

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

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

  • 避免使用一堆字母的组合。例如,一个名为“nuclear craft”的项目不应该使用命名空间nc,因为太简单了。

  • 避免使用过于模糊的词语。battle_royale也不能提供便于查找的信息,不过player_name_battle_royale会更好些。

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

其他内置的命名空间

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

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

最后更新于