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 等关联表。

相关条目