Rank

基本信息

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

功能

城镇内的权限等级。Rank 把「玩家在某个城镇里的身份」映射到 MyPermissions 权限节点,从而复用全服权限系统。

静态默认值

public static final Container defaultRanks = new Container();

initDefaultRanks()(Rank.java:31-53)生成 3 个内置等级, 并 clear() 后依次加入 defaultRanks:

Rank Type 权限节点
Mayor Type.MAYOR mytown.cmd*、mytown.bypass.*
Assistant Type.REGULAR mytown.cmd*、-mytown.cmd.mayor、mytown.bypass.plot、mytown.bypass.flag.*
Resident Type.DEFAULT mytown.cmd.everyone.*、mytown.cmd.outsider.*、mytown.bypass.flag.*、-mytown.bypass.flag.restrictions

⚠️ 前缀 - 是拒绝(negate)语义。 Assistant 被显式拒绝 mytown.cmd.mayor, Resident 被显式拒绝 mytown.bypass.flag.restrictions。 把它们读成「允许」是语义反了。

⚠️ Mayor 拿 mytown.bypass.* 全通,Assistant 只拿 bypass.plot 与 bypass.flag.* —— 两者绕过范围不同。

内嵌类型

类型 说明
Serializer extends SerializerTemplate<Rank> Gson 适配
Container extends ArrayList<Rank> Rank 集合,实现 IChatFormat

Rank 自身有 permissionsContainer 字段存放上述节点字符串。

实现要点

⚠️ 这 3 个默认值只是内置模板。运行时真正生效的是 Rank.defaultRanks,而它会被 RanksConfig 的 read() 先 clear() 再 addAll() 整体替换。 因此实际等级集合以 DefaultTownRanks.json 为准,源码这三行不能当作最终配置。

⚠️ Mayor 用的通配是 mytown.cmd*(无点分隔), 而 Resident 用的是 mytown.cmd.everyone.*(有点分隔)。 两种写法混用,匹配行为依赖 MyPermissions 实现,不能统一改写。

相关条目