资源(Resources)
资源是游戏使用的外部文件,但不是代码。最突出的资源类型是纹理,然而,Minecraft生态系统中存在许多其他类型的资源。当然,所有这些资源都需要代码端的消费者,因此消费系统也分组在本节中。
Minecraft通常有两种资源:用于逻辑客户端的资源,称为资产(assets),以及用于逻辑服务器的资源,称为数据(data)。资产主要是仅显示信息,例如纹理、显示模型、翻译或声音,而数据包括影响游戏玩法的各种内容,例如战利品表、配方或世界生成信息。它们分别从资源包和数据包加载。NeoForge为每个模组生成内置的资源包和数据包。
资源包和数据包通常都需要一个pack.mcmeta文件;然而,现代NeoForge在运行时为您生成这些文件,因此您无需担心。
如果您对某些内容的格式感到困惑,请查看原版资源。您的NeoForge开发环境不仅包含原版代码,还包含原版资源。它们可以在外部资源部分(IntelliJ)/项目库部分(Eclipse)中找到,名称为ng_dummy_ng.net.minecraft:client:client-extra:<minecraft_version>(对于Minecraft资源)或ng_dummy_ng.net.neoforged:neoforge:<neoforge_version>(对于NeoForge资源)。
资产(Assets)
另请参阅:Minecraft Wiki上的资源包
资产,或客户端资源,是所有仅与客户端相关的资源。它们从资源包加载,有时也称为旧术语纹理包(源于旧版本,当时它们只能影响纹理)。资源包基本上是一个assets文件夹。assets文件夹包含资源包包含的各种命名空间的子文件夹;每个命名空间都是一个子文件夹。例如,一个ID为coolmod的模组的资源包可能包含一个coolmod命名空间,但可能另外包括其他命名空间,例如minecraft。
NeoForge自动将所有模组资源包收集到Mod resources包中,该包位于资源包菜单的选定包侧底部。目前无法禁用Mod resources包。然而,位于Mod resources包上方的资源包会覆盖下方资源包中定义的资源。这种机制允许资源包制作者覆盖您的模组资源,也允许模组开发者在需要时覆盖Minecraft资源。
资源包可能包含影响以下内容的文件夹和文件:
| Folder Name | Contents |
|---|---|
atlases | Texture Atlas Sources |
blockstates | Blockstate Files |
equipment | 装备信息 |
font | 字体定义 |
items | 客户端物品 |
lang | 翻译文件 |
models | 模型 |
particles | 粒子定义 |
post_effect | 后期处理屏幕效果 |
shaders | 元数据、片段和顶点着色器 |
sounds | 声音文件 |
texts | 杂项文本文件 |
textures | 纹理 |
数据(Data)
另请参阅:Minecraft Wiki上的数据包
与资产相反,数据是所有服务器资源的术语。类似于资源包,数据通过数据包(或datapacks)加载。像资源包一样,数据包由一个pack.mcmeta文件和一个名为data的根文件夹组成。然后,再次像资源包一样,data文件夹包含数据包包含的各种命名空间的子文件夹;每个命名空间都是一个子文件夹。例如,一个ID为coolmod的模组的数据包可能包含一个coolmod命名空间,但可能另外包括其他命名空间,例如minecraft。
NeoForge在创建新世界时自动应用所有模组数据包。目前无法禁用模组数据包。然而,大多数数据文件可以被具有更高优先级的数据包覆盖(从而通过用空文件替换它们来移除)。可以通过将额外的数据包放置在世界datapacks子文件夹中,然后通过/datapack命令启用或禁用来启用或禁用它们。
目前没有内置的方法将一组自定义数据包应用到每个 世界。然而,有许多模组实现了这一点。
数据包可能包含影响以下内容的文件夹和文件:
| Folder Name | Contents |
|---|---|
advancement | 进度 |
damage_type | 伤害类型 |
loot_table | 战利品表 |
recipe | 配方 |
tags | 标签 |
neoforge/data_maps | 数据映射 |
neoforge/loot_modifiers | 全局战利品修改器 |
dimension, dimension_type, structure, worldgen, neoforge/biome_modifier | 世界生成文件 |
此外,它们还可能包含一些与命令集成的系统的子文件夹。这些系统很少与模组一起使用,但无论如何值得一提:
| 文件夹名称 | 内容 |
|---|---|
chat_type | 聊天类型 |
function | 函数 |
item_modifier | 物品修改器 |
predicate | 谓词 |
pack.mcmeta
另请参阅:Minecraft Wiki上的pack.mcmeta(资源包)和pack.mcmeta(数据包)
pack.mcmeta文件保存资源包或数据包的元数据。对于模组,NeoForge使此文件过时,因为pack.mcmeta是合成生成的。如果您仍然需要pack.mcmeta文件,完整的规范可以在链接的Minecraft Wiki文章中找到。
数据生成(Data Generation)
数据生成,俗称datagen,是一种以编程方式生成JSON资源文件的方法,以避免手动编写它们的繁琐且容易出错的过程。这个名称有点误导性,因为它适用于资产和数据。
Datagen通过数据运行配置运行,该配置与客户端和服务器运行配置一起为您生成。数据运行配置遵循模组生命周期,直到注册事件触发后。然后触发GatherDataEvents之一,您可以在其中以数据提供器的形式注册要生成的对象,将所述对象写入磁盘,并结束该过程。
有两个子类型在物理端上运行:GatherDataEvent.Client和GatherDataEvent.Server。GatherDataEvent.Client可能包含所有要生成的提供器。另一方面,GatherDataEvent.Server可能仅包含用于生成数据包条目的提供器。
关于如何注册您的提供器有两种建议。前者是在GatherDataEvent.Client中注册所有提供器,并使用runClientData任务生成数据。后者是将客户端提供器注册到GatherDataEvent.Client,将服务器提供器注册到GatherDataEvent.Server,分别通过运行runClientData和runServerData任务生成它们。
由于MDK通过设置默认的clientData配置使用前一种解决方案,所有显示的示例将通过将所有提供器注册到GatherDataEvent.Client来使用前一种方法。
所有数据提供器都扩展DataProvider接口,通常需要重写一个方法。以下是Minecraft和NeoForge提供的重要数据生成器列表(链接的文章添加了更多信息,例如辅助方法):
| 类 | 方法 |
|---|