Skip to content

Add minecraft-server: native Paper Minecraft server - #87

Merged
greyoak111 merged 2 commits into
mainfrom
comp/minecraft-server
Nov 11, 2026
Merged

greyoak111 merged 2 commits into
mainfrom
comp/minecraft-server

Conversation

@greyoak111

@greyoak111 greyoak111 commented Nov 11, 2026 •

Copy link
Copy Markdown
Owner

组件 / Component

  • id: minecraft-server
  • 上游 / Upstream: Paper 1.21.11 build 132 (PaperMC) + Minecraft 1.21.11 服务端(Mojang,首次运行时下载)
  • 许可证 / License: GPL-3.0(Paper);Minecraft 服务端 jar 是 Mojang 专有软件,不随组件分发
  • 主页 / Homepage: https://papermc.io/downloads/paper

What

在手机上原生开 Minecraft Java 版服务器,不需要 root、proot 或电脑:

  • Paper 1.21.11-132 跑在底座自带的 Java 21 上,默认只监听 127.0.0.1:25565。
  • 自带 detached supervisor、Unix 控制套接字、start/stop/status/console/whitelist/backup/logs。
  • stop 先发 stop 让服务器存档,90 秒没退出才终止 Java;backup 在运行时先
    save-off/save-all flush,打包 world* 和配置后恢复 save-on。
  • 默认 online-mode=true,不提供 offline-mode/破解客户端支持;局域网要显式
    --lan 或 config set bind lan,并建议开白名单。
  • 所有世界、配置、日志、备份在 ~/.cccodroid/minecraft-server。

常用命令:

minecraft-server setup --check        # 只读,报告 Java/EULA/Paper 状态
minecraft-server setup --accept-eula  # 用户明确接受 EULA 后
minecraft-server start                # 默认等 60 秒
minecraft-server status
minecraft-server console list
minecraft-server whitelist add <玩家名>
minecraft-server backup
minecraft-server stop

首次运行 / First run

  • Paper jar 通过 fetch 从 PaperMC 官方 fill-data.papermc.io 取,52.3 MB,sha256 钉死:
    5ffef465eeeb5f2a3c23a24419d97c51afd7dbb4923ff42df9a3f58bba1ccfba。
  • 第一次 start 时 Paper 会从 Mojang 官方下载 Minecraft 1.21.11 原版服务端(约 54 MB),
    再在本地打补丁。
    在 HONOR Magic V6 上实测这一步 528917ms(约 8.8 分钟);
    之后启动约 13 秒,日志里 Done (10.748s)!。
  • EULA 必须由用户自己读 https://aka.ms/MinecraftEULA 并明确同意;组件不自动接受,也不提供
    eula=true 的绕过路径。skill 明确要求先问用户,得到同意后才跑 setup --accept-eula。

运行链路

minecraft-server($PREFIX/bin 的 sh 包装)
  └─ $PREFIX/bin/python3 .../lib/cli.py
       └─ supervisor.py(detached,数据目录的 run/state.json 记录 pid)
            ├─ java -Xms512M -Xmx2G -XX:+UseG1GC -jar paper.jar nogui
            │    ├─ 首次启动:Paperclip 从 Mojang 下载原版服务端到 cache/,再打补丁
            │    └─ 监听 server.properties 里的 server-ip:server-port(默认 127.0.0.1:25565)
            ├─ run/control.sock:console / stop / backup 的控制通道
            └─ logs/server.log:Java 的 stdout/stderr
这一环 由谁提供 装在哪 / 缺了会怎样
包装、CLI、supervisor、selftest 本组件 $PREFIX/share/cccodroid/components/minecraft-server/
Java 21、Python、jar 底座(openjdk-21、python) 底座包;缺 Java 会明确报错
paper.jar 1.21.11-132 fetch 自 PaperMC 官方 组件目录;sha256 不对会报安装不完整
Minecraft 原版服务端 jar 首次启动从 Mojang 官方下载 数据目录 cache/;没网时启动停在日志里
世界、配置、白名单、备份 本组件在数据目录生成 ~/.cccodroid/minecraft-server/

体积与共用包 / Size and sharing

  • 下载 52.3 MB · 装后 52.5 MB · 10 个文件 · 2 个包
  • 包:paper.jar(52.3 MB)+ ca-certificates-java(0.1 MB)
  • 和别的组件共用的包:无
  • Java 21 与 Python 由底座提供,不重复打包。

Tested

在 HONOR Magic V6 / Android 17(devkit-2026.10.28)上:

  • node tools/check-recipes.mjs 通过。
  • ci-build.mjs --dry 与 --no-upload 对全部 9 个底座构建通过,0 失败。
  • audit.mjs --only minecraft-server:0 错;1 条底座/仓库版本漂移警告;
    🔴 项是 fetch 的 Paper jar(预期,哈希打包时已核对)。
  • 手动全流程:
    • setup --check 正常;setup --accept-eula 在一次性测试目录建好配置;
    • 首次 start 完成 Mojang 下载 + remap,端口打开;第二次 start 约 13 秒就绪;
    • status、console list、whitelist add、backup(运行中/停止后各一次)、stop 均通过;
    • config set bind lan/loopback、config set whitelist on/off 均验证;
    • 杀掉 supervisor 后 stop 能清理遗留 Java;没有状态文件时也能按 Paper jar 路径找到并清理;
    • selftest:
OK  java: openjdk version "21.0.13" 2026-10-20
OK  paper: 1.21.11-132 sha256 OK
OK  paperclip: Paperclip Main.class 可读
OK  properties: server.properties 解析正常
===== 总结 ===== java=OK paper=OK paperclip=OK properties=OK

测试中的 EULA 只写在一次性测试数据目录里;组件本身不会替用户接受 EULA。没有跑完整的
Minecraft 客户端登录/多人游戏对局,也没有跑 verify-device(需要合并后从签名索引安装)。

许可与风险

  • Paper 是 GPL-3.0,组件通过 fetch 从官方地址取,未修改。
  • Minecraft 服务端 jar 是 Mojang 专有软件,不随组件分发;首次启动由 Paper 从 Mojang 官方
    地址下载,使用受 Minecraft EULA 约束。组件不提供离线模式、破解客户端或账号共享。
  • 默认只绑 127.0.0.1;skill 明确写了不要直接公开 25565,局域网要开 online-mode=true 并
    建议白名单。
  • 日志可能含玩家聊天和 IP,备份含世界和玩家数据;skill 要求先问用户再读/拷/删。
  • 组件不读取或转发账号凭据;online-mode=true 的认证由 Minecraft 客户端和 Mojang 完成。

检查 / Checklist

  • node tools/check-recipes.mjs 通过 / passes
  • ci-build.mjs --dry 依赖都能解 / resolves (also built for all bases with --no-upload)
  • 读过组件编写规则 / read the authoring rules
  • 描述与 skill 里的版本、能力以实际打进包的为准 / description and skill match what is packaged
  • 看过审计报告 / read the audit report (0 errors; warning above)
  • 第一次运行要下载的:skill 里写明大小与来源、先问用户 / first-run downloads disclosed and consent required
  • SKILL.md 不会让 Claude 读取或打印令牌、密码 / never reads or prints secrets
  • 对外发布、删除类操作写明先问用户 / asks before public or destructive actions
  • needs 如实填写 / filled honestly (shizuku, display, gpu all false)
  • 不涉及反代、共享或转售账户、破甲、批量操控账号 / not for reverse proxies, shared accounts, jailbreaking or mass-controlled accounts

真机测试 / Device test

  • node tools/verify-device.mjs 全过,记录另开 PR 进 verified.json / not run yet (needs merged signed index)
  • 手动全流程已跑 / manual end-to-end run above
  • 设备 / Device: HONOR Magic V6 / Android 17
  • cccodroid 版本 / version: devkit-2026.10.28

🤖 Generated with Claude Code

合并前补的 / Added before merge

  • 起 supervisor 前去掉 CCAPP_RUN、CCAPP_RUN_ID、CLAUDECODE、CLAUDE_CODE_ENTRYPOINT:否则网关重启或停止那一轮对话时,服务器会被当成那一轮留下的进程清掉(同 openai-bridge 的 start-bridge.sh)。/ The supervisor now starts without cccodroid's run marks so the server survives stopping the turn or a gateway restart.

Paper 1.21.11-132 on the base Java 21, loopback-only by default, with EULA gate, supervisor, console, whitelist, backups and graceful stop.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

组件审计报告

底座 devkit-2026.10.28(3768afcf79a7)· 规则见 tools/audit.mjs 开头。🟢 看报告即可 · 🟡 要读脚本和 skill · 🔴 要逐行审

🔴 minecraft-server 1.21.11-132-r1

下载 52.3 MB · 装后 52.5 MB · 10 个文件 · 2 个包 (第一次发布)

  • ⚠️ 底座与仓库版本不同(组件按底座的版本用): ca-certificates 1:2026.10.20-1→1:2026.11.05-1, libexpat 2.9.0→2.10.0, libiconv 1.19→1.19.1, libjpeg-turbo 3.2.0→3.2.1, libsqlite 3.54.1→3.54.1-1, littlecms 2.19.1→2.20, openjdk-21 21.0.13→21.0.13-2, python 3.14.8→3.14.10, zlib 1.3.2→1.4
  • ✅ 不会盖掉底座的文件
  • ✅ 0 个 ELF 检查过
  • ✅ 每个 ELF 要的库都找得到
  • ✅ bin 入口与 selftest 命令都在

人要看的:

  • 🔴 fetch 了仓库外的文件:paper.jar ← fill-data.papermc.io(哈希打包时已核对)
  • 🟡 配方自带文件 5 个:usr/bin/minecraft-server、usr/share/cccodroid/components/minecraft-server/lib/common.py、usr/share/cccodroid/components/minecraft-server/lib/cli.py、usr/share/cccodroid/components/minecraft-server/lib/supervisor.py、usr/share/cccodroid/components/minecraft-server/lib/NOTICE

和别的组件共用的包:无

包清单
包 版本 下载
ca-certificates-java 1:2026.11.05-1 0.1 MB
paper.jar 1.21.11-132 52.3 MB

CI 实跑 selftest(arm64 + termux-docker)

组件 结果 说明
minecraft-server ✅ 退出码 0;最后一行:===== 总结 ===== java=OK paper=OK paperclip=OK properties=OK

环境同 App 里 Claude 的 Bash 工具(PREFIX / HOME / TMPDIR / termux-exec),没有 GPU、屏幕、Shizuku。通过只说明「装得上、跑得起来」,安卓特有的问题仍要真机。

The supervisor (and the Java server under it) inherited CCAPP_RUN /
CCAPP_RUN_ID from the Claude turn that ran `minecraft-server start`, so
cccodroid treated it as a leftover of that turn and killed it when the
turn was stopped (0.6.17) or the gateway restarted. Drop the run marks
from the supervisor's environment, like openai-bridge's start-bridge.sh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@greyoak111
greyoak111 merged commit ddc03e5 into main Nov 11, 2026
2 checks passed
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.

2 participants