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表