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 比较。
相关条目
- Flag - flag 实例与容器
- FlagsConfig - 回写
defaultValue/configurable - ProtectionManager -
checkWarpLevel/hasPermission - Commands - 自动生成的 tab 补全