Per-Player server icons not working

Discussion in 'Plugin Development' started by sgavster, Jan 10, 2014.

Thread Status:
Not open for further replies.
  1. Offline

    sgavster

    Hello!

    I was working on making a plugin (private) that would allow you to have your skin when you look at my server.

    I tried, but it doesn't work, it always shows steve. This is my code:

    PHP:
    package me.sgavster.qmc.listener;
     
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.net.URL;
    import java.util.Random;
     
    import javax.imageio.ImageIO;
     
    import me.sgavster.qmc.Main;
     
    import org.bukkit.Bukkit;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.server.ServerListPingEvent;
     
    public class 
    MOTD implements Listener
    {
        @
    EventHandler
        
    public void onJoin(PlayerJoinEvent e)
        {
            
    Main.getMain().getConfig().set("Ip."e.getPlayer().getAddress().getHostName(), e.getPlayer().getName());
            
    Main.getMain().saveConfig();
        }
        @
    EventHandler
        
    public void onPing(ServerListPingEvent e)
        {
            
    e.setMotd("§6Quadular§2MC\n§5Factions §6| §5Shop §6| §5PvP §6| §5More Soon");
            
    e.setMaxPlayers(random());
            if(
    Main.getMain().getConfig().getString("Ip." e.getAddress().getHostAddress()) == null)
            {
                try
                {
                    
    e.setServerIcon(Bukkit.loadServerIcon(generateImage("char")));
                }
                catch (
    Exception ex) {}
            }
            else
            {
                try
                {
                    
    e.setServerIcon(Bukkit.loadServerIcon(generateImage(Main.getMain().getConfig().getString("Ip." e.getAddress().getHostAddress()))));
                }
                catch (
    Exception exe) {}
            }
        }
        private 
    int random()
        {
            
    Random r = new Random();
            
    int z r.nextInt(1000000)+1;
            return 
    z;
        }
        public 
    BufferedImage generateImage(String p)
        {
            
    Image i;
            
    Image g;
            try
            {
                
    URL url = new URL("http://s3.amazonaws.com/MinecraftSkins/" ".png");
                
    BufferedImage image ImageIO.read(url);
                
    image.getSubimage(8888);
                
    image.getSubimage(40888);
                
    BufferedImage finalImage = new BufferedImage(6464Image.SCALE_SMOOTH);
                
    finalImage.getGraphics().drawImage(i006464null);
                
    finalImage.getGraphics().drawImage(g006464null);
                return 
    finalImage;
            }
            catch (
    Exception e) {}
            return 
    null;
        }
    }
    This is what the config looks like:

    Code:
    Ip:
      /75:
        '68':
          '62':
            99:50624: sgavster
            99:50648: sgavster
      c-75-68-62-99:
        hsd1:
          nh:
            comcast:
              net: sgavster
    
    ^^ which needs to be fixed :/

    Thanks for any help!
     
  2. Offline

    PVP9dc

    i think you must use a clear IP. Use this code:

    Code:
      public String clearifyIP(String input)
      {
        return input.substring(1).split(":")[0];
      }
     
  3. Offline

    sgavster

    PVP9dc Thanks, I used that, and now the config is this:

    Code:java
    1. Ip:
    2. -75-68-62-99:
    3. hsd1:
    4. nh:
    5. comcast:
    6. net: sgavster
    7.  


    This is the code;

    Code:java
    1. package me.sgavster.qmc.listener;
    2.  
    3. import java.awt.Image;
    4. import java.awt.image.BufferedImage;
    5. import java.net.URL;
    6. import java.util.Random;
    7.  
    8. import javax.imageio.ImageIO;
    9.  
    10. import me.sgavster.qmc.Main;
    11.  
    12. import org.bukkit.Bukkit;
    13. import org.bukkit.event.EventHandler;
    14. import org.bukkit.event.Listener;
    15. import org.bukkit.event.player.PlayerJoinEvent;
    16. import org.bukkit.event.server.ServerListPingEvent;
    17.  
    18. public class MOTD implements Listener
    19. {
    20. @EventHandler
    21. public void onJoin(PlayerJoinEvent e)
    22. {
    23. Main.getMain().getConfig().set("Ip."+ iP(e.getPlayer().getAddress().getHostName()), e.getPlayer().getName());
    24. Main.getMain().saveConfig();
    25. }
    26. @EventHandler
    27. public void onPing(ServerListPingEvent e)
    28. {
    29. e.setMotd("§6Quadular§2MC\n§5Factions §6| §5Shop §6| §5PvP §6| §5More Soon");
    30. e.setMaxPlayers(random());
    31. if(Main.getMain().getConfig().getString("Ip." + iP(e.getAddress().getHostAddress())) == null)
    32. {
    33. try
    34. {
    35. e.setServerIcon(Bukkit.loadServerIcon(generateImage("char")));
    36. }
    37. catch (Exception ex) {}
    38. }
    39. else
    40. {
    41. try
    42. {
    43. e.setServerIcon(Bukkit.loadServerIcon(generateImage(Main.getMain().getConfig().getString("Ip." + iP(e.getAddress().getHostAddress())))));
    44. }
    45. catch (Exception exe) {}
    46. }
    47. }
    48. private int random()
    49. {
    50. Random r = new Random();
    51. int z = r.nextInt(1000000)+1;
    52. return z;
    53. }
    54. public BufferedImage generateImage(String p)
    55. {
    56. Image i;
    57. Image g;
    58. try
    59. {
    60. URL url = new URL("[url]http://s3.amazonaws.com/MinecraftSkins/[/url]" + p + ".png");
    61. BufferedImage image = ImageIO.read(url);
    62. i = image.getSubimage(8, 8, 8, 8);
    63. g = image.getSubimage(40, 8, 8, 8);
    64. BufferedImage finalImage = new BufferedImage(64, 64, Image.SCALE_SMOOTH);
    65. finalImage.getGraphics().drawImage(i, 0, 0, 64, 64, null);
    66. finalImage.getGraphics().drawImage(g, 0, 0, 64, 64, null);
    67. return finalImage;
    68. }
    69. catch (Exception e) {}
    70. return null;
    71. }
    72. public String iP(String input)
    73. {
    74. return input.substring(1).split(":")[0];
    75. }
    76. }
    77.  
     
  4. Offline

    Minecrell

    sgavster
    Also you should cache the server icon somewhere, downloading it for every ping could lead to performance issues on huge servers..
     
  5. Offline

    sgavster

    Minecrell I really don't think my server will ever be big, but it's not a bad idea. :p
     
  6. Offline

    Minecrell

    Why don't you use a map for saving the player names? :)
    Code:java
    1. private final Map<String, String> playerIP = new HashMap<>();

    And add them like this:
    Code:java
    1. playerIPs.put(player.getAddress().getAddress().getHostAddress(), player.getName());
    2. Main.getConfig().set("IP", playerIP);
    3. Main.saveConfig();

    Not sure if it works but it should work.. ;)
    Code:java
    1. String playerName = playerIP.get(player.getAddress().getAddress().getHostAddress());
    2. if (playerName != null) {
    3. // Generate the server icon
    4. }
     
  7. Offline

    sgavster

    Minecrell It would reset on a reload/restart, sadly. :( Any other ideas? :)
     
  8. Offline

    Minecrell

    You need to load it again when your plugin is enabled. :D
     
  9. Offline

    sgavster

    Minecrell How? This is 2 different classes :(
     
  10. Offline

    Minecrell

    Well, either move the methods to your main class or load the map in the constructor of the listener.
     
  11. Offline

    sgavster

    Minecrell But how would I re-do the Map on the onEnable/onDisable?
     
  12. Offline

    Minecrell

    You mean how to load the map? Something like this should work, but I don't know exactly.
    Code:java
    1. playerIP = (Map<String, String>) Main.getConfig().get("IP");
     
  13. Offline

    sgavster

    Minecrell That wouldn't work, because the config is like

    PHP:
    Ip:
      
    a:
        
    number:
              
    ect:
     
  14. Offline

    Minecrell

    It is saving the configuration like this?
     
  15. Offline

    sgavster

  16. Offline

    Necrodoom

    Removed offtopic posts.
     
Thread Status:
Not open for further replies.

Share This Page