package pw.yumc.MenuProtect.listen; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; import pw.yumc.MenuProtect.MenuProtect; import pw.yumc.MenuProtect.utils.MarkUtil; public class ProtectListener implements Listener { private final MenuProtect plugin; public ProtectListener(final MenuProtect plugin) { this.plugin = plugin; } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onInvClose(final InventoryCloseEvent e) { if (e.getPlayer() instanceof Player) { handlerPlayerInventory((Player) e.getPlayer()); } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onInvMove(final InventoryMoveItemEvent e) { final ItemStack ci = e.getItem(); if (MarkUtil.hasMark(ci)) { e.setCancelled(true); } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onInvPickup(final InventoryPickupItemEvent e) { final ItemStack ci = e.getItem().getItemStack(); if (MarkUtil.hasMark(ci)) { e.setCancelled(true); } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onItemClick(final InventoryClickEvent e) { final Player p = (Player) e.getWhoClicked(); final ItemStack ci = e.getCurrentItem(); final Inventory inv = e.getInventory(); if (inv.getHolder() == null) { return; } final int solt = e.getSlot(); try { if (MarkUtil.hasMark(ci)) { inv.setItem(solt, new ItemStack(Material.AIR)); p.closeInventory(); } } catch (final Exception ex) { } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerHandlerItem(final PlayerItemHeldEvent e) { final PlayerInventory inv = e.getPlayer().getInventory(); final int newslot = e.getNewSlot(); final ItemStack newItem = inv.getItem(newslot); if (MarkUtil.hasMark(newItem)) { inv.setItem(newslot, new ItemStack(Material.AIR)); } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerPickup(final PlayerPickupItemEvent e) { final ItemStack ci = e.getItem().getItemStack(); if (MarkUtil.hasMark(ci)) { e.setCancelled(true); } } private void handlerPlayerInventory(final Player p) { Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @Override public void run() { final PlayerInventory inv = p.getInventory(); final ItemStack[] cis = inv.getArmorContents(); for (int i = 0; i < cis.length; i++) { final ItemStack itemStack = cis[i]; if (MarkUtil.hasMark(itemStack)) { cis[i] = new ItemStack(Material.AIR); } } inv.setArmorContents(cis); } }); } }