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。

相关条目