Solved Placing player skull help

Discussion in 'Plugin Development' started by ItsMas_, Jan 22, 2016.

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

    ItsMas_

    I am making a plugin in which a menu with all staff online appears, but the skulls only appear as Steve/Alex heads, even though I have used .setOwner(name);

    I was told this is because the client/Bukkit needs to load the head for the player, by placing it for example.

    Is there any other way I can pre-load the heads of all players with a certain permission when the server starts, so the player's actual head appears in the GUI?

    EDIT: I have decided to get around it by placing the head
    onlineStaff is the inventory in which the skulls appear
    Here is my code:
    Code:
    package me.mas.staffmenu;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.block.Block;
    import org.bukkit.block.BlockState;
    import org.bukkit.block.Skull;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    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.SkullMeta;
    
    public class OnlineStaff implements Listener, CommandExecutor {
    
        ItemStack finalSkull;
        Location loc;
        Block b;
        BlockState state;
      
        public static Inventory onlineStaff = Bukkit.createInventory(null, 27, ChatColor.DARK_GREEN + "Online Staff:");
      
        private ItemStack addSkull(ItemStack item, String owner){
            SkullMeta meta = (SkullMeta) item.getItemMeta();
            meta.setOwner(owner);
            meta.setDisplayName(ChatColor.YELLOW + owner);
            item.setItemMeta(meta);
          
            return item;
        }
      
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e){
            Inventory inventory = e.getInventory();
            if (inventory.getName().equals(onlineStaff.getName())){
                    e.setCancelled(true);
            }
        }
      
        @SuppressWarnings("deprecation")
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (cmd.getName().equalsIgnoreCase("staff")){
                if (sender.hasPermission("mas.staffmenu.showstaff")){
                    onlineStaff.clear();
                    Player player = (Player) sender;
                    player.openInventory(onlineStaff);
                  
                    for (Player pl : Bukkit.getServer().getOnlinePlayers()){
                        if (pl.hasPermission("mas.staffmenu.isstaff") || pl.getUniqueId().toString().equals("fa75e09f-68f9-4407-8753-ea06bc4fb1e8")){
                            if (!StaffMenu.vanished.contains(pl)){
                                loc.setX(299984);
                                loc.setY(255);
                                loc.setZ(299984);
                              
                                Block b = loc.getBlock();
                                b.setType(Material.SKULL);
                                b.setData((byte) 3);
                              
                                state = b.getState();
                              
                                Skull skull = (Skull) state;                              
                                skull.setOwner(pl.getName());
                                skull.update();
                              
                                onlineStaff.addItem(addSkull(new ItemStack(Material.SKULL_ITEM, 1, (byte) 3), pl.getName()));
                            }else{
                                return true;
                            }
                        }
                    }
                }else{
                    sender.sendMessage("§e[§c!§e] §cYou may not view the online staff");
                }
            }  
            return true;
        }
    }
    
    
    Here is the error:
    Code:
    [17:29:30 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'staff' in plugin StaffMenu v1.2.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:620) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1106) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:966) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:37) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:9) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit.jar:git-Bukkit-18fbb24]
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.7.0_79]
            at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.7.0_79]
            at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:673) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:629) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:537) [craftbukkit.jar:git-Bukkit-18fbb24]
            at java.lang.Thread.run(Unknown Source) [?:1.7.0_79]
    Caused by: java.lang.NullPointerException
            at me.mas.staffmenu.OnlineStaff.onCommand(OnlineStaff.java:59) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            ... 15 more
    >
    
     
    Last edited: Jan 24, 2016
  2. Offline

    HenrySartori

    Get Player's UUID then add it to the Skull
     
  3. Offline

    teej107

    The only fix for this bug I've heard is to place the head. :p
     
  4. Offline

    ItsMas_

    Okay. Do I need to place it somewhere the player has rendered, or just anywhere in the world?
     
  5. Offline

    teej107

    I'm not sure
     
  6. Offline

    ItsMas_

    Updated main post with current code and error message ^_^
     
    Last edited: Jan 24, 2016
  7. Offline

    HenrySartori

    You didn't put an Else if the player doesnt have the permission =)
    NullPointerException is when you didn't said the plugin "what to do" without the permission and it returned null and brokes.
     
  8. Offline

    ItsMas_

    I have an else statement for the permission, but I somehow didn't paste the whole code in, so it cut that bit off :)

    Updated code with whole class
     
  9. Offline

    HenrySartori

    At my view you disn't put an Else for p.hasCommand("mas.staffmenu.isstaff"); :p
     
  10. Offline

    ItsMas_

    Oh, I thought you meant the permission for using the command.

    Error still appears:
    Code:
    [17:43:02 INFO]: ItsMas_ issued server command: /staff
    [17:43:02 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'staff' in plugin StaffMenu v1.2.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:620) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1106) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:966) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:37) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:9) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit.jar:git-Bukkit-18fbb24]
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.7.0_79]
            at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.7.0_79]
            at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:673) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:629) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:537) [craftbukkit.jar:git-Bukkit-18fbb24]
            at java.lang.Thread.run(Unknown Source) [?:1.7.0_79]
    Caused by: java.lang.NullPointerException
            at me.mas.staffmenu.OnlineStaff.onCommand(OnlineStaff.java:59) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            ... 15 more
    
     
  11. Offline

    HenrySartori

    After every else put return false; and post your fixed code.

    EDIT: I found it. You forget the "else" on:
    Code:
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e){
            Inventory inventory = e.getInventory();
            if (inventory.getName().equals(onlineStaff.getName())){
                    e.setCancelled(true);
            }
        }
    
     
    Last edited: Jan 24, 2016
  12. Offline

    ItsMas_

    Code:
    package me.mas.staffmenu;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.block.Block;
    import org.bukkit.block.BlockState;
    import org.bukkit.block.Skull;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    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.SkullMeta;
    
    public class OnlineStaff implements Listener, CommandExecutor {
    
        ItemStack finalSkull;
        Location loc;
        Block b;
        BlockState state;
      
        public static Inventory onlineStaff = Bukkit.createInventory(null, 27, ChatColor.DARK_GREEN + "Online Staff:");
      
        @SuppressWarnings("deprecation")
        public void onEnable(){
            loc.setX(299984);
            loc.setY(255);
            loc.setZ(299984);
          
            Block b = loc.getBlock();
            b.setType(Material.SKULL);
            b.setData((byte) 3);
        }
      
        private ItemStack addSkull(ItemStack item, String owner){
            SkullMeta meta = (SkullMeta) item.getItemMeta();
            meta.setOwner(owner);
            meta.setDisplayName(ChatColor.YELLOW + owner);
            item.setItemMeta(meta);
          
            return item;
        }
      
        @EventHandler
        public void onInventoryClick(InventoryClickEvent e){
            Inventory inventory = e.getInventory();
            if (inventory.getName().equals(onlineStaff.getName())){
                    e.setCancelled(true);
            }else{
                return;
            }
        }
      
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (cmd.getName().equalsIgnoreCase("staff")){
                if (sender.hasPermission("mas.staffmenu.showstaff")){
                    onlineStaff.clear();
                    Player player = (Player) sender;
                    player.openInventory(onlineStaff);
                  
                    for (Player pl : Bukkit.getServer().getOnlinePlayers()){
                        if (pl.hasPermission("mas.staffmenu.isstaff") || pl.getUniqueId().toString().equals("fa75e09f-68f9-4407-8753-ea06bc4fb1e8")){
                            if (!StaffMenu.vanished.contains(pl)){
                                onlineStaff.addItem(addSkull(new ItemStack(Material.SKULL_ITEM, 1, (byte) 3), pl.getName()));
                              
                                state = b.getState();
                      
                                Skull skull = (Skull) state;                              
                                skull.setOwner(pl.getName());
                                skull.update();
                            }else{
                                return false;
                            }
                        }else{
                            return false;
                        }
                    }
                }else{
                    sender.sendMessage("§e[§c!§e] §cYou may not view the online staff");
                }
            }  
            return true;
        }
    }
    
    Code:
    [18:14:03 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'staff' in plugin StaffMenu v1.2
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:620) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1106) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:966) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:37) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:9) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit.jar:git-Bukkit-18fbb24]
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.7.0_79]
            at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.7.0_79]
            at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:673) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:629) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:537) [craftbukkit.jar:git-Bukkit-18fbb24]
            at java.lang.Thread.run(Unknown Source) [?:1.7.0_79]
    Caused by: java.lang.NullPointerException
            at me.mas.staffmenu.OnlineStaff.onCommand(OnlineStaff.java:73) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            ... 15 more
    [18:17:47 INFO]: ItsMas_ issued server command: /staff
    [18:17:47 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'staff' in plugin StaffMenu v1.2
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:620) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1106) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:966) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:37) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:9) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit.jar:git-Bukkit-18fbb24]
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.7.0_79]
            at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.7.0_79]
            at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:673) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:629) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:537) [craftbukkit.jar:git-Bukkit-18fbb24]
            at java.lang.Thread.run(Unknown Source) [?:1.7.0_79]
    Caused by: java.lang.NullPointerException
            at me.mas.staffmenu.OnlineStaff.onCommand(OnlineStaff.java:73) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            ... 15 more
    >
    
     
  13. Offline

    87pen

  14. Offline

    ItsMas_

Thread Status:
Not open for further replies.

Share This Page