Skip to content

新增润滑油、润滑油注入器、效率控制塔、建筑Boos系统;修复了消息面板的滚轮bug - #74

Draft
ARCloud217 wants to merge 25 commits into
SiliconMod:testfrom
ARCloud217:test
Draft

ARCloud217 wants to merge 25 commits into
SiliconMod:testfrom
ARCloud217:test

Conversation

@ARCloud217

Copy link
Copy Markdown
Collaborator

No description provided.

增加润滑油、炼油厂、润滑油注入器
新增:润滑液(液体);炼油厂
此外,该提示效果会根据光标位置动态调整显示效果
退回build.gradle的修改
增加“节能”和“超频”两种Boost
调整Boost系统的代码,便于调用工具和端口
微调消息面板
调整Boost图标显示逻辑
修复控制塔的文本表达错误
修改超频Boost机制,避免工厂空跑仍然扣血
# Conflicts:
#	assets/bundles/bundle.properties
#	assets/bundles/bundle_zh_CN.properties
#	mod.hjson
#	src/silicon/Silicon.java
#	src/silicon/content/block/Blocks.java
#	src/silicon/world/blocks/production/PetroleumRefinery.java

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

自动审查结果(Robin Review / workflow_run 二段式)

本次 PR 新增润滑油、石油炼化厂、润滑油注入器、效率控制塔及建筑强化系统(BoostOverlay + BuildingBoostSystem + Boosts 钩子),并补充了本地消息隔离与少量 UI 调整。整体架构设计合理(类型级钩子避免修改共享字段、按 tick 统一裁决、队伍判定使用 ==),但存在一处世界级覆盖层的渲染时机问题,需要修正。

共 1 条发现,0 条已发为行内评论。

@by514

by514 commented Oct 2, 2026

Copy link
Copy Markdown
Collaborator

/robin

@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

🏹 Robin

✅ Review done. Nothing worth flagging — looks clean to me.

Push fixes whenever you like, then comment /robin for another pass.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🏹 Robin

Heads up: this is a point-in-time review. Push fixes freely, then comment /robin whenever you want another pass.

✅ No issues found

Summary

本次 diff 新增了润滑油液体、石油炼化厂、润滑油注入器、效率控制塔四个内容,并引入了统一的建筑强化系统(BuildingBoostSystem)及其可视化与钩子机制(BoostOverlay、BlockConsumerHooks、EnergySavingBoost、LubricantBoost)。整体设计清晰,注重多人安全性与内存清理,版本号由 a0.13.0.0 升至 a0.14.0.0 与新增功能相符。代码整体质量较高,未发现会导致崩溃、不同步或数据丢失的高危问题。


Robin — the Robin Hood of code review. Free for every PR.

@rt334

rt334 commented Oct 3, 2026

Copy link
Copy Markdown
Collaborator

复审(针对 #73 审查意见的逐条核查)

先确认好消息:#73 的主要问题基本修掉了,mergeable=True。

merge-base(origin/test, pr74) = 0bc9a51   ← 正是 origin/test 的 HEAD,即分支完整包含 test 历史
37 files changed, +5145 -86
# 上次提的问题 本次状态
1 分支需 rebase ✅ 已修
2 混入别的 PR 的 squash 提交 ✅ 已修(改用真正的 0bc9a51)
3a 删 .github/scripts/review_from_diff.py ✅ 已修(不再删)
7 Items.java 是空类 ✅ 已删(Items.load() 调用也移除了)

仍未处理

❌ 1. scripts/hub-deep-check.ps1 仍被删除(这条比上次说得更严重)

上次我说它是「上游仍在使用的文件」,这次查到具体证据 —— 它不是本地调试脚本,是仓库的强制验证门禁:

.github/robin.yml:12
  # - scripts/hub-deep-check.ps1 是 AGENTS.md 定义的强制验证脚本(锚点校验+构建+双目录部署)

README.md:82
  powershell -ExecutionPolicy Bypass -File scripts\hub-deep-check.ps1

README.md:93
  2. 运行 scripts/hub-deep-check.ps1:任一锚点 FAIL 即阻断;通过则自动 deploy 并把最新 jar
     同步到 %APPDATA%\Mindustry\mods\Silicon.jar

docs/blocks/ItemTransferHub-DeepCheck.md:35
  powershell -ExecutionPolicy Bypass -File scripts\hub-deep-check.ps1

脚本内部有 30 项锚点断言($total=30),覆盖推送核心优先、输入料静态保护、电力硬门控、计费平滑、越界防护等 —— 是往 ItemTransferHub 这类高危文件改动时的回归防线。

本 PR 用一个内容只有「清理」两个字的提交(807292c)删掉了它,且没有同步更新上面三处引用(robin.yml / README.md ×2 / ItemTransferHub-DeepCheck.md),删除后这些引用全部悬空。

请恢复该脚本;如果确实要删,需要在 PR 里说明理由,并同时清理那三处引用。

❌ 2. BuildingBoostSystem.reset() 仍挂在 PlayerJoin 上(上次的第 4 条,真 bug)

代码位置未变:

// Silicon.java:132-145
Events.on(EventType.PlayerJoin.class, e -> {
    if (net.server()) {
        SatelliteManager.broadcastState(e.player.team());
        for (SignalRelay.SignalRelayBuild rb : SignalRelay.allRelays(e.player.team())) {
            Call.tileConfig(e.player, rb, rb.active);
        }
    }
    // PowerProtector 无全局静态状态,数据随存档保存,无需重置
    // 建筑强化系统的四张状态表以 Building 为键,会把整张旧地图钉在内存里;
    // 且新图若无强化器则 flushFrame 根本不跑,旧建筑会继续被画强化徽记。必须清。
    BuildingBoostSystem.reset();      // ← 仍是 PlayerJoin
});

而 BuildingBoostSystem.reset() 的文档仍写着:

 * <p><b>换图/读档必须调用</b>(已挂在 {@code EventType.WorldLoadEvent} 上)。

文档与代码依然矛盾。后果不变:多人下任何玩家加入都会清空全局强化状态、清掉 suppressed(玩家手动关闭的强化被重新打开)、调 boost.onWorldReset()(超频的掉血计时被重置,惩罚可刷);且 reset() 在 if (net.server()) 之外,客机也执行。

建议改为并入同一个 init() 里紧邻的 WorldLoadEvent 块(Silicon.java:118 附近),那里已经在做 SignalSource.markDirty() / SatelliteManager.onWorldLoaded() / SignalOverlay.reset() 这类跨世界清理。

❌ 3. thulium 仍是孤儿 bundle key

bundle.properties:2-4
  # —— 铥 ——
  item.silicon-thulium.name=Thulium(Deprecated)
  item.silicon-thulium.description=A radioactive metal.
bundle_zh_CN.properties:2-4   (同上,中文)

thulium 在整份代码里只有这 6 行 bundle,没有任何 Java 引用;test 里也不存在这个物品。给不存在的物品定义 bundle key 不产生任何效果(bundle 不参与内容定义,也救不了旧存档)。

❌ 4. 版本号仍用 a0.14.0.0

test 是 a0.13.0.0,本 PR 改成 a0.14.0.0。而 fork 上第二阶段的占位版号是 a0.14.0.0p —— 同一个大版本被两件不同的东西占用,合并后会产生歧义。建议换一个号。

⚠️ 5. 炼油厂 + 润滑油的回归仍需说明

test 里这两样被删除过三次(0bc9a51 / ea25e85 / 99becda),本 PR 把 PetroleumRefinery.java(+68)与 content/liquid/Liquids.java(+20)加回。这不是冲突而是方向对立,PR 正文为空,无法判断这是有意恢复还是 rebase 时带回来的历史提交(017c62c 电力保护器:回退核心功能代码 新增:润滑液(液体);炼油厂 等早期提交仍在分支历史里)。

建议在 PR 正文里补一段说明:为什么恢复、与之前删除的理由(与 fork/main 对齐)如何共存。

⚠️ 6. signalDetector 的 content id 位移(可接受,提一句备查)

新方块插在 messageTest 之后(追加区,规则正确),但 signalDetector 原本紧跟其后,id 从 17 变成 20。源码注释说「存档按内容名映射」,所以存档不受影响;只在多人两端 mod 版本不一致时有 id 错位风险。


小结

本轮修好的 4 条(rebase、混入提交、review_from_diff.py、空类 Items.java)都是上次的阻塞项,进展明显。

剩下的按优先级:

  1. 恢复 hub-deep-check.ps1 —— 它是强制门禁,删掉会让 robin.yml / README ×2 / 专项文档三处引用悬空
  2. reset() 改挂 WorldLoadEvent —— 真 bug,文档和代码都自相矛盾
  3. 清掉 thulium 孤儿 key、换掉撞车的版本号 —— 几分钟的事
  4. 在正文里说明炼油厂回归的理由

另外本 PR 正文为空,建议至少补一句改动概述 —— 37 文件 / +5145 的改动量,空正文会让 reviewer 无从判断意图。

@rt334

rt334 commented Oct 3, 2026

Copy link
Copy Markdown
Collaborator

更正:「版本号撞车」那条撤回

上一条里我提到 a0.14.0.0 与 fork 占用的大版本号冲突 —— 这条请忽略,是我这边的信息导致的误判。

fork 侧的 a0.14.0.0p 是临时占位号(非正规版号,也未对外发布),归属在我们这边,随时可以改。本 PR 把 test 从 a0.13.0.0 提到 a0.14.0.0 是正常的功能版本推进,不需要为我们的占位号让路。

所以「仍未处理」清单里去掉第 4 条,剩下 5 条:

  1. scripts/hub-deep-check.ps1 仍被删除(强制门禁,三处引用会悬空)
  2. BuildingBoostSystem.reset() 仍挂 PlayerJoin(真 bug,文档与代码矛盾)
  3. thulium 仍是孤儿 bundle key
  4. 炼油厂 + 润滑油的回归需要说明
  5. signalDetector 的 content id 位移(可接受,仅备查)

抱歉造成干扰。

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

自动审查结果(Robin Review / workflow_run 二段式)

本次 PR 新增润滑油液体、石油炼化厂、润滑油注入器、效率控制塔以及建筑强化系统(BoostSystem/Overlay/Hooks),并微调消息面板与消息同步逻辑。整体结构符合多人游戏基本原则(队伍判定、仅本地消息不广播、WorldLoad 时重置本地状态),版本号从 a0.13.0.0 升至 a0.14.0.0 与内容变更(新增方块/液体/系统)相符。基于 diff 未发现确定的崩溃、多人不同步或存档格式破坏点。

共 0 条发现,0 条已发为行内评论。

@ARCloud217
ARCloud217 marked this pull request as draft October 3, 2026 11:09
@github-actions

github-actions Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Current Voting Result Voting
Vote on this by posting a PR with approval or needs changes.

Vote Summary:
3 👍
0 👎

Acceptance Criteria:

  • 100% of weighted votes needs to be to approve
  • 3 minimum # of unique voters required
  • at least 10 minutes of voting

@rt334

rt334 commented Oct 4, 2026

Copy link
Copy Markdown
Collaborator

复审(9a427f5 / 04eefae)

先说结论:上一轮 5 条里修好了 3 条,而且 reset() 那条注释写得比我建议的还清楚。另外我这轮自查时排除了一条自己提出的疑虑(见最后一节)。

mergeable_state 也从 unstable 变成 clean 了。

# 上轮问题 本轮状态
1 scripts/hub-deep-check.ps1 被删 ✅ 已恢复(+104 行)
2 reset() 误挂 PlayerJoin ✅ 已修正
3 thulium 孤儿 bundle key ✅ 已清除
4 炼油厂/润滑油回归需要说明 ⚠️ 未处理
5 signalDetector content id 位移 ⚠️ 未处理(上轮已注明可接受,仅备查)

✅ 1. hub-deep-check.ps1 已完整恢复

文件回来了,docs/blocks/ItemTransferHub-DeepCheck.md 也同步更新了(+28)。这条不再有异议。

✅ 2. reset() 的挂载点已修正,注释很到位

// PowerProtector 无全局静态状态,数据随存档保存,无需重置。
// 建筑强化系统的四张状态表以 Building 为键,会把整张旧地图钉在内存里;
// 且新图若无强化器则 flushFrame 根本不跑(它由强化器 update() 驱动),
// sweepInvalid 也就永不执行,旧建筑会继续被画强化徽记。必须清。
// ——只能挂 WorldLoadEvent:挂 PlayerJoin 会让「任何玩家加入」都清空全局强化状态
//   (清掉 suppressed = 玩家手动关闭的强化被重新打开;调 onWorldReset() = 超频掉血
//   计时归零、惩罚可被joining 反复重置),且客机也会执行(该块不在 net.server() 内)。
BuildingBoostSystem.reset();

比我建议的版本更完整 —— 把「为什么必须清」和「为什么不能挂 PlayerJoin」都写全了,后来人不会误改回去。

✅ 3. thulium 已清除

assets/ 下已无任何 thulium 引用,连带那个空的「物品」分区一起删掉了。docs/utils/BuildingBoostSystem.md 里的记录条目写得也很清楚。


本轮新发现

⚠️ 4. 「火石 → 硫」这个术语替换方向对,但目标值不对

9a427f5 最后清理 把注释与描述里的「火石」统一改成了「硫」。方向没错(原注释确实不准),但目标值应该用原版官方译名。

PetroleumRefinery 实际引用的物品是:

import static mindustry.content.Items.pyratite;
...
outputItem = new ItemStack(pyratite, 1);

而原版 Mindustry.jar 的 bundles/bundle_zh_CN.properties 里:

item.pyratite.name = 硫化物          ← 官方中文名
item.pyratite.description = 用于火焰发射类武器和使用燃料的发电设备。

英文对应 Pyratite。所以游戏里玩家看到的物品名是「硫化物」,而方块描述里写的是「硫」,两者对不上。

当前受影响的 4 处:

assets/bundles/bundle_zh_CN.properties:54   block.silicon-petroleum-refinery.description=...炼制出润滑油与硫...
src/silicon/content/block/Blocks.java:175   // ...-> 10 润滑油 + 0.2 硫...
src/silicon/world/blocks/production/PetroleumRefinery.java:17   * ...-> 润滑油 10/s + 硫 0.2/s
src/silicon/world/blocks/production/PetroleumRefinery.java:35   // ...-> 10 润滑油/s + 0.2 硫/s

建议统一改成「硫化物」。另外方块描述里的产物名如果走 bundle 引用原版条目会更稳(item.pyratite.name),这样以后原版改名也能跟随。

⚠️ 5. 炼油厂 + 润滑油的回归仍需要一句说明

这条上轮提过、本轮未动。test 里这两样被删除过三次(0bc9a51、ea25e85、99becda),本 PR 加回来。PR 正文为空,从分支历史看这批改动来自早期提交(017c62c 电力保护器:回退核心功能代码 新增:润滑液(液体);炼油厂),无法判断是有意的重新引入还是 rebase 时把已被上游删除的历史一并带回来了。

如果是前者,请在正文里补一句理由(比如「与 fork/main 对齐时保留」);如果是后者,应该把它们从本 PR 里剔出去。这个判断只有作者能做。


自查纠正:移除 lubricant-oil.png 是无害的

我原本怀疑「贴图删了但 Liquids.java 仍定义该液体」会造成图标缺失,核过引擎后确认这个担心不成立:

  • Mindustry.jar 里没有 sprites/liquids/ 目录
  • mindustry/type/Liquid.class 里没有任何贴图查找逻辑(搜 liquids/、uiIcon、iconRegion 均为 0 命中)
  • 液体的显示就是 new Liquid("lubricant-oil", Color.valueOf("8a5a2b")) 里那个 color 色块

所以 04eefae 删掉那张贴图是正确的清理,液体定义与使用(PetroleumRefinery 的 outputLiquid)保持一致,无需补回。这条不算问题。


小结

本 PR 目前的阻塞项是零。剩下两件小事:

  1. 「硫」→「硫化物」(4 处,几分钟的事,但不改会让玩家对不上物品名)
  2. 炼油厂回归补一句说明(或者剔除,取决于是否有意)

另外提一句:本轮 docs/utils/BuildingBoostSystem.md 里加的修复记录表格很好用 —— 把「采纳了哪条审查意见、为什么」写进仓库文档,比只留在 PR 评论里更耐久。

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