FlagType

基本信息

属性 值
类名 mytown.entities.flag.FlagType<T>
文件 src/main/java/mytown/entities/flag/FlagType.java
启用版本 Minecraft 1.7.10

功能

flag 的类型定义。本类用静态字段声明了全部 15 种 flag, 是全 mod 权限系统的词表(注意:与 Segment 类型枚举 的 4 个枚举是两回事,不要混为一谈)。

15 种 flag

Boolean 型(14 种)

下表 默认 为源码声明初值,Property 为构造时传入的标记全集。

名称 默认 Property
ENTER true IN_TOWN, IN_PLOT
ACCESS false IN_TOWN, IN_PLOT, IN_WILD, WHITELISTABLE
PICKUP true IN_TOWN, IN_PLOT, IN_WILD, WHITELISTABLE
PVP false IN_TOWN, IN_PLOT, IN_WILD
MOBS false IN_TOWN, IN_PLOT, IN_WILD
ENTITIES true IN_TOWN, IN_PLOT, IN_WILD
PVE false IN_TOWN, IN_PLOT, IN_WILD
USAGE false IN_TOWN, IN_PLOT, IN_WILD
ACTIVATE false IN_TOWN, IN_PLOT, IN_WILD, WHITELISTABLE
FAKERS true IN_TOWN, IN_PLOT, IN_WILD
MODIFY false IN_TOWN, IN_PLOT, IN_WILD
EXPLOSIONS false IN_TOWN, IN_PLOT, IN_WILD
RESTRICTIONS false IN_TOWN
NEARBY false IN_TOWN

默认值分布:4 个 true(ENTER、PICKUP、ENTITIES、FAKERS), 10 个 false(其余)—— 逐行取上表数值,不要凭直觉补全。

⚠️ RESTRICTIONS 与 NEARBY 只有 IN_TOWN,没有 IN_PLOT 也没有 IN_WILD。 即这两项在地块与荒野内不生效,只作用于城镇范围。

⚠️ WHITELISTABLE 只有 3 个 flag 具备:ACCESS、PICKUP、ACTIVATE。 这与 FlagType.getWhitelistable() 的返回值一致, 也是 WhitelisterTool 能操作的全部 flag 范围。

Integer 型(1 种)

名称 默认 用途
MAXWARP 30 传送权限等级上限,由 ProtectionManager.checkWarpLevel 判定

⚠️ MAXWARP 是唯一的非布尔 flag,因此 ProtectionManager.hasPermission(Resident, FlagType<Boolean>, ...) 这个重载 无法用于 MAXWARP —— 后者必须走 checkWarpLevel(Resident, int dim, int x, int y, int z)。

Property 标记

FlagType 构造时接受若干 Property:

Property 作用
IN_TOWN 在城镇范围内有效
IN_PLOT 在地块范围内有效
IN_WILD 在荒野范围内有效
WHITELISTABLE 可加入白名单(共 3 处出现)

静态注册表

private static final List<FlagType<?>> values = new ArrayList<>();

静态初始化块中逐个 new FlagType<>(...) 并加入 values。提供:

方法 返回
values() ImmutableList<FlagType<?>>(Guava)
getWhitelistable() 筛出 isWhitelistable 的子集

实现要点

⚠️ 数值必须区分「源码声明初值」与「生效值」: FlagsConfig 在加载时会回写 defaultValue 与 configurable,因此运行时真正生效的默认值以 DefaultFlags.json 为准。 直接引用源码里的字面量会漏掉用户配置。

⚠️ isWildPerm 决定该 flag 能否出现在 WildPerms.json (见 WildPermsConfig), 与 WHITELISTABLE 是两套独立标记,不可混用。

⚠️ 15 个静态字段 + values 列表是硬编码的,新增 flag 必须同时改 静态字段声明与初始化块,并重写 Flag.Serializer 的类型处理。 Commands 的 tab 补全会自动跟随,无需另改。

⚠️ MAXWARP 的取值范围未在源码中做上下界校验, 超范围值会直接参与 checkWarpLevel 比较。

相关条目