Continue porting some new content and bug fixes to 26.1 继续移植部分新内容和bug修复到26.1 - #5143
Conversation
…ess has been made. 修正了天体死亡文本,增加了一些进度 (Anvil-Dev#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>
- 将演化音乐归入唱片音量分类,并以单声道音源实现 64 格原生距离衰减。 - 保持音效与字幕的听距一致。 - 通过实时同步入口恢复锻造状态,避免重开界面时丢失正在锻造的进度。
- 撤销无掉落幻灵铁砧虚影时不再结算基础物品 - 保留实体铁砧与其他下落方块的资源结算 fixed Anvil-Dev#5133
按物品实际堆叠上限拆分每个目标位置的掉落物,保留均分份额、余数、零动量和拾取延迟。 修复 Anvil-Dev#5135
代码审查摘要 — PR #5143操作: opened(webhook)。状态预检:
|
| 26.1(本 PR) | 1.21 源分支 | |
|---|---|---|
| 代码 | mainLine.next() → no_remnant(主线) |
industrialLine.next() → no_remnant(主线,同语义) |
已提交 new_cycle.json |
parent: no_remnant ✅ 与代码一致 |
parent: the_start ❌ 与代码不一致(陈旧) |
AdvancementLineHelper.save() 末尾 this.lineHelper.parent = holder(1.21 与 26.1 同)⇒ 任何插在主线的节点都会重定其后继的 parent。所以:
- 26.1 本 PR 顺带修正了源分支遗留的生成数据漂移(好事);
- 但副作用是
new_cycle从the_start的直接子节点变成隐藏 challenge 的子节点,影响它在进度树中的结构与可见性判定(新玩家需先完成 no_remnant 才在树上看到它)。 - 其余 5 个新节点(efficiency / cannon_fodder / black_hole / neutron_star / come_at_night)都走了
createBranch(),唯独 no_remnant 走主线。
请确认这是期望行为。 若希望 new_cycle 仍挂在 the_start 下,改为 mainLine.createBranch().next() 并重跑 runData(同时修正 1.21 侧的陈旧 new_cycle.json)。
⚠️ 2. planet_contact 的 tag 覆盖不等价于被替换的 minecraft:fall
从 client-1.21.1.jar 的 data/minecraft/tags/damage_type/* 直接读出:minecraft:fall 同时属于
bypasses_armor、bypasses_shield、damages_helmet、is_fall、no_knockback。
本 PR 只补了 is_fall(DamageTypeTagLoader:46 / is_fall.json),据此:
- 护甲值现在会吸收行星接触伤害(
PLANET_CONTACT_DAMAGE = 38.0f,全下界合金可减到 ~7.6)——原damageSources().fall()无视护甲; - 现在会施加击退(fall 在
no_knockback中); - 举盾现在可格挡(
bypasses_shield),头盔不再掉耐久(damages_helmet)。
佐证:CfaGravityController 里既有注释写的是 // 38 * 0.52 = 19.76 after Feather Falling IV,而星级接触那条写的是「护甲 + 保护 IV」——说明当时的推算并未把 planet_contact 当作可被护甲减免。建议至少补 bypasses_armor 与 no_knockback(1.21 源分支同样缺失,可两分支一起补)。
⚠️ 3. star_contact 缺 no_knockback
被替换的 minecraft:in_fire 属于 no_knockback(且 ignites_armor_stands / panic_environmental_causes),本 PR 只补了 is_fire。恒星接触(STAR_CONTACT_DAMAGE = 66.0f)现在会产生击退。
注:star_contact 不需要补 bypasses_armor(in_fire 不在其中),这部分处理正确。
💡 建议(非阻塞)
- 移植时丢了两条解释性注释,改名后语义不直观,建议补回:
ItemSplitterBlockEntity.dropAt的// 显式传 0,0,0:5 参数构造器会自带随机动量与向上初速;PlayerHitEntityMixin的/// 行星接触伤害原为原版摔落类型,改用专属类型后仍需在此保持相同表现。 - zh_cn / zh_hk / zh_tw / ja 等未补 6 条进度文案 + 3 条死亡信息(
death.attack.anvilcraft.{star,planet,black_hole}_contact)——1.21 源分支同样为空,属既有 Weblate 流程,提一句即可。 - 标题:现标题偏笼统,已尝试
gh pr edit,但本环境 token 已失效(HTTP 401: Bad credentials),无法自动修改。建议:Port celestial contact damage types, six stellar-evolution advancements and the quenched_out sound fix to 26.1 移植星体接触伤害类型、6 个恒星演化进度与淬灭序曲音效修复到 26.1 - 备注:
ModAdvancementsHandler:780的AdvancementHolder theStart是未使用局部变量,但 base 分支已存在,非本 PR 引入。
📋 移植对账表(1.21 da7e856b → 26.1 20f9039)
| 移植项 | 状态 | 证据 |
|---|---|---|
| 4 个 criterion 类 | ✅ 逐字一致 | 仅 advancements.critereon → .criterion(26.1 包名) |
AdvancementLineHelper 5 个新 helper |
✅ 一致 | 与 1.21 691-709 行逐字相同 |
| 6 个新进度 JSON | ✅ 逐字一致 | 唯一差异:26.1 datagen 不再写 icon.count(仓库级既有漂移) |
| 进度文案 en_us/en_ud | ✅ 一致 | 1.21↔26.1 抽取比对完全相同 |
TriggerUtil 新方法 |
✅ 一致 | 半径 32 / 7 与 1.21 相同;32 与 SUPERNOVA_SHAKE_RADIUS = 32.0f 口径吻合(注释属实) |
ModDamageTypes |
✅ 一致 | 三个新 key + 构造参数(0.1F/0.0F/BURNING)与 1.21 相同 |
| damage_type JSON | ✅ 与 code 自洽 | planet_contact 用默认 HURT 故省略 effects;star_contact 写 burning |
black_hole_contact tag 镜像 |
✅ 完整 | 精确镜像 lost_in_time 原有 4 个 tag(含 neoforge:is_magic),沿用 Float.MAX_VALUE 秒杀 |
QuenchedOutMusicHandler |
✅ 逐字一致 | 26.1 与 1.21 文件 diff 为空(含 SoundSource.RECORDS、Attenuation.LINEAR) |
quenched_out.ogg |
✅ 忠实 | 48kHz 立体声 192kbps → 48kHz 单声道 240kbps,时长 71.767583s 不变,与 1.21 的 ogg md5 完全相同(c48422e1…)⇒ 位置音效正确性修复 |
sounds.json attenuation 64 |
✅ | 与 ModSoundDefinitionsProvider.attenuationDistance(64)、1.21 一致 |
BuildingUndoResources ghost 判定 |
✅ 语义等价 | !copy.contains("Ghost") || copy.getBoolean("Ghost") ≡ copy.getBooleanOr("Ghost", true);DynamicBuildingEntities 正是写 Ghost=true, DropItem=false 的一方 |
ItemSplitterBlockEntity.dropAt |
✅ 一致 | while+split 与 1.21 相同;唯一调用点传临时栈 resource.toStack(...),反复 split 无副作用 |
OverworldLikeEventListener 两个死亡处理器 |
✅ 逐字一致 | 1.21 同写法 |
CelestialForgingAnvilBlockEntity.onDataPacket |
✅ 必要修复 | base 缺此覆写(getUpdateTag 已有);与 1.21 的 onDataPacket 对应,也与 26.1 分支既有 8 处 BE 覆写惯例一致 |
关键正确性核实(非 26.1 迁移项)
no_remnant可达性:MinMaxBounds.Ints.exactly(64);StellarTerminal.massAnvilscodec 为intRange(0, 64);stellar_tracks.json存在mass_64,其terminal.kind = "disruption"(=Kind.NONE,无残骸)⇒ 与文案 "forged with 64 mass anvils … leave no remnant" 语义一致且可达成。- 判据正确:
completeEvolution传evolutionState.initialMass(),而StellarEvolutionState校验track.definition().massAnvils() == initialMass⇒ 正是「用多少个质量铁砧锻造」;且completeEvolution有terminalApplied()幂等守卫,不会重复发奖。 - CODEC 字段序 = JSON 键序:
player→mass_anvils→terminal,与 1.21 相同;单键产物({"terminal": …}/{"mass_anvils": 64})无从错位(codec 序与字母序同向)。 cannon_fodder文案 "inside an Overworld-Like planet" 站得住:PLANETARY_COLLAPSE伤害只在OverworldLikeResetManager:104施加。- 依赖 tag 的既有逻辑未被换类型打断:
EquipmentAbilities:276/278(缓冲靴判IS_FALL/IS_FIRE)与ItemEntityMixin:144在新类型下仍生效 —— 这正是补is_fall/is_fire的必要性。 PlayerHitEntityMixin追加source.is(ModDamageTypes.PLANET_CONTACT)必需(换类型后原 fall 判据会失效)。- diff 完整性:下载 diff
+593/−11与本地git diff rvbase5143 rvhead5143完全一致;10 处No newline全部是新增生成 JSON,且与仓库既有生成文件惯例一致(既有new_cycle.json/bypasses_armor.json末字节同样无换行)。
🧪 测试建议
| 被测目标 | 场景 | 优先级 |
|---|---|---|
TriggerUtil.celestialEvolution / planetDetonation |
32 格内/外、7 格边界玩家是否发奖;旁观者语义 | 🔴 |
CelestialEvolutionTrigger.matches |
mass 63 不发 / 64 发;仅 terminal 条件与仅 mass_anvils 条件各自独立生效 |
🔴 |
no_remnant 幂等 |
重复 tick、重载世界后不重复发奖 | 🟡 |
new_cycle |
父节点变更后代码 award 路径仍可授予;进度树可见性 |
🟡 |
planet_contact / star_contact |
无护甲 vs 全护甲伤害值对账;击退有无;盾牌格挡;缓冲靴减免 | 🟡 |
ItemSplitterBlockEntity.dropAt |
投入 1000 个一格 → 实体拆分数量、总量守恒 | 🟢 |
BuildingUndoResources.entity |
ghost 光谱铁砧 undo/redo 不产出物品、与 DynamicBuildingEntities 成本对称 |
🟢 |
结论:COMMENT — 移植忠实度很高(与 1.21 逐项对账基本逐字一致,CI 双绿,无阻塞项);需处理的是
由 Hermes Agent 审查
代码审查摘要 — PR #5143操作: review_requested(PR 仍 open,非 merged;head 这是 4 个源 PR 的 26.1 移植合并:#5129(天体进度+专属伤害类型)、#5131/#5132(演化音效衰减+界面恢复)、#5134(幻灵铁砧虚影撤销)、#5136(物品分配器掉落堆叠上限)。用匿名 curl 取源 PR 差异做了提交级对账( 📋 移植完整性对账
文件集差集核对:没有源 PR 文件缺失(
|
| 目标 | 场景 | 优先级 |
|---|---|---|
CelestialForgingAnvilBlockEntity 同步 |
锻造/搜索进行中反复开关界面、跨区块重载、重登:client 进度条与 stage 不应丢失;对照 1.21 侧现象确认是否真的需要 handleUpdateTag |
🟡 |
no_remnant 可达性 |
用 64 质量铁砧天体演化到 disruption 终局 → 发奖;mass_41..63 不发 |
🔴 |
black_hole/neutron_star |
对应 terminal 轨道完成演化即发奖;white_dwarf 不发 | 🟡 |
cannon_fodder/come_at_night |
行星崩解致死 / 恒星接触致死发奖;其它死亡源不发 | 🟡 |
efficiency |
伽马激光打入行星挖掘机(7 格内玩家)发奖 | 🟡 |
| 新伤害类型 | 被恒星/行星/黑洞接触致死的死亡提示;护甲/抗性/击退/魔法标签行为;摔落保护与缓冲靴对 planet_contact 仍生效 |
🟡 |
quenched_out 音效 |
音量滑块归“唱片/音符盒”分类;64 格内可闻、字幕同步出现 | 🟢 |
| 物品分配器 | 单目标位置掉落超过堆叠上限时按 maxStackSize 拆分,余数/零动量/拾取延迟保持 |
🟡 |
结论: COMMENT(非阻塞) — 移植保真度很高(源 PR 文件零缺失、生成数据与 datagen 自洽、音效 ogg 与 1.21 逐字节一致、CI 双绿),未发现需修复后合并的阻塞项;唯一实质点是 onDataPacket 覆写在 26.1 上可证等价于默认实现、与提交信息声称的修复不符,请作者确认是删除还是补上 26.1 的 handleUpdateTag 侧。
说明:本轮未修改 PR 标题——标题“Continue porting some new content and bug fixes to 26.1 继续移植部分新内容和bug修复到26.1”格式与语义已达要求(英文+中文);且本机
gh auth status显示 token 已失效(The token in …/hosts.yml is invalid),按流程不导出GITHUB_TOKEN修复,故未执行gh pr edit。若希望标题更具体,建议:Port celestial advancements, damage types, sound fix and bug fixes to 26.1 移植天体进度、专属伤害类型、音效修复及若干 bug 修复到 26.1。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'advancement-criterion-pr-review' (1 replacement). |
|
💾 Self-improvement review: Patched SKILL.md in skill 'minecraft-modding' (1 replacement). · Patched SKILL.md in skill 'advancement-criterion-pr-review' (1 replacement). · Patched references/port-form-and-damage-type-swap-audit.md in skill 'advancement-criterion-pr-review' (1 replacement). |
- 使用实际命中位置进行服务端射线校验,修复按钮可见但底座中心被遮挡时无法按下的问题。 - 按住按钮后等待服务端确认再播放手部动画,并忽略已释放或已切换目标的过期确认。 - fixed Anvil-Dev#5138
- 优先使用原版 includeData 标志控制数据复制,避免服务端扫描读取客户端按键状态 - 保留 26.1 服务端中键克隆时的缓存、标记与流体数据 (cherry picked from commit d7c2f74)
|
PR #5143 触发的 action 是 closed,按约束第 1 条:停止审查,不发布评论。 (已确认状态:该 PR 已被合并,squash 提交 |
Reason: script execution via -e/-c flag Reply |
|
All evidence gathered. Here is my review (auto-delivered to the PR): 代码审查摘要 — PR #5143(第 3 轮 · synchronize 复审)操作: synchronize(载荷为 🔁 与上一轮相比(增量只涉及 5 个文件)新增提交已归因:
|
| 源 PR | 对应 26.1 文件 | 状态 |
|---|---|---|
| #5129 天体进度 + 专属伤害类型 | 34(4 个 *Trigger、AdvancementLineHelper、TriggerUtil、ModCriterionTriggers、ModDamageTypes、DamageTypeTagLoader、OverworldLikeEventListener、CfaGravityController、AcceleratorHandler、ExcavatorHandler、PlayerHitEntityMixin、AdvancementLang、OtherLang + 17 生成物) |
✅ 覆盖(tag 缺口见上) |
| #5131/#5132 演化音效 + 界面恢复 | 5 | ✅ 音效半已生效;onDataPacket 半在 26.1 等价空操作(上轮 |
| #5134 幻灵铁砧虚影撤销 | 1 | ✅ 等价(blob 未变) |
| #5136 物品分配器掉落堆叠上限 | 1 | ✅ 等价(blob 未变) |
| #5141 大红按钮遮挡边缘交互与按压动画 | 3 | ✅ 逐行等价(本轮新审) |
| #5140 服务端扫描仓储端口崩溃 | 2 | ✅ 机械等价 + hasChunk |
本轮复核仍成立的关键证据(相关 blob 未变):4 个 criterion 类与 1.21 逐字一致(仅包名 critereon→criterion);6 个新进度 JSON 与 1.21 逐字一致(唯一差异是 26.1 datagen 不再写 icon.count);black_hole_contact 精确镜像 lost_in_time 的 4 个 tag(bypasses_armor/bypasses_resistance/no_knockback/neoforge:is_magic);quenched_out.ogg 与 1.21 md5 相同。
🧪 测试建议
| 目标 | 场景 | 优先级 |
|---|---|---|
| 大红按钮 | 底座中心被遮挡但按钮面可见时可按下;按住/松开动画仅在服务端受理后播放;服务端拒绝(潜行/建筑手杖/超距)时无动画;跨维度/开界面自动释放;伪造 hitLocation(界外/NaN)被服务端拒 |
🔴 |
| 仓储端口 | 服务端扫描/拾取端口不再崩溃;Ctrl 中键拾取仍带缓存/标记/流体;未加载区块上调用不崩 | 🔴 |
planet_contact/star_contact |
补 tag 后无护甲 vs 全护甲伤害对账、击退有无、缓冲靴减免 | 🟡 |
no_remnant / black_hole / neutron_star |
64 质量铁砧发奖、mass_41..63 不发;对应 terminal 发奖 |
🟡 |
结论: COMMENT(非阻塞)
本轮新增的 2 个提交(#5141、#5140)移植忠实、CI 双绿,未引入阻塞项。沿袭的上轮 4 项 planet_contact 的 tag 建议按上面的更正后版本修(bypasses_armor + no_knockback,不要再补 damages_helmet)。new_cycle 挂到隐藏挑战下、以及 onDataPacket 在 26.1 是空操作——这两条请作者各给一句确认即可,不必阻塞。
标题: 现标题
Continue porting some new content and bug fixes to 26.1 继续移植部分新内容和bug修复到26.1已满足「英文 + 中文」约束,故本轮未修改(且本机gh auth status显示 token 已失效,按流程不导出凭据修复)。若希望更具体,可选:Port stellar advancements, contact damage types, sound fix and button/storage-port fixes to 26.1 移植天体进度、接触伤害类型、音效修复及按钮/仓储端口修复到 26.1。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/port-form-and-damage-type-swap-audit.md in skill 'advancement-criterion-pr-review' (1 replacement). · Patched SKILL.md in skill 'advancement-criterion-pr-review' (1 replacement). · Patched SKILL.md in skill 'anvilcraft-storage-system-review' (1 replacement). |
Reason: script execution via -e/-c flag Reply |
|
已完成审查所需全部取证(PR 已合并,且合入内容与上一轮已审查的 head 完全一致)。以下是投递到 PR 评论区的内容: 代码审查摘要 — PR #5143(synchronize · 事件送达时 PR 已合并)状态预检(唯一权威判据): 该 PR 已合并 —— 落库核对:
|
| 目标 | 场景 |
|---|---|
| 伤害标签 | 行星/恒星接触伤害在穿护甲 vs 裸装下的差值;受击是否被击退 |
| 6 个新进度 | mass_64→disruption 发奖、mass_41..63 不发;black_hole/neutron_star 仅对应 terminal 发奖 |
| CFA 同步 | 锻造/搜索进行中反复开关界面 + 跨区块重载:客户端进度是否丢失(判定是否需要补 handleUpdateTag 侧) |
| 物品分配器 | 单点掉落超过堆叠上限时按 maxStackSize 拆分,余数留内部、零动量与拾取延迟保持 |
结论:COMMENT(post-merge,无需动作) — 变更已落库且与上轮审查 head 完全一致,无阻塞项;上述 1–3 项为可选后续。PR 已合并,故未修改标题(标题英文+中文格式已达标;另本机 gh auth status 显示 token 已失效,按流程不导出 GITHUB_TOKEN)。
由 Hermes Agent 审查
本次执行说明(不随评论投递)
- action=
synchronize,非 closed/labeled,故按流程输出审查;但状态预检发现 PR 已于 03:34:22Z 合并(squashd30d52e80),且载荷 head92e56f4d8与上一轮已审查的 head 完全相同(git diff两 ref 为空),因此采用"落库核对 + post-merge 增量"而非重发整份审查。 - 全过程只用
terminal+ curl 公开端点(patch-diff、匿名 API、git fetch 到具名 ref),未使用execute_code,未执行任何gh pr review/comment,未source .env/export GITHUB_TOKEN。 - 唯一一次
gh auth status确认 token 失效(hosts.ymlinvalid),故跳过gh pr edit。
|
💾 Self-improvement review: Patched references/head-sha-freshness-and-prior-review-verification.md in skill 'github-webhook-pr-review' (1 replacement). · Patched references/port-form-and-damage-type-swap-audit.md in skill 'advancement-criterion-pr-review' (1 replacement). |
No description provided.