一个 jar 干十个插件的活:DarkPixel
DarkPixel 是给 Paper 1.21.4 服务器写的综合插件, 把大厅、段位、反作弊、管理工具这些平时要各装一个的活拧进一个 jar。这样版本一升不用赌哪个前置先炸, 配置也不散一地, 功能之间还能直接共享数据。
技术栈没花活: Java 21, Paper API 1.21.4-R0.1-SNAPSHOT, Gradle 8.8。前置 ProtocolLib、NBTAPI、PacketEvents, 发包和 NBT 绕不开它们; Gson 和 NanoHTTPD 直接 shade 进 jar。
功能都挂在一个 Global 上互相拿数据。段位系统内置一个 RankServer, 用 NanoHTTPD 起个 HTTP 做跨实例同步, 端口被占就自动降级成 client 去连别人, 不至于起不来直接崩。/aichat 对接 DeepSeek, 加了白名单和限流。/dashboard 是箱子菜单, 反作弊 DarkAC 专抓转头怪, /darkban、/freeze 一套管理命令, /reloadconfig 异步热重载, 改配置不用重启。
坑主要在发包: 这类功能对版本特别敏感, Paper 一升级就得回来对一遍。数据库留了个心眼, MySQL 密码从环境变量 DARKPIXEL_DB_PASSWORD 读, 免得哪天手滑提交上去。CI 挂 GitHub Actions, Ubuntu + Temurin JDK 21, 推上去自动出 jar。
现在跑在 1.0-SNAPSHOT, 列的功能都能用, 还在断断续续加东西。代码在 github.com/dwgx/darkpixel, MIT, 想开服的直接抄去改。