private void handleInteraction(PacketEvent event) { Player player = event.getPlayer(); BlockIterator iterator = new BlockIterator(player, 5); BlockFace face = null; Block previous = player.getEyeLocation().getBlock(); while (iterator.hasNext()) { Block block = iterator.next(); if (main.getClientsideBlockTracker().getMaterialSeen(player.getUniqueId(), block.getLocation()).isOccluding()) { face = null; break; } if (BlockLocation.fromLocation(block.getLocation()).equals(this.location)) face = block.getFace(previous); else previous = block; } if (face == null) { event.setCancelled(true); return; } ItemStack item; PlayerInventory inventory = player.getInventory(); EnumWrappers.Hand hand = event.getPacket().getHands().readSafely(0); if (hand == EnumWrappers.Hand.MAIN_HAND) item = inventory.getItemInMainHand(); else item = inventory.getItemInOffHand(); ClientBlockInteractEvent event1 = new ClientBlockInteractEvent(this, item, hand, face, player, ClientBlockInteractEvent.ClickType.RIGHT); Bukkit.getPluginManager().callEvent(event1); if (!event1.isCancelled()) handleInteract(event, event1); }