Town
基本信息
| 属性 | 值 |
|---|---|
| 类名 | mytown.entities.Town |
| 文件 | src/main/java/mytown/entities/Town.java |
| 行数 | 427 |
| 实现 | Comparable<Town>、IChatFormat |
| 启用版本 | Minecraft 1.7.10 |
功能
核心数据模型。一个 Town 实例代表一座城镇,聚合了几乎全部子结构。
7 个 final 子容器
| 字段 | 类型 | 内容 |
|---|---|---|
ticketMap |
TicketMap |
强载区块票据(传入 this 自引用) |
residentsMap |
ResidentRankMap |
居民 → Rank 映射 |
ranksContainer |
Rank.Container |
该镇的权限等级 |
plotsContainer |
Plot.Container |
地块,容量取 Config.instance.defaultMaxPlots |
flagsContainer |
Flag.Container |
该镇的 flag 值 |
townBlocksContainer |
TownBlock.Container |
组成城镇的方块单元 |
blockWhitelistsContainer |
BlockWhitelist.Container |
保护例外白名单 |
bank |
Bank |
城镇银行(传入 this) |
⚠️ plotsContainer 的容量在构造时从
Config.instance.defaultMaxPlots.get() 读取并固化。
之后改配置不会影响已加载城镇的既有容量。
⚠️ ticketMap 与 bank 的构造器都接收 this(Town 实例),
形成双向引用:Town → Bank → Town。序列化时需注意递归。
关键方法
| 方法 | 返回 | 说明 |
|---|---|---|
getOwnerComponent() |
IChatComponent |
所有者聊天气泡 |
getOwnersAtPosition(dim, x, y, z) |
Resident.Container |
该坐标上的所有者(带 dim) |
getName() / getOldName() |
String |
现名 / 旧名(支持改名) |
getNation() |
Nation |
所属国家 |
getSpawn() |
Teleport |
出生点 |
toChatMessage() |
IChatComponent |
城镇列表中的展示 |
compareTo |
— | 供 Comparable 排序 |
内嵌类
Town 内含一个静态容器类(Town.Container),提供
get(String name) 按名取镇、getMainTown() 取主城、toChatMessage()。
实现要点
getOwnersAtPosition的签名带dim,与本 mod 全局一致的 「坐标 = (dim, x, y, z)」约定吻合。- 实现
IChatFormat是为了能直接嵌进/town list之类的聊天输出。 - 持久化走 Schema 的
Towns表 +TownsToNations等关联表。