gpt4 book ai didi

java - 如何使使用 '&' 指定的颜色代码的用户输入的消息在游戏中显示为彩色?

转载 作者:行者123 更新时间:2023-12-02 03:38:56 24 4
gpt4 key购买 nike

我不确定如何允许我的插件的用户使用 & 输入颜色代码并让它们正确显示。我知道我可以使用 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;
}
}

我希望玩家能够使用 /setmotd &cRed &aGreen &9Blue 并使用 Minecraft color code format 以适当的颜色向他们显示 MOTD。 。还有其他几个插件能够显示以这种方式设置的消息,所以它一定是可能的。

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

最佳答案

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

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

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

p.sendMessage(ChatColor.AQUA + getConfig().getString("message"));
sender.sendMessage(ChatColor.AQUA + "MOTD: " + getConfig().getString("message"));
sender.sendMessage(ChatColor.GREEN + "MOTD set to: " + 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 set to: " + ChatColor.translateAlternateColorCodes('&', motd));

更好的是,您可以编写一个 getMotd 方法,以正确的格式从配置中检索 MOTD,并使用它:

/**
* Gets the MOTD from the configuration with formatting that can be used in chat.
*/
private String getMotd()
{
String rawMessage = getConfig().getString("message");
return ChatColor.translateAlternateColorCodes('&', rawMessage);
}

您可以在所有想要显示 MOTD 的地方使用 getMotd(),而不是直接从配置中检索它。

关于java - 如何使使用 '&' 指定的颜色代码的用户输入的消息在游戏中显示为彩色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com