Skip to content

蓝图分享改为更稳定的0x0#110

Draft
Wind-DeterMination-backup wants to merge 5 commits intoTinyLake:mainfrom
Wind-DeterMination-backup:pastebin-issue
Draft

蓝图分享改为更稳定的0x0#110
Wind-DeterMination-backup wants to merge 5 commits intoTinyLake:mainfrom
Wind-DeterMination-backup:pastebin-issue

Conversation

@Wind-DeterMination-backup
Copy link

@Wind-DeterMination-backup Wind-DeterMination-backup commented Mar 14, 2026

变更概览

  • 新增可配置的蓝图分享源列表,默认保留 https://pastebin.com,并将默认备用源临时调整为 https://0x0.st
  • 上传端支持多源失败回退;当首选源不可用时,会继续尝试后续已启用源。
  • 仅当实际使用 pastebin.com 时继续发送旧版聊天分享格式;其他源统一改走新的 SchemV2 协议,避免旧版客户端误去 pastebin.com/raw/<code> 拉取错误内容。
  • 新接收端同时支持旧格式与 SchemV2,其中 0x0.st 备用源按直链方式读取。

这次为什么临时去掉 PrivateBin

  • 2026-03-15 这次调整里,先把 PrivateBin 方案暂时回滚了。
  • 原因不是功能方向变了,而是当前更需要一个实现简单、可直接上传文本、链路更稳定的备用源。
  • 0x0.st 当前更适合作为临时替代:它不要求客户端额外实现加解密协议,上传和读取都是普通 HTTP 流程,故障面明显更小。

参考的 0x0.st 使用方式

基于 https://0x0.st/ 当前公开说明,这次接入使用了它的基础文件上传接口:

  • 上传方式:multipart/form-data
  • 主要字段:
    • file: 上传文件内容
    • secret: 让返回链接更难猜
    • expires: 控制过期时间
  • 返回:纯文本 URL
  • 读取:直接 GET 返回 URL
  • 另外按站点说明加了可识别的 User-Agent

实现细节

1. 新增分享源配置模块

  • 新增 src/mindustryX/features/PastebinShare.kt
  • 使用 SettingsV2.Data<List<Source>>("arcExtra.schematicShare.pastebinSources", ...) 持久化分享源列表。
  • 每个 Source 当前包含:
    • enabled:是否参与上传尝试
    • typepastebin / direct
    • name:显示名
    • baseUrl:站点基地址
    • expire:该源使用的过期时间参数
  • 设置 UI 使用折叠表格,支持:启用、类型切换、名称/地址编辑、过期时间编辑、保存、删除、添加。

2. 上传逻辑改为“多源回退 + 成功源记忆”

  • ShareFeature.shareSchematic() / shareSchematicClipboard() 现在统一委托给 PastebinShare.upload()
  • PastebinShare.upload() 会按已启用源顺序尝试上传;若某源失败,则记录失败原因并继续尝试下一个源。
  • 成功后会记住本次成功的源,后续优先从该源开始尝试,减少在已失效源上的重复失败。
  • 对 pastebin 类接口做了更严格的成功判定:
    • 接受 http(s)://.../<id>
    • 接受纯 <id>
    • Bad API request, ... 或其他非预期文本都视为失败并继续回退

3. 0x0.st 备用源接入方式

  • 当前默认备用源改为:https://0x0.st
  • 上传时:
    • 以文本文件形式上传蓝图 base64 内容
    • 使用 multipart/form-data
    • 附带 secret=1
    • 默认 expires=24(小时)
    • 附带 User-Agent: MindustryX-schematic-share/<version>
  • 成功后服务端返回完整直链 URL,代码会解析出路径并转成内部 ShareLink
  • 读取时直接 GET 这个路径,不再需要 PrivateBin 的本地解密步骤

4. 聊天分享协议升级

旧协议(仅 pastebin.com 继续使用)

  • 发送内容保持不变:<MDTX {Iconc.paste}><ARCxMDTX><Schem> ... <id>
  • 这样默认情况下仍兼容旧版 MDTX 客户端。

新协议(非 pastebin.com 源)

  • 发送内容改为:<MDTX {Iconc.link}><ARCxMDTX><SchemV2> <type> <baseUrl> <id>
  • 关键点:
    • 不再使用 Iconc.paste
    • 不包含字面量 <Schem>
    • 旧版客户端不会误触发旧逻辑
  • type 目前支持:
    • pastebin:按 <baseUrl>/raw/<id> 读取
    • direct:按 <baseUrl>/<id> 直接读取

5. 接收端兼容

  • ShareFeature.resolve() 顺序调整为:先解析 SchemV2,再回退到旧 <Schem> / <MDTX paste> 逻辑。
  • resolveSchematicShareV2() 只在 ArcOld.schematicShare 开启时工作,行为与旧逻辑保持一致。

6. 文案与设置

  • 更新了:
    • assets/bundles/bundle-mdtx.properties
    • assets/bundles/bundle-mdtx_en.properties
  • 新增 settingV2.arcExtra.schematicShare.pastebinSources.name/description
  • 文案中明确说明:当前默认备用源改为 0x0.st,原因是它更稳定

兼容性说明

  • 默认首选仍是 pastebin.com,因此“默认配置下的首次行为”仍然是旧协议。
  • pastebin.com 失效并回退到其他源时,消息自动切换为 SchemV2,这是为了防止旧客户端错误拉取。
  • shareSchematicClipboard() 在回退到 0x0.st 时会复制站点返回的完整直链。

验证

  • 已在 work/ 下执行:gradle :core:compileKotlin --stacktrace
  • 结果:通过
  • 这次只做了编译级验证,尚未做真实房间里的手工联机收发测试。

后续评审重点

  • 0x0.st 在实际蓝图分享频率下的稳定性和可接受性
  • SchemV2 协议字段是否需要进一步抽象,而不是仅靠 type + baseUrl + id
  • 是否需要把“成功源记忆”进一步改成严格 round-robin
  • 后续如果要重新启用 PrivateBin,建议单独做成独立分支重新验证

@gemini-code-assist
Copy link

Note

Gemini is unable to generate a summary for this pull request due to the file types involved not being currently supported.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

这个 PR 引入了对蓝图分享的多源支持,是一个很棒的功能增强。主要变更包括:

  • 新增了 PastebinShare.kt 模块,用于管理多个分享源(如 pastebin.comPrivateBin),并实现了上传时的失败回退逻辑。
  • 引入了新的 SchemV2 聊天协议,以更好地区分不同来源的分享,并为 PrivateBin 增加了客户端加密支持。
  • ShareFeature.kt 进行了重构,使其利用新的分享模块,简化了代码。

代码整体结构清晰,对新旧协议的兼容性处理考虑得比较周到。

我发现了一些与自定义加密实现相关的潜在风险,并已在代码中提出了具体的审查意见。请关注这些安全性和健壮性方面的建议。

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

这次的变更引入了对蓝图分享的多源支持,这是一个很棒的功能增强。整体实现很清晰,特别是 PastebinShare.kt 中的回退和重试逻辑。代码结构良好,并且对新旧协议的兼容性处理也很周到。我发现了一些可以改进的小地方,主要集中在新引入的 PastebinShare.kt 文件中,旨在提高代码的健壮性和可维护性。请查看我的具体评论。

@Wind-DeterMination-backup Wind-DeterMination-backup marked this pull request as ready for review March 14, 2026 17:15
@Wind-DeterMination-backup Wind-DeterMination-backup changed the title Draft: 蓝图分享多源接入计划 蓝图分享改为更稳定的0x0 Mar 14, 2026
@Wind-DeterMination-backup Wind-DeterMination-backup marked this pull request as draft March 22, 2026 11:40
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.

1 participant