Flag
基本信息
| 属性 | 值 |
|---|---|
| 类名 | mytown.entities.flag.Flag<T> |
| 文件 | src/main/java/mytown/entities/flag/Flag.java |
| 行数 | 167 |
| 实现 | Comparable<Flag>、IChatFormat |
| 启用版本 | Minecraft 1.7.10 |
功能
flag 的实例。FlagType(见 FlagType)定义「有哪些 flag」,
而 Flag<T> 表示「某处(城镇 / 地块 / 荒野)的某个 flag 当前取什么值」。
字段
| 字段 | 类型 | 说明 |
|---|---|---|
value |
T |
实际取值(Boolean 或 Integer) |
configurable |
boolean |
初值 true |
flagType |
final FlagType<T> |
指向所属类型 |
两个构造器:Flag(FlagType<T>, String serializedValue) 与 Flag(FlagType<T>, T value)。
关键方法
| 方法 | 返回 | 说明 |
|---|---|---|
setValue(String) |
boolean |
从字符串解析并设值 |
toggle() |
boolean |
布尔 flag 取反 |
compareTo(Flag) |
int |
排序 |
toChatMessage() |
IChatComponent |
聊天气泡展示 |
内嵌类型
| 类型 | 说明 |
|---|---|
Serializer extends SerializerTemplate<Flag> |
Gson 适配,含 register / serialize / deserialize |
Container extends ArrayList<Flag> |
flag 集合,实现 IChatFormat |
Container 提供 contains(FlagType<?>)、get(FlagType<T>)、remove(FlagType<?>)、
getValue(FlagType<T>)。这些方法按 FlagType 查找,而非按值查找,
因此同一容器内每个 FlagType 最多一项。
实现要点
configurable初值为true,但会被 FlagsConfig 按 JSON 内容回写(item.getFlagType().configurable = item.configurable;)。 所以「某 flag 是否可配」的真实来源是DefaultFlags.json,不是这个默认值。Container继承ArrayList而非组合,属继承式容器, 因此它带有ArrayList的全部公开方法。Town/Plot/Wild各持有一个Flag.Container, 三者的 flag 查找走同一套 API。
相关条目
- FlagType - 15 种 flag 的定义
- FlagsConfig - 回写
configurable - WildPermsConfig - 使用
Flag.Serializer - ProtectionManager -
hasPermission/getFlagValueAtLocation