package pw.hamzantal.minionsplus.util; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.LeatherArmorMeta; import java.util.Map; public class ItemUtil { public static ItemStack setKeyInt(ItemStack itemStack, String key, int value) { net.minecraft.server.v1_8_R3.ItemStack nms = CraftItemStack.asNMSCopy(itemStack); nms.getTag().setInt(key, value); return CraftItemStack.asBukkitCopy(nms); } public static ItemStack setKeyDouble(ItemStack itemStack, String key, double value) { net.minecraft.server.v1_8_R3.ItemStack nms = CraftItemStack.asNMSCopy(itemStack); nms.getTag().setDouble(key, value); return CraftItemStack.asBukkitCopy(nms); } public static ItemStack setKeyString(ItemStack itemStack, String key, String value) { net.minecraft.server.v1_8_R3.ItemStack nms = CraftItemStack.asNMSCopy(itemStack); nms.getTag().setString(key, value); return CraftItemStack.asBukkitCopy(nms); } public static ItemStack setKeyLong(ItemStack itemStack, String key, long value) { net.minecraft.server.v1_8_R3.ItemStack nms = CraftItemStack.asNMSCopy(itemStack); nms.getTag().setLong(key, value); return CraftItemStack.asBukkitCopy(nms); } public static int getKeyInt(ItemStack itemStack, String key) { net.minecraft.server.v1_8_R3.ItemStack nms = CraftItemStack.asNMSCopy(itemStack); return nms.getTag().getInt(key); } public static double getKeyDouble(ItemStack itemStack, String key) { net.minecraft.server.v1_8_R3.ItemStack nms = CraftItemStack.asNMSCopy(itemStack); return nms.getTag().getDouble(key); } public static String getKeyString(ItemStack itemStack, String key) { net.minecraft.server.v1_8_R3.ItemStack nms = CraftItemStack.asNMSCopy(itemStack); return nms.getTag().getString(key); } public static long getKeyLong(ItemStack itemStack, String key) { net.minecraft.server.v1_8_R3.ItemStack nms = CraftItemStack.asNMSCopy(itemStack); return nms.getTag().getLong(key); } public static boolean hasKey(ItemStack itemStack, String key) { net.minecraft.server.v1_8_R3.ItemStack nms = CraftItemStack.asNMSCopy(itemStack); if (nms.getTag() == null) return false; return nms.getTag().hasKey(key); } public static ItemStack setMaxStackSize(ItemStack stack, int size) { try { net.minecraft.server.v1_8_R3.ItemStack item = CraftItemStack.asNMSCopy(stack); item.getItem().c(size); return CraftItemStack.asBukkitCopy(item); } catch (Throwable e) { e.printStackTrace(); } return null; } public static boolean compareType(ItemStack stack1, ItemStack stack2) { if (stack1 == null || stack2 == null) return false; if (stack1.getType() != stack2.getType()) return false; if (stack1.getDurability() != stack2.getDurability()) return false; return true; } public static boolean areSimilar(ItemStack stack1, ItemStack stack2) { if (stack1 == null || stack2 == null) return false; if (stack1.getType() != stack2.getType()) return false; if (stack1.getDurability() != stack2.getDurability()) return false; if (stack1.getAmount() != stack2.getAmount()) return false; if (stack1.hasItemMeta() != stack2.hasItemMeta()) return false; if (stack1.hasItemMeta() && stack2.hasItemMeta() && (!stack1.getItemMeta().equals(stack2.getItemMeta()))) return false; return true; } public static boolean consumeItem(Inventory inventory, int count, ItemStack itemStack) { Map ammo = inventory.all(itemStack.getType()); int found = 0; for (ItemStack stack : ammo.values()) { if (stack.getDurability() != itemStack.getDurability()) continue; if (!stack.getItemMeta().equals(itemStack.getItemMeta())) continue; found += stack.getAmount(); } if (count > found) return false; for (Integer index : ammo.keySet()) { ItemStack stack = ammo.get(index); if (stack.getDurability() != itemStack.getDurability()) continue; if (!stack.getItemMeta().equals(itemStack.getItemMeta())) continue; int removed = Math.min(count, stack.getAmount()); count -= removed; if (stack.getAmount() == removed) inventory.setItem(index, null); else stack.setAmount(stack.getAmount() - removed); if (count <= 0) break; } inventory.getViewers().stream().filter(humanEntity -> humanEntity instanceof Player).forEach(humanEntity -> ((Player)humanEntity).updateInventory()); return true; } public static boolean containsItems(Inventory inventory, int count, ItemStack itemStack) { Map ammo = inventory.all(itemStack.getType()); int found = 0; for (ItemStack stack : ammo.values()) { if (stack.getDurability() != itemStack.getDurability()) continue; if (!stack.getItemMeta().equals(itemStack.getItemMeta())) continue; found += stack.getAmount(); } if (count > found) return false; return true; } public static void giveAndDrop(final Player player, final ItemStack itemStack) { player.getInventory().addItem(itemStack).forEach((integer, itemStack1) -> player.getWorld().dropItemNaturally(player.getLocation(), itemStack1)); } public static ItemStack fromConfigSection(final ConfigurationSection section) { final Material material = Material.getMaterial(section.getString("Material")); final int durability = section.getInt("Durability"); final ItemStack item = ItemBuilder.of(material).durability((short) durability).build(); if (section.contains("Color") && material.name().toLowerCase().contains("leather")) { LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta(); int red = section.getInt("Color.Red"); int green = section.getInt("Color.Green"); int blue = section.getInt("Color.Blue"); meta.setColor(Color.fromRGB(red, green, blue)); item.setItemMeta(meta); } return item; } }