Skip to content

Releases

GSit 3.6.0.4 · Shiroha/Folia 26.2 | 活塞优化

Choose a tag to compare

@heoduling heoduling released this 20 Oct 10:37

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,以及最终版自身三次卸载/加载均复现:

  1. GSit 自身卸载、所属线程清理、客户端 marker/NPC 删除和重新加载通过。
  2. 新姿态存在,但 HMCCosmetics 隐藏原因是 [],不是预期的 [PLUGIN]。
  3. 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 构建输出目录。其他类与生产基线相同,并在上述准确核心实测。当前动态依赖构建不保证字节级复现。

  1. 完整停服并确认进程退出,备份原 JAR 和 plugins/GSit。
  2. 将旧 GSit JAR 移出 plugins,仅保留新 JAR,再启动。
  3. 检查版本与 Commons hook;穿戴时装验证 /glay 前后 [] → [PLUGIN] → [],再检查坐下/起身与武器皮肤。
  4. 异常时完整停服后换回旧 JAR;本次没有配置或数据结构迁移。

未部署到生产服务器;不会随公开发布上传第三方付费 JAR、生产配置、数据库或本机原始运行日志。

GSit 3.6.0.3 — Shiroha/Folia 26.2 shutdown fix

Choose a tag to compare

@heoduling heoduling released this 03 Oct 04:55

GSit 3.6.0.3 for Shiroha/Folia 26.2

修复

  • 修复 Shiroha a8f1d54 完整停服时,GSit 在 Region shutdown thread 查询已经解除绑定的世界方块状态并触发 Level.getCurrentWorldData() == null NPE。
  • 完整 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

Choose a tag to compare

@heoduling heoduling released this 20 Sep 11:02

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-supported validation.
  • 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 / 安装

  1. Stop the server completely (/stop).
  2. Back up the old GSit JAR and plugins/GSit directory.
  3. Remove the old GSit JAR; keep only one GSit JAR in the plugins directory.
  4. Copy GSit-3.6.0.2-shiroha26.2-hotload.jar into the plugins directory.
  5. 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