
异步预制体
非阻塞预制件加载和批量异步粘贴,适用于Hytale。粘贴数百万个方块,不会冻结服务器或导致客户端崩溃。
AsyncPrefab
AsyncPrefab 是一款服务端 Hytale 插件,可让大型预制建筑的加载和粘贴完全非阻塞。
无需冻结服务器或导致客户端崩溃,即可粘贴数百万个方块。
问题
Hytale 内置的预制建筑系统完全运行在世界线程上。
对于大型预制建筑(超过 400 万个方块),可能导致:
- 选择预制建筑时服务器冻结 7 秒以上
- 客户端因过大的
EditorBlocksChange数据包而崩溃 - 放置数百万个方块时服务器完全挂起
- 粘贴完成后内存长时间占用
大规模世界编辑变得不稳定且充满风险。
解决方案
AsyncPrefab 拦截预制建筑管道,使所有操作异步化并分批处理。
后台预制建筑加载
当选择 .prefab.json 文件时,文件会在后台线程而非世界线程上加载。
- 无服务器冻结
- 菜单立即关闭
- 聊天中显示实时进度更新
过大数据包保护
超过约 400 万个方块的预制建筑可能生成对客户端来说过大的数据包。
AsyncPrefab 会安全地阻止这些数据包,防止崩溃。
异步分批粘贴
方块放置被拆分为可配置的批次(默认:每 200 毫秒 50,000 个方块)。
- 服务器保持响应
- 无世界线程锁定
- 无多秒冻结
异步撤销 / 重做
每次异步粘贴都会捕获原始方块。
/asyncundo/asyncredo
撤销和重做同样分批处理——无冻结。
自动内存清理
粘贴完成后,缓存的预制建筑数据和选择将被清除以释放内存。
命令
| 命令 | 描述 | 权限 |
|---|---|---|
/paste |
内置粘贴命令的异步替代 | hytale.editor.selection.clipboard |
/asyncpaste <prefab> [x y z] [batchSize] [batchDelay] |
异步加载并粘贴一个预制建筑 | asyncprefab.paste |
/asyncundo |
撤销上一次异步粘贴 | asyncprefab.undo |
/asyncredo |
重做上一次撤销的异步粘贴 | asyncprefab.redo |
所有命令都需要创造模式。
粘贴工具集成
AsyncPrefab 会自动拦截内置的粘贴工具。
像往常一样点击粘贴——放置操作会自动重定向到异步分批处理。
无需配置。
安装
- 将
.jar文件放入服务器mods/文件夹 - 重启服务器
- 完成
开箱即用。
要求
- 无
性能示例
使用一个 820 万个方块的预制建筑进行测试:
| 操作 | 原版 | AsyncPrefab |
|---|---|---|
| 预制建筑选择 | 冻结 8 秒以上 | 0 秒冻结 |
| 方块粘贴 | 服务器挂起 / 客户端崩溃 | 分批且非阻塞 |
| 内存保留 | 无限期缓存 | 自动清理 |
面向开发者
AsyncPrefab 为其他插件暴露了一个服务 API。
示例:
AsyncPrefabService service = Asyncprefab.getService();
service.paste(world, "my_prefab.prefab.json", position, PasteOptions.defaults());
自定义批次大小和延迟可通过 PasteOptions 配置。
🆘 支持
Discord: https://discord.gg/KPzSCm83Km
许可证
MIT
作者: IPv5
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。