package de.jatitv.commandguiv2.Spigot.Listener.UseItem_Listener; import de.jatitv.commandguiv2.Spigot.Listener.ItemChange; import de.jatitv.commandguiv2.Spigot.Main; import de.jatitv.commandguiv2.Spigot.cmdManagement.Commands; import de.jatitv.commandguiv2.Spigot.config.config.SelectConfig; import de.jatitv.commandguiv2.Spigot.config.languages.SelectMessages; import de.jatitv.commandguiv2.Spigot.gui.OpenGUI; import de.jatitv.commandguiv2.Spigot.system.UseItem; import de.jatitv.commandguiv2.Spigot.system.database.SelectDatabase; import de.jatitv.commandguiv2.api.CGuiAPI; import net.t2code.lib.Spigot.Lib.items.ItemVersion; import net.t2code.lib.Spigot.Lib.messages.send; import net.t2code.lib.Spigot.Lib.minecraftVersion.MCVersion; import net.t2code.lib.Spigot.Lib.minecraftVersion.NMSVersion; 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.block.BlockPlaceEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.player.*; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; public class Events implements Listener { public static HashMap useItemHashMap = new HashMap<>(); public static HashMap useItemSlotHashMap = new HashMap<>(); @EventHandler public void onJoin(PlayerJoinEvent e) { useItemHashMap.put(e.getPlayer().getName(), SelectDatabase.selectItemStatus(e.getPlayer())); useItemSlotHashMap.put(e.getPlayer().getName(), SelectDatabase.selectSlot(e.getPlayer())); if (CGuiAPI.JoinDisable) { send.debug(Main.plugin, "JoinDisable"); return; } if (e.getPlayer().hasPermission("commandgui.get.guiitem.at.login")) { new BukkitRunnable() { @Override public void run() { send.debug(Main.plugin, "itemChange: " + e.getPlayer().getName()); ItemChange.itemChange(e.getPlayer(), true); } }.runTaskLater(Main.plugin, 20L * 1); } } @EventHandler public void onJoin(PlayerQuitEvent e) { useItemHashMap.remove(e.getPlayer().getName()); } @EventHandler(priority = EventPriority.HIGHEST) public void onDeathDrop(PlayerDeathEvent e) { Player player = e.getEntity().getPlayer(); UseItem.removeItem(player); if (!e.getDrops().isEmpty()) { Iterator var3 = (new ArrayList(e.getDrops())).iterator(); while (var3.hasNext()) { ItemStack items = (ItemStack) var3.next(); if (items != null && items.hasItemMeta() && items.getItemMeta().hasDisplayName() && items.getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { e.getDrops().remove(items); } } } } @EventHandler(priority = EventPriority.HIGHEST) public void onRespawn(PlayerRespawnEvent e) { Player player = e.getPlayer(); if (SelectConfig.UseItem_Enable) { ItemChange.itemChange(player, false); //if (!SelectConfig.UseItem_AllowToggle || Select_Database.selectItemStatus(player)) { // if (SelectConfig.UseItem_GiveOnlyOnFirstJoin) { // if (!player.hasPlayedBefore()) { // new BukkitRunnable() { // @Override // public void run() { // Give_UseItem.onGive(player); // } // }.runTaskLater(Main.plugin, 20L * 1); // } // } else { // new BukkitRunnable() { // @Override // public void run() { // Give_UseItem.onGive(player); // } // }.runTaskLater(Main.plugin, 20L * 1); // } //} } } @EventHandler(priority = EventPriority.HIGHEST) public void onGameModeChange(PlayerGameModeChangeEvent e) { Player player = e.getPlayer(); if (!SelectConfig.UseItemGameModeChangeEnable) { return; } new BukkitRunnable() { @Override public void run() { ItemChange.itemChange(player, false); } }.runTaskLater(Main.plugin, SelectConfig.UseItemGameModeChangeDelayInTicks * 1L); } @EventHandler public void onWorldChange(PlayerChangedWorldEvent e) { Player player = e.getPlayer(); if (!SelectConfig.UseItemWorldChangeEnable) { return; } new BukkitRunnable() { @Override public void run() { ItemChange.itemChange(player, false); } }.runTaskLater(Main.plugin, SelectConfig.UseItemWorldChangeDelayInTicks * 1L); } @EventHandler(priority = EventPriority.HIGHEST) public void onInteract(PlayerInteractEvent e) { Player p = e.getPlayer(); if (!p.isSneaking()) { for (String material : SelectConfig.UseItemItemBlockBlacklist) { if (e.getClickedBlock() != null) { if (e.getClickedBlock().getType() == Material.valueOf(material)) return; } } } if (SelectConfig.UseItem_Enable) { if (SelectConfig.UseItem_PlayerHead_Enable) { if (e.getItem() != null && p.getItemInHand().getType() == ItemVersion.getHead()) { if (e.getItem().getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { openGUI(e, p); } } } else { if (e.getItem() != null && p.getItemInHand().getType() == Material.valueOf(SelectConfig.UseItem_Material)) { if (e.getItem().getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { openGUI(e, p); } } } } } private static void openGUI(PlayerInteractEvent e, Player player) { e.setCancelled(true); if ((!SelectConfig.disableInfoBySneak) && player.isSneaking()) { Commands.info(player); return; } if (!legacy()) { if (!topInventoryIsEmpty(player)) return; } if (UseItem.protection(player, true)) return; if (SelectConfig.UseItemGameModeProtection) { if (SelectConfig.UseItemGameModeMode.equalsIgnoreCase("blacklist") && SelectConfig.UseItemGameModeList.contains(player.getGameMode().toString())) { e.setCancelled(true); send.player(player, SelectMessages.UseItemDisabledInGameMode); return; } if (SelectConfig.UseItemGameModeMode.equalsIgnoreCase("whitelist") && !SelectConfig.UseItemGameModeList.contains(player.getGameMode().toString())) { e.setCancelled(true); send.player(player, SelectMessages.UseItemDisabledInGameMode); return; } } if (SelectConfig.UseItemWorldProtection) { if (SelectConfig.UseItemWorldMode.equalsIgnoreCase("blacklist") && SelectConfig.UseItemWorldList.contains(player.getWorld().getName())) { e.setCancelled(true); send.player(player, SelectMessages.UseItemDisabledInWorld); return; } if (SelectConfig.UseItemWorldMode.equalsIgnoreCase("whitelist") && !SelectConfig.UseItemWorldList.contains(player.getWorld().getName())) { e.setCancelled(true); send.player(player, SelectMessages.UseItemDisabledInWorld); return; } } if (!SelectConfig.UseItem_Permission || player.hasPermission("commandgui.useitem")) { OpenGUI.openGUI(player, SelectConfig.UseItem_OpenGUI, true); } else { player.sendMessage(SelectMessages.NoPermissionForUseItem.replace("[perm]", "commandgui.useitem") .replace("[gui]", SelectConfig.UseItem_OpenGUI)); } } @EventHandler(priority = EventPriority.HIGHEST) public void onItemMoveEvent(InventoryMoveItemEvent e) { if (!SelectConfig.UseItem_BlockMoveAndDrop || !SelectConfig.UseItem_Enable) return; if (e.getItem() != null && e.getItem().hasItemMeta() && e.getItem().getItemMeta().hasDisplayName() && e.getItem().getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { e.setCancelled(true); } } @EventHandler(priority = EventPriority.HIGHEST) public void onItemMove(InventoryDragEvent e) { if (!SelectConfig.UseItem_BlockMoveAndDrop || !SelectConfig.UseItem_Enable) return; if (e.getWhoClicked() instanceof Player) { Player p = (Player) e.getWhoClicked(); if (e.getCursor() != null && e.getCursor().hasItemMeta() && e.getCursor().getItemMeta().hasDisplayName() && e.getCursor().getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { p.closeInventory(); e.setCancelled(true); ItemChange.itemChange(p, false); } if (e.getOldCursor() != null && e.getOldCursor().hasItemMeta() && e.getOldCursor().getItemMeta().hasDisplayName() && e.getOldCursor().getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { p.closeInventory(); e.setCancelled(true); ItemChange.itemChange(p, false); } } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onItemMove(InventoryClickEvent e) { if (!SelectConfig.UseItem_BlockMoveAndDrop || !SelectConfig.UseItem_Enable) return; if (e.getCursor() != null && e.getCursor().hasItemMeta() && e.getCursor().getItemMeta().hasDisplayName() && e.getCursor().getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { e.setCancelled(true); } if (e.getCurrentItem() != null && e.getCurrentItem().hasItemMeta() && e.getCurrentItem().getItemMeta().hasDisplayName() && e.getCurrentItem().getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { e.setCancelled(true); } } @EventHandler(priority = EventPriority.HIGHEST) public void onItemMove(InventoryPickupItemEvent e) { if (!SelectConfig.UseItem_BlockMoveAndDrop || !SelectConfig.UseItem_Enable) return; if (e.getItem() != null && e.getItem().getItemStack() != null) { ItemStack item = e.getItem().getItemStack(); if (item.hasItemMeta() && item.getItemMeta().hasDisplayName() && item.getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { e.setCancelled(true); } } } @EventHandler(priority = EventPriority.HIGHEST) public void onPlace(BlockPlaceEvent e) { if (!SelectConfig.UseItem_BlockMoveAndDrop || !SelectConfig.UseItem_Enable) return; if (e.getItemInHand() != null && e.getItemInHand().hasItemMeta() && e.getItemInHand().getItemMeta().hasDisplayName() && e.getItemInHand().getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { e.setCancelled(true); } } @EventHandler(priority = EventPriority.HIGHEST) public void onDrop(PlayerDropItemEvent e) { if (!SelectConfig.UseItem_BlockMoveAndDrop || !SelectConfig.UseItem_Enable) return; if (e.getItemDrop() != null && e.getItemDrop().getItemStack() != null) { ItemStack item = e.getItemDrop().getItemStack(); if (item.hasItemMeta() && item.getItemMeta().hasDisplayName() && item.getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { e.setCancelled(true); } } } private static boolean legacy() { if (MCVersion.minecraft1_8 || MCVersion.minecraft1_9 || MCVersion.minecraft1_10 || MCVersion.minecraft1_11 || MCVersion.minecraft1_12 || MCVersion.minecraft1_13 || MCVersion.minecraft1_14 || MCVersion.minecraft1_15 || NMSVersion.v1_16_R1) { return true; } else return false; } private static boolean topInventoryIsEmpty(Player p) { return p.getOpenInventory().getTopInventory().isEmpty(); } }