Resident

基本信息

属性 值
类名 mytown.entities.Resident
文件 src/main/java/mytown/entities/Resident.java
行数 328
启用版本 Minecraft 1.7.10

功能

居民 —— 玩家在 MyTown2 中的身份。玩家可以不属于任何城镇(此时按 Wild 规则行事),也可以属于一个或多个城镇。

tick()

Resident.java:82 定义的逐 tick 更新。由 Ticker 在每个服务端 WorldTickEvent 中对 MyTownUniverse.instance.residents 逐个调用。

维护随时间变化的字段(在线状态、传送冷却等)。 Config 的 teleportCooldown(默认 200 tick = 10 秒) 与本 tick 逻辑相关。

getExtraBlocks()

Resident.java:229,返回该居民额外获得的方块数。 是 Town 计算 getMaxBlocks() 时的 residentsExtra 项之一:

int residentsExtra = 0;
for (Resident res : residentsMap.keySet()) residentsExtra += res.getExtraBlocks();

Resident.Container

extends ArrayList<Resident>,实现 IChatFormat。 被 Town(ownersContainer 等)与 Plot(membersContainer / ownersContainer)复用。

实现要点

  • 居民主键是 UUID(数据库 Residents 表 uuid CHAR(36)), 而非玩家名 —— 改名后身份不变。显示名另存 name VARCHAR(240)。
  • 关联表 ResidentsToTowns / ResidentsToPlots 表达多对多关系, 即一个居民可属多个城镇 / 地块。
  • Commands 的 populateCompletionMap() 直接遍历 residents 生成 residentCompletion 补全,因此居民列表同时是 UI 数据源。

相关条目

  • MyTownUniverse - residents 列表宿主
  • Ticker - 每 tick 调用 res.tick()
  • Town - residentsMap
  • Schema - Residents / ResidentsToTowns / ResidentsToPlots 表