package me.gtacraft.util; import me.gtacraft.gun.Gun; import me.gtacraft.gun.GunData; import me.gtacraft.gun.GunFactory; import me.gtacraft.player.GunHolder; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.*; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.ArrayList; import java.util.List; /** * Created by Connor on 4/28/14. Designed for the GTA-Guns project. */ public class GunUtil { public static ItemStack getGunStack(Gun model) { if (model == null) return null; Material stack = Material.getMaterial(model.getAttribute("type.id").getIntValue()); byte data = (byte)model.getAttribute("type.data").getIntValue(); ItemStack forge = new ItemStack(stack, 1, (short) 0, data); ItemMeta meta = forge.getItemMeta(); meta.setDisplayName(ChatColor.YELLOW+model.getAttribute("name").getStringValue()); forge.setItemMeta(meta); return forge; } public static <T> List<T> newList(List<T> list) { return new ArrayList<T>(list); } public static boolean isGun(ItemStack stack) { for (Gun g : GunFactory.getGuns().values()) { int type = g.getAttribute("type.id").getIntValue(); byte data = (byte)g.getAttribute("type.data").getIntValue(); if (stack.getTypeId() == type && stack.getData().getData() == data) return true; } return false; } public static GunData isInList(List<GunData> containedGuns, Gun model) { for (GunData d : containedGuns) { if (d.getModel().equals(model)) return d; } return null; } public static GunData getGunData(List<GunData> possible, ItemStack inHand) { if (possible == null) return null; for (GunData p : possible) { if (matchesUUID(p, inHand)) return p; } return null; } private static boolean matchesUUID(GunData data, ItemStack other) { List<String> lore = data.getStack().getItemMeta().getLore(); List<String> lore2; if (other == null || other.getItemMeta() == null) return false; if (other.getItemMeta().getLore() == null) return false; lore2 = other.getItemMeta().getLore(); for (String s : lore2) { if (lore.contains(s)) return true; } return false; } public static ItemStack updateStack(GunData holding, int amount) { ItemStack i = holding.getStack(); i.setAmount(amount); ItemMeta m = i.getItemMeta(); m.setDisplayName(holding.getStackName()); m.setLore(add(new ArrayList<String>(), ChatColor.translateAlternateColorCodes('&', "&0"+holding.getUUID()))); i.setItemMeta(m); holding.setStack(i); return i; } private static List<String> add(List<String> orig, String value) { orig.add(value); return orig; } public static boolean removeOne(int id, byte data, Player player) { GunHolder holder = GunHolder.getHolder(player); if (holder.getCurrentWeapon() == null) return false; if (GunHolder.getHolder(player).getCurrentWeapon().isReloading()) return false; for (ItemStack i : player.getInventory().getContents()) { if (i == null) continue; if (i.getTypeId() == id && i.getData().getData() == data) { if (i.getAmount() == 1) { player.getInventory().remove(i); player.updateInventory(); return true; } else { i.setAmount(i.getAmount()-1); player.updateInventory(); return true; } } } return false; } public static int getPossibleClipAmmo(int id, byte data, Player player) { if (id == 0) return player.getItemInHand().getAmount(); int tot = 0; for (ItemStack i : player.getInventory().getContents()) { if (i == null) continue; if (i.getTypeId() == id && i.getData().getData() == data) { tot+=i.getAmount(); } } return tot; } public static Class<? extends Projectile> getProjectile(String bulletprojectile) { String s = bulletprojectile.toLowerCase(); if (s.equals("snowball")) { return Snowball.class; } else if (s.equals("fireball")) { return Fireball.class; } else if (s.equals("arrow")) { return Arrow.class; } else if (s.equals("witherskull")) { return WitherSkull.class; } else { return Snowball.class; } } public static int hasEnough(int id, byte data, Player player) { if (id == 0) return player.getItemInHand().getAmount(); int ret = 0; for (ItemStack i : player.getInventory().getContents()) { if (i == null) continue; if (i.getTypeId() == id && i.getData().getData() == data) { int tot = i.getAmount(); ret+=tot; } } return ret; } }