Chunk 加载回调
基本信息
| 属性 | 值 |
|---|---|
| 类名 | mytown.handlers.MyTownLoadingCallback |
| 文件 | src/main/java/mytown/handlers/MyTownLoadingCallback.java |
| 行数 | 30 |
| 实现 | ForgeChunkManager.LoadingCallback |
| 启用版本 | Minecraft 1.7.10 |
功能
区块强载的恢复逻辑。MyTown2 会为城镇 / 地块强载区块, 使领地内容不掉落。本类负责在服务端启动时把已持久化的票据重新 force 回去。
注册点:Mod 入口 的 registerHandlers() 末行
ForgeChunkManager.setForcedChunkLoadingCallback(this, new MyTownLoadingCallback());
这是本 mod 唯一使用 ForgeChunkManager 的地方。
结构
public static final List<ForgeChunkManager.Ticket> tickets = new ArrayList<>();
静态票据列表,收集本 mod 持有的全部强载票据。
ticketsLoaded(List<Ticket>, World)
- 遍历传入票据,从
ticket.getModData()取名为chunkCoords的NBTTagList(元素类型Constants.NBT.TAG_COMPOUND)。 - 对每个
NBTTagCompound读x/z两个 int,构造new ChunkCoordIntPair(x, z),调ForgeChunkManager.forceChunk(ticket, coord)。 - 最后
MyTownLoadingCallback.tickets.addAll(tickets)收进静态列表。
实现要点
⚠️ 票据的区块坐标存在 mod 自己的 NBT 里(key = chunkCoords),
不是用 Forge 默认的 Ticket 字段。这是本 mod 私有格式。
⚠️ NBT 元素只有 x 与 z,没有 y —— 再次印证
TownBlock 是区块级而非方块级。
⚠️ tickets 是 static final 列表且只 addAll 不清理。
/mytownadmin chunkunload 移除票据时若不同步移除此列表,
内存中的票据会与实际强载状态不一致。
⚠️ ticketsLoaded 由 Forge 在加载世界时回调,可能对多个世界多次调用。
相关条目
- TownBlock -
isChunkloaded()与区块坐标 - Ticker - 每日维护费
- Config -
costAdditionalChunkloadedUpkeep/costAmountChunkloadedClaim - CommandsAdmin -
chunkload/chunkunload命令