雷达实体(Radar)
基本信息
| 属性 | 值 |
|---|---|
| 实体查询入口 | journeymap.client.model.EntityHelper(EntityHelper.java:36) |
| 实体传输对象 | journeymap.client.model.EntityDTO |
| 缓存加载器基类 | com.google.common.cache.CacheLoader(Guava,非本 mod 的类) |
| 缓存类 | 4 个雷达缓存 + 1 个自身数据缓存 |
| 注册的实体类型 | 0(JourneyMap 不注册任何 Entity) |
| 权限控制 | 4 项雷达功能受 Feature 枚举管控(见 功能权限系统) |
功能
"雷达"指 JourneyMap 在小地图/全屏地图上叠加的实体标记——把周围的生物、村民、玩家按图标画到地图坐标上。它不注册任何自定义实体,纯粹是读取 Minecraft 原生实体列表并转换成可缓存、可排序的 DTO。
4 类查询
EntityHelper 提供 4 个"取附近实体"方法,全部返回 List<EntityDTO>:
| 方法 | 数据源缓存类 | 说明 | 源码 |
|---|---|---|---|
getMobsNearby() |
MobsData |
敌对生物 | EntityHelper.java:91 |
getVillagersNearby() |
VillagersData |
村民 | :96 |
getAnimalsNearby() |
AnimalsData |
动物 | :101 |
getPlayersNearby() |
PlayersData |
其它玩家 | :131 |
底层统一入口是 getEntitiesNearby(String timerName, int maxEntities, boolean hostile, Class... entityClasses)(:43),按传入的实体类数组过滤并截断到 maxEntities。
isPassive(EntityLiving)(:106)负责区分敌我——它决定某个生物计入 MobsData 还是 AnimalsData。
缓存类
5 个缓存类全部继承 Guava 的 com.google.common.cache.CacheLoader<Class, Map<String, EntityDTO>>(或单值变体):
| 缓存类 | 类型参数 | 声明 | 刷新间隔配置项 | 默认值 |
|---|---|---|---|---|
MobsData |
CacheLoader<Class, Map<String, EntityDTO>> |
MobsData.java:24 |
cacheMobsData |
3000 ms |
AnimalsData |
CacheLoader<Class, Map<String, EntityDTO>> |
AnimalsData.java:26 |
cacheAnimalsData |
3100 ms |
VillagersData |
CacheLoader<Class, Map<String, EntityDTO>> |
VillagersData.java:24 |
cacheVillagersData |
2200 ms |
PlayersData |
CacheLoader<Class, Map<String, EntityDTO>> |
PlayersData.java:24 |
cachePlayersData |
2000 ms |
PlayerData |
CacheLoader<Class, EntityDTO>(单值) |
PlayerData.java:26 |
cachePlayerData |
1000 ms |
后 4 类的缓存值是 Map<String, EntityDTO>(按实体 id 索引),PlayerData 特殊——只存自身一个 EntityDTO,不需要 Map。
同包下还有 AllData.java、DataCache.java、ImagesData.java、MessagesData.java、WorldData.java、WaypointsData.java 等非实体的数据缓存。
排序
EntityHelper 定义 3 个 Comparator 单例(:38-40):
| 比较器 | 类型 | 用途 |
|---|---|---|
entityDistanceComparator |
Comparator<Entity> |
按实体到玩家的距离 |
entityDTODistanceComparator |
Comparator<EntityDTO> |
同上,作用于 DTO |
entityMapComparator |
Comparator<EntityDTO> |
私有内部类(:269),用于 id 映射排序 |
buildEntityIdMap(List<? extends EntityDTO>, boolean sort)(:181)把列表转成 Map<String, EntityDTO>,sort 参数控制是否用 entityMapComparator 排序。
实体图标文件名由 getFileName(Entity)(:209)决定,结合 Constants.ENTITY_ICON_DIR(Constants.java:62)与 entityIconSetName 配置(默认 "2D")。
数值
| 数值名 | 值 |
|---|---|
| 雷达实体类别 | 4(敌对生物 / 动物 / 村民 / 玩家) |
| 缓存类总数 | 5(4 雷达 + 1 自身) |
| 各类默认显示上限 | 均为 32(maxMobsData / maxAnimalsData / maxPlayersData / maxVillagersData) |
| 各类上限可调范围 | 1–128 |
| 默认刷新间隔 | 动物 3100 / 敌对生物 3000 / 村民 2200 / 玩家 2000 / 自身 1000 ms |
| 刷新间隔可调范围 | 1000–10000(自身为 500–2000) |
| 雷达水平半径 | 默认 64 方块(16–512) |
| 雷达垂直半径 | 默认 16 方块(8–256) |
| JourneyMap 注册的实体数 | 0 |
交互
| 触发 | 行为 |
|---|---|
| 小地图 / 全屏地图渲染 | 按缓存刷新间隔拉取四类附近实体并画图标 |
| 潜行(潜行键按下) | hideSneakingEntities(默认 true)隐藏实体标记 |
| 服务端禁用雷达 | 收到 RADAR_CODE 后 4 项雷达全部关闭并 DataCache.purge() 清缓存(见 聊天控制码) |
调整 maxMobsData 等上限 |
立即生效(AtomicInteger 热更新) |
| 调整刷新间隔 | 下一次缓存刷新时生效 |