地图类型(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() 查缓存,同键复用已渲染切片 |