layue13andClaude Opus 5.5 85f56d042c fix: 关闭插件宿主时不再持有宿主锁等待 onDisable
- PluginHost.close() 原本整个方法持有宿主锁,包括等待各插件 onDisable 的最长 10 秒。插件在
  onDisable 里关闭自己的命令注册(文档推荐的做法)时,CommandService 的注销要拿同一把锁,
  于是一直等到截止时间被放弃:onDisable 后面的清理(线程池、数据库连接池)不会执行,日志里
  出现 “onDisable exceeded shutdown deadline”。AetherShard 每次停机都会遇到
- 现在只在 onDisable 之前和之后的步骤持锁,等待插件时不持锁;每个插件的 deactivateAndRemove
  仍在锁内。同时调用 close() 的第二个线程等第一个完成后返回,与之前被锁挡住时的效果一致
- PluginHostTest:插件在 onDisable 里关闭命令注册,close() 远早于截止时间返回且 onDisable
  执行完;修复前该测试失败

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 16:47:13 +08:00
2026-06-30 17:28:50 +08:00

MoonBridge

面向 Minecraft 1.7.10 Forge 的玩家会话代理:登录认证、协议转发、跨后端转服,以及供插件使用的玩家、服务器目录、富文本、命令补全、类型化事件和 Channel 消息服务。后端插件共享认证连接,通过 channel 与 proxy 或其他 backend 通信。空岛分配、实例唤醒和 Ban 数据存储由插件实现。

文档

快速开始

需要 JDK 25。发行包不包含 Minecraft 后端;要完成玩家登录,需要一个 Minecraft 1.7.10 后端,且 initialRouting.servers 中至少一个名称能解析到它(随附配置为 lobby → 127.0.0.1:25565)。

./gradlew check :proxy-core:installDist                # Windows: .\gradlew.bat check :proxy-core:installDist
cd proxy/core/build/install/moonbridge
java -jar moonbridge.jar --validate-config config/moonbridge.yml
java -jar moonbridge.jar                                 # 默认读取 config/moonbridge.yml

需要全部部署物(服务器包、后端插件、客户端 mod)时运行 ./gradlew release,说明见发行物与安装位置。LuckPerms 平台插件从 proxy/vendor/luckperms 子模块编译,默认不构建;需要时先 git submodule update --init --recursive,再加 -Pluckperms。

默认配置为 OFFLINE,仅监听 127.0.0.1:25577。公开部署使用 ONLINE_BUNGEE 并限制玩家直连后端;认证、监听、入口候选和后端地址见运行配置。

后端插件开发

服务器安装 moonbridge-backend JAR(插件名 MoonBridgeBackend)。业务插件对同一个构件 uk.potatolab.moonbridge:backend 使用 compileOnly / provided,并通过 BukkitMessagingService 获取共享消息服务;无需创建网络连接。源码当前的 0.1.0-SNAPSHOT 仅是本地开发构件版本;发布依赖应使用发布工作流提供的不可变版本。API 与完整示例见后端插件接入。

从 StrataProxy 升级见迁移说明;历史验收记录保留当时的名称与构件路径。

验证状态

当前可引用的验收记录及其覆盖范围见文档索引和验证方法。各记录只证明其注明的提交和环境,不代表生产容量。已知 Uranium 候选服登录停滞见记录及 Uranium #585。

生产权限存储统一使用 MariaDB 13.0.2;见 MariaDB 权限数据库。

S
Description
No description provided
Readme
2.8 MiB
0 Stars 1 Watchers 0 Forks
Languages
Java 95.1%
PowerShell 3.5%
JavaScript 0.7%
Python 0.4%
Kotlin 0.2%
Other 0.1%