Skip to content

fix: 修复 Hytale 等平台适配正确性#716

Open
zhibeigg wants to merge 1 commit into
TabooLib:dev/6.3.0from
zhibeigg:fix/703-platform-adapters
Open

fix: 修复 Hytale 等平台适配正确性#716
zhibeigg wants to merge 1 commit into
TabooLib:dev/6.3.0from
zhibeigg:fix/703-platform-adapters

Conversation

@zhibeigg

@zhibeigg zhibeigg commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

原有问题

Hytale 及其他平台适配层中存在阻塞等待、调度语义错误和平台对象包装不一致:

  • Hytale 命令/任务路径会同步等待 Future,调度器的同步、异步、取消和禁用清理语义也不完整。
  • Hytale 命令权限、首参数原生补全、sender/player 包装、异步事件 Future 和玩家退出回调与平台实际行为不一致。
  • Velocity 可能把已经是代理对象的 sender/player 再次包装。
  • Bungee aliases、注销和 title/subtitle 参数处理错误;Bukkit 床出生点可能为空;SimpleCommand 空树或只有父节点时执行行为不一致。

典型触发场景与后果

  • Hytale 主线程执行命令并同步等待异步 Future:线程互相等待,命令卡死甚至形成死锁。
  • 插件禁用或任务取消时 Hytale 任务仍持有句柄:回调继续执行,Future 不结束或资源无法释放。
  • 使用权限命令、首参数补全或玩家退出事件:可能错误拒绝/放行权限、缺少补全、sender 类型错误,退出清理不触发。
  • Velocity 已包装对象再次进入适配层:出现双重包装、类型判断失败或身份不一致。
  • Bungee 使用 alias、发送 subtitle,或 Bukkit 玩家没有床出生点:命令无法注销、标题参数错位或产生空指针异常。
  • 定义空命令体或仅父节点执行器:命令被错误拒绝或访问不存在节点。

本 PR 修改

  • 修复 Hytale 同步/异步调度、任务取消和禁用清理,并移除命令 Future 的阻塞等待,改为异步完成传播。
  • 修复 Hytale 权限、首位置原生补全、sender/player 包装、异步事件 Future 和 onQuit 回调。
  • 避免 Velocity 重复包装已有代理对象。
  • 修复 Bungee alias 注册/注销、title/subtitle 参数,Bukkit 空床点,以及 SimpleCommand 空树和父节点执行逻辑。
  • 增加动态代理、fake scheduler 和纯逻辑平台适配测试,并核对测试辅助声明的 JVM ABI。

修改目的

让平台抽象忠实反映各平台真实线程、命令、事件和对象语义,避免阻塞平台线程、类型包装错误及边界输入导致的崩溃。

兼容性与行为变化

  • 不修改公开平台抽象签名。
  • Hytale 失败和取消会通过 Future 明确传播,不再阻塞等待。
  • 修正后的权限、补全、alias、标题和空值行为与对应平台保持一致。

验证

  • ./gradlew :common-platform-api:test :platform:platform-bukkit-impl:test :platform:platform-bungee-impl:test :platform:platform-velocity-impl:test :platform:platform-hytale:test --rerun-tasks --no-parallel
  • ./gradlew :common-platform-api:build :platform:platform-bukkit-impl:build :platform:platform-bungee-impl:build :platform:platform-velocity-impl:build :platform:platform-hytale:build --rerun-tasks --no-parallel
  • git diff --check
  • 检查受影响源码与测试中无 Future.get.join()Thread.sleepCountDownLatch

Refs #703

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.

1 participant