不难发现,我们在描述不同的『胡桃』时,往往会在前面加上定语『XXX的』,其中XXX往往是某一个更高层面的东西,『的』用来区分两者。等等,让我们把『的』换成冒号,然后你就会发现:
原神:胡桃
胡桃日记:胡桃
东方Project旧作:胡桃
公主连结:胡桃
植物:胡桃
虽然字符用的是中文,不符合Minecraft Java版的规范。但如果抛开这点来说,这完完全全不就是『命名空间ID』吗?!其中『原神』、『胡桃日记』、『东方Project旧作』等就是『命名空间』。
但是这还不足以解释『命名空间』,让我们再换一个例子。
张三的电脑上有两个文件夹A和B,两个文件夹都具有一个叫做『music.mp3』的文件。由于这两个文件在不同的文件夹下面,因此不会发生冲突,计算机能够正常识别它们。如果它们是在同一个文件夹下面,那么计算机识别的时候就会发生混乱,可能会直接跳出那个众所周知的蓝色窗口。在这边,文件夹『A』和『B』就代表命名空间。
本小章还未完,请点击下一页继续阅读后面精彩内容!
但是我们仍然不能够清楚解释『命名空间』究竟是什么。其实,『命名空间』本身也并没有一个很准确的定义,它在不同的场合可能具有完全不同的意义,比如种类、游戏、公司、文件夹、数据库、国家、学科等等等等。当然,如果你的抽象思维比较好的话,你当然可以把它想象成一个空间,至于这个空间究竟是什么你不用去管。同样的名称在不同的空间被赋予上不同的意义,并且不会和其他名称发生冲突,因为两个名称虽然一样,但处于不同的命名空间之中。
回到最开始的钻石例子,你应该已经想到如何区分原版和模组的钻石吧?这两个钻石就算本身完全一样,但它们所处的『空间』并不一样。其中一个钻石是『原版的钻石』,另外一个钻石是『模组的钻石』。我们只需要对比两个钻石所处的『空间』,也就是对比拥有这两个钻石的两个东西即可。Mojang和其他第三方模组开发者也是这么想,所以在Minecreaft Java1.7.2版本中引入的命名空间,就是这么干:
minecraft:diamond
\\我的世界的钻石\\
mod:diamond
\\模组的钻石\\
如今,随着版本的更迭,『命名空间ID』正在被用于越来越多的东西上。截止Minecraft Java1.19.1和基岩版1.19.10版本,在原版中,命名空间已经用于这些东西:
方块、方块实体[JE]、液体[JE]、物品、实体种类、生物记忆[JE]、画[JE]、村民职业[JE]、村民种类[JE]、状态效果、药水效果[JE]、魔咒、粒子种类、维度[JE]、生物群系、统计[JE]、配方种类[JE]、配方序列化器[JE]、声音、战利品表、函数、进度[JE]、谓词[JE]、结构、配方[JE]、标签[JE]、方块状态文件[BE]、模型[BE]、纹理[BE]、Boss栏[JE]、命令存储[JE]、命令参数[JE]、战利品表函数[JE]和战利品表种类[JE]。
这不列没事,一列出来吓一大跳,这么多。其实,一些第三方模组加载器早已为更多的东西加入了『命名空间ID』。比如在SPONGE FORGE海绵模组服务端中,为指令加上了『命名空间ID』。未来,随着Mojang官方对数据包、行为包、附加包等『官方模组』的持续支持,原版游戏内必定会有更多的东西用上『命名空间ID』。