Repository navigation
Releases
GSit 3.6.0.4 · Shiroha/Folia 26.2 | 活塞优化
GSit 3.6.0.4 · Shiroha / Folia 26.2
小范围性能优化,保留既有玩法。基于非官方兼容分支,不替代上游的通用版本。
HibiscusCommons / HMCCosmetics 用户必须完整重启替换。
本次没有修复第三方插件的热重载事件绑定;不能把 GSit 加载成功当作整套时装联动通过。
改了什么
- 活塞涉及的方块没有座位/躺姿时,跳过空快照及汇总集合分配。
- 保留全部收集后再移动/停止、对象去重、方向、
GET_UP_BREAK和事件优先级。 - 新增三项回归测试;没有修改调度器、数据库、配置、权限或发包逻辑。
- 与已测试的 3.6.0.3 产物逐项比较,只有
BlockEventHandler.class和plugin.yml内容不同。
代码:core/src/main/java/dev/geco/gsit/event/BlockEventHandler.java 的 handleBlockPistonEvent;测试:core/src/test/java/dev/geco/gsit/event/BlockEventHandlerTest.java。
测量结果及边界
2026-10-16,同一 JVM / 平台线程,用真实旧、新 handler 字节码处理 12 个无坐躺对象的方块代理。每组预热 100 万次,再测三轮,每轮 100 万次,取中位数。
| 指标 / 每百万次调用 | 3.6.0.3 | 3.6.0.4 | 减少 |
|---|---|---|---|
| 线程分配量 | 2,344,000,000 B | 56,000,000 B | 97.61% |
| 墙钟耗时 | 329.1607 ms | 219.0423 ms | 33.45% |
| 线程 CPU 时间 | 312.5 ms | 218.75 ms | 30.00% |
公式为 (旧值 - 新值) / 旧值 × 100%。这是包含反射/代理成本的局部基准,受 JIT、顺序和计时粒度影响;不是整服 CPU、TPS、MSPT 或常驻堆收益,也不证明修复了内存泄漏。
真实协议发包对照:16 个客户端、8 人躺下、固定装备,每版三轮、每轮约 15 秒。装备包数量中位数均为 42,360,减少 0%。观察到的编码字节差异不归因为优化;没有更改发包代码。
验证
- Java 25.0.3,Shiroha
26.2-DEV-28fe077,两个区域工作线程。 - HibiscusCommons 0.9.2、HMCCosmetics 2.9.1、HMCWraps 1.8.2、PacketEvents 2.13.0、CraftEngine 26.9.2、PlugManX 3.1.0-Beta.2、PlaceholderAPI 2.12.2。
- 33 项自动测试通过;发布前再次运行
:check :core:check :v26_2:check,覆盖选定目标模块。 - 16 个协议客户端、两个实际区域、320 次躺下/起身切换;装备、武器皮肤、新观看者、客户端实体清理通过。
- 真实活塞推动有人坐着的方块,座位身份保持,坐标移动正确。
- 两个区域存在两个躺姿和一个坐姿时正常停服;重启后未重新装备即恢复时装,旧坐躺状态清除。
热更新:未通过
准确的 3.6.0.3 → 最终 3.6.0.4,以及最终版自身三次卸载/加载均复现:
- GSit 自身卸载、所属线程清理、客户端 marker/NPC 删除和重新加载通过。
- 新姿态存在,但 HMCCosmetics 隐藏原因是
[],不是预期的[PLUGIN]。 HookGSit.onPlayerLay引用旧加载器的PlayerPoseEvent;旧静态 HandlerList 有 Commons 监听器,新 HandlerList 没有。冷启动则绑定相同事件类并正确联动。
这不是本次活塞优化引入的变更;相关生命周期和事件类字节码没有改变。不能承诺只更新 GSit 就能解决第三方热替换。
尚未验证
未完成长时间堆存活/类加载器回收压力测试、真实客户端资源包画面验收、数百人规模及有人乘坐的活塞回缩实机测试。早先一次时装恢复异常未再次复现,原始原因仍未闭环,不声称已修复。
下载与部署
附件 GSit-3.6.0.4-shiroha26.2.jar:240601 字节。
SHA-256 F360887B547F86252403ECA238DE9D6539A0E987A49750C46A4F4D202CC87F76
这是 2026-10-16 已实测的原始 JAR,不是本次重新生成的不同产物。原始干净构建使用 Gradle Wrapper 9.6.1、Java 25,本地固定 paper-api:26.3.build.26-alpha 和 dev-bundle:26.2.build.111-stable,并使用 ASCII 构建输出目录。其他类与生产基线相同,并在上述准确核心实测。当前动态依赖构建不保证字节级复现。
- 完整停服并确认进程退出,备份原 JAR 和
plugins/GSit。 - 将旧 GSit JAR 移出
plugins,仅保留新 JAR,再启动。 - 检查版本与 Commons hook;穿戴时装验证
/glay前后[] → [PLUGIN] → [],再检查坐下/起身与武器皮肤。 - 异常时完整停服后换回旧 JAR;本次没有配置或数据结构迁移。
未部署到生产服务器;不会随公开发布上传第三方付费 JAR、生产配置、数据库或本机原始运行日志。
GSit 3.6.0.3 — Shiroha/Folia 26.2 shutdown fix
GSit 3.6.0.3 for Shiroha/Folia 26.2
修复
- 修复 Shiroha
a8f1d54完整停服时,GSit 在Region shutdown thread查询已经解除绑定的世界方块状态并触发Level.getCurrentWorldData() == nullNPE。 - 完整 JVM 停服只释放数据库、发包处理器和可选插件钩子,不再在区域调度器停止后清理 Seat、PlayerSit、Pose、Crawl 的世界实体。
- GSit 内置重载和受支持的 PlugManX 在线重载仍保留原有世界实体清理,不改变现有热重载功能。
- 为 Paper 26.2 dev-bundle 的无版本 Adventure 依赖增加仅编译期 BOM 约束;不会打包进插件或改变服务器运行时依赖。
验证
- 新增两条 teardown 单元测试,并通过完整
:core:test。 :build -PtargetVersion=v26_2成功。- JAR 描述符校验通过:
GSit/3.6.0.3/folia-supported: true。 - 精确 Shiroha/Folia
26.2-DEV-a8f1d54隔离服:玩家保持/gsit座位时执行原生stop,退出码为 0,GSit 正常禁用,日志中无 ERROR、Exception 或 NPE。 - 重启后不存在
GSit_sit残留实体。 - PlugManX 3.1.0-Beta.2:活动座位重载前存在、重载后为零,重新连接后可再次创建座位;随后完整停服仍无异常。
文件校验
GSit-3.6.0.3-shiroha26.2-hotload.jar
SHA-256: 25B4FEEAE978297BB16FD0481F4D48C171A1DCB0BDA0C21DC8E4D63F277435ED
生产替换仍建议完整停服后替换 JAR,再启动服务器;PlugManX 用于后续同版本在线 unload/load 或 reload,不用于跨版本首次替换。
GSit 3.6.0.2 — Shiroha/Folia 26.2 compatibility release
GSit 3.6.0.2 — Shiroha/Folia 26.2 compatibility release
Unofficial compatibility build based on upstream GSit 3.6.0.
What changed
- Fixes cross-owner PlayerSit marker cleanup on Folia.
- Drains active Seat, PlayerSit, Pose, and Crawl state on the correct entity/region owners.
- Cleans up GSit-owned Netty handlers, database state, tasks, listeners, metrics, and command help references during the supported lifecycle.
- Adds a guarded PlugManX reload/unload path for the exact tested Shiroha 26.2 environment.
- Preserves the existing GSit commands, permissions, configuration, language files, and public Pose events used by HibiscusCommons.
Important deployment boundary
Do not hot-reload only GSit while an enabled plugin declares a GSit dependency. In particular, HibiscusCommons 0.9.2 binds directly to GSit's event classes; use a complete server stop, replace the JAR, and start normally when HibiscusCommons/HMCCosmetics is installed.
HMCWraps does not depend on GSit and requires no special migration.
Verified scope
- Target: Shiroha/Folia 26.2, Java 25.
- 28 focused tests, 0 failures/errors/skips.
- Packaged JAR passed descriptor, ZIP/CRC, main-class, version, and
folia-supportedvalidation. - Reproducible clean target build: the rebuilt JAR is byte-for-byte identical to the release asset.
- Isolated Shiroha testing covered cross-region PlayerSit cleanup, active-state reload/unload, class-loader cleanup, cold startup, and the GSit → HibiscusCommons → HMCCosmetics pose/stop event flow.
This release does not claim general Paper/Spigot compatibility or compatibility with arbitrary plugin managers and server cores.
Install / 安装
- Stop the server completely (
/stop). - Back up the old GSit JAR and
plugins/GSitdirectory. - Remove the old GSit JAR; keep only one GSit JAR in the plugins directory.
- Copy
GSit-3.6.0.2-shiroha26.2-hotload.jarinto the plugins directory. - Start the server normally and verify the GSit enable log.
生产服安装了 HibiscusCommons/HMCCosmetics 时,必须完整停服替换,不能使用 PlugMan 单独热替换 GSit。
Integrity
SHA-256: 5A74B50F3D82AABFB19C8EA5098CD211AE4151DA1942788C23B6164B4CD25FA4
Size: 240453 bytes
Upstream project: https://github.com/gecolay/GSit
License: GNU GPLv3