kokuu.org 背后的开发团队。我们运营一台 Minecraft 服务器, 也为它写真正需要的服务端工具——写完就开源,让别的服务器直接拿去用。
不做概念验证。所有项目都在几百个 mod 的大型整合包里实际运行, 每一行代码的底线都是:装上就能用,用着不出问题。
纯服务端套件 —— 用服务端 mod 实现 Bukkit / Essentials / CMI 那一类通用服务器功能。 玩家用原版客户端进服,什么都不用装。
架构一句话:内核 + 8 个组件,每个都是独立 jar,可单独安装、单独卸载、单独发布。
| 组件 | modId | 职责 | 可选 |
|---|---|---|---|
voidkit 内核 |
voidkit_core |
插件契约、服务注册表、数据存储、文本变量系统、多语言(唯一打包 Kotlin 运行时的 jar) | 必装 |
同上 · essentials |
voidkit_essentials |
家 / 传送点 / TPA / 管理工具 / 命令简写 | |
同上 · display |
voidkit_display |
MOTD / TAB / 记分牌 / 聊天栏 / 公告 / 菜单 | |
同上 · perm |
voidkit_perm |
LuckPerms 风格的组树与节点 | ✅ |
同上 · title |
voidkit_title |
称号 + 游戏内 GUI(支持玩家自定义) | |
同上 · economy |
voidkit_economy |
货币 / 转账 / 排行 / 估值表 /sell |
✅ |
同上 · utility |
voidkit_utility |
清扫 + 垃圾桶 + 性能监测(TPS / MSPT / 区块热点) | |
同上 · web |
voidkit_web |
管理 API 桥(全套件唯一监听端口的组件),配合 Go 管理平台 | ✅ |
jar 粒度 ≠ 功能粒度:每个功能都是独立可关的
Feature,配置里逐个开关。
套件铁律:每个组件只依赖 voidkit_core,core + 任意组件都能单独运行。
插件之间零编译依赖(全仓 0 处跨插件 import),跨插件通信只走服务注册表。
内核不认识「家」「权限组」「称号」——它只认接口,并给每个服务准备保守的兜底:
| 不装 | 后果 |
|---|---|
perm |
权限退化成「只认原版 OP」,其余照常 |
economy |
扣款恒返回失败,表现为「暂时不能购买」而不是报错 |
web |
服务器不监听任何端口,一行 HTTP 都不跑 |
- 零 mixin —— 全部走事件监听,不和整合包里已有的 mixin mod 争抢类改写
- 构造期零 IO —— 配置读取推迟到服务端启动阶段,不拖累几百个 mod 的并行加载
- 命令简写是转发不是重写 —— 行为与原版完全一致,逐条冲突保护,撞名只跳过一条
- 温和干预默认关闭 —— 即使配置写错,最坏情况也只是清掉一些掉落物,不碰方块 / 机器 / 存档
- 清扫 ≠ 删除 —— 掉落物收进垃圾桶(按类型聚合,超容量按价值淘汰,改名物品永不动),玩家可以
/trash取回
更多设计细节(点开)
- 平台适配层收口:
core.api(契约层,跨平台跨版本一行不改)与core.platform(唯一按加载器重写的层)分离,移植到 Forge / Fabric = 只重写platform/xxx/,插件零改动 - 配置文件按插件分家,全部带中文注释(JSONC);一份插件的配置可以整体备份、整体交接
- 内核无 HTTP:各模块只往纯数据的
ApiRouter挂路由,由 web 插件消费 - 文本语法:MOTD / TAB / 聊天栏通用,支持颜色码、
%变量%、可点击按钮(run:/suggest:/url:/copy:) - 性能监测读原版滑动平均:MSPT 直接读 vanilla 维护的值,TPS 由它反推——比数 tick 反应快得多
- 数据放服务端根目录不放存档里:删存档重开不丢玩家档案
voidkit-inspector —— CoreProtect 风格的
方块 / 容器 / 实体操作记录,专为科技整合包设计。
普通查插件在科技包里会翻车:一条自动化产线刷几百万圆石全记进数据库, 真正的破坏行为被淹没在噪音里。Inspector 从架构上先解决「是谁干的」:
- 来源分类是灵魂:机械臂 / 管道 / 假玩家驱动的操作自动识别、默认不记(日志里能看出
#create/#mekanism/#ae2);树叶腐烂默认不记;爆炸、苦力怕、末影人该记照记 - 多线程读写:主线程只做 O(1) 入队,唯一写线程批量事务落库(WAL),队列满自动丢弃——绝不卡 TPS;查询走独立线程池,与写入并行
- 嵌入式 SQLite 零配置单文件 + 复合索引 + keyset 分页:几十万条记录翻页毫秒级
- 完整 NBT 存档模组方块实体;查询结果以箱子 GUI 展示,悬停看「谁 / 何时 / 动作 / 坐标」
voidkit-guard-oss —— 客户端 Agent + 服务端校验,
同一个 jar 双端安装。七个模块:客户端完整性(进服握手 + 中途随机复检)、
封禁(IP + 机器码 + UUID 三重命中)、按需截屏取证、审计、深度扫描(进程 / 窗口 / 隐藏的作弊 jar)、
挖掘统计与战斗遥测(只告警不处置,处置权永远留给服主)。
几个我们引以为傲的设计:
- 传输与内存:RSA-2048 握手 → AES-256-GCM 全链路;防重放 nonce 轮换;会话密钥以 XOR 混淆副本驻留堆,明文用完即擦
- 防中间代理篡改:服务端给每次挑战签名,客户端用内置公钥环验签——剥掉检测的山寨 agent 一回包就是实锤
- 蜜罐协议:向已验证会话随机下发真 agent 协议里不存在的诱饵消息,真 agent 静默丢弃,改过的协议壳一旦回包即篡改实锤
- 静默反侦察:客户端零提示零日志,踢人话术只说「环境校验未通过」,真实原因只进审计——对手连自己漏在哪都不知道
- 隐私边界写进代码:只采集反作弊最少信息;机器码只上报加盐哈希原文不出客户端;截屏只截 MC 游戏窗口;IP 归属地内置 ip2region 离线库,IP 永不出服务器
威胁模型边界(不夸大)
| 能做到 | 做不到 |
|---|---|
| 赶走「装个透视就进服」的绝大多数人 | 防不住内核级对手——那需要驱动签名,与整合包零 mixin 冲突,明确不做 |
| 让逆向成本高到不值得(签名挑战 + 随机复检 + 静默) | 防不住「重写一个假 agent」——客户端在对方机器上,JVM 层物理上没有不可破解 |
我们宁可把边界写清楚,也不假装无所不能。
| 项目 | 说明 |
|---|---|
deathback |
Arclight 混合端轻量补丁:CMI 的 /back 在死亡场景失效,根因已从字节码层面定位(权限门槛导致死亡路径不写回传位置)。本插件不新增命令、不接管逻辑,只把死亡坐标补写进 CMI,让原生 /back 恢复正常 |
| 项目 | 说明 |
|---|---|
| arcanum-reborn | 神秘时代4(Thaumcraft 4)在 Minecraft 1.20.1 (Forge) 上的非官方独立复刻。原始代码从未公开、跨 4 个 API 断代无法移植——所以是以现有技术底座重做,不是搬运。尚未获得原作者授权,非商业,当前内部开发中 |
这些原则写在每个仓库里,也写在每次评审里:
- 低耦合是最高原则 —— core + 任意组件单独可跑;缺了不崩(有兜底),装了不拖累别人
- 零配置、开箱即用 —— 智能默认值,配置是给特殊情况准备的,不是给入门者设的门槛
- 保守优先 —— 宁可少做事不出问题,不做激进优化;所有自动干预默认关闭、有硬边界
- 不说大话 —— 威胁模型、兼容性边界、已知缺陷都直接写进文档
- 拥抱现代技术栈 —— Kotlin 2.1、Go 单二进制、嵌入式 SQLite、Vue 3;前提是不牺牲「稳 + 轻 + 零配置」
| 项目 | 版本 | 状态 |
|---|---|---|
| voidkit | 生产运行中(kokuu.org) | |
| voidkit-inspector | v1.2.0 | 生产运行中 |
| voidkit-guard-oss | 开发中 | 活跃开发 |
| deathback | 稳定 | 维护 |
| arcanum-reborn | 早期 | 研究中 |
- 服务器与官网:kokuu.org
- 邮件:Hi@kokuu.org