0

当尝试制作一个广播代码行来读取它将从配置发送的消息时,我需要在一行中替换多个内容,但我得到了标题中描述的错误。

我试图将字符串更改为 int,但它在我的其他部分给出了错误。请帮我修复,查看下面的代码并调试错误。谢谢你!

if(plugin.getConfig().getBoolean("enable_global_death")) {
                        String bc = Bukkit.broadcastMessage(Utils.chat(plugin.getConfig().getString("global_death")));
                          bc = bc.replace("<killer>", killer.getName());        
                          bc = bc.replace("<player>", p.getName());
                          bc = bc.replace("<kill_weapon>", (CharSequence) killer.getItemInHand());

                        return;

我希望输出没有任何错误,我希望它可以替换配置中的内容,例如杀手的名称。

4

2 回答 2

0

您没有告诉哪一行导致抛出异常。但我假设它是最后bc = bc.replace(…)一行并且killer.getItemInHand()返回一个数字(int我猜)。如果我的假设是正确的,那么以下内容应该会有所帮助:

方法String.replace(…)接受两个类型的参数CharSequence。但是如果killer.getItemInHand()返回一个数字,你不能只将它转换为CharSequence. Java 不知道该怎么做。您必须将数字显式转换为CharSequence(或子类型,例如String):

bc.replace("<kill_weapon>", String.valueOf(killer.getItemInHand()));
于 2019-07-24T07:05:01.570 回答
0

在广播消息之前,您必须先替换字符串:

if(plugin.getConfig().getBoolean("enable_global_death")) {
    String bc = Utils.chat(plugin.getConfig().getString("global_death"));
    bc = bc.replace("<killer>", killer.getName());        
    bc = bc.replace("<player>", p.getName());
    bc = bc.replace("<kill_weapon>", killer.getItemInHand().getType().toString());
    Bukkit.broadcastMessage(bc);
    return;
}
于 2019-07-25T01:00:07.343 回答