鲍比分享

鲍比分享

一个高性能的Fabric模组,它协同地从服务器流式传输区块数据,以填充Bobby渲染距离缓存。

优化

Bobby Share 是一个高性能的 Fabric 模组,旨在协作地将 Minecraft 服务器的区块数据直接流式传输到客户端,以动态填充 Bobby 模组的渲染缓存。


🚀 工作原理

Bobby 是一个客户端模组,它允许你通过将区块缓存在本地计算机上,从而获得比服务器限制更大的渲染距离。通常情况下,你必须亲自访问这些区块才能将它们缓存下来。

Bobby Share 弥合了这一差距:

  1. 当你加入服务器或移动到新区域时,你的客户端会检查其本地 Bobby 缓存中是否缺少区块数据。
  2. 如果区块缺失,客户端会向服务器发送一个轻量级的网络请求。
  3. 服务器会异步加载区块数据(或直接从服务器内存中序列化当前活跃的区块),对其进行优化,并将其流式传输回给你。
  4. 你的客户端会将区块保存在本地并显示出来,让你能够立即看到远超服务器渲染距离之外的景象。

🔄 实时区块缓存失效与无缝热交换(v1.3.0+ 与 v1.4.0)

再也不用担心过时的远景距离或视觉空洞了!

  • 即时同步: 每当玩家在服务器上破坏方块、放置方块或引发地形爆炸时,Bobby Share 都会实时使被修改的区块失效。
  • 零开销: 向已连接的客户端发送一个仅 8 字节的微小通知数据包。
  • 无缝热交换更新(v1.4.0 新增): 被修改的区块会在客户端上直接更新并注入到 Bobby 的活跃视觉内存中,无需卸载,彻底消除渲染闪烁、卡顿和巨大的黑色空洞。
  • 过期数据包丢弃: 如果区块在网络数据包传输过程中被修改,会自动丢弃乱序的进行中响应。

⚡ 性能、安全性与并发优化

专为从 3 名玩家平滑扩展到 100+ 名并发玩家而设计,不会导致 TPS 下降或堵塞网络通道:

  • 线程安全的实时区块流式传输(v1.4.0 新增): 在数据包发送之前,玩家附近主动加载的区块会在服务器线程上安全地序列化,彻底消除 PalettedContainer 多线程竞态条件以及大量探索时导致的服务器看门狗崩溃。
  • 高流量压力测试: 在玩家大量移动的情况下,经过严格测试,能够处理数万个实时区块请求,且零崩溃或零泄漏。
  • 服务端 LRU 缓存: 在内存中缓存最多 4096 个优化后的区块复合数据(约 100MB RAM),以便即时为热门区域提供服务,无需重复读取磁盘。
  • 限流的客户端队列: 将客户端发出的请求限制为每 tick 3 个区块(每秒 60 个区块),彻底消除在洞穴或密集地形中的延迟峰值。
  • 令牌桶速率限制: 限制每个玩家的请求量(突发:200 个区块,补充:每秒 80 个区块),以保护服务器免遭滥用。
  • NBT 剥离(带宽优化): 在发送前从区块中剥离大量与渲染无关的数据(结构、实体 tick、雕刻遮罩、方块实体),将负载大小减少 50% 到 80%。
  • 主线程安全: 使用 Minecraft 的线程安全加载 API 异步获取区块数据。在客户端,文件写入在后台线程运行,使游戏完全无卡顿。
  • 安全解耦: 优雅地处理 Bobby 缺失或仅客户端环境的情况,不会导致 mixin 注入失败或服务器崩溃。

⚙️ 配置与命令(服务端)

你可以使用服务器上自动生成的配置文件 config/bobbyshare.json 来配置 Bobby Share 的性能设置:

  • rateLimitBurst - 玩家在快速突发中可以请求的最大区块数(默认值:200)。
  • rateLimitRefill - 每秒为玩家恢复的区块请求数(默认值:80)。
  • cacheCapacity - 存储在服务器 RAM 中的最大已剥离区块数(默认值:4096)。
  • maxRequestDistance - 请求区块距离玩家的安全距离上限(默认值:34.0)。
  • blacklistedDimensions - 禁用区块流式传输的维度标识符列表(默认值:["minecraft:the_end"])。

管理员命令(需要 OP 等级 2):

  • /bobbyshare stats - 显示实时服务器性能仪表板:RAM 缓存占用、命中率百分比、实时 RAM 捕获、磁盘读取、被限流的请求以及已发送的失效通知。
  • /bobbyshare reload - 从磁盘重新加载配置文件并立即应用更改。
  • /bobbyshare clearcache - 清除服务端 RAM 区块缓存。

📥 安装与设置

要成功流式传输区块,Bobby Share 必须同时安装在服务端和客户端:

  • 客户端: 将 bobbyshare-1.4.0+mc<version>.jar 以及 原始的 bobby-*.jar 放入你的 .minecraft/mods/ 目录中。
  • 服务端: 仅将 bobbyshare-1.4.0+mc<version>.jar 放入服务器的 mods/ 目录中。 (警告:请勿将原始的 Bobby 模组放在服务端,因为它仅适用于客户端,会导致服务器启动时崩溃)。

支持的 Minecraft 版本:1.20.1 至 26.2,涵盖 13 个专用版本构建,可在 GitHub Releases、Modrinth 和 CurseForge 中获取。