GuiRecipe Accessor
基本信息
mixin.GuiRecipe_Accessor —— 本分类唯一的 mixin,用 @Invoker
把 NEI GuiRecipe 的私有静态方法暴露出来。
@Mixin(value = GuiRecipe.class, remap = false)
public interface GuiRecipe_Accessor {
@Invoker("getCurrentRecipeId")
static RecipeId invokeGetCurrentRecipeId(GuiScreen gui) {
throw new UnsupportedOperationException();
}
}
| 项 | 值 |
|---|---|
| 目标类 | codechicken.nei.recipe.GuiRecipe(第三方 NEI 类) |
remap |
false —— 目标不是 Minecraft 映射类,不做混淆重映射 |
| 暴露方法 | getCurrentRecipeId(GuiScreen) —— static |
| 调用形式 | GuiRecipe_Accessor.invokeGetCurrentRecipeId(Minecraft.getMinecraft().currentScreen) |
Mixin 配置
src/main/resources/mixins.neicustomdiagram.json:
{
"required": true,
"minVersion": "0.0.1",
"package": "com.github.dcysteine.neicustomdiagram.mixin",
"target": "@env(DEFAULT)",
"compatibilityLevel": "JAVA_8",
"mixins": [],
"client": ["GuiRecipe_Accessor"],
"server": []
}
| 字段 | 值 | 判读 |
|---|---|---|
required |
true |
目标类缺失 → 启动即崩 |
mixins |
[](空数组) |
无通用注入 |
client |
["GuiRecipe_Accessor"] |
唯一注入,客户端侧 |
server |
[] |
服务端无注入 |
package |
com.github.dcysteine.neicustomdiagram.mixin |
与实际目录一致 |
⚠️ 数 JSON 会得 0 的陷阱:这里
mixins数组是空的, 唯一的注入在client数组里。必须同时看两个数组。 与coretweaks靠MixinConfigPlugin动态注册的情况不同 —— 本 mod 是静态 JSON 声明,没有plugin字段。
依赖安全性
目标 GuiRecipe 来自 NEI,而 NEI 是 @Mod 里声明的
required-after:NotEnoughItems 硬依赖 —— 因此目标类必然存在,
required: true 是安全的。缺少 addRequiredMod 保护的
第三方目标 + required: true 组合才会造成缺 mod 时启动崩溃
(参见 infohud 的缺陷)。
唯一调用点
StorageListener 的 clientStorageUpdate ——
拿到当前 NEI 配方 ID,判断刷新目标。
相关条目
源码
src/main/java/com/github/dcysteine/neicustomdiagram/mixin/GuiRecipe_Accessor.javasrc/main/resources/mixins.neicustomdiagram.json