MC Forge 开发笔记00-准备工作
提醒
在开发mod前,首先应该知道要实现的功能是否需要一个mod来解决。
-
一部分简单的逻辑,或者修改合成配方,用数据包即可。
-
如果只是修改模型、贴图、语言文件,用资源包(材质包)即可。
排除上面的情况之后,就要正式开始制作mod了!
准备工作
编程相关
作为mod开发者,需要一定的Java/Kotlin基础。
当然,编程语言基本都是互通的,所以有其它语言的基础也会有很大帮助没有也没太大关系。
只要你有举一反三、复制粘贴、看懂单词的能力,开发mod也不是什么难事。
软件下载
开发Java/Kotlin的工具,首先推荐Intellij Idea。个人开发者推荐使用社区版(Community)或者使用一些破解工具。
下载并安装完成后,打开Idea,在左边找到Plugins,下载Minecraft Development插件。
在同样的位置,可以找到官方支持的简体中文插件。为了保持统一,这里的图片中不使用这些插件(如果下载了也可以根据位置对照)。
创建mod项目
-
首先创建项目(
New Project),根据以下提示填写基本信息。
由上到下:
Name:项目名称,一般为Mod名称。Minecraft Version:Mod对应的Minecraft版本。Forge Version:Mod对应的Forge版本。Mod Id:由数字(0~9),字母(大小写),下划线(_)组成,在游戏内按下F3+H可以看到每个物品对应的Mod ID(例如,泥土minecraft:dirt对应minecraft,机械手create:deployer对应create),一个Mod ID只能对应一个mod。Mod Name:Mod名称,可随意指定。Main Class:Mod的入口(主类),我的习惯是设置为Main。其中,com.example_domain是域名的倒置,命名规则和Mod ID一致。com.example_domain.example_mod是包名,Main是类名。
注意:如果要修改原版的代码(通常需要),可以提前勾选上Mixin。
-
等待构建完成,如果构建失败可以使用镜像源,具体见镜像配置。
-
删除
Config.java和Mod主类中多余的内容,稍作修改之后:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15package com.example_domain.example_mod;
import com.mojang.logging.LogUtils;
import net.minecraftforge.fml.common.Mod;
import org.slf4j.Logger;
// The value here should match an entry in the META-INF/mods.toml file
public class Main {
// Define mod id in a common place for everything to reference
public static final String MOD_ID = "example_mod";
// Directly reference a slf4j logger
public static final Logger LOGGER = LogUtils.getLogger();
}代码部分的详细解释见代码解释部分。
操作
- 运行客户端:选择
runClient。 - 运行服务端:选择
runServer(通常不会选)。 - 导出为Jar文件:在右边的Gradle中,依次选择
Tasks->build->build,等待之后在左边文件夹build/libs中可以找到Mod的jar文件。 - 修改mod版本:在
gradle.properties中找到mod_version,修改即可。切忌把版本号改小!
完成
至此,一个Minecraft Mod项目就制作完毕了。
虽然目前这个Mod还没有任何功能,但是已经可以改变这个世界的一切了,不是吗?
代码解释
1 | package com.example_domain.example_mod; |
每条语句之后要有分号!!!
逐行:
-
package之后的内容和包名保持一致。 -
import暂时不用关注。 -
@Mod(string):@Mod是注解,放在类的定义之前,表示下面的类是Mod主类,string是Mod ID。 -
public class Main:定义一个类,Main与上面的类名保持一致,大括号中是这个类的内容。它会被上一行标记为Mod主类。 -
public static final String MOD_ID:定义一个变量,它具有如下性质:-
public:在任何地方都可以访问。 -
static:不需要创建一个对象(实例化),使用类名.变量名的方式就可以访问(如Main.MOD_ID) 。 -
final:变量不可以被修改(常量)。 -
String:变量的类型为字符串(可以理解为一堆字就是字符串)。每个变量都要有类型,以下是常用的类型:int:整型,存放整数。float:浮点型(可以理解为小数)。double:双精度浮点型,比float更精确。String:字符串。
-
MOD_ID:表示这个变量的名称为MOD_ID。
-
-
"example_mod":表示一个字符串,所有的字符串都要使用双引号。 -
LOGGER:日志记录器。可以很方便的调试程序,分不同的等级,常用的有info、error和debug。用法:LOGGER.info(string),string表示日志输出的内容(字符串)。 -
//后表示注释,给人看的东西,随便写其实很少有人写。
吐槽
怎么一不小心写了这么多…?