Repository navigation
Releases: KokuuWork/voidkit
Release list
Voidkit beta0.4 — 测试版
Voidkit beta0.4
无界套件 · 支持 NeoForge / Forge / Fabric 的高版本服务器模组套件 —— 内核 + 4 个插件,共 5 个 jar。
纯服务端,玩家用原版客户端即可进服。
📖 文档站:https://kokuuwork.github.io/voidkit/
🛠 Bug 维修群:
498700382——
装不上、启动崩、模块不生效、配置改了不生效、和别的 mod 冲突,都来群里说。
报 bug 请附上日志里Voidkit 模块 x / x 已启用那一行、MC 与加载器版本、相关报错片段。🚧 测试版(beta0.4):本套件处于早期测试阶段,多数功能未经充分实测,
不建议用于生产环境。请在小众测试服试用并反馈问题,修复随版本持续推进。📦 版本号
0.1.0-beta.4(即 beta0.4 的语义化写法 —— NeoForge / Forge 的
mods.toml 要求版本号符合语义化规范,beta0.4字面量会被加载器拒绝)。♻️ 本 Release 是当前唯一的发布版本;早期测试版(
0.1.0-beta.3)与其 tag 已下架,
请始终使用最新一版。
本版包含的修复
聊天栏「全是变量」+ 普通玩家默认用不了彩色字(本版新增)
- 现象:普通玩家(非 OP)在聊天栏看到的格式模板里,
%group%%level%%title%
原样显示成变量名;玩家自己默认也没有&颜色与变量权限。 - 根因(两条叠加):
- 聊天格式化把服务器模板的变量解析,用玩家权限节点
voidkit.chat.placeholder门控了。
但模板是服主配置、不是玩家输入,本来就不该受玩家权限影响 —— 默认模板恰好用了那三个
变量,于是普通玩家看到的全是变量名。 voidkit.chat.color/voidkit.chat.placeholder两个节点不在公开节点表里,
默认谁都没有。
- 聊天格式化把服务器模板的变量解析,用玩家权限节点
- 修复:模板无条件解析(玩家的权限只作用于自己发言里的颜色与变量);
两个聊天节点改为默认开放,想收紧就在某个组加-voidkit.chat.placeholder即可。 - 影响面:仅
voidkit_display的聊天格式。
Fabric 线启动即失败:跨模块依赖硬编码了旧版本号(本版新增)
- 现象:Fabric 服务端一启动就抛
FormattedException: Some of your mods are incompatible with the game or each other!,
4 个插件全部报「需要voidkit_core的 1.0.0 及以上版本,但已安装 0.1.0-beta.1 不对」。 - 根因:
fabric.mod.json里对 core 的依赖硬编码">=1.0.0"。版本号从 1.0.x 改为
语义化的0.1.0-beta.N之后,这个约束就不再成立。 - 修复:改为构建期展开的
">=${version}",与"version"字段用同一套机制,
版本号从此只有一个事实来源。 - 影响面:
voidkit_display/essentials/utility/web的fabric.mod.json。 ⚠️ 这类问题编译和冒烟都测不到,只有真机起服才会暴露 —— 见下方「验证」。
垃圾桶「清空」按钮对无权限玩家仍显示(本版新增)
- 现象:没有清空权限的玩家打开垃圾桶,看得到「清空垃圾桶」按钮,一点就报「你没有权限」。
- 修复:按钮改为按权限隐藏(打开菜单时判定一次);动作侧仍保留二次校验,
防止客户端伪造点击。 - 影响面:仅
voidkit_utility。
/vk reload 提示成功,但插件配置其实没生效(本版新增)
- 现象:改完
voidkit/display/scoreboard.json/motd.json(以及其它模块的配置文件),
执行/vk reload—— 回执说「配置已重载」,进游戏却发现记分牌和 MOTD 一点没变。 - 根因:
reload只重读了内核配置(voidkit/core/config.json),随后挨个调用各模块的
「重载」回调。但各模块的配置文件是开机时由自己的启动钩子读进来的 —— 重载时没有人重读磁盘,
回调只是拿着内存里的旧对象又刷了一遍。提示与事实不符,是最难排查的一类问题。 - 修复:新增**「配置重读」钩子**(与启动钩子分开登记),
reload时先让各插件把配置文件
重新读盘,再执行「重新应用」。没有直接重跑启动钩子 —— 那里面除了读配置,还夹着
数据加载(玩家余额、权限组)与运行时状态发布(管理接口会把自己上报成「未运行」),
重跑会把内存里尚未落盘的改动冲掉、把运行状态改错。 - 顺带修:聊天那两个「公开权限节点」的名字取自配置,改为按来源登记 ——
改完节点名再 reload,旧名字会从公开名单里消失(此前会一直留着,等于悄悄开了个口子)。 - 命令回执现在会列出实际重读的范围,并写明不随 reload 变更的部分
(玩家余额economy/accounts.json、管理接口的bind/port、注释里标「仅启动期读取」的项)。 - 顺带修(同类):
/perm reload与重载路径原先都是「先重读、后落盘」,
会把刚用/perm改完、还没写盘的权限改动冲掉 —— 现统一改为先落盘、再重读。 - 顺带修(同类):菜单(钟表这类 opener 物品)在玩家无权限时静默无反应,
现在会说清原因;opener 指向一个不存在的菜单时也会报错并记日志
(此前服主完全看不出自己配错了)。 - 影响面:
core+ 全部 6 个模块入口。
/broadcast 在控制台执行后没有任何回执(本版新增)
- 现象:从控制台(或面板)广播,屏幕上一片空白 —— 分不清「广播成功了但没人在线」
和「命令压根没生效」。 - 根因:广播只调
broadcastSystemMessage(...)推给玩家,从不给命令来源任何回执。 - 修复:现在会回一句「已广播给 N 名玩家」/「已广播,但当前没有玩家在线(没有人收到)」。
- 这条是全命令树审计自己点出来的:348 条用例里唯一「零响应」的自有命令就是它。
玩家互传 · /tpa 与 /tpahere 传送方向写反(beta0.1 起已修)
- 现象:
/tpa <玩家>对方点接受后,实际执行的是「对方传送到我」;/tpahere <玩家>则相反。 - 根因:
TpaFeature.accept()里「移动方 / 锚点」的判定写反了。请求端的提示文案一直是对的,
只有接受端的执行是反的。
/back 往返切换失效(beta0.1 起已修)
- 现象:第一次
/back正常回到死亡点 / 上次传送前的位置;再输一次/back却是空操作,
且 back 点被写成目的地本身,玩家回不去出发地。 - 根因:
Teleports.back()原先「先传送、后记录当前位置」,而传送完成后玩家已站在目标点,
抓到的自然是目的地而非出发地。状态必须在变动前抓取。
下载
一、模组套件 · 按版本线各取一个整版 zip
| 你的服务端 | 下载 |
|---|---|
| Minecraft 1.21.1 · NeoForge 21.1.x | voidkit-0.1.0-beta.4+mc1.21.1-neoforge.zip |
| Minecraft 1.21.1 · Forge 52.x | voidkit-0.1.0-beta.4+mc1.21.1-forge.zip |
| Minecraft 1.21.1 · Fabric(需 Fabric API) | voidkit-0.1.0-beta.4+mc1.21.1-fabric.zip |
| Minecraft 1.20.1 · NeoForge 1.20.1(47.1.x) | voidkit-0.1.0-beta.4+mc1.20.1-neoforge.zip |
| Minecraft 1.20.1 · Forge 47.x | voidkit-0.1.0-beta.4+mc1.20.1-forge.zip |
每个 zip 内含该版本线的全部 5 个 jar。也可以单独下载某个模块的 jar
(下方资产列表里逐条列出)。最少只需要 voidkit_core。
ℹ️ 1.20.1 的
-forge与-neoforge两份包内容完全相同(逐字节一致,仅文件名后缀
不同)—— NeoForge 1.20.1 就是 Forge 47.1.x 的分支、且以 modIdforge注册,同一个 jar
在两种加载器上都能跑(已真机实测:Forge 47.4.20 与 NeoForge 47.1.106 均加载成功)。
按你服务端用的加载器取一份即可,切勿同时装两个(modId 相同,会被判为重复 mod)。
⚙️ 1.21.1 · Forge 52.x 是另一条独立版本线(不是 NeoForge 那份 jar):Forge 1.21.1
用官方映射、清单是mods.toml+javafml,需要 Forge 52.x 或更高。已在真机
Forge 1.21.1(52.1.19)验证:23 个模块全部注册、管理 API 全部 200。
⚠️ 已知差异:Forge 1.21.1 没有FakePlayer类,审计模块的「自动化过滤」
退化为「无网络连接的 ServerPlayer」单一判据 —— 在科技整合包里可能漏判更多,
上线前建议按自己的产线实测校准。
🧵 1.21.1 · Fabric 需要 Fabric API(把
fabric-api-<版本>+1.21.1.jar一并放进mods/)。
已在真机 Fabric Loader 0.19.5 + Fabric API 0.116.17 上验证。
二、管理平台 VoidkitHub(Go 单二进制,与 JVM 无关)
把多台游戏服的 voidkit_web API 聚合成一个后台;单服也能当普通面板用。
纯 Go 编译、CGO 关闭,无任何运行时依赖。
| 平台 | 文件 |
|---|---|
| Windows x86-64 | voidkithub-windows-amd64.exe |
| Linux x86-64 | voidkithub-linux-amd64 |
| macOS Apple Silicon | voidkithub-darwin-arm64 |
chmod +x voidkithub-linux-amd64
./voidkithub-linux-amd64 -listen 0.0.0.0:9000 -data /var/lib/voidkithub用法见 管理平台文档。
安装(模组)
把 jar 放进服务端 mods/:
| 模块 | 说明 | 必需 |
|---|---|---|
voidkit_core |
内核(插件契约 / 数据 / 文本 / 变量 / 多语言) | ✅ |
voidkit_essentials |
家 / 传送点 / TPA / 出生点 / 管理工具 / 命令简写 + 权限 + 经济 | |
voidkit_display |
MOTD / TAB / 记分牌 / 聊天栏 / 公告 / 菜单 + 称号 | |
voidkit_utility |
清扫 + 垃圾桶 + 性能监测 | |
voidkit_web |
管理 API 桥(唯一会监听端口的) |
- 1.21.1 线需要 JDK 21;1.20.1 线需要 JDK 17。
- 少装任何一个都不会崩 —— 内核给每个服务都准备了保守的兜底实现
(例如不装权限模块,权限判定退化为「只认原版 OP」)。 - 所有功能都能在
voidkit/core/config.json的features段逐个开关
(jar 粒度 ≠ 功能粒度)。
首次启动会在服务端根目录生成 voidkit/ 配置目录,所有配置文件都带中文注释。
玩家向功能默认开放、开箱即用;管理类命令认 voidkit.admin 或对应专属节点,
OP(等级 ≥ 2)自动绕过。
打包规格
- 5 个 jar:
core/essentials(吸收 perm + economy)/display(吸收 title)/
utility/web。 - 产物命名:
模组名-模组版本+mc版本-加载器,
例:voidkit_core-0.1.0-beta.4+mc1.21.1-neoforge.jar - 每个版本线一个 zip,内含当版全部 jar。
配套组件(独立仓库)
| 组件 | 仓库 |
|---|---|
| 反作弊 VoidkitGuard(客户端 Agent + 服务端校验) | KokuuWork/voidkit-guard-oss |
| 操作审计 VoidkitInspector(COI 风格,科技包友好) | KokuuWork/voidkit-inspector |
两者都依赖 voidkit_core 作为前置。
环境
| Minecraft | NeoForge | Forge | Fabric |
|---|---|---|---|
| 1.21.1 | ✅ 已发布 | ✅ 已发布(需 Forge 52.x) | ✅ 已发布(需 Fabric API) |
| 1.20.1 | ✅ 同一份 jar | ✅ 同一份 jar | ⏳ 未做 |
- 已在 165 个 mod 的 SkyExplorer 整合包上实测加载兼容
- 零 mixin、构造期零 IO,面向大型科技整合包
验证
四条版本线均已真机起服验证(各 23/23 模块注册 + 管理 API 全 200 + 无致命错误):
| 版本线 | 真机环境 |
|---|---|
| 1.21.1 · NeoForge | NeoForge 21.1.x |
| 1.20.1 · Forge | Forge 47.4.20;另一份 -neoforge 包在 NeoForge 1.20.1(47.1.106)上同样通过 |
| 1.21.1 · Forge | Forge 52.1.19 |
| 1.21.1 · Fabric | Fabric Loader 0.19.5 + Fabric API 0.116.17 |
-
开发服冒烟自检通过:23 个模块注册、28 个管理 API 全部 200、19 项结构断言
-
/vk reload机制已真机验证:在运行中修改display/motd.json与scoreboard.json,
执行/vk reload后日志确实重新读出了新配置(MOTD 1 套 → 2 套、记分牌 1 套 → 2 套) -
全命令树实跑:真机服务端上把 137 个根命令 / 348 条用例(每条命令都试「无参数」与
「给一个不存在的参数」)跑了一遍,无异常堆栈、无崩溃 -
四条线已用一键验收脚本跑通(
tools/verify-installed-server.sh,真实服务端,本轮实测):版本线 起服 模块 管理 API 全命令树 MOTD 1.21.1 · Forge 52.x ✅ 23/23 ✅ 348 条无异常 ✅ 1.20.1 · Forge 47.x ✅ 23/23 ✅ 342 条无异常 ✅ 1.20.1 · NeoForge 47.1.x ✅ 23/23 ✅ 342 条无异常 ✅ 1.21.1 · Fabric ✅ 23/23 ✅ 109 条无异常 ✅ MOTD 用 Server List Ping 直接问服务端要状态,取到的是客户端真正会看到的那段文本。
-
「跨模块依赖版本」类问题只在真机起服暴露 —— 本版的 Fabric 修复即由此发现
-
客户端行为实测(本版新增):让真实客户端连上 1.21.1 Fabric 服务端,逐项确认客户端
实际看到的画面,而不只看服务端日志:- 聊天格式正常 —— 日志出现
[default][Lv0] VoidkitTest » voidkit,说明组前缀、
权重等级与变量解析均正确(变量解析坏掉时会看到%player%原样输出或满屏变量,
正是本版首条修复要解决的问题) - 记分牌已推送 —— 服务端日志确认
已向 VoidkitTest 推送记分牌「default」:6 行,
客户端画面同步显示「玩家 / 在线 / 延迟 / TPS」四列与 VOIDKIT 标题
- 聊天格式正常 —— 日志出现
-
仍未做:传送 / 家/ 经济 / 权限的状态流转(余额变动、传送回退、权限组切换后的
命令可见性变化)需要多人在线或分步操作,本版仅确认了单点状态正确。
除加载、API 链路与上述客户端画面外,多数命令行为未经系统实测。
遇到问题
QQ 维修群:498700382
装不上、启动崩、模块不生效、配置改了不生效、和别的 mod 冲突 —— 都来群里说,
看到就处理。也可以开 Issue。
报 bug 请附上三样东西,能省掉一轮来回:
- 日志里
Voidkit 模块 x / x 已启用那一行(确认模块到底加载了几个) - MC 与加载器版本(例如
1.21.1 · Forge 52.1.19) - 相关报错片段
许可证
MIT