Velocity 代理的应用层带宽调速插件。
在保持完整 Minecraft 协议/帧完整性的同时,降低公网出口峰值带宽。
本插件不修改 Minecraft 压缩管线、Netty flush 时机,或任何底层传输行为。
它纯粹在应用层运作 —— 控制数据包何时提交到 Velocity 的正常发送路径,而非如何发送。
数据包生成
|
v
调速调度器 ← 应用层延迟(本插件)
|
v
writeAndFlush ← Velocity 的正常发送路径(未改动)
|
v
压缩层 ← Velocity 默认管线(未改动)
|
v
网络套接字
限制每个玩家每刻(tick)的区块数据包数量,防止登录时的区块爆发。
- 默认值:32 区块/刻/玩家
- 检测范围:区块数据、光照更新、区块批处理开始/完成、注册表同步
每个玩家独立的令牌桶,支持突发流量。
- 默认突发上限:12 MB
- 默认持续速率:4 MB/s
- 超出速率的数据包进入调速队列
大于 128 KB 的数据包延迟 1-2 刻发送,以平滑带宽尖峰。
- 这不是批处理 —— 每个数据包独立发送
- 仅调整调度时机
自动检测 Floodgate 玩家并应用更严格的调速配置。
- 降低区块速率(默认 0.5 倍乘数)
- 降低地图数据包速率
- 降低实体爆发流量
内置指标追踪:
- 每个玩家的上传速率
- 区块爆发统计
- 调速队列深度
- 数据包大小分布
- 基岩版流量细分
- 峰值上传吞吐量
每 30 秒记录一次(可配置)。
所有参数均在 plugins/velocity-bandwidth-pacer/config.toml 中可配置。
- Java 21+
- Velocity 3.4+ / 3.5+
- 无需 ProtocolLib 依赖
已测试并针对以下环境设计:
- NeoForge 1.21.1
- Create / CreateAeronautics
- Geyser + Floodgate
- ViaVersion + ViaBackwards
./gradlew shadowJar输出:build/libs/VelocityBandwidthPacer-1.0.0.jar
- 将 jar 文件复制到
plugins/目录 - 启动 Velocity —— 将自动生成默认的
config.toml - 按需编辑
plugins/velocity-bandwidth-pacer/config.toml - 重启或使用
/velocity reload(如果支持)
本项目采用 AGPL-3.0 License 开源许可。