下面的代码可以向玩家 player 发送一条 RGB色彩(#XXXXXX)、低版本&x色彩(&0~&f) 混合的消息:
player.sendMessage("§x§C§C§0§0§0§0I still love you. §bBut you do not know...");
由此,我们可以看出,1.16+版本发送 RGB色彩(#XXXXXX) 对应的方式是:
§x§HEX颜色字符第1位§第2位§第3位§第4位§第5位§第6位
这样一来,我们可以这样实现一段文本的色彩代码转换:
public class HexCodeUtils {
public static String translateHexCodes(String startTag, String endTag, String message) {
Pattern hexPattern = Pattern.compile(String.valueOf(startTag) + "([A-Fa-f0-9]{6})" + endTag);
return translate(hexPattern, message);
}
private static String translate(Pattern hex, String message) {
Matcher matcher = hex.matcher(message);
StringBuffer buffer = new StringBuffer(message.length() + 32);
while (matcher.find()) {
String group = matcher.group(1);
matcher.appendReplacement(buffer,
"§x§" + group.charAt(0) + "§" + group.charAt(1) + "§" + group.charAt(2)
+ "§" + group.charAt(3) + "§" + group.charAt(4) + "§" + group.charAt(5));
}
return ChatColor.translateAlternateColorCodes('&', matcher.appendTail(buffer).toString());
}
}
发送信息时的调用方法:
String msg = "BCCFFNever gonna make you cry. &aNever gonna say goodbye.";
player.sendMessage(HexCodeUtils.translateHexCodes("&#", "", msg).replace("&", "§"));
// 参数1: 起始字符
// 参数2: 结尾字符
// 版本判断就不加了, 想实现低版本兼容的话, 最好判断一下版本吧
// 如果无法匹配字符串, 建议把参数1, 参数2都转义一下
虽然在本例中用不上, 但还是另外附上 org.bukkit.Color 的文档链接:
https://bukkit.windit.net/javadoc/org/bukkit/Color.html