地图物品展示框缓存

地图物品展示框缓存

保持巨大的Minecraft地图墙壁和地板在服务器物品展示框追踪距离之外仍然可见,支持持久化地图缓存、优化内存使用,并完全在客户端侧支持Fabric。

Item Frame Cache

Item Frame Cache 是一个轻量级的客户端 Fabric 模组,专为超大型地图墙、地图地板以及其他由放置在物品展示框中的已填充地图构成的展示而设计。

在原生 Minecraft 中,物品展示框是实体。当你超出服务器的实体追踪距离时,这些展示框可能会消失,即使周围的地形仍然可见。

Item Frame Cache 通过在已填充地图的物品展示框被渲染一次后记住它们,并在服务器停止追踪这些实体时保持其可见,从而解决了这个问题。

1.5.0 版本开始,该模组还包含一个持久化地图数据缓存,允许将从多人游戏服务器接收到的地图像素数据存储在本地,并在服务器不再提供这些数据时重新使用。

功能特性

  • 在超出服务器物品展示框追踪距离后,仍保持已填充地图可见
  • 专为包含数百或数千张地图的超大型地图墙和地图地板设计
  • 面向多人游戏服务器的持久化地图数据缓存
  • 缓存的地图数据可在断线重连和游戏重启后继续使用
  • 服务器提供的地图数据始终优先于缓存数据
  • 物品展示框位置仅限当前会话,以防止过期或幽灵地图
  • 针对超大型地图展示优化了内存使用
  • 采用 LRU + 软引用内存管理机制管理缓存的地图数据
  • 异步磁盘读写
  • 自动检测并移除损坏的缓存文件
  • 自动清理旧缓存的地图数据
  • 可配置的渲染距离
  • 可选的视锥剔除
  • 完全客户端侧
  • 兼容原版服务器
  • 无需安装服务端
  • 无需 Fabric API

工作原理

当物品展示框中的已填充地图被 Minecraft 正常渲染时,Item Frame Cache 会记录所需的渲染状态。

如果之后你移动到追踪范围之外,服务器不再发送该物品展示框的数据,客户端可以继续显示缓存的渲染状态。

从多人游戏服务器接收到的地图像素数据也会存储在本地。如果 Minecraft 之后需要该地图数据而服务器不再提供,Item Frame Cache 可以从本地缓存中恢复它。

原版数据始终具有优先权。当从服务器接收到更新的地图信息时,它会替换本地缓存的数据。

如果客户端能够检测到地图从物品展示框中移除的变化,缓存的展示框会立即失效。

内存优化

Item Frame Cache 特别针对超大型展示进行了设计。

持久化地图数据使用有限的内存缓存。默认情况下,只有可配置数量的地图状态会被强引用保存在内存中,而额外的缓存地图可以在内存紧张时由 Java 释放,并在需要时从磁盘重新加载。

缓存的物品展示框渲染状态也会尽可能去除不必要的渲染信息,从而在保留数千张地图时降低内存使用。

配置

该模组会创建:

config/itemframecache.properties

默认设置:

render_distance_blocks=512
frustum_culling=true
persistent_map_cache=true
map_cache_memory_entries=512
map_cache_max_age_days=180
log_cache_stats=false