命名空间
命名空间是标识内容归属的标记符。您可以将其理解为文件夹。命名空间的作用在于避免命名冲突。
在附加包开发中,命名空间本质上可视为"冒号左侧的部分"。例如,minecraft:zombie中的minecraft就是命名空间。其通用格式为命名空间:名称。
举个具体例子说明命名空间的必要性:假设您创建了一个新生物,将其命名为minecraft:shark,却没有意识到应为自定义内容创建专属命名空间。次年Mojang决定在游戏中加入鲨鱼!此时就出现了两个minecraft:shark的定义,导致命名冲突,您的附加包将无法正常运行。
若您当初使用your_namespace:shark的命名方式,就能避免这种冲突。
命名空间的选择原则
合适的命名空间应具有唯一性。诸如mob、cars、content或custom这类通用词汇是糟糕的选择,因为其他开发者也可能使用相同的命名空间。
合适的命名空间应当简短。您会频繁使用这个命名空间,因此越简短越好。像george_carlin_the_comedian这样的长命名就极不实用。
个人项目建议使用玩家名的简化版本,商业项目则推荐使用公司名的合适变体。
优秀范例:
gcarlinsirlichcubeworldbworks
严禁使用minecraft或minecon作为命名空间(除非修改原版文件)。这不仅是个糟糕的主意,而且Minecraft已保留这些命名空间,实际也无法生效。
命名空间的应用场景
简而言之,应当尽可能多地使用命名空间。
基础原则是:添加自定义实体时必须使用命名空间。sirlich:shark的命名方式远优于单纯的shark。
组件(components)和事件(events)同样需要命名空间。正如Mojang使用minecraft:pig_saddled的格式,您应当采用命名空间:我的生物事件和命名空间:我的组件组的规范。
动画控制器(animation controllers)、渲染控制器(render controllers)和动画(animations)中也应使用命名空间。
例如:controller.animation.命名空间.实体名称.动作的格式就优于controller.animation.我的动作。
无需命名空间的情况
实际文件结构不需要包含命名空间。animations/命名空间/我的实体/animation的路径结构反而比animations/我的实体/animation更令人困惑。
- 注意:以下文件夹属于例外情况:
functions(函数)、structures(结构)、loot_tables(战利品表)、trade_tables(交易表)、sounds(音效)和textures(纹理)。- 为防止与其他资源包冲突,建议在这些文件夹中使用命名空间。
- 示例:
BP/functions/命名空间/测试.mcfunction

