首发于Enaium的个人博客
前言
当你在开发Fabric模组时,你可能会遇到这样的情况:你修改了模组的资源、数据或者代码,但是你需要重启游戏才能看到效果。这样的话,你的开发效率就会大大降低。所以,这篇文章就是为了解决这个问题而写的,不过需要注意的是,代码部分需要以Debug模式运行,每次修改后都需要重新编译一下,IDEA
的快捷键就是Ctrl+Shift+F9
。
热重载资源
使用F3+T
快捷键可以重载资源。
比如这里我给物品添加一个纹理:
热重载资源
使用/reload
命令可以重载资源。
比如这里我修改一个合成表:
diff
@@ -1,9 +1,8 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
- "EEE",
- "EEE",
- "EEE"
+ "EE",
+ "EE"
],
"key": {
"E": {
热重载代码
我们这里修改一个按钮的位置,然后到IDEA
的源码文件中按下Ctrl+Shift+F9
,然后就可以看到效果了。
diff
@@ -12,6 +12,6 @@
@Override
protected void init() {
addDrawableChild(ButtonWidget.builder(Text.literal("Button"), (button) -> {
- }).dimensions(0, 0, 50, 20).build());
+ }).dimensions(100, 100, 50, 20).build());
}
}
这里需要点击一下reload
按钮。
之后重新打开界面就可以看到效果了。
热重载Mixin
这个比较特殊,需要添加agent
参数。
首先找到项目中对应的mixin
依赖位置,之后给启动任务添加一个jvm
参数。
groovy
tasks.named("runClient", JavaExec) {
jvmArgs("-javaagent:C:\\Users\\Enaium\\.gradle\\caches\\modules-2\\files-2.1\\net.fabricmc\\sponge-mixin\\0.12.5+mixin.0.8.5\\8d31fb97c3e0cd7c8dad3441851c523bcfae6d8e\\sponge-mixin-0.12.5+mixin.0.8.5.jar")
}
当然这个方法有点麻烦,需要手动的寻找jar
包的位置,能不能让万能的Gradle
自动帮我们找到并添加呢?答案是肯定的。
这里afterEvaluate
也就是在Gradle
构建完成后执行,configurations.runtimeClasspath
就是运行时的依赖,forEach
就是遍历,tasks.named("runClient", JavaExec)
就是获取启动任务,jvmArgs("-javaagent:${file.absolutePath}")
就是添加jvm
参数。
groovy
afterEvaluate {
configurations.runtimeClasspath.forEach { file ->
if (file.name.startsWith("sponge-mixin")) {
tasks.named("runClient", JavaExec) {
jvmArgs("-javaagent:${file.absolutePath}")
}
}
}
}
这里依旧是修改一个按钮的位置。
diff
@@ -26,6 +26,6 @@
MinecraftClient.getInstance().execute(() -> {
MinecraftClient.getInstance().setScreen(new MyScreen());
});
- }).dimensions(0, 0, 50, 20).build());
+ }).dimensions(100, 0, 50, 20).build());
}
}