Fix big red button targeting and animation 修复大红按钮目标判定与按压动画 - #5141
Conversation
- 使用实际命中位置进行服务端射线校验,修复按钮可见但底座中心被遮挡时无法按下的问题。 - 按住按钮后等待服务端确认再播放手部动画,并忽略已释放或已切换目标的过期确认。 - fixed Anvil-Dev#5138
|
审查完成。以下是可直接发布的审查意见。 代码审查摘要 — PR #5141标题: Fix big red button targeting and animation 修复大红按钮目标判定与按压动画
✅ 先确认过的关键机制(无问题,说明为何不是 bug)
|
| PR 声称 | 状态 | 对应实现 |
|---|---|---|
| 使用实际命中位置进行服务端射线校验 | ✅ | hit.getLocation() 随包上传 → canPress 以 eye→hitLocation 复算 clip |
| 修复"按钮可见但底座中心被遮挡时无法按下" | ✅ | 弃用固定底座中心点;与 issue #5138 标题/预期一致 |
| 按住后等待服务端确认再播放动画 | ✅ | onAnimationTick 的 confirmed && + 本地 PRESSED 条件 |
| 忽略已释放或已切换目标的过期确认 | ✅ | handleHoldResult 的 id != holdId / pos / level 校验 + release() 自增 |
fixed #5138 |
✅ | issue 期望"这种情况也能按下按钮 / 确实能按下时才触发手部动画",两点均被覆盖 |
结论: COMMENT(不阻塞) — 设计正确、与 issue 需求一一对应,且双向包注册、编解码器类型、跨端类加载、holdId 过期丢弃这四处最容易出事的点都已逐项核对通过(含对 anvillib 2.0.0+snapshot.534 的实际 jar 取证)。上述 3 条
🧪 测试建议
| 被测目标 | 建议场景 | 优先级 |
|---|---|---|
BigRedButtonHoldPacket.canPress |
遮挡场景(隔方块/贴墙)按住 → 应被接受;上报越界点(格内角落/格外的有限值/NaN)→ 应被拒绝 | 🔴 |
BigRedButtonInputListener.handleHoldResult |
注入旧 holdId / 已切换 pos / 已切换 level 的回执 → confirmed 不应被改写(过期确认丢弃) |
🔴 |
| 释放-重按竞态 | 快速按-放-按同一按钮,人为延迟回执 → 不应出现"上一轮的回执点亮本轮动画" | 🟡 |
| 长按稳定性 | 持续按住 ≥ 1 分钟,统计心跳与回执包数量、服务端 tick 调度次数;服务端持续拒绝时不应无限空转 | 🟡 |
| 断线/切维度/开背包 | release() 不应向已断开的连接发包;confirmed/heldPos 必须复位 |
🟡 |
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'network-packet-pr-review' (1 replacement). · Patched references/anvilcraft-lib-api-cross-reference.md in skill 'network-packet-pr-review' (1 replacement). |
Reason: script execution via -e/-c flag Reply |
Reason: script execution via -e/-c flag Reply |
复查说明 — PR #5141(本次为同一修订的重复触发,不重复发表)
唯一变化是 PR Draft → Ready for review( 本轮补核的三条链路(新取证,结论:均不阻塞合并)
结论COMMENT(不阻塞) — 与上一份意见一致,未发现新增阻塞项。既有 diff 卫生仍为 0(EOF 缺换行 0、TODO/FIXME 0、3 文件 / +68 −27 / 1 commit)。按 Ready for review 的立场给出明确取舍:
由 Hermes Agent 审查 |
代码审查摘要 — PR #5141操作: 📋 声称验证表
🟢 看起来不错
|
| 被测目标 | 场景 | 优先级 |
|---|---|---|
canPress 射线路径 |
复现 #5138 视频角度(按钮可见、深点被邻块挡)→ 应能按下;真正隔墙不可见 → 不按下、无动画 | 🔴 |
handleHoldResult 过期丢弃 |
松开/切目标瞬间到达的旧回执应被忽略(id/pos/level 三重) | 🟡 |
| 心跳稳定性 | 200ms+ 延迟下按住 5s,红石输出不抖动;松开后 ≤1s PRESSED 归 false | 🟡 |
| codec 往返 | (pos, hitLocation, held, holdId) 编解码往返一致(新增 VEC3 + VAR_INT) |
🟢 |
结论: COMMENT(无阻塞问题,建议合并) — 修复方向与 #5138 的两条预期精确对应,holdId 过期判定与"确认后才播动画"的设计自洽,关键库 API 与 codec 泛型约束均已离线核对且 CI 通过。两处
(PR 标题「Fix big red button targeting and animation 修复大红按钮目标判定与按压动画」与改动一致,本次未修改标题。)
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/duplicate-review-detection-and-stop.md in skill 'github-webhook-pr-review' (1 replacement). · Patched references/bidirectional-ack-echo-packet-review.md in skill 'network-packet-pr-review' (1 replacement). · Patched SKILL.md in skill 'network-packet-pr-review' (1 replacement). |
|
💾 Self-improvement review: Patched references/bidirectional-ack-echo-packet-review.md in skill 'network-packet-pr-review' (1 replacement). · Patched SKILL.md in skill 'network-packet-pr-review' (1 replacement). · Patched references/pr-class-routing.md in skill 'github-webhook-pr-review' (1 replacement). |
|
PR #5141 的事件类型为 closed,按约束第 1 条,此处停止,不发布审查评论。 |
- 使用实际命中位置进行服务端射线校验,修复按钮可见但底座中心被遮挡时无法按下的问题。 - 按住按钮后等待服务端确认再播放手部动画,并忽略已释放或已切换目标的过期确认。 - fixed Anvil-Dev#5138
…修复到26.1 (#5143) * The text regarding celestial death has been corrected, and some progress has been made. 修正了天体死亡文本,增加了一些进度 (#5129) * feat(advancement): 添加天体进化挑战成就及触发器 - 新增 CelestialEvolutionTrigger 用于天体质量进化判定 - 在触发 util 中添加 celestialEvolution 方法,触发成就判定 - 在加速器逻辑中调用触发方法进行成就检测 - 添加无残留(no_remnant)挑战成就,要求64质量铁砧的天体进化至终局 - 将成就文本翻译添加至英文语言文件和特殊字符文件 - 在成就数据中注册无残留成就及其触发条件 * feat(advancement): 添加行星毁灭成就及触发器支持 - 新增PlanetDetonationTrigger用于行星毁灭事件的判定 - 在ExcavatorHandler中增加触发行星毁灭触发器的逻辑 - 在AdvancementLineHelper中集成planetDetonation方法方便创建该成就 - 在AnvilCraftAdvancement中添加efficiency成就分支,绑定行星毁灭触发器 - 更新语言文件,添加行星毁灭成就的标题与描述 - 注册PlanetDetonationTrigger触发器并完善其触发实现 - 新增efficiency成就JSON配置文件,定义触发条件及显示信息 * feat(advancement): 新增因行星坍缩死亡的成就触发器 - 添加了 PlanetaryCollapseDeathTrigger 触发器类及其数据结构 - 在 ModCriterionTriggers 中注册 planetary_collapse_death 触发器 - 在 AdvancementLineHelper 中新增 planetaryCollapseDeath 方法便于调用 - 在 AnvilCraftAdvancement 中添加 Cannon Fodder 成就,绑定行星坍缩死亡触发器 - 在语言文件中添加 Cannon Fodder 成就标题与描述的多语言支持 - 在 OverworldLikeEventListener 中监听行星坍缩死亡事件并触发相应成就 - 在 TriggerUtil 中实现 planetaryCollapseDeath 方法来触发成就判定 - 新增 Cannon Fodder 成就的 JSON 配置文件,包含父级与图标等信息 - 修改效率成就添加隐藏属性,改善游戏内成就展示体验 * feat(advancement): 新增黑洞和中子星终局星体成就 - TriggerUtil新增支持根据StellarTerminal.Kind触发星体演化成就 - CelestialEvolutionTrigger增加对终局类型的判定和对应触发方法 - AdvancementLineHelper新增celestialEvolution重载方法支持终局类型参数 - AnvilCraftAdvancement中增加黑洞和中子星分支成就定义和保存 - AdvancementLang添加黑洞与中子星成就名称及描述多语言支持 - 语言文件(en_us, en_ud)增加对应成就的描述和标题 - 新增黑洞和中子星成就JSON数据文件,定义触发条件和显示信息 * feat(damage): 新增天体接触伤害类型及独立标签支持 - 添加黑洞接触、恒星接触及行星接触三种新伤害类型 - 天体接触伤害采用独立类型以实现专属死亡提示 - 更新伤害标签,支持新伤害类型绕过护甲、抗性、击退等效果 - 修改重力控制器中伤害来源,替换为对应新天体接触伤害类型 - 保持星体及行星接触伤害原版燃烧和摔落效果表现不变 - 增加对应的语言文本显示新伤害的死亡描述信息 - 修正玩家攻击混入对行星接触伤害的判定,保持原摔落伤害一致性 - 新增相关资源数据文件,完善伤害类型和标签配置 * feat(advancement): 添加“夜晚来访”星接触死亡进度条件 - 新增 StarContactDeathTrigger 实现星接触死亡触发器 - 注册并初始化星接触死亡触发条件 ModCriterionTriggers.STAR_CONTACT_DEATH - AdvancementLineHelper 新增 starContactDeath 方法支持该触发器 - AnvilCraftAdvancement 新增“come_at_night”任务,使用星接触死亡触发器 - AdvancementLang 中添加“come_at_night”进度名称及描述文本 - OverworldLikeEventListener 监听星接触死亡事件触发进度 - TriggerUtil 新增 starContactDeath 方法简化触发调用 * feat(locale): 添加“come_at_night”成就的中英文描述 - 新增“advancements.anvilcraft.come_at_night”标题的本地化文本 - 新增“advancements.anvilcraft.come_at_night”描述的本地化文本 - 中文描述内容为“被星光笼罩” - 英文标题内容为“Showdown at Night”倒转样式 * feat(advancement): 添加“come_at_night”隐藏成就 - 创建新的隐藏成就“come_at_night” - 设置成就触发器为“star_contact_death” - 指定成就图标为“celestial_forging_anvil” - 定义成就的父级为“the_start” - 启用成就的遥测事件发送 --------- Co-authored-by: Pigeon_Nian <adove2005@163.com> * fix(celestial): 修复演化音效衰减与锻造界面恢复 (#5131) (#5132) - 将演化音乐归入唱片音量分类,并以单声道音源实现 64 格原生距离衰减。 - 保持音效与字幕的听距一致。 - 通过实时同步入口恢复锻造状态,避免重开界面时丢失正在锻造的进度。 * fix(building): 修复幻灵铁砧虚影撤销时重复返还物品 (#5134) - 撤销无掉落幻灵铁砧虚影时不再结算基础物品 - 保留实体铁砧与其他下落方块的资源结算 fixed #5133 * fix(item-splitter): 修复物品分配器掉落物超出堆叠上限 (#5136) 按物品实际堆叠上限拆分每个目标位置的掉落物,保留均分份额、余数、零动量和拾取延迟。 修复 #5135 * fix(button): 修复大红按钮遮挡边缘交互与按压动画 (#5141) - 使用实际命中位置进行服务端射线校验,修复按钮可见但底座中心被遮挡时无法按下的问题。 - 按住按钮后等待服务端确认再播放手部动画,并忽略已释放或已切换目标的过期确认。 - fixed #5138 * fix(storage-port): 修复服务端扫描仓储端口时崩溃 (#5140) - 优先使用原版 includeData 标志控制数据复制,避免服务端扫描读取客户端按键状态 - 保留 26.1 服务端中键克隆时的缓存、标记与流体数据 (cherry picked from commit d7c2f74) --------- Co-authored-by: PigeonNian <78527064+PigeonNian@users.noreply.github.com> Co-authored-by: Pigeon_Nian <adove2005@163.com>
fix(button): 修复大红按钮遮挡边缘交互与按压动画