minions-plus/src/main/java/pw/hamzantal/minionsplus/util/ItemUtil.java

161 lines
6.2 KiB
Java

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<Integer, ? extends ItemStack> 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<Integer, ? extends ItemStack> 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;
}
}