Skip to content

项目结构

本页将介绍 Fabric 模组项目的结构以及项目中每个文件和文件夹的用途。

fabric.mod.json

fabric.mod.json 是向 Fabric Loader 描述你的模组的主要部分。 它包含了模组的 ID、版本、和依赖项等信息。

其中最重要的字段便是:

  • id:模组的 ID,它必须是独特的,不能和其他模组重复。
  • name:模组的显示名称。
  • environment:模组运行环境,可以是 client(仅客户端)、server(仅服务端)和 *(双端)。
  • entrypoints:模组提供的入口点,例如 mainclient 等。
  • depends:模组的依赖模组/库。
  • mixins:模组提供的 Mixin。

你可以在下面看到一个示例用的 fabric.mod.json 文件 —— 这是该文档的开发参考项目的 fabric.mod.json 文件。

参考项目 fabric.mod.json
json
{
	"schemaVersion": 1,
	"id": "fabric-docs-reference",
	"version": "1.0.0",
	"name": "Fabric docs reference",
	"icon": "assets/fabric-docs-reference/icon.png",
	"environment": "*",
	"entrypoints": {
		"main": [
			"com.example.docs.FabricDocsReference",
			"com.example.docs.event.FabricDocsReferenceEvents",
			"com.example.docs.command.FabricDocsReferenceCommands",
			"com.example.docs.effect.FabricDocsReferenceEffects",
			"com.example.docs.potion.FabricDocsReferencePotions",
			"com.example.docs.sound.FabricDocsReferenceSounds",
			"com.example.docs.damage.FabricDocsReferenceDamageTypes"
		],
		"client": [
			"com.example.docs.FabricDocsReferenceClient",
			"com.example.docs.rendering.RenderingConceptsEntrypoint",
			"com.example.docs.rendering.HudRenderingEntrypoint",
			"com.example.docs.client.command.FabricDocsReferenceClientCommands"
		],
		"fabric-datagen": [
			"com.example.docs.FabricDocsReferenceDataGenerator",
			"com.example.docs.damage.FabricDocsReferenceDamageTypesDataGenerator"
		]
	},
	"mixins": [
		"fabric-docs-reference.mixins.json",
		{
			"config": "fabric-docs-reference.client.mixins.json",
			"environment": "client"
		}
	],
	"depends": {
		"fabricloader": ">=0.15.3",
		"minecraft": "~1.20.4",
		"java": ">=17",
		"fabric-api": "*"
	}
}

入口点

如前所述,fabric.mod.json 文件包含一个名为 entrypoints 的字段 —— 该字段用于指定你的模组提供的入口点。

模组开发模板生成器默认创建 mainclient 入口点 —— main入口点用于双端通用部分,client 入口点用于客户端特定部分。 这些入口点将会在游戏启动时依次调用。

java
public class FabricDocsReference implements ModInitializer {
	// This logger is used to write text to the console and the log file.
	// It is considered best practice to use your mod id as the logger's name.
	// That way, it's clear which mod wrote info, warnings, and errors.
	public static final String MOD_ID = "fabric-docs-reference";
	public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);

	@Override
	public void onInitialize() {
		// This code runs as soon as Minecraft is in a mod-load-ready state.
		// However, some things (like resources) may still be uninitialized.
		// Proceed with mild caution.

		LOGGER.info("Hello Fabric world!");
	}
}

上面是一个简单的 main 入口点的使用示例,它在游戏开始时将消息打印到控制台(Log)。

src/main/resources

src/main/resources 用于存储模组的资源文件,例如纹理、模型和音效文件。

它也是 fabric.mod.json 和模组使用的 Mixin 配置文件的存放位置。

资源文件被存储在与资源包结构相似的结构中 —— 例如,方块的纹理将存放在 assets/modid/textures/block/block.png 中。

src/client/resources

src/client/resources 文件夹用于存储客户端特定的资源,例如仅在客户端使用的纹理、模型和音效。

src/main/java

src/main/java 文件夹用于存储模组的 Java 源代码 —— 它存在于客户端和服务端环境中。

src/client/java

src/client/java 文件夹用于存储客户端专属的 Java 源代码,例如渲染代码或客户端逻辑 —— 方块颜色提供程序等。