Solved Wont add items in player's inventory

Discussion in 'Plugin Development' started by BlueCraftMC, Dec 30, 2015.

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

    BlueCraftMC

    So I'm still a beginner on making plugins, but this code i made doesn't work, i mean when you join the server i doesnt give the player a item. It doesn't give me any errors but doesn't work. Can someone help me how to fix it? or i just did this all wrong.

    Code:
        private ItemStack PlayerHidder() {
            ItemStack playerHidder = new ItemStack(Material.SKULL);
            ItemMeta hidderMeta = playerHidder.getItemMeta();
          
            hidderMeta.setDisplayName("§2Hide Players");
            return null;
          
        }
    
        @EventHandler
        public void onJoinItems(PlayerJoinEvent event){
            Player player = event.getPlayer();
            PlayerInventory playerInv = player.getInventory();
            playerInv.addItem(PlayerHidder());
        }
    
      
        @EventHandler(priority=EventPriority.NORMAL, ignoreCancelled=true)
        public void onRightClick(PlayerInteractEntityEvent event) {
              Player player = event.getPlayer();
            
              if (event.getRightClicked() == PlayerHidder()) {
                  player.hidePlayer(player);
                  event.setCancelled(true);
            
          }
            
      }
    And also, i want to set the item into a specific slot in the hot bar.
     
  2. Offline

    Dragovorn

    Did you register your events in your onEnable?

    EDIT: Change this
    Code:
    return null;
    to this
    Code:
    return playerHider;

    Reason why it wasn't giving the item is because PlayerHider() wasn't returning anything to give.

    also before you return you need to do this too
    Code:
    playerHider.setItemMeta(hiderMeta);
    Because the display name won't be changed if you don't do that
     
    Last edited: Dec 30, 2015
    BlueCraftMC likes this.
  3. Offline

    BlueCraftMC


    When i join, it didn't give the item. current code(fixed code):
    Code:
        private ItemStack PlayerHidder() {
            ItemStack playerHidder = new ItemStack(Material.SKULL);
            ItemMeta hidderMeta = playerHidder.getItemMeta();
            playerHidder.setItemMeta(hidderMeta);
           
            hidderMeta.setDisplayName("§2Hide Players");
            return playerHidder;
           
        }
    
        @EventHandler
        public void onJoinItems(PlayerJoinEvent event){
            Player player = event.getPlayer();
            PlayerInventory playerInv = player.getInventory();
            playerInv.addItem(PlayerHidder());
        }
    
       
        @EventHandler(priority=EventPriority.NORMAL, ignoreCancelled=true)
        public void onRightClick(PlayerInteractEntityEvent event) {
              Player player = event.getPlayer();
             
              if (event.getRightClicked() == PlayerHidder()) {
                  player.hidePlayer(player);
                  event.setCancelled(true);
             
          }
             
      }
     
  4. Offline

    mcdorli

    I think PlayerJoinEvent fires right after the player actually joins the game. Add a 1 tick delay to this using schedulers (please google it or someone link it, I sadly don't have the time)
     
  5. Offline

    BlueCraftMC

    Where do i add the ticks scheduler?

    Well, tried, doesn't work.
    current code: (on join event)
    Code:
        public void onJoinItems(final PlayerJoinEvent event){
            Bukkit.getServer().getScheduler().runTaskLater(main.that, new Runnable(){
                public void run(){
                  Player player = event.getPlayer();
                  PlayerInventory playerInv = player.getInventory();
                  playerInv.addItem(PlayerHidder());
                }
              },5L);
    
    
        }
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Dec 31, 2015
  6. Offline

    mcdorli

    Errors?
     
  7. Offline

    Xerox262

    Show your onEnable? Or where ever you registered your events. If you can't find where you done it then that would be the issue.

    You'll also want to change this
    Code:
    if(event.getRightClicked()== PlayerHidder()){
    To .equals, it's not an enum, primitive or null check.

    And add a null check...
     
  8. Offline

    BlueCraftMC

    no errors
     
  9. Offline

    JoaoBM

    @BlueCraftMC Change the " playerHidder.setItemMeta(hidderMeta);" to after .setDisplayName.
    .setItemMeta , updates ItemMeta and saves what you changed in it. If you place it before the .setDisplayName there will be no changes
     
  10. Offline

    BlueCraftMC

    nope, still doesn't give the items
     
  11. Offline

    Xerox262

    @BlueCraftMC
    We can't help you if you wont show us what we need to see... What @JoaoBM suggested was not to fix your adding item error, it was just to make it so it would actually have the name when you fixed it.
     
    JoaoBM likes this.
  12. Offline

    boomboompower

    Your Code (open)
    Code:
    private ItemStack PlayerHidder() {
           
            ItemStack playerHidder = new ItemStack(Material.SKULL);
            ItemMeta hidderMeta = playerHidder.getItemMeta();
            playerHidder.setItemMeta(hidderMeta);       
            hidderMeta.setDisplayName("§2Hide Players");
    
            return playerHidder;
        }

    See the differences?

    Fixed/More Stable Code (open)
    Code:
    private ItemStack PlayerHidder() {
           
            ItemStack playerHidder = new ItemStack(Material.SKULL);
            ItemMeta hidderMeta = playerHidder.getItemMeta();       
            hidderMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&2Hide Players"));
            playerHidder.setItemMeta(hidderMeta);
    
            return playerHidder;
        }
     
Thread Status:
Not open for further replies.

Share This Page