地图类型(MapType)

基本信息

属性 值
类型容器类 journeymap.client.model.MapType(MapType.java:15)
名称枚举 MapType.Name(MapType.java:171-174)
类型总数 5
缓存键格式 <dimension><name><vSlice>(toCacheKey(),:86-89)
缓存实现 DataCache.instance().getMapType(...)(from(),:35-38)
内部缓存表 HashMap<Integer, MapType>,初始容量 256(:17)

功能

MapType 是"一张地图是什么"的不可变三元组:名称 + 垂直切片 + 维度。它被用作地图切片的缓存键——toCacheKey() 拼出的字符串决定不同类型/切片/维度的切片互不覆盖。

5 个名称

MapType.Name 只有 5 个常量(:171-174):

名称 说明 垂直切片
day 白天地表图 无
night 夜间地表图 无
underground 地下洞穴图 有(vSlice)
surface 纯地表图(无昼夜区分) 无
topo 地形等高线图 无

只有 underground 使用垂直切片。构造时即强制:vSlice = (name != Name.underground) ? null : vSlice;(MapType.java:27)——非地下类型一律把 vSlice 抹成 null。

判定方法

MapType 提供 4 个 isXxx() 谓词,与 Name 枚举一一对应(:108-130):isUnderground()、isSurface()、isDay()、isNight()、isTopo()。

工厂方法

MapType 提供成对的"按维度"与"按玩家"两组工厂(:50-85),后者从 EntityDTO 取 dimension(地下类型还取 player.chunkCoordY 作切片):

名称 按维度 按玩家
day day(int dimension) :50 day(EntityDTO) :55
night night(int dimension) :60 night(EntityDTO) :65
underground underground(Integer vSlice, int dimension) :74 underground(EntityDTO) :70
topo topo(int dimension) :79 topo(EntityDTO) :84

另有 from(Name, Integer vSlice, int dimension)(:35)与 from(Integer vSlice, int dimension)(:40)——后者在 vSlice == null 时推断为 Name.surface,否则 Name.underground(:42)。

Name.surface 只能通过 from(vSlice, dimension) 这条推断路径产生,没有对应的具名静态工厂。

数值

数值名 值
地图类型数 5
使用垂直切片的类型数 1(underground)
工厂方法数 10(5 类型 × 2 种参数形式)+ 2 个 from
谓词方法数 5
缓存键示例(主世界白天地表) 0daynull
缓存键示例(主世界地下第 3 切片) 0underground3
内部缓存初始容量 256(注释:4 names × 8 slices × 8 dimensions)

交互

触发 行为
按 [(KB_MAP_SWITCH_TYPE) MiniMap.state().toggleMapType() 在日/夜/洞穴间循环(见 热键绑定)
各地图配置的 preferredMapType 默认 MapType.Name.day(FullMapProperties.java:18、MiniMapProperties.java:79、WebMapProperties.java:28),是非 @Config 字段
Web 地图请求 /tiles/tile.png mapTypeString 参数缺省为 MapType.Name.day.name()(webmap/routes/Tiles.java:35)
玩家进出地下 underground(EntityDTO) 依玩家当前 Y 坐标自动选取垂直切片(:70-72)
渲染切片 用 cacheKey() 查缓存,同键复用已渲染切片

相关条目