老外催我升级Minecraft模组版本

发布时间:
更新时间:
👀 阅读量:

没想到有老外用我的模组

距离上一次提及我的模组已经是很久以前的事情了,Webmapview 一个我的世界内置网页地图浏览 Fabric 模组

webmapview

我本以为不会有多少人用的,没想到有老外在 GitHub 上催我升级模组版本。 催更

Update to newer versions? #1

哈哈,我当时想五一之后再更的,没想到现在都六月底了。我还没行动,又有老外来催问,那我也没必要再拖了,开始行动!

报错好难处理

Idea报错

直接 git clone 下来,我需要改各种依赖,比如说 JDK、Gradle,改了发现还是报错,遂作罢,打算重新创建项目。

重新构建项目

添加一些重要信息,MCEF 依赖:

fabric.mod.json
"depends": {
"fabricloader": ">=${loader_version}",
"fabric": "*",
"minecraft": "${minecraft_version}",
"mcef": "2.1.6-1.21.4"
},
"custom": {
"modmenu": {
"links": {
"modmenu.kofi": "https://ko-fi.com/xingwangzhe/gallery",
"modmenu.afadian": "https://afdian.com/a/xingwangzhe"
},
"option.modmenu.show_libraries": ["mcef"]
}
}
build.gradle
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}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
modCompileOnly 'com.cinemamod:mcef:2.1.6-1.21.4'
modRuntimeOnly 'com.cinemamod:mcef-fabric:2.1.6-1.21.4'
}

运行时

由于我的模组依赖上游的 MCEF,所以我在 Idea 打开时需要先下载 MCEF: MCEF下载

然后发现不对,上游的 MCEF 版本还在 1.21.4,但是它仓库的 1.21.5 版本却显示用 1.21.4 的依赖,看来被迷惑了,所以我改回了 1.21.4。

UPDATE 1.21.5/6 #121 迷惑啊

1.21 改 API 了!

在升级到 1.21.4 的过程中,我发现了几个重要的 API 变化,这些变化主要集中在渲染系统和客户端事件系统上。

渲染系统的重大更改

最显著的变化是在 BasicBrowser.java 中的渲染方法。在 1.21.* 中,Minecraft 的渲染系统进行了重构:

BasicBrowser.java
@Override
public void render(DrawContext guiGraphics, int i, int j, float f) {
super.render(guiGraphics, i, j, f);
// 确保浏览器已初始化
if (browser == null || browser.getRenderer() == null) {
guiGraphics.drawCenteredTextWithShadow(textRenderer, "浏览器未初始化",
width / 2, height / 2, 0xFF0000);
return;
}
// 获取纹理ID
int textureId = browser.getRenderer().getTextureID();
if (textureId <= 0) {
// 显示加载提示和调试信息
guiGraphics.fill(BROWSER_DRAW_OFFSET, BROWSER_DRAW_OFFSET,
width - BROWSER_DRAW_OFFSET, height - BROWSER_DRAW_OFFSET,
0xFF333333);
guiGraphics.drawCenteredTextWithShadow(textRenderer, "正在加载浏览器...",
width / 2, height / 2 - 10, 0xFFFFFF);
return;
}
// 使用原始MCEF示例的渲染方式
RenderSystem.setShaderTexture(0, textureId);
RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder buffer = tessellator.getBuffer();
BufferBuilder buffer = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);
var matrix = guiGraphics.getMatrices().peek().getPositionMatrix();
float x1 = BROWSER_DRAW_OFFSET;
float y1 = BROWSER_DRAW_OFFSET;
float x2 = width - BROWSER_DRAW_OFFSET;
float y2 = height - BROWSER_DRAW_OFFSET;
// 使用原始MCEF示例的纹理坐标和颜色
buffer.vertex(matrix, x1, y2, 0).texture(0.0f, 1.0f).color(255, 255, 255, 255);
buffer.vertex(matrix, x2, y2, 0).texture(1.0f, 1.0f).color(255, 255, 255, 255);
buffer.vertex(matrix, x2, y1, 0).texture(1.0f, 0.0f).color(255, 255, 255, 255);
buffer.vertex(matrix, x1, y1, 0).texture(0.0f, 0.0f).color(255, 255, 255, 255);
tessellator.draw();
BufferRenderer.drawWithGlobalProgram(buffer.end());
}

这个变化主要是因为 Minecraft 1.21.4 重构了渲染系统,Tessellator 的使用方式发生了变化:

  1. BufferBuilder 初始化:现在需要使用 tessellator.begin() 方法直接指定渲染模式和顶点格式
  2. 渲染结束:使用 BufferRenderer.drawWithGlobalProgram(buffer.end()) 替代了原来的 tessellator.draw()

鼠标滚轮事件 API 变化

鼠标滚轮事件的参数也发生了变化:

BasicBrowser.java
@Override
public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) {
if (browser != null && browser.getRenderer() != null) {
try {
browser.sendMouseWheel(mouseX(mouseX), mouseY(mouseY), delta, 0);
browser.sendMouseWheel(mouseX(mouseX), mouseY(mouseY), verticalAmount, 0);
} catch (Exception e) {
// 忽略浏览器交互错误,避免崩溃
}
}
return super.mouseScrolled(mouseX, mouseY, delta);
return super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount);
}

总结

会写Java不代表会写Java工程项目,就像会写c/c++不代表会写Cmakefile一样。我还是得练…

升级到 Minecraft 1.21.4 主要面临的挑战是:

  1. 渲染系统重构 - 需要适配新的 BufferBuilder API(这是最难的,我查资料,问 AI 问了好久才找到)
  2. 事件系统调整 - 客户端事件和鼠标事件的 API 变化
  3. 依赖管理 - 确保所有依赖都支持新版本(这个是第二难的)
  4. 错误处理 - 加强异常处理以提高稳定性

现在模组已经成功升级到 1.21.4,老外们应该满意了吧!😄

老外催我升级Minecraft模组版本

作者: xingwangzhe

本文链接: https://xingwangzhe.fun/posts/f8002f06

本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

留言评论

2000年1月1日星期六
00:00:00