Fabric 1.20.1中用@Accessor访问@Unique字段的问题求助
Minecraft Fabric 1.20.1 模组开发:@Accessor访问@Unique字段的Mixin加载错误解决
核心问题分析
错误日志明确指出两个关键问题:
- Accessor类未在
bettercampfires.mixins.json中注册,Fabric无法识别并加载它 - Accessor的目标错误指向了自定义的
CampfireBlockEntityMixin,而非被注入的原始类CampfireBlockEntity——@Unique标记的字段最终是注入到CampfireBlockEntity实例中的,Mixin类仅作为字段定义的载体
修复步骤
1. 修正Accessor的目标类
将CampfireBlockEntityAccessor的@Mixin目标改为原始的CampfireBlockEntity类,而非自定义Mixin:
@Mixin(CampfireBlockEntity.class) public interface CampfireBlockEntityAccessor { @Accessor(value = "campfireBurntime", remap = false) int getCampfireBurntime(); @Accessor(value = "campfireBurntime", remap = false) void setCampfireBurntime(int burnTime); }
2. 在mixins.json中注册Accessor
编辑src/main/resources/bettercampfires.mixins.json,将Accessor类的全限定名添加到mixins数组中:
{ "required": true, "package": "com.trongthang.bettercampfires.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ "CampfireBlockEntityMixin", "CampfireBlockFuel", "CampfireBlockEntityAccessor" ], "injectors": { "defaultRequire": 1 } }
3. 验证现有逻辑
CampfireBlockFuel中的类型转换逻辑无需修改,只要确保CampfireBlockEntityMixin已在mixins.json中注册(你当前的代码已满足),campfireBurntime字段就能被正确访问。
关键注意事项
@Unique字段名必须和Accessor中的value参数完全一致,大小写敏感remap = false必须保留,因为这是自定义字段,无需映射到Minecraft的中间名称
内容的提问来源于stack exchange,提问作者Trong Thang
相关产品推荐
相关产品推荐

