披风配置 JSON

基本信息

属性 值
解析类 com.jadarstudios.developercapes.cape.CapeConfigManager#parse
解析库 Gson(new Gson().fromJson(isr, Map.class))
顶层结构 扁平 Map<String, Object>
仓库内示例 SampleCape.json

解析器把整份 JSON 读成一个 Map,然后按每个顶层节点的值的类型分派:

  • 值是 Map → parseGroup(...)(命名组)
  • 值是 String → parseUser(...)(单人)

写法一:命名组

组节点的键是组名(任意字符串),值必须同时含 capeUrl 与 users 两个键:

{
  "ExampleGroup1": {
    "capeUrl": "http://www.myurl.com/DEV_CAPE.png",
    "users": [
      "05910308-229d-46bb-a466-e5574dba490c",
      "6b4a177a-54ee-4dd6-a50b-d993503892c1"
    ]
  }
}
键 必需 类型 含义
capeUrl 是 String 该组共用的披风图片地址
users 是 数组 获得该披风的玩家 UUID 列表

GroupManager#parse 用 instanceof ArrayList / instanceof String 严格校验两者;任一不满足就记 Group %s could not be parsed because it either is invalid or missing elements. 并返回 null(整组丢弃),不会抛异常。

写法二:单人直接映射

键直接是玩家 UUID,值是该玩家的披风地址:

"2fb94c76-d968-4f25-a7cc-91fdccd23868": "http://www.myurl.com/PERSONAL_CAPE.png"

这走的 UserManager#parse(String user, Object cape),此时 cape 参数是 String 而非 ICape,所以走 CapeManager.parse(user, cape.toString()) 按 UUID 建一个独立披风。

两种写法可以混用

SampleCape.json 正是混用示例:顶层一个 ExampleGroup1 组节点 + 一个单人 UUID 节点。解析器逐节点独立分派,互不影响。

错误处理

情况 行为
整个 JSON 语法错误 捕获 JsonSyntaxException,记 CapeConfig could not be parsed because: 并继续(返回已构造的空 CapeConfig)
组缺 capeUrl 或 users 该组返回 null 被丢弃,记 ERROR,其余组正常解析
parse(null) 直接抛 NullPointerException("Can not parse a null input stream!")
某个 User 解析出 null 跳过,不中断循环

[!NOTE] parse 捕获 JsonSyntaxException 后不重抛,调用方拿到的是一个字段全空的 CapeConfig,且 addConfig 仍会正常执行。接入方若不检查 config.users / config.groups 是否为空,会得到「注册成功但没有披风」的结果。

相关条目