Eclipse 中的 Minecraft 插件错误(颜色,全部替换)
Minecraft plugin error in Eclipse (color, replaceall)
我正在编辑一个所有者很长时间没有更新的插件,但我收到此错误:
The method replaceAll(String, String)
in the type String is not
applicable for the arguments (String, ChatColor)
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (!(sender instanceof Player)) {
return false;
}
String prefixResult = getConfig().getString("prefix");
prefixResult = prefixResult.replaceAll("&f", ChatColor.WHITE);
prefixResult = prefixResult.replaceAll("&e", ChatColor.YELLOW);
prefixResult = prefixResult.replaceAll("&d", ChatColor.LIGHT_PURPLE);
prefixResult = prefixResult.replaceAll("&c", ChatColor.RED);
prefixResult = prefixResult.replaceAll("&b", ChatColor.AQUA);
prefixResult = prefixResult.replaceAll("&a", ChatColor.GREEN);
prefixResult = prefixResult.replaceAll("&9", ChatColor.BLUE);
prefixResult = prefixResult.replaceAll("&8", ChatColor.DARK_GRAY);
prefixResult = prefixResult.replaceAll("&7", ChatColor.GRAY);
prefixResult = prefixResult.replaceAll("&6", ChatColor.GOLD);
prefixResult = prefixResult.replaceAll("&5", ChatColor.DARK_PURPLE);
prefixResult = prefixResult.replaceAll("&4", ChatColor.DARK_RED);
prefixResult = prefixResult.replaceAll("&3", ChatColor.DARK_AQUA);
prefixResult = prefixResult.replaceAll("&2", ChatColor.DARK_GREEN);
prefixResult = prefixResult.replaceAll("&1", ChatColor.DARK_BLUE);
prefixResult = prefixResult.replaceAll("&0", ChatColor.BLACK);
Player player = (Player) sender;
}
你知道是什么原因造成的吗?
我的猜测是您正在使用的作者来源的导入设置不正确。
显然,prefixResult
是一个字符串,replaceAll()
是一个已知的字符串正则表达式替换方法。 Eclipse 只是看到您正在引用 ChatColor
中的某些内容,它可能不存在,因此它解析为该类型。
要解决此问题,请修复该导入,让您知道您指定的类型无法解析为字符串。
然而,我碰巧知道 Minecraft 只是将颜色字符 &e
、&b
、&c
等转换为 Unicode color characters。这些都有据可查。
所以:
prefixResult.replaceAll("&e", ChatColor.YELLOW);
...
prefixResult.replaceAll("&b", ChatColor.AQUA);
实际上是同一个东西:
prefixResult.replaceAll("&e","3[32m");
...
prefixResult.replaceAll("&b", "3[36m");
如果您找不到 ChatColor
(这可能是最简单的解决方案),您可以简单地查找值并直接替换它们。
希望对您有所帮助!
更新:
原来,ChatColor
class其实在Bukkit source里面。确保你有导入:
import org.bukkit.ChatColor;
文件中的某处。但是如果你仍然有问题,并且你确定项目配置是正确的,你可以直接用那个文件补充你的代码。 (另外,颜色列表在里面,你只需要弄清楚它使用的图案就可以了。)
更新:
终于仔细看了source,发现只要调用toString()
方法就可以了。这应该 return 一个 String 类型,因为 ChatColor.COLOR
是一个枚举的 ChatColor
类型。抱歉,我没有早点注意到这一点。
所以,我认为您的代码应该如下所示:
prefixResult.replaceAll("&e", ChatColor.YELLOW.toString());
...
prefixResult.replaceAll("&b", ChatColor.AQUA.toString());
很明显,ChatColor
class在toString()
方法returns实例化枚举类型时定义了变量here:
this.toString = new String(new char[] {COLOR_CHAR, code});
我正在编辑一个所有者很长时间没有更新的插件,但我收到此错误:
The method
replaceAll(String, String)
in the type String is not applicable for the arguments(String, ChatColor)
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (!(sender instanceof Player)) {
return false;
}
String prefixResult = getConfig().getString("prefix");
prefixResult = prefixResult.replaceAll("&f", ChatColor.WHITE);
prefixResult = prefixResult.replaceAll("&e", ChatColor.YELLOW);
prefixResult = prefixResult.replaceAll("&d", ChatColor.LIGHT_PURPLE);
prefixResult = prefixResult.replaceAll("&c", ChatColor.RED);
prefixResult = prefixResult.replaceAll("&b", ChatColor.AQUA);
prefixResult = prefixResult.replaceAll("&a", ChatColor.GREEN);
prefixResult = prefixResult.replaceAll("&9", ChatColor.BLUE);
prefixResult = prefixResult.replaceAll("&8", ChatColor.DARK_GRAY);
prefixResult = prefixResult.replaceAll("&7", ChatColor.GRAY);
prefixResult = prefixResult.replaceAll("&6", ChatColor.GOLD);
prefixResult = prefixResult.replaceAll("&5", ChatColor.DARK_PURPLE);
prefixResult = prefixResult.replaceAll("&4", ChatColor.DARK_RED);
prefixResult = prefixResult.replaceAll("&3", ChatColor.DARK_AQUA);
prefixResult = prefixResult.replaceAll("&2", ChatColor.DARK_GREEN);
prefixResult = prefixResult.replaceAll("&1", ChatColor.DARK_BLUE);
prefixResult = prefixResult.replaceAll("&0", ChatColor.BLACK);
Player player = (Player) sender;
}
你知道是什么原因造成的吗?
我的猜测是您正在使用的作者来源的导入设置不正确。
显然,prefixResult
是一个字符串,replaceAll()
是一个已知的字符串正则表达式替换方法。 Eclipse 只是看到您正在引用 ChatColor
中的某些内容,它可能不存在,因此它解析为该类型。
要解决此问题,请修复该导入,让您知道您指定的类型无法解析为字符串。
然而,我碰巧知道 Minecraft 只是将颜色字符 &e
、&b
、&c
等转换为 Unicode color characters。这些都有据可查。
所以:
prefixResult.replaceAll("&e", ChatColor.YELLOW);
...
prefixResult.replaceAll("&b", ChatColor.AQUA);
实际上是同一个东西:
prefixResult.replaceAll("&e","3[32m");
...
prefixResult.replaceAll("&b", "3[36m");
如果您找不到 ChatColor
(这可能是最简单的解决方案),您可以简单地查找值并直接替换它们。
希望对您有所帮助!
更新:
原来,ChatColor
class其实在Bukkit source里面。确保你有导入:
import org.bukkit.ChatColor;
文件中的某处。但是如果你仍然有问题,并且你确定项目配置是正确的,你可以直接用那个文件补充你的代码。 (另外,颜色列表在里面,你只需要弄清楚它使用的图案就可以了。)
更新:
终于仔细看了source,发现只要调用toString()
方法就可以了。这应该 return 一个 String 类型,因为 ChatColor.COLOR
是一个枚举的 ChatColor
类型。抱歉,我没有早点注意到这一点。
所以,我认为您的代码应该如下所示:
prefixResult.replaceAll("&e", ChatColor.YELLOW.toString());
...
prefixResult.replaceAll("&b", ChatColor.AQUA.toString());
很明显,ChatColor
class在toString()
方法returns实例化枚举类型时定义了变量here:
this.toString = new String(new char[] {COLOR_CHAR, code});