AntiqueAtlas
GTNH 的 Antique Atlas 分支。一个纯数据型地图模组:注册 2 个物品、0 个方块,地图内容全部存在 WorldSavedData 的 NBT 里,通过 11 条封包同步。
| 项目 | 值 |
|---|---|
| modid | antiqueatlas(gradle.properties 的 modId) |
| 源仓库 | https://github.com/GTNewHorizons/AntiqueAtlas.git(GTNH fork,原作者 Hunternif) |
| 源 commit | 6ce6d82(2025-01-22T20:45:43-08:00) |
| Minecraft | 1.7.10(gradle.properties 的 minecraftVersion) |
| Java 包根 | hunternif.mc.atlas(modGroup) |
| 网络通道 | AntiqueAtlasMod.CHANNEL,值就是 antiqueatlas |
| 主源文件数 | 104(另 4 个 JUnit 测试文件) |
物品(2)
| 物品 | 注册名 | 说明 |
|---|---|---|
| Antique Atlas | antiqueatlas:antiqueAtlas |
地图册本体。子类型即 atlasID(物品 damage 值) |
| 空白 Antique Atlas | antiqueatlas:emptyAntiqueAtlas |
书 + 指南针合成,右键换一本新图册 |
没有方块。整个 mod 没有 registerBlock 调用,没有方块类,也没有 TileEntity——地图不是靠方块载体存的。详见下方「本 mod 没有」。
物品效果(2)
| 效果 | 来源 | 说明 |
|---|---|---|
| 地图扫描 | 携带 antiqueatlas:antiqueAtlas |
被动扫描半径 11 区块的圆形区域写入群系 |
| 自动标记 | 同上 / 世界生成 | 三个 watcher 自动写 tomb、village、nether_portal |
游戏设定(5)
| 条目 | 内容 |
|---|---|
| SettingsConfig | 14 项 .cfg 配置 + 5 个 JSON 配置文件 |
| 地图数据模型 | Tile / ITileStorage / TileGroup / DimensionData / AtlasData 与全部 NBT 字段名 |
| 网络消息 | 11 条封包的 ID、方向、载荷、发送时机 |
| 标记系统 | Marker / MarkersData / GlobalMarkersData、13 种内置类型与 NBT 路径 |
| 群系检测 | BiomeDetectorBase / BiomeDetectorNether 与 25 个预定义伪群系名 |
数据流
玩家移动
└─ ItemAtlas.onUpdate(每 20 tick)
└─ IBiomeDetector.getBiomeID(chunk) → 决定该区块一格的颜色
├─ BiomeDetectorBase 维度 0 及其它
└─ BiomeDetectorNether 维度 -1
└─ AtlasData.setTile → WorldSavedData "aAtlas_<atlasID>"
└─ MapDataPacket / TileGroupsPacket / TilesPacket / TileNameIDPacket → 客户端
客户端右键
└─ GuiAtlas 渲染 DimensionData + MarkersData
图册的存储键(4 份并存):
| 数据 | 键 | 版本 |
|---|---|---|
| 群系地图 | aAtlas_<atlasID> |
3 |
| 本地标记 | aaMarkers_<atlasID> |
3 |
| 伪群系坐标 | aAtlasExtTiles |
1 |
| 全局标记 | aAtlasGlobalMarkers |
3 |
供其他 mod 调用的 API
hunternif.mc.atlas.api.AtlasAPI,两个静态实例:
| API | 版本 | 用途 |
|---|---|---|
AtlasAPI.tiles(TileAPI) |
5 | 读写群系 tile 与伪群系 |
AtlasAPI.markers(MarkerAPI) |
3 | 增删本地 / 全局标记,客户端侧设贴图 |
AtlasAPI.getVersion() |
3 | AtlasAPI 自身的版本(与上面两个独立) |
辅助方法 AtlasAPI.getPlayerAtlases(player) 返回玩家主物品栏里所有图册的 atlasID 列表,被 DeathWatcher 用来逐本写墓碑。
本 mod 没有的内容
以下 10 个维度经源码检索确认完全没有,因此不建目录、不建条目。证据均来自 /Users/evlos/a/mirror/AntiqueAtlas(commit 6ce6d82)的 src/main/java:
方块 / 多方块结构
$ grep -rn "registerBlock\|extends Block\b\|setHardness" src/main/java
(无输出)
$ grep -rn "Multiblock\|ICommand\|CommandBase" src/main/java
(无输出)
注册调用总共只有两条,都是物品:
$ grep -rn "GameRegistry.registerItem\|GameRegistry.registerBlock" src/main/java
src/main/java/hunternif/mc/atlas/AntiqueAtlasMod.java:71: GameRegistry.registerItem(itemAtlas, "antiqueAtlas");
src/main/java/hunternif/mc/atlas/AntiqueAtlasMod.java:72: GameRegistry.registerItem(itemEmptyAtlas, "emptyAntiqueAtlas");
因此没有方块硬度、方块附魔、TileEntity、多方块结构、指令。地图数据完全挂在 WorldSavedData 上,与方块无关。
实体
$ grep -rn "extends Entity\b\|registerModEntity\|EntityRegistry" src/main/java
(无输出)
NetherPortalWatcher extends DummyWorldAccess 只是 IWorldAccess 的实现,用来监听实体生命周期,不注册任何实体类型。
附魔 / 药水效果 / 成就
$ grep -rniE "Enchantment|Achievement|PotionEffect|extends Potion" src/main/java
(无输出)
维度
$ grep -rn "registerDimension\|extends WorldProvider\|DimensionManager" src/main/java
(无输出)
本 mod 不注册新维度。它对下界的支持是「在维度 -1 上用 BiomeDetectorNether 检测」,属于读原版维度。GTNH 其它 mod 维度会回落到主世界检测器(见 群系检测)。
群系 / 世界生成 / 结构
$ grep -rn "extends BiomeGenBase\|BiomeProvider\|IWorldGenerator\|IWorldChunkGenerator" src/main/java
(无输出)
本 mod 不新增群系,也不做世界生成。VillageWatcher 和 NetherFortressWatcher 只是读原版生成的 MapGenStructureData(键 "Village" / "Fortress")把结果画到地图上,不生成任何结构。
ExtTileIdMap 里那 25 个 npcVillage* / nether* 常量是伪群系的字符串名,用于选择贴图集,不是方块或物品注册名。
键位
$ grep -rn "registerKeyBinding\|new KeyBinding" src/main/java
(无输出)
GuiAtlas 里用 Keyboard.KEY_UP / KEY_ADD / Keyboard.getEventKey() 处理方向键和 +/-,但没有注册任何 KeyBinding——地图界面全靠方向键和加减号导航,不占用独立键位。
未文档化的测试
src/test/java 下有 4 个 JUnit 测试:TestMath、TestSubTileUV、TestNBT、TestListMapValueIterator。它们只验证工具类行为,不构成游戏内容,故不建条目。其中 TestNBT 验证 NBT 读写往返,是 地图数据模型 与 标记系统 中 NBT 字段的旁证。