开发环境构建以及配置
提醒一下
本教程相当于是我在写笔记
在遇到问题的时候可以选择,先阅读fabricmc官网的文档
以及通过工具如AI,chatGPT去搜索一下,或者去必应一下
- 也可以先去b站搜索一下,b站上有很多大佬,可以去学习一下
- 本教程适用于Minecraft 1.21 Fabric的模组开发,不是Java教程。在开始之前也请先学习Java,具有一定的Java基础后再来学习
- 在此真诚感谢北山大佬的模组开发教程
准备工作
安装JDK21
由于Minecraft从1.20.5开始就采用了Java21来编写,所以说我们开发1.21的模组自然要采用Java21。这里提供的是Oracle JDK21的下载地址,你也可以选择其他JDK21的版本。
安装的路径一般不用改,除非你C盘真的塞不下了,再改到其他地方去。
JDK下载安装地址:JDK21
环境变量配置
老生常谈
安装好JDK21后,我们需要配置环境变量。其实不配置也可以,但是需要你在IDEA中配置。
我们先找到系统变量,Win11的位置在:设置
-> 系统
-> 系统信息
-> 高级系统设置
-> 环境变量
。
然后在系统变量中新建一个JAVA_HOME
变量,变量值为你的JDK21的安装路径,如C:\Program Files\Java\jdk-21
。
然后再新建一个CLASSPATH
变量,变量值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
。这样就配置好了JDK21的环境变量。
安装IDEA
IDEA是一个非常好用的IDE,分专业版
和社区版
,这里我们就选择社区版就好,反正是免费的。
IDEA的安装也很简单,直接下载安装包,然后一路下一步就可以了。安装过程中有一步是选择添加"bin"文件夹到PATH
,这个选项可以勾选,但需要重启
才会生效。
IDEA下载链接:IDEA
Fabric 开发模板框架文件生成
Fabric提供了一个模板框架文件生成器,可以帮助我们快速生成一个Fabric模组的模板文件。
然后我们来看里面的一些设置:
- Mod Name
这个是模组的名字,可以按照你的需求填写,比如TutorialMod。这个名字在生成的文件中,会变成我们的我们之后常说的modid。如果你的模组名字中间有空格,那么生成的文件中会自动把空格替换成-。比如说Tutorial Mod会变成tutorial-mod。
注意,modid一旦生成就不要乱改,否则会导致模组无法正常运行。
Package Name
这个是包名,一般是com.你的名字.模组名。一般就是你的域名倒过来,然后加上模组名。Minecraft Version
显然易见,这个是我们要开发的Minecraft版本,这里我们选择1.21.x。
Advanced Options
勾选Data Generation
,这个是生成数据包的,我们后面会用到。不勾选
Split client and common sources
,这个是分离客户端和服务端源码,我们不需要这个,因为我们的模组基本上是在服务端上运行的(假设你开了个服务器加了这个模组),模组内的运算都是在服务器上完成,再发回客户端的。另外的两个,其中一个是Kotlin Programming Language,如果你会kotlin,可以勾选。
另一个是Mojang Mappings,这个是Mojang的官方映射,我们不需要这个,因为我们的模组是基于Fabric的,Fabric已经提供了yarn映射。本教程也是基于Fabric的yarn映射,如果你使用Mojang映射,有些方法名、类名可能会不一样,请自行斟酌。
一切准备完成后,我们点击下方的下载按钮即可下载模板文件。并将它解压到你的工作目录。
初始化项目
接下来,我们用IDEA打开我们的项目。然后它将自动进行Gradle建构。此过程强烈建议使用加速器
,不然很容易超时导致建构失败。当然,你可以将gradle的下载源改为腾讯的镜像源或其他镜像源
- 直接下载gradle
- 通过腾讯镜像站直接下载
https://mirrors.cloud.tencent.com/gradle
然后设置好环境变量和IDEA里的构建设置后就流畅了
- 通过腾讯镜像站直接下载
- 替换镜像源(推荐)
- 打开项目中
gradle
->wrapper
->gradle-warapper.properties
配置文件
替换distributionUrl
的值为镜像站地址如https://mirrors.cloud.tencent.com/gradle/gradle-8.8-bin.zip
- 打开项目中
一些idea的配置
在等待Gradle建构的时候,我们可以先进行一些小设置。
IDEA默认是英文的,我们可以安装一个中文插件,这样IDEA的界面就会变成中文的了(虽然我比较喜欢看不懂英语然后受罪)。方法:File
-> Settings
-> Plugins
-> 搜索Chinese (Simplified) Language Pack / 中文语言包
-> 安装。
AI辅助编程的插件也可以安装一下,这样可以更快地编写代码。方法:File
-> Settings
-> Plugins
-> 搜索Copilot
或者CodeGeeX
-> 安装。前者是GitHub的AI插件,后者是清华的,也可以选择通义灵码等,如果你购买了Copilot,那么就安装Copilot。
翻译插件也可以安装一下,这样可以翻译一些英文的文档。方法:File
-> Settings
-> Plugins
-> 搜索Translation
-> 安装。
检查
当Gradle建构完成后,我们可以检查一下文件是否有问题。看看是否有报错的地方,一般是不会有的。
检查项目结构:文件
-> 项目结构
,快捷键Ctrl+Alt+Shift+S
,检查项目设置的项目中的SDK,是否为JDK21。
检查Gradle JVM:文件
-> 设置
-> 构建、执行、部署
-> 构建工具 -> Gradle
,检查Gradle JVM是否为JDK21。
确保以上两个地方都是JDK21,那一般就不会出问题。
如果运行时出现不支持发行版本21这类问题,基本上是上面两个出问题了,或者JDK21出问题了。
运行genSource
这个是Gradle的一个task,我们可以在IDEA的右侧找到Gradle
,然后找到Tasks
-> fabric
-> genSource
,然后双击运行即可。这个用于获取源代码的,方便我们查看源代码。
这个命令执行完后,会在build/generated/source/genconfig/main
目录下生成一个fabric_mod.json
文件,这个文件是模组的配置文件,我们可以在这里配置模组的一些信息,比如模组的名称、描述、作者、依赖等。
其他配置文件
gradle.properties
这个文件是Gradle的配置文件,里面有一些Gradle的配置。1
2
3# Done to increase the memory available to gradle.
org.gradle.jvmargs=-Xmx1G
org.gradle.parallel=true比如说
org.gradle.jvmargs=-Xmx1G
,这个是Gradle的最大内存,可以根据自己的电脑配置来调整。而
org.gradle.parallel=true
是并行编译,这个可以加快编译速度。这个是Fabric的配置,我们可以在这里修改Minecraft版本、yarn映射版本、loader版本。
1
2
3
4
5# Fabric Properties
# check these on https://fabricmc.net/develop
minecraft_version=1.21
yarn_mappings=1.21+build.1
loader_version=0.15.11当版本有更新时,我们可以在这里修改,然后重新建构项目即可。版本信息可以在这里给出的网站上找到。
这个是模组的配置,我们可以在这里修改模组的版本、包名、模组名。
1
2
3
4
5
6
7
8# Mod Properties
mod_version=0.1-1.21
maven_group=com.besson.tutorialmod
archives_base_name=tutorialmod
# Dependencies
fabric_version=0.100.3+1.21build.gradle
- 这个文件是Gradle的构建文件,里面有一些Gradle的构建配置。
1
2
3
4plugins {
id 'fabric-loom' version '1.7-SNAPSHOT'
id 'maven-publish'
} - 这个是Gradle的插件,我们可以在这里添加一些插件。而fabric-loom是Fabric的插件,其版本也可以在上面的网站上找到。这个是Gradle的依赖,我们可以在这里添加一些依赖。也是为我们模组添加的依赖,一般的可以被当作lib使用的模组的Wiki中会告诉我们如何添加。后续我们也可以举一些例子。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18repositories {
// Add repositories to retrieve artifacts from in here.
// You should only use this when depending on other mods because
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.
}
dependencies {
// To change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
}
LICENSE
这是许可证文件,也是开源项目所遵循的开源协议文件。我们可以在这里修改许可证的内容。具体的内容你可以自行百度,把他们复制到这个文件中即可。
fabric.mod.json
路径是src/main/resources/fabric.mod.json
,这个是模组的描述文件,里面有一些模组的信息。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18{
"schemaVersion": 1,
"id": "tutorialmod",
"version": "${version}",
"name": "TutorialMod",
"description": "这是描述!",
"authors": [
"极度天下"
],
"contact": {
"homepage": "https://fabricmc.net/",
"sources": "https://github.com/FabricMC/fabric-example-mod"
},
"license": "CC0-1.0",
"icon": "assets/tutorialmod/icon.png",
"environment": "*",
......
}id
是模组的ID,就是modid
version
是模组的版本,这个是在gradle.properties
中配置的
name
是模组的名字
description
是模组的描述
authors
是作者,可以有多个
contact
是联系方式,一般是GitHub地址,当然这里还有一个homepage
,假设你的模组有一个专门的网站,那可以写上
license
是许可证,这个是在LICENSE
文件中配置的
icon
是模组的图标,这个是在assets/tutorialmod/icon.png
中配置的
environment
是环境,一般是*
,表示所有环境。
下面,我们要为其中的entrypoints
添加一些内容。1
2
3
4
5
6
7
8
9
10
11
12
13......
"entrypoints": {
"main": [
"com.jidutianxia.tutorialmod.TutorialMod"
],
"fabric-datagen": [
"com.jidutianxia.tutorialmod.TutorialModDataGenerator"
],
"client": [
"com.jidutianxia.tutorialmod.TutorialModClient"
]
}
......
TutorialModClient.java
路径是src/main/java/com/besson/tutorialmod/TutorialModClient.java
1
2
3
4
5
6public class TutorialModClient implements ClientModInitializer {
public void onInitializeClient() {
}
}
这个类要实现ClientModInitializer
接口,然后重写onInitializeClient
方法。这个方法会在客户端初始化的时候被调用。
TutorialMod.java
路径是src/main/java/com/besson/tutorialmod/TutorialMod.java
,这个是我们的主类文件,它会在我们游戏启动的时候被调用。我们可以在这里添加一些初始化代码。
1 | public class TutorialMod implements ModInitializer { |
MODID给单独提出来,这样在后续的代码中,我们可以直接使用TutorialMod.MOD_ID
来获取MODID。而MODID也是我们之后用的比较多的字段。TutorialMod.MOD_ID
在1.21.1之后好像直接给写好了的,反正就是一个公共静态常量
重新建构
因为我们改了一些文件,所以我们需要重新建构一下项目。我们可以找到一个大象带一个重新加载的图标,点击它即可进行重构。
或者点右边大象点刷新就是
查看源代码/资源文件
基本上就是一些idea常用快捷键,用没有用过的都很快上手
查看源代码,我们可以直接利用IDEA的随处搜索,在IDEA界面的右上角,快捷键double Shift
(两下shift),然后输入我们要查找的类名即可。
一些Minecraft的类我们可以按住Ctrl
,然后点击类名,就可以直接跳转到Minecraft的源代码中。注意,也许你打开的时候,这个文件的后缀名是.class
,我们可以点击选择源
,将我们的源代码文件夹选择为一个带source
的,一般就是在蹦出来的窗口中,前提是运行了genSource
。
另外就是最简单粗暴的方法,直接翻外部库
。我们找到Gradle: net.minecraft:minecraft-merged-4eb0fe4bb6:1.21-net.fabricmc.yarn.1_21.1.21+build.1-v2
。在这个里面,我们可以找到Minecraft的源代码。net
文件夹下存放的一般是Minecraft的源代码,我们可以直接查看。resource
下的assets
和data
文件也是我们可以查看的东西。assets是资源文件,data是数据文件。
启动!
折腾完以后,我们就可以启动我们的游戏了。我们可以在IDEA的右上角的运行中,找到Minecraft Client
运行,也可以找到gradle
任务中的runClient
运行。
当游戏可以正常运行的时候,那么恭喜你!你已经完成了第一步!
常见问题F&Q
- Gradle下载慢怎么办?
- 可以使用加速器,或者将gradle的下载源改为腾讯、阿里云、清华的镜像源。
- Gradle建构超时
- 挂加速器,或者改为腾讯、阿里云、清华的镜像源。
- Gradle建构失败
- 删除.gradle文件夹,然后重新建构(IDEA抽风的时候可以试试,一般是索引编制出问题了)。
也可以删除C盘的.gradle文件夹,然后重新建构(不过你得重新下载所有gradle文件)。
- 不支持发行版本21
- 检查JDK21是否配置正确
结合上面的检查,检查项目结构和Gradle JVM
- 出现net.minecraft.util.InvalidIdentifierException: Non [a-z0-9_.-] …
- 只限定在本篇教程中的话,那么一般就是你改动了某些东西,比如说modid,注意modid和其他文件夹不能有大写字母,更不能有中文!
- 能不能用其他的IDE
- 当然可以,只要你用得习惯,编译器都是一样的。
- 能不能用Python写?
- 不能!不能!不能!
- 这也是我遇到过的最离谱的问题。能问出这个问题的,我只能说你是个人才