package de.jatitv.commandguiv2.Spigot.system; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import de.jatitv.commandguiv2.Spigot.Listener.UseItem_Listener.Events; import de.jatitv.commandguiv2.Spigot.Main; import de.jatitv.commandguiv2.Spigot.config.config.SelectConfig; import de.jatitv.commandguiv2.Spigot.config.languages.SelectMessages; import de.jatitv.commandguiv2.Util; 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.replace.Replace; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; import java.lang.reflect.Field; import java.util.UUID; public class UseItem { public static void giveUseItem(Player player) { Integer slot; if (protection(player, false)) return; if (SelectConfig.UseItem_InventorySlotEnforce) { slot = SelectConfig.UseItem_InventorySlot; } else { if (Events.useItemSlotHashMap.get(player) == null) { slot = SelectConfig.UseItem_InventorySlot; } else { slot = Events.useItemSlotHashMap.get(player); } } if (SelectConfig.UseItem_InventorySlot_FreeSlot) { player.getInventory().addItem(itemStack(player)); } else { send.debug(Main.plugin, "setUseItem: " + player.getName() + " Slot: " + Integer.parseInt(String.valueOf(slot - 1))); player.getInventory().setItem(slot - 1, itemStack(player)); } } public static void addUseItem(Player player) { if (protection(player, false)) return; if (SelectConfig.UseItem_InventorySlot_FreeSlot) { player.getInventory().addItem(itemStack(player)); } else player.getInventory().addItem(itemStack(player)); } private static ItemStack itemStack(Player player) { ItemStack item = null; if (SelectConfig.UseItem_PlayerHead_Enable) { if (MCVersion.minecraft1_8 || MCVersion.minecraft1_9 || MCVersion.minecraft1_10 || MCVersion.minecraft1_11 || MCVersion.minecraft1_12) { send.player(player, Main.prefix + "§c Playerheads for UseItem are only available from version §61.13§c!"); send.error(Main.plugin, "Playerheads for UseItem are only available from version 1.13!"); } else { item = ItemVersion.getHeadIS(); SkullMeta playerheadmeta = (SkullMeta) item.getItemMeta(); playerheadmeta.setDisplayName(SelectConfig.UseItem_Name); if (SelectConfig.UseItem_Base64_Enable) { if (Main.PaPi) { playerheadmeta.setLore(Replace.replace(Util.getPrefix(), player, SelectConfig.UseItem_Lore)); } else playerheadmeta.setLore(Replace.replace(Util.getPrefix(), SelectConfig.UseItem_Lore)); GameProfile profile = new GameProfile(UUID.randomUUID(), ""); profile.getProperties().put("textures", new Property("textures", SelectConfig.UseItem_Base64value)); Field profileField = null; try { profileField = playerheadmeta.getClass().getDeclaredField("profile"); profileField.setAccessible(true); profileField.set(playerheadmeta, profile); } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { e.printStackTrace(); } } else { String p; if (SelectConfig.UseItem_PlayerWhoHasOpenedTheGUI) { p = player.getName(); } else p = SelectConfig.UseItem_PlayerName; playerheadmeta.setOwner(p); if (Main.PaPi) { playerheadmeta.setLore(Replace.replace(Util.getPrefix(), player, SelectConfig.UseItem_Lore)); } else playerheadmeta.setLore(Replace.replace(Util.getPrefix(), SelectConfig.UseItem_Lore)); } item.setItemMeta(playerheadmeta); } } else { item = new ItemStack(Material.valueOf(SelectConfig.UseItem_Material)); ItemMeta itemMeta = item.getItemMeta(); itemMeta.setDisplayName(SelectConfig.UseItem_Name); if (Main.PaPi) { itemMeta.setLore(Replace.replace(Util.getPrefix(), player, SelectConfig.UseItem_Lore)); } else itemMeta.setLore(Replace.replace(Util.getPrefix(), SelectConfig.UseItem_Lore)); item.setItemMeta(itemMeta); item.setAmount(1); } return item; } public static boolean protection(Player player, Boolean interact) { if (SelectConfig.UseItemGameModeProtection) { if (SelectConfig.UseItemGameModeMode.equalsIgnoreCase("blacklist") && SelectConfig.UseItemGameModeList.contains(player.getGameMode().toString())) { if (interact) { send.player(player, SelectMessages.UseItemDisabledInGameMode); } else if (!SelectConfig.UseItemWorldRemoveItemWhenItIsDisabled) removeItem(player); return true; } if (SelectConfig.UseItemGameModeMode.equalsIgnoreCase("whitelist") && !SelectConfig.UseItemGameModeList.contains(player.getGameMode().toString())) { if (interact) { send.player(player, SelectMessages.UseItemDisabledInGameMode); } else if (!SelectConfig.UseItemWorldRemoveItemWhenItIsDisabled) removeItem(player); return true; } } if (SelectConfig.UseItemWorldProtection) { if (SelectConfig.UseItemWorldMode.equalsIgnoreCase("blacklist") && SelectConfig.UseItemWorldList.contains(player.getWorld().getName())) { if (interact) { send.player(player, SelectMessages.UseItemDisabledInWorld); } else if (!SelectConfig.UseItemWorldRemoveItemWhenItIsDisabled) removeItem(player); return true; } if (SelectConfig.UseItemWorldMode.equalsIgnoreCase("whitelist") && !SelectConfig.UseItemWorldList.contains(player.getWorld().getName())) { if (interact) { send.player(player, SelectMessages.UseItemDisabledInWorld); } else if (!SelectConfig.UseItemWorldRemoveItemWhenItIsDisabled) removeItem(player); return true; } } return false; } public static void removeItem(Player player) { send.debug(Main.plugin, "World disabled: " + player.getName() + " " + player.getWorld().toString()); for (int iam = 0; iam < player.getInventory().getSize() - 5; iam++) { ItemStack itm = player.getInventory().getItem(iam); if (itm != null) { if (itm.getType() == Material.valueOf(SelectConfig.UseItem_Material) || itm.getType() == ItemVersion.getHead()) { if (itm.getItemMeta().getDisplayName().equals(SelectConfig.UseItem_Name)) { player.getInventory().remove(itm); player.updateInventory(); break; } } } } } }