Minecraft插件开发:基于布尔值动态配置颜色的代码优化问询
优化Minecraft插件设置项的动态颜色赋值与代码复用
问题背景
当玩家触发/settings指令时,需要展示可控制的设置项及对应的布尔状态(true/false),并根据状态为文本配置对应颜色(启用为绿色§a,禁用为红色§c)。当前实现能正常运行,但每个设置项都编写重复的颜色判断与消息发送代码,导致代码冗余、可读性差,希望找到更动态的优化方案。
原始冗余代码示例
String BlockBreakingColor = "§7"; Boolean BlockBreakValue = plugin.getConfig().getBoolean("settings.block-break"); if(BlockBreakValue) { BlockBreakingColor = "§a"; } else { BlockBreakingColor = "§c"; } p.sendMessage("§8» §7block-breaking §8- " + BlockBreakingColor + BlockBreakValue.toString());
优化方案
1. 提取通用颜色判断逻辑
首先把根据布尔值获取对应颜色代码的逻辑封装成工具方法,避免重复编写if-else:
// 工具方法:根据布尔状态返回对应颜色代码 private String getStatusColor(boolean isEnabled) { return isEnabled ? "§a" : "§c"; }
2. 集中管理设置项并批量处理
将所有设置项的配置键和显示名称集中管理,通过循环批量处理每个设置项,彻底消除重复代码。
方式一:使用数组(兼容低版本Java)
// 集中定义所有设置项:[配置键, 显示名称] String[][] settingsList = { {"settings.block-break", "block-breaking"}, {"settings.entity-interact", "entity-interact"}, {"settings.auto-pickup", "auto-pickup"} // 新增设置项直接添加新数组元素即可 }; // 遍历处理每个设置项 for (String[] setting : settingsList) { String configKey = setting[0]; String displayName = setting[1]; boolean status = plugin.getConfig().getBoolean(configKey); String statusColor = getStatusColor(status); p.sendMessage("§8» §7" + displayName + " §8- " + statusColor + status); }
方式二:使用Record(Java 16+,更优雅)
如果项目使用Java 16及以上版本,推荐用Record封装设置项信息,可读性更强:
// 定义Setting记录类,存储配置键和显示名称 private record Setting(String configKey, String displayName) {} // 初始化所有设置项列表 List<Setting> settings = List.of( new Setting("settings.block-break", "block-breaking"), new Setting("settings.entity-interact", "entity-interact"), new Setting("settings.auto-pickup", "auto-pickup") ); // 批量处理设置项 for (Setting setting : settings) { boolean status = plugin.getConfig().getBoolean(setting.configKey()); String statusColor = getStatusColor(status); p.sendMessage("§8» §7" + setting.displayName() + " §8- " + statusColor + status); }
优化优势
- 代码复用性:新增设置项只需在列表中添加条目,无需重复编写颜色判断和消息发送逻辑
- 可读性:所有设置项集中管理,逻辑清晰,便于维护
- 性能:消除冗余代码,无额外性能开销,执行效率与原代码一致
内容的提问来源于stack exchange,提问作者T I M O N
相关产品推荐
相关产品推荐

