2016-05-06 9 views
0

Ich bin nicht sicher, wie ich Benutzern meines Plugins erlauben kann, Farbcodes mit & einzugeben und sie richtig anzuzeigen. Ich weiß, dass ich die Konstanten in ChatColor verwenden kann, um verschiedene Farben in Nachrichten zu setzen, die vom Plugin gesendet werden, aber ich weiß nicht, wie man Benutzern erlaubt, ihre eigenen farbigen Nachrichten einzugeben.Wie kann ich vom Benutzer eingegebene Nachrichten mit Farbcodes, die mit '&' angezeigt werden, farbig im Spiel anzeigen lassen?

Hier ist mein Code:

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; 
    } 
} 

ich Spieler wollen in der Lage sein /setmotd &cRed &aGreen &9Blue zu bedienen und haben die MOTD mit den entsprechenden Farben, um sie angezeigt werden, die Minecraft color code format verwenden. Es gibt mehrere andere Plugins, die in der Lage sind, Nachrichten anzuzeigen, die auf diese Weise eingestellt sind, also muss es möglich sein.

Wie kann ich eine Nachricht wie &cRed &aGreen &9Blue in eine Nachricht konvertieren, die korrekt im Spiel angezeigt wird?

+0

Bitte geben Sie ein korrektes Format, so dass der genaue Teil des Codes + präzise Frage + präzise Problem angepriesen. Sonst ist es jedem zu schwierig, dir zu helfen. – Cukic0d

+0

Was passiert, wenn Sie es ausführen? – Zac

+0

Zac, ich möchte nur Farbcode im Plugin erlauben. Z.B. "& 6" – avy

Antwort

2

Sie können ChatColor.translateAlternateColorCodes verwenden, um Farbcodes mit & in das von ChatColor verwendete Format zu konvertieren. (Intern ist das §).

translateAlternateColorCodes nimmt ein Ersatzzeichen und dann den zu ersetzenden Text. Für das Ersatzzeichen möchten Sie '&' verwenden (beachten Sie die einfachen Anführungszeichen und nicht die doppelten Anführungszeichen). translateAlternateColorCodes hat spezielle Logik, um nur gültige Codes zu ersetzen, also &eWelcome wird §eWelcome (was im Spiel "Willkommen" in gelbem Text ist), aber I like cats & dogs wird nicht konvertiert und wird im Spiel als I like cats & dogs angezeigt.

Sie werden wahrscheinlich den Ersatz in allen Fällen, in denen die Nachricht angezeigt wird, aber nicht, wenn es festgelegt ist, wollen. Wenn jemand die Konfiguration manuell bearbeitet, kann & dort ebenfalls verwendet werden. Als solche sollten Sie Ihren Code bearbeiten jede der folgenden Zeilen ersetzt werden:

p.sendMessage(ChatColor.AQUA + getConfig().getString("message")); 
sender.sendMessage(ChatColor.AQUA + "MOTD: " + getConfig().getString("message")); 
sender.sendMessage(ChatColor.GREEN + "MOTD set to: " + motd); 

Mit diesen:

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)); 

Noch besser wäre es , könnten Sie eine getMotd Methode schreiben, die die MOTD aus der Konfiguration abruft ation mit der korrekten Formatierung, und verwenden Sie diese stattdessen:

/** 
* 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); 
} 

Sie getMotd() in allen Orten verwenden würden Sie Ihre MOTD wollen würde, eher angezeigt als direkt aus der Konfiguration abruft.

+0

Vielen Dank! Jetzt verstehe ich es! Beste Antwort, die ich den ganzen Tag Jesus gesehen habe! – avy

+0

@avy Bitte markieren Sie diese Frage, indem Sie auf den Haken in der Nähe dieser Antwort klicken. – Nightfighter001