Minecraft插件配置如何读取嵌套repair-cost段 返回null空指针怎么解决
问题原因
- Bukkit/Spigot 原生配置API在解析路径字符串时,默认将
.作为层级分隔符,同时会把路径中未做特殊标记的:识别为分隔标记,无法正确匹配配置中带引号的完整keySWORD:CUTLASS,会误将该key拆分为SWORD、CUTLASS两个独立层级,导致找不到对应路径的repair-cost配置段,返回null后调用方法触发空指针异常。
解决方法
两种可行的读取方案:
方案1:逐层读取配置段(兼容性最好)
拆分路径逐步读取,避免把带特殊字符的key放到拼接路径中:
// 首先读取items父配置段 ConfigurationSection itemsSection = Main.getConfiguration().getConfigurationSection("repair.items"); // 直接传入带特殊字符的key获取对应物品配置段 ConfigurationSection cutlassSection = itemsSection.getConfigurationSection("SWORD:CUTLASS"); // 获取repair-cost配置段 ConfigurationSection repairCostSection = cutlassSection.getConfigurationSection("repair-cost"); // 读取下级key Set<String> costKeys = repairCostSection.getKeys(false);
方案2:路径中用单引号包裹特殊key(适用于较高版本Bukkit API)
直接在路径字符串中用单引号把带特殊字符的key包裹起来,让解析器识别为完整key:
Main.getConfiguration().getConfigurationSection("repair.items.'SWORD:CUTLASS'.repair-cost").getKeys(false);
额外建议
读取配置段后增加非空校验,避免配置缺失时再触发空指针异常:
if (repairCostSection != null) { Set<String> costKeys = repairCostSection.getKeys(false); // 后续业务逻辑 }
内容的提问来源于stack exchange,提问作者pietro bacigalupi
相关产品推荐
相关产品推荐

