Setting SkullOwner (Quicker)

Discussion in 'Plugin Development' started by GamerzKing, Nov 23, 2015.

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

    GamerzKing

    Hello everyone!

    So currently, I have created a spectator menu using a utility class I found, however when I attempt to set the skull, it doesn't immediately load, but instead takes almost a second to load the players skin.

    Here is my code:


    Code:
    package com.GamerzKing.elementals.utils;
    
    import java.util.ArrayList;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.inventory.meta.SkullMeta;
    
    public class SpectatorGUI implements Listener {
    
        @SuppressWarnings({ "unchecked", "rawtypes" })
        ArrayList<String> itemLore = new ArrayList();
    
        private Inventory spectate;
    
        public void openSpectateGUI(Player player, Player[] players, int rows, ItemStack item) {
    
            ItemStack i = item;
    
            ItemMeta m = i.getItemMeta();
            spectate = Bukkit.createInventory(player, rows * 9, ChatColor.BOLD + "      Spectator Menu");
    
            for(int z = 0; z < players.length; z++) {
    
                itemLore.add("");
                itemLore.add(ChatColor.GRAY + "Click to spectate this player!");
    
                ((SkullMeta) m).setOwner(players[z].getName());
    
                m.setDisplayName(players[z].getName());
                m.setLore(itemLore);
    
                i.setItemMeta(m);
                spectate.setItem(z, i);
            }
            player.openInventory(spectate);
        }
    
        @EventHandler
        public void onClick(InventoryClickEvent event) {
    
            if(event.getInventory().getTitle().equalsIgnoreCase(ChatColor.BOLD + "      Spectator Menu")) {
                if(event.getCurrentItem() != null && event.getCurrentItem().getType() != null) {
    
                    event.setCancelled(true);
    
                    Player player = (Player) event.getWhoClicked();
    
                    if(event.getCurrentItem().hasItemMeta() && event.getCurrentItem().getItemMeta().hasDisplayName()) {   
                        Player c = Bukkit.getPlayer(event.getCurrentItem().getItemMeta().getDisplayName().trim());
    
                        if(c != null) {
                            player.teleport(c);
                        }
                    }
                }
            }
        }
    }
    If you have any solutions to this, please tell me down below.

    Thanks,
    - GamerzKing
     
  2. Offline

    Scimiguy

    That's about normal as far as I'm aware
    The server has to make a request to Mojang's skin servers, and then render the response dynamically
     
  3. Offline

    GamerzKing

    Well servers like Hypixel seem to make theirs load instantly when a menu is opened.
     
  4. Offline

    Scimiguy

    Maybe they pre-load and open the inventory with a delay
     
  5. Offline

    teej107

    @Scimiguy Or just load them before you even think about opening the inventory.
     
Thread Status:
Not open for further replies.

Share This Page