Code: @EventHandler public void onDispense(BlockDispenseEvent e){ if(e.getBlock().getType() == Material.DISPENSER && e.getItem().getType() == Material.SAPLING){ BlockFace face = ((org.bukkit.material.Dispenser) e.getBlock().getState().getData()).getFacing(); if((face == BlockFace.UP) || (face == BlockFace.DOWN)) return; Location loc1 = new Location(e.getBlock().getWorld(), e.getBlock().getX() + face.getModX() * 1, e.getBlock().getY() + face.getModY() * 1, e.getBlock().getZ() + face.getModZ() * 1); Location loc2 = new Location(e.getBlock().getWorld(), e.getBlock().getX() + face.getModX() * 1, e.getBlock().getY() - 1 + face.getModY() * 1, e.getBlock().getZ() + face.getModZ() * 1); if(loc1.getBlock().getType() == Material.AIR){ if((loc2.getBlock().getType() == Material.DIRT) || (loc2.getBlock().getType() == Material.GRASS)){ Inventory inv = ((org.bukkit.block.Dispenser)e.getBlock().getState()).getInventory(); items = new ItemStack[] { new ItemStack(e.getItem()) }; if(items.length == 1){ Bukkit.broadcastMessage("IS A. == 1"); inv.removeItem(e.getItem()); }else{ for(ItemStack i : items){ inv.removeItem(i); } } e.setCancelled(true); loc1.getBlock().setType(Material.SAPLING); loc1.getBlock().setData(e.getItem().getData().getData()); } } } } That is the code i've got so far. Even if the dispenser has more than 1 sapling, it broadcasts the message "IS A. == 1". And if it has only 1 sapling it doesn't remove it
e.getItem on line 16 just gets the item that is dispensed. You need to do "items = inv.getContents()" or something similar to that.
@Bram0101 Uh this isn't working either: Code: Inventory inv = ((org.bukkit.block.Dispenser)e.getBlock().getState()).getInventory(); for(ItemStack is : inv.getContents()){ if(is != null && is.getType() == Material.SAPLING){ if(is.getAmount() > 1){ is.setAmount(is.getAmount() - 1); Bukkit.broadcastMessage("1"); break; }else if(is.getAmount() == 1){ inv.removeItem(is); Bukkit.broadcastMessage("2"); break; }else if(is.getAmount() == 0){ inv.removeItem(is); inv.removeItem(e.getItem()); is.setType(Material.AIR); Bukkit.broadcastMessage("3"); break; } } e.setCancelled(true); loc1.getBlock().setType(Material.SAPLING); loc1.getBlock().setData(e.getItem().getData().getData()); } bump EDIT by Moderator: merged posts, please use the edit button instead of double posting.