Solved Replacing Item In Hand...

Discussion in 'Plugin Development' started by XDemonic25, Feb 27, 2013.

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

    XDemonic25

    Well, I just wanted to test something that when a pickaxe breaks. It searches your inventory for another pickaxe and moves that pickaxe into your hand. I thought this would be simple. But its driving me nuts now.

    Event:
    Code:
        @EventHandler
        public void onPlayerItemBreak(PlayerItemBreakEvent evt) {
            if (evt.getPlayer().isOp()){
            ItemStack TOOL = evt.getBrokenItem();
            if(IsTool(TOOL.getType())){
                PlayerInventory Inv = evt.getPlayer().getInventory();
                boolean FoundItem = false;
                for (int i = 0; i < Inv.getSize(); i++) {
                    if(!FoundItem){
                    ItemStack item = Inv.getItem(i);
                    if (item != null && item.getType() == TOOL.getType()) {
                        evt.getPlayer().sendMessage("tests Int: " + i);
                        evt.getPlayer().sendMessage("Item: " + item.toString());
                        ReplaceTool(evt.getPlayer(), item, i);
                        FoundItem = true;
                    }}
                }
            }
            }
        }
    
    ReplaceTool Function:
    Code:
        public void ReplaceTool(Player player, ItemStack Item, int Old){
            final Player Pl = player;
            final ItemStack New = Item;
            final int Olds = Old;
            final PlayerInventory PI = player.getInventory();
            XReplaceTool.Main.getServer().getScheduler().scheduleSyncDelayedTask(XReplaceTool.Main, new Runnable() {
                    @SuppressWarnings("deprecation")
                    @Override 
                    public void run() {
                        Pl.setItemInHand(New);
                        Pl.sendMessage("Test 3");
                        PI.setItem(Olds, null);
                        Pl.updateInventory();    
                    }
                }, 5L);
        }
    
    On The Schedule, The Player Receives The Message "Test 3" But the item does not get replaced at all. The console is also not throwing any error.
     
  2. Offline

    Technius

    Maybe the first ItemStack retrieved is the item in hand. The item stack exists in the inventory with a stack size of 0 during a PlayerItemBreakEvent.
     
    XDemonic25 likes this.
  3. Offline

    XDemonic25

    Thanks This ended up being the Problem!
     
Thread Status:
Not open for further replies.

Share This Page