Krypton Hybrid
Krypton Hybrid 是基于 Krypton fnp legacy 的分支,补上了旧版缺少的 Netty 优化,将 Speed Compression 的实现替换为原生 zstd 和 lz4 算法,并支持混合服务器。
截图
介绍
Krypton Hybrid
概览
Krypton Hybrid 是基于 Krypton fnp legacy(1.19.2)制作的分支,补全了 Krypton fnp lite 版本中缺失的优化,加入了对 zstd 压缩算法的支持,并改进了原有的编码与 Netty 程序处理,同时保留了 Krypton fnp 和 RecastLib 的功能。
主要区别
-
支持混合型服务器兼容。
-
提供用于监控流量使用情况的命令。
-
本项目优先使用 zstd 作为主要压缩算法,同时保留原版本对实体追踪和通信编码的优化。
技术细节
1. 网络压缩管线
Krypton Hybrid 通过注入 Connection.setupCompression,替换 Minecraft 默认的 zlib 编码器。
| 特性 | 详情 |
|---|---|
| 主要算法 | 通过 zstd-jni 使用 Zstd(原生) |
| 备用算法 | 通过 velocity-native 使用 zlib |
| 等级范围 | 1 – 22(默认 3) |
| 多线程 | workers ≥ 1 时启用原生线程池 |
| 字典 | 可选的 .zdict 预训练文件,支持失败时开放或快速失败 |
| 高级调优 | overlap_log、job_size、strategy、LDM + window_log |
服务器和客户端必须使用相同的算法。算法不匹配会立即导致会话数据损坏。
2. 轻量载荷优化 — Uniform-RLE
地表上方的天空光照区段几乎总是均匀的(0xFF = 全部为 15)。对于均匀层,Krypton 不再写入 2 048 字节,而是将其编码为 2 字节。
线路格式(ClientboundLightUpdatePacketData):
[0x4B] – Krypton marker (1 byte)
[skyYMask] – BitSet
[blockYMask] – BitSet
[emptySkyYMask] – BitSet
[emptyBlockYMask] – BitSet
[skyCount] – VarInt
For each sky DataLayer:
[0x01] + 1 byte – uniform (all nibbles == byte)
[0x00] + 2048 bytes – raw (fixed size, no VarInt prefix)
[blockCount] – VarInt
For each block DataLayer: same as above
节省量保护条件:仅当 2048 × uniform_count + raw_count − 1 > 0 时启用。
最大节省量:在开放天空环境中,每个区块约可节省 40 KB(视距为 12 时,最多可有 20 个均匀天空层)。
3. 区块数据优化 — XOR 增量高度图 + 生物群系流
线路格式(ClientboundLevelChunkPacketData):
[0x4B] – Krypton 区块数据标记(1 字节)
──── 高度图(二进制 + XOR 差分)────
VarInt entry_count
每个条目:
UTF-8 key
VarInt long_count
long[] XOR 差分编码(delta[i] = raw[i] ^ raw[i-1])
──── 方块数据(不含生物群系的区段)────
VarInt blocks_length
byte[] blocks(每个区段包含 short nonEmptyCount + PalettedContainer<BlockState>)
──── 生物群系数据(紧凑流)────
VarInt section_count
每个区段:
0x01 + VarInt(biomeId) – 单值区段(2 字节,而非 3 字节以上)
0x00 + VarInt(len) + raw bytes – 多值区段
──── 方块实体 ────
LIST_STREAM_CODEC(原版编码方式不变)
| 优化项 | 机制 | 优势 |
|---|---|---|
| XOR 差分高度图 | 相邻列之间存在相关性 → 许多 long 值接近零 | 提升 Zstd/zlib 压缩率 + 消除约 40 B 的 NBT 开销 |
| 拆分生物群系流 | 将生物群系数据分组;压缩单值区段 | 单值区段:2 B,而非 3 B 以上;利用跨区段冗余 |
4. 延迟区块缓存(DCC)
离开视距的区块会先缓存起来,而不是立即丢弃。如果玩家在条目过期前重新进入范围,则可跳过完整重发。
| 配置项 | 默认值 | 说明 |
|---|---|---|
dcc.enabled |
true |
总开关 |
dcc.size_limit |
60 | 每位玩家最多缓存的区块数 |
dcc.distance |
5 | 玩家位置周围的缓存半径(区块) |
dcc.timeout_seconds |
30 | 强制移除超时时间 |
条目会根据三个维度移除:距离、容量和超时。被移除的条目会在下一次 ChunkMap.tick() 时触发延迟的 dropChunk 回调。
5. Flush 合并 + 实体数据包打包
两个互补层可减少实体追踪 tick 期间的系统调用与帧开销:
ChunkMap.tick() HEAD
① Recovery: flush any stale batch from previous failed tick
② Disable auto-flush for all players
③ Open EntityBundleCollector batch window
↳ TrackedEntity.broadcast() → packets collected per player
ChunkMap.tick() RETURN
④ Close batch → emit ClientboundBundlePackets (buffered, not yet flushed)
⑤ Re-enable auto-flush → single kernel flush per player
| 层级 | 机制 | 优势 |
|---|---|---|
| Flush 合并(Netty) | 缓冲写入,在 tick 结束时统一调用一次 flush() |
繁忙服务器上的系统调用更少 |
| 数据包合并(协议) | N 个实体数据包 → 1 个 ClientboundBundlePacket |
减少帧开销;提升压缩率;保证客户端侧原子性 |
6. 热路径微优化
| 目标 | 优化方式 |
|---|---|
VarInt.read() |
无分支的 4 字节 getIntLE + 位运算快速路径(适用于 0 – 268 M 的值) |
VarInt.getByteSize() |
通过 Integer.numberOfLeadingZeros 使用查找表 |
VarLong.getByteSize() |
采用相同的查找表方案 |
FriendlyByteBuf.writeVarInt() |
针对 1/2/3/4/5 字节的分路径处理,直接写入底层 ByteBuf |
FriendlyByteBuf.writeUtf() |
通过 ByteBufUtil.utf8Bytes 单次遍历完成 — 无需中间 byte[] |
Varint21FrameDecoder |
衍生自 Velocity 的高效帧处理 + 缓解 nullping 攻击 |
7. 可观测性 — /krypton 命令
/krypton stats show – 压缩率、带宽节省量、运行时间
/krypton stats reset – 重置所有计数器
/krypton packets bycount [n] – 按数量列出前 N 种数据包类型
/krypton packets bybytes [n] – 按字节数列出前 N 种数据包类型
/krypton mods bycount [n] – 按数量列出前 N 个模组命名空间
/krypton mods bybytes [n] – 按字节数列出前 N 个模组命名空间
需要操作员权限等级 2。
测试数据
在原始测试中,该模组将初始数据包大小压缩至原来的 13%。

鸣谢
常见问题
Krypton Hybrid 支持哪些 Minecraft 版本?
Krypton Hybrid 支持 Minecraft Java 版 1.19.2–1.21.1,共 3 个版本,可用的加载器:Forge / NeoForge。下载时注意选择和你游戏版本一致的文件。
Krypton Hybrid 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Forge / NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。
dreamforSh 的其他作品
查看全部 →Tinker’s Planner Reborn
Tinkers' Blueprint 是 Tinkers' Construct 3 的客户端附属模组,玩家可以在蓝图界面中预览组装好的工具并查看其属性。
Datapack Load Error Fix
一款全面的 Minecraft 世界修复工具,可修复移除模组和数据包导致的常见问题。
TickAccelerate
TickAccelerate 可优化低 TPS 时的游戏刻运作,帮助减少卡顿。
Concurrent Chunk Management Engine for Forge -The Twilight Forest fix
修复 c2mef 与暮色森林的兼容性问题,同时修复漏洞并提升性能。
评论
登录后评论和评分