Fabric模组开发中4个热重载的方法

首发于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());

     }

 }
相关推荐
工程师老罗2 小时前
Image(图像)的用法
java·前端·javascript
leo_messi942 小时前
2026版商城项目(一)
java·elasticsearch·k8s·springcloud
美味蛋炒饭.2 小时前
Tomcat 超详细入门教程(安装 + 目录 + 配置 + 部署 + 排错)
java·tomcat
dreamxian3 小时前
苍穹外卖day11
java·spring boot·后端·spring·mybatis
Veggie263 小时前
【Java深度学习】PyTorch On Java 系列课程 第八章 17 :模型评估【AI Infra 3.0】[PyTorch Java 硕士研一课程]
java·人工智能·深度学习
weisian1513 小时前
Java并发编程--19-ThreadPoolExecutor七参数详解:拒绝Executors,手动掌控线程池
java·线程池·threadpool·七大参数
csdn5659738503 小时前
Java打包时,本地仓库有jar 包,Maven打包却还去远程拉取
java·maven·jar
Demon_Hao3 小时前
JAVA通过Redis实现Key分区分片聚合点赞、收藏等计数同步数据库,并且通过布隆过滤器防重复点赞
java·数据库·redis
华科易迅3 小时前
Spring装配对象方法-注解
java·后端·spring
庄周的大鱼4 小时前
分析@TransactionalEventListener注解失效
java·spring·springboot·事务监听器·spring 事件机制·事务注解失效解决