Advertisement
pie_flavor

LegacyDiscipline.class

Jan 16th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.48 KB | None | 0 0
  1. package flavor.pie;
  2.  
  3. import org.bukkit.ChatColor;
  4. import org.bukkit.Material;
  5. import org.bukkit.command.Command;
  6. import org.bukkit.command.CommandSender;
  7. import org.bukkit.conversations.*;
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.event.EventHandler;
  10. import org.bukkit.event.Listener;
  11. import org.bukkit.event.inventory.InventoryClickEvent;
  12. import org.bukkit.inventory.Inventory;
  13. import org.bukkit.inventory.ItemStack;
  14. import org.bukkit.inventory.meta.ItemMeta;
  15. import org.bukkit.plugin.java.JavaPlugin;
  16.  
  17. import java.util.*;
  18.  
  19. public class LegacyDiscipline extends JavaPlugin implements Listener {
  20.     @Override
  21.     public void onEnable() {
  22.         saveDefaultConfig();
  23.         getServer().getPluginManager().registerEvents(this, this);
  24.     }
  25.     String c(String s) {
  26.         return ChatColor.translateAlternateColorCodes('&', "&f"+s);
  27.     }
  28.     @Override
  29.     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
  30.         if (args.length == 0) {
  31.             sender.sendMessage(c("&c/"+label+" reload|<player>"));
  32.             return true;
  33.         }
  34.         if (args[0].equalsIgnoreCase("reload")) {
  35.             if (sender instanceof Player && !sender.hasPermission("legacy.reload")) {
  36.                 sender.sendMessage(c("&cYou do not have permission to run this command."));
  37.                 return true;
  38.             }
  39.             reloadConfig();
  40.         }
  41.         if (!(sender instanceof Player)) {
  42.             sender.sendMessage(c("&cSorry, players only."));
  43.             return true;
  44.         }
  45.         Player p = (Player) sender;
  46.         Player p2;
  47.         try {
  48.             p2 = getServer().getPlayer(UUID.fromString(args[0]));
  49.         } catch (IllegalArgumentException e) {
  50.             p2 = getServer().getPlayer(args[0]);
  51.         }
  52.         if (p2 == null) {
  53.             sender.sendMessage(c("&cInvalid player!"));
  54.             return true;
  55.         }
  56.         Inventory i = getServer().createInventory(null, 54, "Punishing "+p.getName());
  57.         i.setItem(4, build(p.getName(), Material.WEB, getConfig().getStringList("discipline.info").toArray(new String[]{})));
  58.         if (p.hasPermission("legacy.mute")) i.setItem(10, build(p.getName(), Material.IRON_BLOCK, "Mute"));
  59.         if (p.hasPermission("legacy.ban")) i.setItem(16, build(p.getName(), Material.REDSTONE, "Ban"));
  60.         if (p.hasPermission("legacy.kick")) i.setItem(22, build(p.getName(), Material.COAL, "Kick"));
  61.         if (p.hasPermission("legacy.tempban")) i.setItem(37, build(p.getName(), Material.LAPIS_BLOCK, "Temp Ban"));
  62.         if (p.hasPermission("legacy.tempmute")) i.setItem(43, build(p.getName(), Material.GOLD_BLOCK, "Temp Mute"));
  63.         p.openInventory(i);
  64.         return true;
  65.     }
  66.     ItemStack build(String name, Material m, String... text) {
  67.         ItemStack stack = new ItemStack(m);
  68.         ItemMeta meta = stack.getItemMeta();
  69.         List<String> list = Arrays.asList(text);
  70.         list.replaceAll(this::c);
  71.         list.replaceAll(s -> s.replace("<player>", name));
  72.         meta.setDisplayName(list.get(0));
  73.         if (list.size() > 1) {
  74.             meta.setLore(list.subList(1, list.size()));
  75.         }
  76.         stack.setItemMeta(meta);
  77.         return stack;
  78.     }
  79.     @EventHandler
  80.     public void onClick(InventoryClickEvent e) {
  81.         if (e.getInventory().getTitle().startsWith("Punishing ") && e.getSlot() == e.getRawSlot()) {
  82.             e.setCancelled(true);
  83.             if (e.getView().getItem(e.getRawSlot()) == null || e.getView().getItem(e.getRawSlot()).getType().equals(Material.AIR)) return;
  84.             Discipline d;
  85.             switch (e.getSlot()) {
  86.             case 10:
  87.                 d = Discipline.MUTE;
  88.                 break;
  89.             case 16:
  90.                 d = Discipline.BAN;
  91.                 break;
  92.             case 22:
  93.                 d = Discipline.KICK;
  94.                 break;
  95.             case 37:
  96.                 d = Discipline.TEMPBAN;
  97.                 break;
  98.             case 43:
  99.                 d = Discipline.TEMPMUTE;
  100.                 break;
  101.             default: return;
  102.             }
  103.             HashMap<Object, Object> map = new HashMap<>();
  104.             map.put(d, e.getInventory().getTitle().replace("Punishing ",""));
  105.             Conversation c = new ConversationFactory(this).withEscapeSequence("cancel").withFirstPrompt(new ReasonPrompt(d)).thatExcludesNonPlayersWithMessage("Players only. Duh.").withLocalEcho(true).withInitialSessionData(map).buildConversation((Player) e.getWhoClicked());
  106.             c.begin();
  107.         }
  108.     }
  109.     void runCommand(Player p, Discipline d, String... args) {
  110.         getServer().broadcastMessage(d.toString().toLowerCase() + " " + args[0] + (args.length == 0 ? "" : " " + args[1]));
  111.     }
  112.     enum Discipline {
  113.         BAN, KICK, MUTE, TEMPBAN, TEMPMUTE
  114.     }
  115.     class ReasonPrompt extends StringPrompt {
  116.         Discipline d;
  117.         ReasonPrompt(Discipline d) {
  118.             ReasonPrompt.this.d = d;
  119.         }
  120.         @Override
  121.         public Prompt acceptInput(ConversationContext context, String msg) {
  122.             if (d.equals(Discipline.TEMPBAN) || d.equals(Discipline.TEMPMUTE)) {
  123.                 String args = (String) context.getSessionData(d);
  124.                 args += " "+msg;
  125.                 context.setSessionData(d, args);
  126.                 return new DurationPrompt(d);
  127.             } else {
  128.                 runCommand((Player) context.getForWhom(), d, msg);
  129.                 return END_OF_CONVERSATION;
  130.             }
  131.         }
  132.  
  133.         @Override
  134.         public String getPromptText(ConversationContext context) {
  135.             return getConfig().getString("discipline."+d.toString().toLowerCase()+".reason").replace("<player>", ((Player) context.getForWhom()).getName());
  136.         }
  137.     }
  138.     class DurationPrompt extends StringPrompt {
  139.         Discipline d;
  140.         DurationPrompt(Discipline d) {
  141.             DurationPrompt.this.d = d;
  142.         }
  143.         @Override
  144.         public Prompt acceptInput(ConversationContext context, String input) {
  145.             String msg = (String) context.getSessionData(d);
  146.             runCommand((Player) context.getForWhom(), d, msg, input);
  147.             return END_OF_CONVERSATION;
  148.         }
  149.         @Override
  150.         public String getPromptText(ConversationContext context) {
  151.             return getConfig().getString("discipline."+d.toString().toLowerCase()+".duration").replace("<player>", ((Player) context.getForWhom()).getName());
  152.         }
  153.     }
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement