package net.diamonddominion.esaych.survival; import java.util.ArrayList; import java.util.List; import net.diamonddominion.esaych.CustomPlugin; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.Chest; import org.bukkit.block.Sign; import org.bukkit.command.CommandSender; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; public class StaffVotes { private CustomPlugin plugin; Inventory voteInv; ItemStack no; ItemStack yes; Chest chest; ArrayList<String> votingPlayers = new ArrayList<String>(); public StaffVotes(CustomPlugin plugin) { this.plugin = plugin; } public void enable() { noSlots.add(0); noSlots.add(9); noSlots.add(18); noSlots.add(1); noSlots.add(10); noSlots.add(19); noSlots.add(2); noSlots.add(11); noSlots.add(20); noSlots.add(3); noSlots.add(12); noSlots.add(21); yesSlots.add(8); yesSlots.add(17); yesSlots.add(26); yesSlots.add(7); yesSlots.add(16); yesSlots.add(25); yesSlots.add(5); yesSlots.add(15); yesSlots.add(24); yesSlots.add(4); yesSlots.add(14); yesSlots.add(23); log("Enabled"); } public Inventory getChest() { chest = (Chest) Bukkit.getWorld("Survival").getBlockAt(59, 71, 171).getState(); return chest.getBlockInventory(); } public Inventory getInv() { Sign sign = (Sign) Bukkit.getWorld("Survival").getBlockAt(60, 71, 171).getState(); Sign sign2 = (Sign) Bukkit.getWorld("Survival").getBlockAt(60, 71, 170).getState(); String title = sign.getLine(1) + " " + sign.getLine(2) + " " + sign.getLine(3) + " " + sign2.getLine(1) + " " + sign2.getLine(2) + " " + sign2.getLine(3); String invtitle = title; if (title.length() > 32) invtitle = title.substring(0, 32); no = new ItemStack(Material.WOOL); no.setDurability((short) 14); ItemMeta im = no.getItemMeta(); im.setDisplayName("Click to vote " + ChatColor.RED + "NO"); List<String> list = new ArrayList<String>(); list.add(title); im.setLore(list); no.setItemMeta(im); yes = new ItemStack(Material.WOOL); yes.setDurability((short) 5); im = yes.getItemMeta(); im.setDisplayName("Click to vote " + ChatColor.GREEN + "YES"); im.setLore(list); yes.setItemMeta(im); voteInv = Bukkit.getServer().createInventory(null, 9, invtitle); voteInv.setItem(0, no); voteInv.setItem(1, no); voteInv.setItem(2, no); voteInv.setItem(3, no); ItemStack ns = new ItemStack(Material.NETHER_STAR); im = ns.getItemMeta(); im.setDisplayName("Pick One"); ns.setItemMeta(im); voteInv.setItem(4, ns); voteInv.setItem(5, yes); voteInv.setItem(6, yes); voteInv.setItem(7, yes); voteInv.setItem(8, yes); return voteInv; } public void voteNo(Player player) { removePlayer(player); ItemStack head = new ItemStack(Material.SKULL_ITEM); head.setDurability((short)3); SkullMeta skull = (SkullMeta) head.getItemMeta(); skull.setOwner(player.getName()); head.setItemMeta(skull); ItemMeta im = head.getItemMeta(); im.setDisplayName(ChatColor.DARK_RED + player.getName()); ArrayList<String> lore = new ArrayList<String>(); lore.add("Voting NO"); im.setLore(lore); head.setItemMeta(im); getChest().setItem(getNextNoSlot(), head); player.openInventory(getChest()); } public void voteYes(Player player) { removePlayer(player); ItemStack head = new ItemStack(Material.SKULL_ITEM); head.setDurability((short)3); SkullMeta skull = (SkullMeta) head.getItemMeta(); skull.setOwner(player.getName()); head.setItemMeta(skull); ItemMeta im = head.getItemMeta(); im.setDisplayName(ChatColor.GREEN + player.getName()); ArrayList<String> lore = new ArrayList<String>(); lore.add("Voting YES"); im.setLore(lore); head.setItemMeta(im); getChest().setItem(getNextYesSlot(), head); player.openInventory(getChest()); } public void removePlayer(Player player) { for (ItemStack item : getChest().getContents()) { if (item != null && item.getType().equals(Material.SKULL_ITEM)) { SkullMeta skull = (SkullMeta) item.getItemMeta(); if (skull.getOwner().equals(player.getName())) getChest().remove(item); } } } ArrayList<Integer> noSlots = new ArrayList<Integer>(); ArrayList<Integer> yesSlots = new ArrayList<Integer>(); public int getNextNoSlot() { for (int i : noSlots) { if (getChest().getItem(i) == null) return i; } return 0; } public int getNextYesSlot() { for (int i : yesSlots) { if (getChest().getItem(i) == null) return i; } return 0; } public boolean onCommand(CommandSender sender, String[] args) { if (!sender.hasPermission("customplugin.staffvote")) { sender.sendMessage(ChatColor.RED + "You don't have permission."); return true; } if (!(sender instanceof Player)) { sender.sendMessage("You must be a player to vote"); return true; } Player player = (Player) sender; if (args.length > 0) { if (!sender.hasPermission("customplugin.staffvote.manage")) { sender.sendMessage(ChatColor.RED + "Only headadmin and up can manage staffvotes."); return true; } String arg = args[0]; // if (arg.equals("setquestion")) { // String question = ""; // for (String str: args) { // if (!str.equals("setquestion")) { // question += str + " "; // } // } // question = question.substring(0, question.length() - 1); // Sign sign = (Sign) Bukkit.getWorld("Survival").getBlockAt(64, 71, 133).getState(); // if (question.length() > 16) { // String line1 = question.substring(question.substring(0, 16).lastIndexOf(" ")); // question = question.substring(line1.length(), question.length()); // if (question.length() > 16) { // String line2 = question.substring(question.substring(0, 16).lastIndexOf(" ")); // question = question.substring(line2.length(), question.length()); // if (question.length() > 16) { // String line3 = question.substring(question.substring(0, 16).lastIndexOf(" ")); // question = question.substring(line3.length(), question.length()); // } else { // sign.setLine(1, line1); // sign.setLine(2, line2); // sign.setLine(3, question); // } // } else { // sign.setLine(1, line1); // sign.setLine(2, question); // sign.setLine(3, ""); // } // } else { // sign.setLine(1, question); // sign.setLine(2, ""); // sign.setLine(3, ""); // } // sign.update(); // sender.sendMessage(ChatColor.GREEN + "Question changed to: " + ChatColor.BLUE + sign.getLine(1) + " " + sign.getLine(2) + " " + sign.getLine(3)); // return true; // } else if (arg.equalsIgnoreCase("clear")) { getChest().clear(); sender.sendMessage(ChatColor.GREEN + "Vote chest cleared."); return true; } else if (arg.equalsIgnoreCase("open")) { player.openInventory(getChest()); } else { sender.sendMessage(ChatColor.RED + "Error: Args can be open, or clear"); return true; } } votingPlayers.add(player.getName()); player.openInventory(getInv()); return true; } public void onInventoryClick(InventoryClickEvent event) { HumanEntity hm = event.getWhoClicked(); ItemStack ci = event.getCurrentItem(); if (votingPlayers.contains(hm.getName())) { event.setCancelled(true); if (event.getCurrentItem() != null) { if (event.getCurrentItem().getDurability() == (short) 14) voteNo((Player) hm); if (event.getCurrentItem().getDurability() == (short) 5) voteYes((Player) hm); votingPlayers.remove(event.getWhoClicked().getName()); } } if (ci != null && ci.getType().equals(Material.SKULL_ITEM)) { ItemMeta skull = event.getCurrentItem().getItemMeta(); List<String> lore = skull.getLore(); if (lore != null && lore.size() > 0) { if (lore.get(0).startsWith("Voting ")) { event.setCancelled(true); } } } } public void onInventoryClose(InventoryCloseEvent event) { if (votingPlayers.contains(event.getPlayer().getName())) { votingPlayers.remove(event.getPlayer().getName()); } } public void onPlayerJoinEvent(PlayerJoinEvent event) { if (event.getPlayer().hasPermission("customplugin.staffvote")) { for (ItemStack item : getChest().getContents()) { if (item != null && item.getType().equals(Material.SKULL_ITEM)) { SkullMeta skull = (SkullMeta) item.getItemMeta(); if (skull.getOwner().equals(event.getPlayer().getName())) return; } } event.getPlayer().sendMessage(ChatColor.BLUE + "STAFFVOTE: " + ChatColor.RED + "You have yet to vote!"); Sign sign = (Sign) Bukkit.getWorld("Survival").getBlockAt(60, 71, 171).getState(); Sign sign2 = (Sign) Bukkit.getWorld("Survival").getBlockAt(60, 71, 170).getState(); String title = sign.getLine(1) + " " + sign.getLine(2) + " " + sign.getLine(3) + " " + sign2.getLine(1) + " " + sign2.getLine(2) + " " + sign2.getLine(3); event.getPlayer().sendMessage(ChatColor.GREEN + title); } } public void log(String info) { plugin.getLogger().info("<StaffVotes> " + info); } }