TaskNH
[!INFO] Git Commit:
fba1a26| Updated: 2026-10-01
TaskNH 是 GTNH 1.7.10 的队伍协作任务追踪器(modid tasknh,@Mod 类 com.eldrinn.tasknh.TaskNHMod,包根 com.eldrinn.tasknh,作者 Eldrinn_Elantey,mcmod.info 自述 “Collaborative in-game task tracker for GTNH teams.”,共 55 个 Java 文件)。它让多人队伍共享一份任务清单:分工、指派、勾选清单、评论,并把任务位置投影到地图上。
⚠️ 模组原名是 “Foreman”:存档名、配置文件名与一批 NBT 键都保留了旧名,代码里有三条一次性迁移路径,见 任务存档 与 任务数据模型。
硬依赖:gtnhlib@[0.11.51,)(队伍系统 + 网络层)、modularui2@[2.3.91,)(整个 GUI)。可选:Navigator、BetterQuesting、NotEnoughItems、ServerUtilities、BlockRenderer6343。
核心:任务数据模型
任务由 6 个类构成(com.eldrinn.tasknh.data),同时是 NBT 存档单元和网络封包单元——字段一一对应。任务的 15 个字段、NBT 键名、两代旧格式兼容路径,以及网络侧的长度/数量上限,全部在:
- 任务数据模型 — Task / TaskStatus / AssignedPlayer / ChecklistItem / Comment / TaskLocation 六个类的字段表、NBT 键、以及 UUID 前缀匹配等细节
存储与同步
- 任务存档 —
WorldSavedData,存在主世界mapStorage的TaskNHTasks;按队伍分区;ForemanTasks与旧扁平格式两层迁移 - 队伍与同步流程 — 登录/登出/队伍合并三个事件、客户端乐观更新与
pendingEdit、getPinnedTasks的排序与过滤 - 网络协议 — GTNHLib
NetworkChannel("tasknh")上 9 个封包,ID 按注册顺序分配
完成与奖励
- 物品完成追踪 — 唯一的自动完成机制;
InventoryListener标记 + 下一 tick 检查;主物品栏精确匹配或矿辞典名匹配;完成是单向的 - 服务端配置 — Forge
.cfg,全部 3 个选项 - 命令 —
/tasknh的 10 个子命令、UUID 前缀匹配、防路径穿越 - 权限 — 10 个节点,可选桥接 ServerUtilities 等级;仅 3 个默认要 OP
- 导出与导入 — 唯一的数据外流格式:
<世界>/tasknh/<name>.json,物品以 NBT 文本承载
界面
- 主界面 GUI — ModularUI 界面,11 个 widget,380 像素宽、没有容器也没有 GUI ID
- HUD 叠加层 — 绘制被图钉的任务;九宫格锚点;
HudSettingsScreen是唯一继承原版GuiScreen的类 - 客户端图钉配置 —
tasknh_pins.json,按世界分区保存图钉与折叠 - 主题与资源 — 两套 ModularUI 主题、25 个代码内颜色常量、5 个资源文件
- 打开界面热键 — 唯一一个按键绑定,默认 Y
地图与兼容
- Navigator 地图图层 — 需
location != null且showOnMap;任务 UUID 折叠成稳定的 64 位标识 - 兼容门控 — 7 个模组的门控方式;BetterQuesting 导入是
trackOre的唯一来源
本 mod 没有 X
以下维度逐条经 grep 验证为空,分类页因此不创建对应目录:
- 本 mod 没有方块 ——
grep -rnE "ModBlock|BlockItem|ItemBlock|registerBlocks" --include=*.java src/零命中;无GameRegistry.registerBlock - 本 mod 没有物品 —— 同上 grep 中
registerItems零命中,无new Item(注册。⚠️gui/widget/TaskBlockItem.java里的TaskBlockItem名字里有 “Item”,但它继承SortableListWidget.Item<Task>,是一个可拖拽的列表项控件,不是注册的物品——名字容易误导 - 本 mod 没有实体 ——
grep -rnE "EntityType|extends Entity|spawnEgg|EntitySpawnEvent" --include=*.java src/输出NO ENTITIES - 本 mod 没有多方块结构 ——
integration/MultiblockTaskIntegration.java的名字里有 “Multiblock”,但它消费的是 BlockRenderer6343 展示的其他模组的多方块预览,往 NEI 预览上加一个「+」按钮把部件转成清单项。仓库内没有自己的多方块结构定义,见 兼容门控 - 本 mod 没有 TileEntity
- 本 mod 没有附魔 ——
grep -rnE "Enchantment" --include=*.java src/零命中 - 本 mod 没有药水效果 —— 同 grep 中
PotionEffect零命中 - 本 mod 没有成就 —— 同 grep 中
Achievement零命中;src/main/resources下无advancements/ - 本 mod 没有维度 ——
grep -rnE "DimensionType|ChunkGenerator" --include=*.java src/零命中。TaskLocation.dimension只是引用已存在的维度 id - 本 mod 没有群系 ——
grep -rnE "Biome" --include=*.java src/零命中 - 本 mod 没有结构(structure) ——
grep -rnE "StructureFeature|StructurePiece|registerWorldGen" --include=*.java src/零命中 - 本 mod 不做世界生成 —— 没有任何
WorldGenerator实现 - 本 mod 没有合成配方 ——
src/main/resources下无recipes/ - 本 mod 没有 mixin 也不是 core mod ——
gradle.properties中usesMixins = false、coreModClass为空 - 本 mod 不注册容器,没有 GUI ID ——
grep -rnE "IGuiHandler|registerGuiHandler|new Container|getServerGuiElement" --include=*.java src/零命中。唯一继承GuiScreen的是HudSettingsScreen,它不绑定容器
因此本分类只有 2 个子目录:setting(15 篇)与 keybinding(1 篇)。
随附的数据文件
模组不附带任何预置任务包。src/main/resources 下只有资源文件(见 主题与资源),没有任务数据。任务的唯一来源是玩家在游戏内创建、/tasknh import 导入、或由 BetterQuesting / BlockRenderer6343 集成转换而来。
两处会落盘的运行时数据:
| 路径 | 内容 |
|---|---|
<世界>/level.dat 的 MapStorage → TaskNHTasks |
全部任务,按队伍分区(见 任务存档) |
<世界>/tasknh/<name>.json |
/tasknh export 的输出(见 导出与导入) |
<mcDataDir>/config/tasknh.cfg |
服务端 3 个配置项(见 服务端配置) |
<mcDataDir>/config/tasknh_pins.json |
客户端图钉与 HUD 位置(见 客户端图钉配置) |