@Override public void onInteractItem(PlayerInteractEvent event) { final Player player = event.getPlayer(); if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { Block b = event.getClickedBlock(); if (STBUtil.isCrop(b.getType())) { b = b.getRelative(BlockFace.DOWN); } final List<Location> l = new ArrayList<Location>(); for (int i = -getRadius(); i <= getRadius(); i++) { for (int j = -getRadius(); j <= getRadius(); j++) { Block b1 = b.getRelative(i, 0, j); if (b1.getType() == Material.SOIL) { l.add(b1.getLocation()); } } } if (!l.isEmpty()) { Bukkit.getScheduler() .runTask( getProviderPlugin(), new Runnable() { @SuppressWarnings("deprecation") @Override public void run() { for (Location loc : l) { player.sendBlockChange(loc, Material.WOOL, getSaturationData(loc.getBlock())); } } }); Bukkit.getScheduler() .runTaskLater( getProviderPlugin(), new Runnable() { @SuppressWarnings("deprecation") @Override public void run() { for (Location loc : l) { player.sendBlockChange( loc, loc.getBlock().getType(), loc.getBlock().getData()); } } }, 30L); event.setCancelled(true); } } }