Java 如何使用'&';在游戏中显示彩色?

Java 如何使用'&';在游戏中显示彩色?,java,minecraft,bukkit,Java,Minecraft,Bukkit,我不确定如何允许我的插件用户使用&输入颜色代码并使其正确显示。我知道我可以使用ChatColor中的常量在插件发送的消息中添加各种颜色,但我不知道如何允许用户输入自己的彩色消息 这是我的密码: package me.avy.simplemotd; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSe

我不确定如何允许我的插件用户使用
&
输入颜色代码并使其正确显示。我知道我可以使用
ChatColor
中的常量在插件发送的消息中添加各种颜色,但我不知道如何允许用户输入自己的彩色消息

这是我的密码:

package me.avy.simplemotd;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class motd extends JavaPlugin implements Listener {

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e) {
            Player p = e.getPlayer();
            p.sendMessage(ChatColor.AQUA + getConfig().getString("message"));
    }

    public void onEnable()
    {
      Bukkit.getServer().getLogger().info(" SimpleMotd enabled correctly!");
      saveDefaultConfig();
      Bukkit.getServer().getPluginManager().registerEvents(this, this);
    }

    public void onDisable()
    {
      Bukkit.getServer().getLogger().info(" SimpleMotd disabled correctly!");
    }

    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
            if (cmd.getName().equalsIgnoreCase("motd")) {
                    sender.sendMessage(ChatColor.AQUA + "MOTD: " + getConfig().getString("message"));
                    return true;
            }
            if (cmd.getName().equalsIgnoreCase("setmotd")) {
                    if (!sender.hasPermission("motd.set")) {
                            sender.sendMessage(ChatColor.RED + "You are not permitted to do this!");
                            return true;
                    }
                    if (args.length == 0) {
                            sender.sendMessage(ChatColor.RED + "Please specify a message!");
                            return true;
                    }
                    StringBuilder str = new StringBuilder();
                    for (int i = 0; i < args.length; i++) {
                            str.append(args[i] + " ");
                    }
                    String motd = str.toString();
                    getConfig().set("message", motd);
                    saveConfig();
                    sender.sendMessage(ChatColor.GREEN + "MOTD set to: " + motd);
                    return true;
            }
            return true;
    }
}
package me.avy.simplemotd;
导入org.bukkit.bukkit;
导入org.bukkit.ChatColor;
导入org.bukkit.command.command;
导入org.bukkit.command.CommandSender;
导入org.bukkit.entity.Player;
导入org.bukkit.event.EventHandler;
导入org.bukkit.event.Listener;
导入org.bukkit.event.player.PlayerJoinEvent;
导入org.bukkit.plugin.java.JavaPlugin;
公共类motd扩展JavaPlugin实现监听器{
@事件处理程序
PlayerJoin上的公共无效(PlayerJoin事件e){
Player p=e.getPlayer();
p、 sendMessage(ChatColor.AQUA+getConfig().getString(“消息”);
}
public void onEnable()
{
Bukkit.getServer().getLogger().info(“SimpleMod已正确启用!”);
saveDefaultConfig();
Bukkit.getServer().getPluginManager().registerEvents(这个,这个);
}
公共无效不可撤销()
{
Bukkit.getServer().getLogger().info(“SimpleMod已正确禁用!”);
}
公共布尔onCommand(CommandSender-sender、Command cmd、String commandLabel、String[]args){
if(cmd.getName().equalsIgnoreCase(“motd”)){
sender.sendMessage(ChatColor.AQUA+“MOTD:”+getConfig().getString(“message”));
返回true;
}
if(cmd.getName().equalsIgnoreCase(“setmotd”)){
如果(!sender.hasPermission(“motd.set”)){
sender.sendMessage(ChatColor.RED+“不允许您这样做!”);
返回true;
}
如果(args.length==0){
sender.sendMessage(ChatColor.RED+“请指定一封邮件!”);
返回true;
}
StringBuilder str=新的StringBuilder();
对于(int i=0;i
我希望玩家能够使用
/setmotd&cRed&aGreen&9Blue
,并使用。还有其他几个插件能够以这种方式显示消息,所以这一定是可能的

如何将
&cRed&aGreen&9Blue
这样的消息转换为在游戏中正确显示的消息?

您可以使用
&
将颜色代码转换为ChatColor使用的格式。(在内部,这是
§

translateAlternateColorCodes
接受替换字符,然后是要替换的文本。对于替换字符,您需要使用
“&”
(请注意单引号而不是双引号)
translateAlternateColorCodes
具有只替换有效代码的特殊逻辑,因此
&eWalCome
成为
§eWalCome
(在游戏中,黄色文本表示“欢迎”),但
我喜欢猫和狗
不会被转换,并在游戏中显示为
我喜欢猫和狗

您可能希望在显示消息的所有情况下进行替换,但不希望在设置消息时进行替换。这样,如果有人手动编辑配置,
&
也可以在那里使用。因此,您需要编辑代码以替换以下每一行:

p.sendMessage(ChatColor.AQUA+getConfig().getString(“消息”));
sender.sendMessage(ChatColor.AQUA+“MOTD:”+getConfig().getString(“message”);
sender.sendMessage(ChatColor.GREEN+“MOTD”设置为:“+MOTD”);
有了这些:

p.sendMessage(ChatColor.AQUA+ChatColor.translateAlternateColorCodes('&',getConfig().getString(“message”));
sender.sendMessage(ChatColor.AQUA+“MOTD:”+ChatColor.translateAlternateColorCodes('&',getConfig().getString(“message”));
sender.sendMessage(ChatColor.GREEN+”MOTD设置为:“+ChatColor.translateAlternateColorCodes('&',MOTD));
更好的是,您可以编写一个
getMotd
方法,用正确的格式从配置中检索MOTD,并改用该方法:

/**
*从配置中获取MOTD,其格式可用于聊天。
*/
私有字符串getMotd()
{
字符串rawMessage=getConfig().getString(“消息”);
返回ChatColor.translateAlternateColorCodes('&',rawMessage);
}
您可以在希望显示MOTD的所有位置使用
getMotd()
,而不是直接从配置中检索MOTD。

您可以使用
&
将颜色代码转换为ChatColor使用的格式。(在内部,这是
§

translateAlternateColorCodes
接受替换字符,然后是要替换的文本。对于替换字符,您需要使用
“&”
(请注意单引号而不是双引号)
translateAlternateColorCodes
具有只替换有效代码的特殊逻辑,因此
&eWalCome
成为
§eWalCome
(在游戏中,黄色文本表示“欢迎”),但
我喜欢猫和狗
不会被转换,并在游戏中显示为
我喜欢猫和狗

你可能会想重演