package org.arkham.cs.cosmetics; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import net.minecraft.server.v1_7_R4.PacketPlayOutEntityEquipment; import org.arkham.cs.CosmeticSuite; import org.arkham.cs.gui.Category; import org.arkham.cs.interfaces.Button; import org.arkham.cs.utils.PlayerMetaDataUtil; import org.arkham.cs.utils.Rank; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; public class Hat extends Button { public static List<Hat> hats = new ArrayList<>(); private Rank rank; private static HashMap<Rank, List<Hat>> hatsByRank = new HashMap<>(); /** * @param slot * @param item * @param name * @param lore */ public Hat(int slot, ItemStack item, Category name, String permission, Rank rank) { super(slot, name, permission, item); this.rank = rank; List<Hat> h = hatsByRank.get(rank); if(h == null){ h = new ArrayList<>(); } if(rank == Rank.SUPERHERO){ h.addAll(hatsByRank.get(Rank.HERO)); } h.add(this); hatsByRank.put(rank, h); hats.add(this); } /** * * @param slot * @param item * @param rank * @param permission */ public Hat(int slot, ItemStack item, Rank rank, String permission){ this(slot, item, Category.HATS, permission, rank); } /** * @param mat * @param slot */ public Hat(Material mat, int slot, Rank rank){ this(slot, new ItemStack(mat), Category.HATS, "cosmetics.hats." + mat.name().toLowerCase(), rank); } public static List<Hat> getHats(Rank rank){ return hatsByRank.get(rank); } @Override public void onClick(final Player player) { player.sendMessage(CosmeticSuite.PREFIX + "You have now equiped the hat " + getPermission().replace("cosmetics.hats.", "").replace("_", " ")); PlayerMetaDataUtil.removeFromSwitching(player); player.closeInventory(); new BukkitRunnable(){ @Override public void run(){ PacketPlayOutEntityEquipment equip = new PacketPlayOutEntityEquipment(player.getEntityId(), 4, CraftItemStack.asNMSCopy(getDisplay())); for(Player p : Bukkit.getOnlinePlayers()){ if(p.getUniqueId().equals(player.getUniqueId())){ PacketPlayOutEntityEquipment pequip = new PacketPlayOutEntityEquipment(player.getEntityId(), 3, CraftItemStack.asNMSCopy(getDisplay())); ((CraftPlayer)player).getHandle().playerConnection.sendPacket(pequip); continue; } ((CraftPlayer)p).getHandle().playerConnection.sendPacket(equip); } } }.runTaskLater(CosmeticSuite.getInstance(), 20L); } public Rank getRank() { return rank; } public void setRank(Rank rank) { this.rank = rank; } }