API 容器
基本信息
| 属性 | 值 |
|---|---|
| 位置 | src/main/java/mytown/api/container/ |
| 容器数 | 2 |
| 启用版本 | Minecraft 1.7.10 |
供附属 mod 使用的两个强类型容器。
ResidentRankMap
| 属性 | 值 |
|---|---|
| 文件 | api/container/ResidentRankMap.java(15 行起) |
| 声明 | extends HashMap<Resident, Rank> implements IChatFormat |
居民 → Rank 映射,是 Town.residentsMap 的实际类型
(Town.java:39 声明为 public final ResidentRankMap residentsMap = new ResidentRankMap();)。
实现 IChatFormat 以便直接嵌进聊天输出。
因继承 HashMap,自带 put / get / containsKey / size 等全部方法 ——
本类不新增任何 API。
⚠️ 该映射同时被用于 Town 的 getMaxBlocks():
blocksResident.get() * (residentsMap.size() - 1),
所以居民数直接影响城镇方块上限(见 AdminTown)。
TicketMap
| 属性 | 值 |
|---|---|
| 文件 | api/container/TicketMap.java(16 行起) |
| 声明 | extends HashMap<Integer, ForgeChunkManager.Ticket> |
区块坐标 → 强载票据 映射,键为 Integer(打包后的区块坐标)。
Town.ticketMap 在构造时传入 this(new TicketMap(this),形成 Town ↔ TicketMap 双向引用)。
⚠️ 与 ResidentRankMap 不同,TicketMap 没有 implements IChatFormat
—— 它是内部索引结构,不是展示对象。
实现要点
⚠️ 两者都是 extends 而非组合(继承式容器),
因此会把 HashMap 的全部公开方法暴露给调用方,
并允许调用方绕过任何封装直接改内容。
⚠️ 这两个类放在 api/ 包下、由 @API(provides = "MyTown|API") 覆盖
(见 API 包声明),属公开 API,
改动会破坏附属 mod 兼容性。
相关条目
- Town - 两者的宿主
- Chunk 加载回调 - 票据的实际加载
- API 事件 - 同属公开 API