『模组开发日记』之修复在游戏中合成物品无法在配方书中解锁配方的bug

本文最后更新于 2025年9月14日 下午

关于如何解决游戏中配方书解锁的问题


发现问题

由于在模组开发过程中遇到在配方书中无法解锁配方的问题

寻找解决办法

但是在我测试很多次之后还是找不到解决办法

最终在群友的点拨下终于知道是怎么回事了

问题解决过程

问题出在配方编写的程序中,因为我使用的是自动数据生成(这样比较方便不用自己手搓json)

在我原本的配方编写中是这样的

这样写导致数据生成的时候json文件中的recipe和recipes中的id显示是minecraft

这就是导致配方书中无法解锁我的模组配方的罪魁祸首


然后在我问问题过程中有人说我这个Identifier里都都没有namespace

后来我翻了一下源码之后发现

原来在下面的offerTo方法里的Identifier有俩构造方法,一个是没指定namespace,那生成的json文件中的recipe和recipes就是默认minecraft,所以指定namespace就是行了,namespace就是mod_id


修改之后问题完美解决,游戏中拾取模组物品也会解锁相应配方了


后续代码优化

但有一些配方不是像上面那样工作台合成的,比如熔炉,或者是九合一配方

这些配方原版是通过自定义了特殊的方法来给熔炉这些特殊配方

解决办法也很简单,只要重写原版的方法然后修改其Identifier中的namespace为自己的模组id再调用重写的方法就行了(下面以九合一的配方示例)

1
2
3
4
5
6
7
8
9
//9>1
ShapedRecipeJsonBuilder.create(compactingCategory, compactItem)
.input(Character.valueOf('#'), baseItem)
.pattern("###")
.pattern("###")
.pattern("###")
.group(compactingGroup)
.criterion(RecipeProvider.hasItem(baseItem), RecipeProvider.conditionsFromItem(baseItem))
.offerTo(exporter, new Identifier("test-mod", compactingId));

这样再调用该方法就可以生成正确的json文件了


后记

其实自己后面想想这个问题其实也不是很难,就没看懂Identifier中的两个构造方法的含义是什么

也是被自己蠢到了

“一花一世界,一叶一菩提”


版权所有 © 2025 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/


『模组开发日记』之修复在游戏中合成物品无法在配方书中解锁配方的bug
http://example.com/2025/09/14/『模组开发日记』之修复在游戏中合成物品无法在配方书中解锁配方的bug/
作者
云梦泽
发布于
2025年9月14日
更新于
2025年9月14日
许可协议