player.setDisplayName() with ChatColor doesn't work with prefixes

Discussion in 'Plugin Development' started by Techno, Jul 22, 2014.

Thread Status:
Not open for further replies.
  1. Hey everyone, I've been working on a name color plugin where you do /color and a color like blue and it changes your name color in chat not your username above your characters head.

    So my name would look like this: [Legend] Bill4788 and my name is yellow by default. And when I do /color blue or something it changes nothing my name is exactly the same..

    The code would be like this:
    Code:
    p.setDisplayName(ChatColor.BLUE + "" + p.getName() + "" + ChatColor.WHITE
    I really don't know what to do.
    Oh and I use PermissionsEX..
     
  2. Offline

    CorrieKay

    Thats definitely strange. Can you show me the entire block of code for your command?
     

  3. Sure:
    Code:
    package me.bill4788.namecolors;
     
    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.plugin.java.JavaPlugin;
     
     
    public class NameColors extends JavaPlugin {
     private String[] message = { "Woot!", "Woot!", "Woot!", "Woot!", "Woot!", "Woot!" };
     private String currentColor = "";
     private String playerChanged = "";
     
     public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
     {
       Player player = (Player)sender;
     
       if (((commandLabel.equalsIgnoreCase("color")) || (commandLabel.equalsIgnoreCase("colour"))) && (
         (player.hasPermission("ucc.colorname.changecolor")) || (player.hasPermission("ucc.colorname.admin")))) {
         if (args.length == 0) {
           player.sendMessage(ChatColor.RED + "Error: Not enough args! Try /color help");
         }
         if (args.length == 1) {
           boolean cor = false;
           if (args[0].equalsIgnoreCase("reset")) {
             cor = true;
             player.sendMessage(ChatColor.GREEN + this.message[1]);
             player.setDisplayName(ChatColor.WHITE + player.getDisplayName());
           }
           if (args[0].equalsIgnoreCase("help")) {
             cor = true;
             player.sendMessage(ChatColor.GREEN + "/color reset <- Reset to white.");
             player.sendMessage(ChatColor.GREEN + "/color <COLOR> <- Change to color.");
             player.sendMessage(ChatColor.WHITE + "Colors: " + ChatColor.AQUA + "Aqua, " + 
               ChatColor.BLACK + "Black, " + ChatColor.BLUE + "Blue, " + 
               ChatColor.GOLD + "Gold, " + ChatColor.GRAY + "Gray, " + 
               ChatColor.GREEN + "Green, " + ChatColor.RED + "Red, " + 
               ChatColor.YELLOW + "Yellow, " + ChatColor.WHITE + "White, " + 
               ChatColor.LIGHT_PURPLE + "Light_Purple, " + ChatColor.DARK_AQUA + "Dark_aqua, " + 
               ChatColor.DARK_BLUE + "Dark_blue, " + ChatColor.DARK_GRAY + "Dark_gray, " + 
               ChatColor.DARK_GREEN + "Dark_green, " + ChatColor.DARK_PURPLE + "Dark_purple, " + 
               ChatColor.DARK_RED + "Dark_red, " + ChatColor.DARK_RED + "R" + ChatColor.RED + "a" + ChatColor.YELLOW + "i" + ChatColor.GREEN + "n" + ChatColor.BLUE + "b" + ChatColor.LIGHT_PURPLE + "o" + ChatColor.DARK_PURPLE + "w");
           }
           if (args[0].equalsIgnoreCase("AQUA")) {
             cor = true;
             this.currentColor = "AQUA";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.AQUA + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("RAINBOW")) {
             try {
               cor = true;
               this.currentColor = "RAINBOW";
               
               player.sendMessage(ChatColor.GREEN + this.message[0]);
               String name = player.getName();
               String display = "";
               int ColorLoop = 0;
               for (int loop = 0; loop < name.length(); loop++) {
                 if (ColorLoop == 0) {
                   display = display + ChatColor.DARK_RED + name.charAt(loop);
                 }
                 if (ColorLoop == 1) {
                   display = display + ChatColor.RED + name.charAt(loop);
                 }
                 if (ColorLoop == 2) {
                   display = display + ChatColor.YELLOW + name.charAt(loop);
                 }
                 if (ColorLoop == 3) {
                   display = display + ChatColor.GREEN + name.charAt(loop);
                 }
                 if (ColorLoop == 4) {
                   display = display + ChatColor.BLUE + name.charAt(loop);
                 }
                 if (ColorLoop == 5) {
                   display = display + ChatColor.LIGHT_PURPLE + name.charAt(loop);
                 }
                 if (ColorLoop == 6) {
                   display = display + ChatColor.DARK_PURPLE + name.charAt(loop);
                 }
                 ColorLoop++;
                 if (ColorLoop > 6) {
                   ColorLoop = 0;
                 }
                 player.setDisplayName(display);
               }
             } catch (Exception e) {
               Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[ColorName] " + ChatColor.RED + "Error on setting rainbow.  Please report on the colorName plugin page.");
             }
           }
     
           if (args[0].equalsIgnoreCase("BLACK")) {
             cor = true;
             this.currentColor = "BLACK";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.BLACK + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("BLUE")) {
             cor = true;
             this.currentColor = "BLUE";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.BLUE + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("GOLD")) {
             cor = true;
             this.currentColor = "GOLD";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.GOLD + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("GRAY")) {
             cor = true;
             this.currentColor = "GRAY";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.GRAY + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("GREEN")) {
             cor = true;
             this.currentColor = "GREEN";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.GREEN + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("RED")) {
             cor = true;
             this.currentColor = "RED";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.RED + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("YELLOW")) {
             cor = true;
             this.currentColor = "YELLOW";
             
     
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.YELLOW + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("WHITE")) {
             cor = true;
             this.currentColor = "WHITE";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.WHITE + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("LIGHT_PURPLE")) {
             cor = true;
             this.currentColor = "LIGHT_PURPLE";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.LIGHT_PURPLE + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("DARK_AQUA")) {
             cor = true;
             this.currentColor = "DRAK_AQUA";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.DARK_AQUA + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("DARK_BLUE")) {
             cor = true;
             this.currentColor = "DARK_BLUE";
             
     
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.DARK_BLUE + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("DARK_GRAY")) {
             cor = true;
             this.currentColor = "DARK_GRAY";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.DARK_GRAY + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("DARK_GREEN")) {
             cor = true;
             this.currentColor = "DARK_GREEN";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.DARK_GREEN + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("DARK_PURPLE")) {
             cor = true;
             this.currentColor = "DARK_PURPLE";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.DARK_PURPLE + player.getDisplayName() + ChatColor.WHITE);
           }
           if (args[0].equalsIgnoreCase("DARK_RED")) {
             cor = true;
             this.currentColor = "DARK_RED";
             
             player.sendMessage(ChatColor.GREEN + this.message[0]);
             player.setDisplayName(ChatColor.DARK_RED + player.getDisplayName() + ChatColor.WHITE);
           }
           if (!cor) {
             player.sendMessage(ChatColor.RED + "Error!" + ChatColor.WHITE + " Try: /color help");
           }
         }
         if (args.length == 2) {
           boolean cor = false;
           if (player.hasPermission("ucc.colorname.admin")) {
             Player player1 = player.getServer().getPlayer(args[0]);
             if (player1.isOnline()) {
               if (args[1].equalsIgnoreCase("reset")) {
                 this.playerChanged = player1.getName();
                 
                 cor = true;
                 player1.sendMessage(ChatColor.GREEN + this.message[5]);
                 player1.sendMessage(ChatColor.GREEN + this.message[4]);
                 player.setDisplayName(ChatColor.WHITE + player.getDisplayName());
               }
     
               if (args[1].equalsIgnoreCase("AQUA")) {
                 cor = true;
                 this.currentColor = "AQUA";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.AQUA + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[0].equalsIgnoreCase("RAINBOW")) {
                 try {
                   cor = true;
                   this.currentColor = "RAINBOW";
                   
                   player.sendMessage(ChatColor.GREEN + this.message[2]);
                   player.sendMessage(ChatColor.GREEN + this.message[3]);
                   String name = player.getName();
                   String display = "";
                   int ColorLoop = 0;
                   for (int loop = 0; loop < name.length(); loop++) {
                     if (ColorLoop == 0) {
                       display = display + ChatColor.DARK_RED + name.charAt(loop);
                     }
                     if (ColorLoop == 1) {
                       display = display + ChatColor.RED + name.charAt(loop);
                     }
                     if (ColorLoop == 2) {
                       display = display + ChatColor.YELLOW + name.charAt(loop);
                     }
                     if (ColorLoop == 3) {
                       display = display + ChatColor.GREEN + name.charAt(loop);
                     }
                     if (ColorLoop == 4) {
                       display = display + ChatColor.BLUE + name.charAt(loop);
                     }
                     if (ColorLoop == 5) {
                       display = display + ChatColor.LIGHT_PURPLE + name.charAt(loop);
                     }
                     if (ColorLoop == 6) {
                       display = display + ChatColor.DARK_PURPLE + name.charAt(loop);
                     }
                     ColorLoop++;
                     if (ColorLoop > 6) {
                       ColorLoop = 0;
                     }
                   }
                   player.setDisplayName(display);
                 } catch (Exception e) {
                   Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "[ColorName] " + ChatColor.RED + "Error on setting rainbow.  Please report on the colorName plugin page.");
                 }
               }
     
               if (args[1].equalsIgnoreCase("BLACK")) {
                 cor = true;
                 this.currentColor = "BLACK";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.BLACK + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("BLUE")) {
                 cor = true;
                 this.currentColor = "BLUE";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.BLUE + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("GOLD")) {
                 cor = true;
                 this.currentColor = "GOLD";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.GOLD + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("GRAY")) {
                 cor = true;
                 this.currentColor = "GRAY";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.GRAY + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("GREEN")) {
                 cor = true;
                 this.currentColor = "GREEN";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.GREEN + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("RED")) {
                 cor = true;
                 this.currentColor = "RED";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.RED + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("YELLOW")) {
                 cor = true;
                 this.currentColor = "YELLOW";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.YELLOW + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("WHITE")) {
                 cor = true;
                 this.currentColor = "WHITE";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.WHITE + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("LIGHT_PURPLE")) {
                 cor = true;
                 this.currentColor = "LIGHT_PURPLE";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.LIGHT_PURPLE + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("DARK_AQUA")) {
                 cor = true;
                 this.currentColor = "DARK_AQUA";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.DARK_AQUA + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("DARK_BLUE")) {
                 cor = true;
                 this.currentColor = "DARK_BLUE";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.DARK_BLUE + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("DARK_GRAY")) {
                 cor = true;
                 this.currentColor = "DARK_GRAY";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.DARK_GRAY + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("DARK_GREEN")) {
                 cor = true;
                 this.currentColor = "DARK_GREEN";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.DARK_GREEN + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("DARK_PURPLE")) {
                 cor = true;
                 this.currentColor = "DARK_PURPLE";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.DARK_PURPLE + player.getDisplayName() + ChatColor.WHITE);
               }
               if (args[1].equalsIgnoreCase("DARK_RED")) {
                 cor = true;
                 this.currentColor = "DARK_RED";
                 this.playerChanged = player.getDisplayName();
                 
                 player.sendMessage(ChatColor.GREEN + this.message[2]);
                 player.sendMessage(ChatColor.GREEN + this.message[3]);
                 player.setDisplayName(ChatColor.DARK_RED + player.getDisplayName() + ChatColor.WHITE);
               }
             }
             else {
               player1.sendMessage(ChatColor.RED + "Error: " + " is not online!");
             }
             if (!cor) {
               player1.sendMessage(ChatColor.RED + "Error: args[1] is invalid.");
             }
           }
           else
           {
             player.sendMessage(ChatColor.RED + "Error: You don't have permission!");
           }
         }
         if (args.length >= 3) {
           player.sendMessage(ChatColor.RED + "Error: Too many args!");
         }
       }
     
       return false;
       
     }
    }
    
     
  4. Offline

    CorrieKay

    I see the problem here. Your code is actually calling player.getDisplayName().

    Lets say your name is colored yellow. The technical string here is "§eTechno"

    Now, per your code, if you wanna change that to aqua, it takes the aqua color, and pins it in front of your name. Your name is now: "§b§eTechno". When the game client processes this, it sees aqua first, and paints all characters after that with aqua. However, there are no characters, before it swaps over to yellow and starts painting characters yellow.

    instead of using the display name, strip all the colors from it before using it, like this: ChatColor.stripColor(player.getDisplayName())
     
Thread Status:
Not open for further replies.

Share This Page