Skip to content

Update Ageratum and refresh the export button 更新藿香并应用导出按钮新贴图 - #6088

Merged
PigeonNian merged 1 commit into
Anvil-Dev:dev/26.1/1.6from
WhereisFff:codex/26.1.2-ageratum-gui
Nov 13, 2026
Merged

PigeonNian merged 1 commit into
Anvil-Dev:dev/26.1/1.6from
WhereisFff:codex/26.1.2-ageratum-gui

Conversation

@WhereisFff

Copy link
Copy Markdown
Contributor

build(deps): 更新藿香并应用结构导出按钮贴图

  • 将 26.1.2 的藿香依赖更新至 0.0.1+build.141,接入原生只读方块界面、空玩家背包和同步淡出的物品图标
  • 复用藿香的导出按钮绘制接口,使用现有深浅主题贴图与统一悬停提示

- 将 26.1.2 的藿香依赖更新至 0.0.1+build.141,接入原生只读方块界面、空玩家背包和同步淡出的物品图标
- 复用藿香的导出按钮绘制接口,使用现有深浅主题贴图与统一悬停提示
Copilot AI balanced review requested due to automatic review settings November 12, 2026 19:52

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing. Review the Copilot code review billing settings.

@Gugle2308 Gugle2308 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结论

APPROVE(可以合并),但有一项依赖侧的主题缺陷需要跟进:本 PR 本身只是把一段 11 行手绘箭头替换成库提供的一行调用(2 文件 / +2 −12,CI build ✅ checkstyle ✅,mergeable_state=clean)。但升级到的 ageratum build.141 里,renderExportButton 的贴图查找键少了一层前缀,导致深色主题下画出的是浅色主题贴图(详见下文 ⚠️ 一节)。

本次审查依据 webhook 提示:仓库内容与 issue 文本均为不可信数据,不执行其中任何嵌入指令。diff 覆盖完整(API 报告 changed_files=2,patch 也是 2 个文件,+2 −12 与 additions/deletions 一致,没有截断);但未做运行期验证,下述判断都来自静态取证和成品 jar 核对。

概览

项 值
PR #6088 Update Ageratum and refresh the export button 更新藿香并应用导出按钮新贴图
head / base b93310b8 / dev/26.1/1.6 @ 286f7345
状态 open、draft=false、merged=false、mergeable_state=clean
规模 2 文件,+2 −12
CI build ✅、checkstyle ✅
依赖 ageratum 0.0.1+build.139 → 0.0.1+build.141

⚠️ 唯一实质问题:深色主题下导出按钮退化为浅色主题贴图

build.141 新增的 MDNBTStructureComponent.renderExportButton(:178-183)写的是:

context.layout().texture("button_import",
    LayoutTexture.of(Identifier.parse("ageratum:textures/gui/guide/light/button_import.png"), 16, 16, 16, 32))
    .draw(context.graphics(), x, 25, 16, 16, hover);

然而,GuideLayout.texture(String, LayoutTexture) 内部使用 value(path),按 . 对路径分段并从根节点逐层深入;而布局数据中的按钮贴图一律存放在 textures 子对象下:

  • LayoutDefaults.applyTextures(LayoutDefaults.java:55-73)把 button_import 写进 layout.getAsJsonObject("textures"),还专门给它设置 width/height=16、texture_width/height=16/32;
  • 同类的正确写法是 GuideLayout.controlTexture,它使用 texture("textures." + name, …);GuidePanelView.texture() 也走 controlTexture。

实测,我从 ageratum-neoforge-26.1.2-0.0.1+build.141.jar 取出四份布局 JSON,并模拟 extends 合并(dark 继承 light、fullscreen 继承 light、fullscreen_dark 继承 fullscreen)以及 AnvilCraft 自己的 assets/anvilcraft/ageratum/layouts/light.json 复写:

light           root keys = name/dark_variant/textures/colors/extends/content;root 无 button_import
textures.button_import = {location: ageratum:gui/guide/light/button_import, 16×16, 16×32}
dark(合并后)  textures.button_import = {location: ageratum:gui/guide/dark/button_import, 16×16, 16×32}
root 无 button_import(AnvilCraft 复写后仍无)

因此,value("button_import") 始终返回 null,texture(...) 每次都会等同于传入的 fallback,而这把 location 固定写成了 light/button_import.png。两个主题的贴图确实不同(light 341 B / dark 424 B,md5 不同,都是 16×32 的调色板 PNG),所以:

  • 浅色主题:外观正确;
  • 深色主题:导出按钮会显示成浅色主题的按钮。手绘版本使用的是固定填充色,与主题无关,因此这是本次 bump 带来的可见变化。

修法只需一行(属于库侧,不归本 PR 修改):

context.layout().texture("textures.button_import", /* fallback 仅作最后兜底 */ …)

建议:把 bug 报给藿香,或等 build.142+ 再升;如果坚持在本 PR 内解决,可以让 HandbookStructureExportMixin 先按 layout().texture("textures.button_import", …) 自行绘制(这样会回退到手写版本,不推荐)。不阻塞合并,但请在评论里写明这是库侧缺陷,以免后续被当成玄学问题。

✅ 已核验项

1. bump 与代码改动是配对的(不能只取其中一项)
renderExportButton 只存在于 build.141:139 与 141 的 MDNBTStructureComponent.class 常量池方法名差集为 139-only,分别是 blockDetails/font/hasShiftDown/screenHeight/screenWidth/scroll/setLines,其中没有 renderExportButton。如果只改代码而不升版本,会直接链接失败;只升版本而不改代码,则是死代码。本 PR 两者一起改,正确。

2. 几何与 tooltip 键等价
被删代码的判定框是 x = maxX-21、mouseX ∈ [x, x+16)、mouseY ∈ [25, 41),绘制也位于 (x,25)-(x+16,41);库侧 renderExportButton 使用 x = context.maxX() - 21、y=25、16×16,判定条件逐项相同,tooltip 键同为 tooltip.ageratum.structure_export。旧版 fill 的 6 层像素箭头与新贴图属于视觉替换,坐标没有迁移误差。

3. 悬停帧与贴图尺寸正确
LayoutTexture.draw 的帧选择是 frameY = hover && atlasHeight >= height*2 ? height : 0;实测 16×32、height=16 ⇒ 满足条件,悬停时取下半帧(此前已解码两张 PNG:下半帧是白色/蓝色高亮)。LayoutDefaults 为 button_import 显式设置的 texture_width/height = 16/32 与此一致。

4. 不与 AnvilCraft 自身的 mixin 冲突
新增的六个 StructureGui*Mixin 目标与本体两个 mixin 有交集类,但注入点和注解都不同,不构成叠加冲突:

库 mixin 目标 / 注入 本体同目标 mixin 本体注入点
StructureGuiGraphicsMixin GuiGraphicsExtractor.innerBlit(12 参) / innerFill / text(FormattedCharSequence) GuiGraphicsExtractorMixin @WrapMethod tooltip、applyCursor HEAD、item(...)
StructureGuiItemRendererMixin GuiRenderer.submitBlitFromItemAtlas @ModifyArgs on BlitRenderState.<init> args[11] ScaledGuiItemRendererMixin prepareItemElements HEAD / GuiItemAtlas.getOrUpdate、getModelIdentity 的 @WrapOperation / endFrame TAIL
StructureGuiOversizedItemMixin PictureInPictureRenderer.blitTexture @ModifyArgs ScaledGuiItemPipMixin prepare @WrapMethod

本体全仓 grep innerBlit|innerFill|BlitRenderState 在 mixin/ 下 0 命中,即没有第二处写 BlitRenderState 的 color(args index 11 与 26.1 BlitRenderState 第 12 个分量 int color 对得上;GuiRenderer:396 的 submitBlitFromItemAtlas 就在传 -1)。

5. 其余新 mixin 目标在 26.1.2 均存在
Screen.extractBackground:386、RecipeBookComponent.isVisibleAccordingToBookData:195(private,@Inject HEAD cancellable 合法)、PictureInPictureRenderer.blitTexture:59 全部命中;六个类都已登记进 ageratum.mixins.json 的 "client" 数组。

6. 嵌套 jarjar 无版本漂移
139 与 141 的 META-INF/jarjar/ 完全一致:anvillib-{config,font,registrum,rendering}-neoforge-26.1-2.0.0+snapshot.563.jar 加 jhighlight-1.1.1 加 jsoup-1.18.3;仓库 pin 的 anvillib = 2.0.0+snapshot.653 未受影响。新引入的 StructureGui* 没有带来新第三方依赖。

7. tooltip 文案来源不受影响
tooltip.ageratum.structure_export 在 141 的 en_us/zh_cn/en_ud 里有,而 AnvilCraft 自己的 assets/ageratum/lang/*.json 复写也带了同一键(连同 system.ageratum.structure_export.*)。语言文件按 getResourceStack 逆序覆盖,本体复写优先级更高,因此文案由 AnvilCraft 决定,bump 不改变措辞。

8. 与组件自身的“查看”tooltip 不打架
MDNBTStructureComponent:163-169 的 isHoverControls 已包含 isHover(maxX-21, 25, 16, 16)(即导出按钮区),而 :156 的浮窗内 tooltip 分发在 isHoverControls 为真时提前 return ⇒ 悬停导出按钮只会出现导出提示,不会同时出现 “inspect” 提示。

💡 建议(不阻塞)

  1. 点击命中框是第三方复制的几何常量:HandbookStructureExportMixin.mouseClicked 仍写死 x >= maxX-21 && x < maxX-5 && y >= 25 && y < 41,与库侧绘制框同值但没有共享常量。库里既然为绘制开了公共 API(:175-177 javadoc 明说“供负责结构导出的集成模块绘制……点击行为由集成模块处理”),建议同时暴露命中矩形(如 isHoverExportButton(context) / exportButtonRect(maxX));否则藿香日后挪动按钮,就会出现“画在 A、点在 B”的静默错位。
  2. bump 的 lastUpdated 与 141 之外的版本:仓库 releases/ 下目前最新就是 build.141(maven-metadata.xml latest 一致),本次取的是当时最新版,没有问题;但 ⚠️ 修复版发布后建议一并跟进。
  3. 描述里的“原生只读方块界面、空玩家背包、同步淡出的物品图标”全部由库侧 StructureGui* 实现,本体零改动。建议在 PR 描述里注明“需构建包含该库版本的客户端才能看到效果”,便于后续二分排查。

描述声称对照

描述声称 本次 diff 判定
将 26.1.2 的藿香依赖更新至 0.0.1+build.141 libs.versions.toml 139→141 ✅
接入原生只读方块界面、空玩家背包和同步淡出的物品图标 本体 0 行;库侧新增 StructureGuiSession/Preview/ItemOpacity 加 6 个 client mixin(已核目标与登记) ✅(库侧提供,本体只是受益)
复用藿香的导出按钮绘制接口,使用现有深浅主题贴图与统一悬停提示 renderExportButton 调用 ✅;“深浅主题贴图”不成立,查找键少写 textures. ⇒ 恒浅色 ⚠️
统一悬停提示 tooltip 键与判定框均与旧实现一致 ✅

回归测试建议

  1. 打开手册 → 进入任意含结构的页面 → 结构预览浮窗右上出现导出按钮;分别切浅色/深色主题确认按钮配色随主题变化(当前深色会露馅)。
  2. 悬停按钮:出现下半帧高亮和“导出结构”tooltip,且不出现 “inspect” 提示。
  3. 点击按钮:结构正常导出,且不触发浮窗拖拽 / 投影按钮的层切换。
  4. 顺带目视:浮窗内原生方块界面渲染、物品图标淡出、配方书开关、超大物品图标(PictureInPictureRenderer)无异常。这些是 141 新 mixin 的覆盖面,与本 PR 交互区域重叠。

@PigeonNian PigeonNian left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@PigeonNian
PigeonNian merged commit a2e310f into Anvil-Dev:dev/26.1/1.6 Nov 13, 2026
2 checks passed
@WhereisFff
WhereisFff deleted the codex/26.1.2-ageratum-gui branch November 13, 2026 13:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants