Advertisement
Guest User

Untitled

a guest
Feb 28th, 2015
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.35 KB | None | 0 0
  1. package com.brinedev.tickets;
  2.  
  3. import java.io.File;
  4. import java.util.ArrayList;
  5. import java.util.Collections;
  6. import java.util.Comparator;
  7. import java.util.HashMap;
  8. import java.util.LinkedHashMap;
  9. import java.util.LinkedList;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.Map.Entry;
  13.  
  14. import org.bukkit.Bukkit;
  15. import org.bukkit.ChatColor;
  16. import org.bukkit.Sound;
  17. import org.bukkit.command.Command;
  18. import org.bukkit.command.CommandSender;
  19. import org.bukkit.configuration.file.FileConfiguration;
  20. import org.bukkit.configuration.file.YamlConfiguration;
  21. import org.bukkit.entity.Player;
  22. import org.bukkit.event.EventHandler;
  23. import org.bukkit.event.Listener;
  24. import org.bukkit.event.player.PlayerJoinEvent;
  25. import org.bukkit.plugin.java.JavaPlugin;
  26.  
  27. public class WarTickets extends JavaPlugin implements Listener {
  28.  
  29.     private boolean temAuthme=false;
  30.     private static WarTickets plugin=null;
  31.  
  32.     public void onEnable() {
  33.         plugin=this;
  34.         saveDefaultConfig();
  35.         Bukkit.getServer().getPluginManager().registerEvents(this, plugin);
  36.         boolean temclasse=false;
  37.         try {
  38.              Class.forName( "uk.org.whoami.authme.events.LoginEvent" );
  39.              temclasse=true;
  40.             } catch( ClassNotFoundException e ) {
  41.             }
  42.         if (Bukkit.getPluginManager().isPluginEnabled("AuthMe") && temclasse) {
  43.             temAuthme=true;
  44.             Bukkit.getPluginManager().registerEvents(new AuthMeListener(this), plugin);
  45.         }
  46.     }
  47.    
  48.     public void onDisable() {
  49.         plugin=null;
  50.     }
  51.    
  52.     @EventHandler
  53.     public void onJoin(PlayerJoinEvent event) {
  54.         if (!temAuthme) notificaLogin(event.getPlayer());
  55.     }
  56.    
  57.     public static WarTickets getInstance() {
  58.         return plugin;
  59.     }
  60.    
  61.     public void notificaLogin(Player player) {
  62.         File f2 = new File(plugin.getDataFolder()+"/temptickets.yml");
  63.         if (f2.exists()) {
  64.             boolean dacerto=true;
  65.             FileConfiguration tickets2 = YamlConfiguration.loadConfiguration(f2);
  66.             try {
  67.                 tickets2.getConfigurationSection("Tickets").getKeys(false);
  68.             } catch (Exception e) {dacerto=false;}
  69.             if (dacerto) {
  70.         for (String s : tickets2.getConfigurationSection("Tickets").getKeys(false)) {
  71.             if (tickets2.getString("Tickets."+s+".Player").equalsIgnoreCase(player.getName())) {
  72.                 player.sendMessage("§f[§6WarTickets§f] §eVoce foi respondido:§6 "+tickets2.getString("Tickets."+s+".Resposta"));
  73.                 tickets2.set("Tickets."+s, null);
  74.             }
  75.         }
  76.         try {
  77.             tickets2.save(f2);
  78.         } catch (Exception e) {}
  79.             }
  80.         }
  81.         if (!player.hasPermission("wartickets.helper")) return;
  82.         File f = new File(plugin.getDataFolder()+"/tickets.yml");
  83.         FileConfiguration tickets = YamlConfiguration.loadConfiguration(f);
  84.         int ticketcount=0;
  85.         boolean termina=false;
  86.         try {
  87.             tickets.getConfigurationSection("Tickets").getKeys(false);
  88.         } catch (Exception e) {termina=true;}
  89.         if (!termina) {
  90.             for(String s : tickets.getConfigurationSection("Tickets").getKeys(false)){
  91.                 ticketcount++;
  92.             }
  93.         }
  94.         if (ticketcount>0) {
  95.             player.sendMessage("§f[§6WarTickets§f] §eHá §6"+ticketcount+"§e tickets pendentes, digite /ticket list");
  96.         }
  97.     }
  98.    
  99.     public int notificaHelpers(String msg) {
  100.         int i=0;
  101.         for (Player p : Bukkit.getOnlinePlayers()) {
  102.             if (p.hasPermission("wartickets.helper")) {
  103.                 p.sendMessage(msg);
  104.                 i++;
  105.             }
  106.         }
  107.         return i;
  108.     }
  109.    
  110.     public void respondeTicket(int ticketid, Player player, String resposta) {
  111.         File f = new File(plugin.getDataFolder()+"/tickets.yml");
  112.         FileConfiguration tickets = YamlConfiguration.loadConfiguration(f);
  113.         if (Bukkit.getServer().getPlayer(tickets.getString("Tickets."+ticketid+".Player")) == null) {
  114.             File f2 = new File(plugin.getDataFolder()+"/temptickets.yml");
  115.             FileConfiguration tickets2 = YamlConfiguration.loadConfiguration(f2);
  116.             notificaHelpers("§f[§6WarTickets§f] §6"+player.getName()+"§e respondeu o ticket §6[§e"+ticketid+"§6]§e!");
  117.             tickets2.set("Tickets."+ticketid+".Player", tickets.getString("Tickets."+ticketid+".Player"));
  118.             tickets2.set("Tickets."+ticketid+".Resposta", resposta);
  119.             tickets.set("Tickets."+ticketid, null);
  120.             try {
  121.                 tickets2.save(f2);
  122.             } catch (Exception e) {}
  123.             try {
  124.                 tickets.save(f);
  125.             } catch (Exception e) {}
  126.             return;
  127.         }
  128.         Player p = Bukkit.getServer().getPlayer(tickets.getString("Tickets."+ticketid+".Player"));
  129.         if (!player.getName().equalsIgnoreCase(p.getName())) {
  130.             int count=plugin.getConfig().getInt("TicketsStats."+player.getName(),1)+1;
  131.             plugin.getConfig().set("TicketsStats."+player.getName(), count);
  132.             plugin.saveConfig();
  133.         }
  134.         tickets.set("Tickets."+ticketid, null);
  135.         notificaHelpers("§f[§6WarTickets§f] §6"+player.getName()+"§e respondeu o ticket §6[§e"+ticketid+"§6]§e!");
  136.         notifica(p);
  137.         p.sendMessage("");
  138.         p.sendMessage("§f[§6WarTickets§f] §6"+player.getName()+"§e respondeu seu pedido de ajuda: \n"+ChatColor.stripColor(resposta.replace("&", "§")));
  139.         p.sendMessage("");
  140.         try {
  141.             tickets.save(f);
  142.         } catch (Exception e) {}
  143.     }
  144.    
  145.     public boolean temTicket(int id) {
  146.         File f = new File(plugin.getDataFolder()+"/tickets.yml");
  147.         FileConfiguration tickets = YamlConfiguration.loadConfiguration(f);
  148.         return tickets.contains("Tickets."+id+".Player");
  149.     }
  150.    
  151.     public int novoTicket(Player player, String ajuda) {
  152.         File f = new File(plugin.getDataFolder()+"/tickets.yml");
  153.         FileConfiguration tickets = YamlConfiguration.loadConfiguration(f);
  154.         int ticketid=1;
  155.         boolean termina=false;
  156.         try {
  157.             tickets.getConfigurationSection("Tickets").getKeys(false);
  158.         } catch (Exception e) {termina=true;}
  159.         if (!f.exists())termina=true;
  160.         while (termina==false && ticketid <=500) {
  161.             if (tickets.contains("Tickets."+ticketid+".Player")) {
  162.                 ticketid++;
  163.             } else {
  164.                 termina=true;
  165.             }
  166.         }
  167.         tickets.set("Tickets."+ticketid+".Player", player.getName());
  168.         tickets.set("Tickets."+ticketid+".Mensagem", ChatColor.stripColor(ajuda.replace("&", "§")));
  169.         try {
  170.             tickets.save(f);
  171.         } catch (Exception e) {}
  172.         for (Player p : Bukkit.getOnlinePlayers()) {
  173.             if (p.hasPermission("wartickets.helper")) {
  174.                 notifica(p);
  175.             }
  176.         }
  177.        
  178.         return notificaHelpers("§f[§6WarTickets§f] §eO player §6"+player.getName()+"§e criou um novo ticket! §6[§e"+ticketid+"§6]");
  179.     }
  180.    
  181.     private void addDelay(final Player player) {
  182.         delayP.add(player.getName());
  183.         Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
  184.              public void run() {
  185.                  delayP.remove(player.getName());
  186.              }
  187.         }, 20*60*2);
  188.     }
  189.    
  190.     private List<String> getTickets() {
  191.         List<String> t = new ArrayList<String>();
  192.         File f = new File(plugin.getDataFolder()+"/tickets.yml");
  193.         FileConfiguration tickets = YamlConfiguration.loadConfiguration(f);
  194.         boolean termina=false;
  195.         try {
  196.             tickets.getConfigurationSection("Tickets").getKeys(false);
  197.         } catch (Exception e) {termina=true;}
  198.         if (!termina) {
  199.             for(String s : tickets.getConfigurationSection("Tickets").getKeys(false)){
  200.                 String formato = "§6[§e"+s+"§6] §7"+tickets.getString("Tickets."+s+".Player")+"§e: §6"+tickets.getString("Tickets."+s+".Mensagem");
  201.                 t.add(formato);
  202.             }
  203.         }
  204.         return t;
  205.     }
  206.    
  207.     private List<String> delayP = new ArrayList<String>();
  208.    
  209.     static final int PAGELENGTH = 5;
  210.    
  211.     public List<String> getPage(List<String> l, int pagenr)
  212.     {
  213.         List<String> page = new ArrayList<String>();
  214.      
  215.         int listart = (pagenr - 1) * PAGELENGTH;
  216.         int liend  = listart + PAGELENGTH;
  217.      
  218.         for(int i=listart ; i<liend ;i++)
  219.         {
  220.             if(i < l.size())
  221.             {
  222.                 page.add(l.get(i));
  223.             }
  224.             else
  225.             {
  226.                 break;
  227.             }
  228.         }
  229.      
  230.         return page;
  231.     }
  232.    
  233.     public void notifica(Player p) {
  234.         p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1, 10);
  235.     }
  236.    
  237.     public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
  238.         if (!(sender instanceof Player)) {
  239.             sender.sendMessage("§cApenas players!");
  240.             return false;
  241.         }
  242.         if (cmd.getName().equalsIgnoreCase("ajuda")) {
  243.             if (delayP.contains(sender.getName())) {
  244.                 sender.sendMessage("§eAguarde o tempo!");
  245.                 return false;
  246.             }
  247.             if (args.length == 0) {
  248.                 sender.sendMessage("§cUso /ajuda <mensagem>");
  249.                 return false;
  250.             }
  251.             int i=0;
  252.             String mensagem="";
  253.             while (i!=args.length) {
  254.                 if (mensagem.equalsIgnoreCase("")) {
  255.                     mensagem=args[i];
  256.                 } else {
  257.                     mensagem=mensagem+" "+args[i];
  258.                 }
  259.                 i++;
  260.             }
  261.             int helpers=novoTicket((Player)sender, mensagem);
  262.             if (helpers>0) {
  263.             sender.sendMessage("§f[§6WarTickets§f] §eSeu ticket foi enviado!");
  264.             } else {
  265.                 sender.sendMessage("§f[§6WarTickets§f] §eSeu ticket foi enviado, mas nao ha helpers online para responder, seu ticket foi deixado em espera e será respondido assim que algum helper entrar.");
  266.             }
  267.             addDelay((Player)sender);
  268.             sender.sendMessage("§bVocê só poderá enviar outro pedido de ajuda em 2 minutos.");
  269.             return false;
  270.         } else if (cmd.getName().equalsIgnoreCase("ticket")) {
  271.             if (args.length==0) {
  272.                 sender.sendMessage("§f[§6WarTickets§f] §6Comandos:");
  273.                 sender.sendMessage("§6/ajuda <mensagem> §e- Pedir ajuda");
  274.                 if (sender.hasPermission("wartickets.helper")) {
  275.                     sender.sendMessage("§6/ticket stats§e - Top helpers");
  276.                     sender.sendMessage("§6/ticket list§e - Ver lista de tickets");
  277.                     sender.sendMessage("§6/ticket <id> <resposta>§e - Responder ticket");
  278.                 }
  279.             } else if (!sender.hasPermission("wartickets.helper")) {
  280.                 sender.sendMessage("§cVoce nao tem permissao!");
  281.                 return false;
  282.             } else if (args[0].equalsIgnoreCase("stats")){
  283.                 sender.sendMessage("§6TOP helpers!!");
  284.                 boolean da=true;
  285.                 try { plugin.getConfig().getConfigurationSection("TicketsStats"); } catch (Exception e) {da=false;}
  286.                 int i=1;
  287.                 if (da) {
  288.                     HashMap<String, Double> h = new HashMap<String, Double>();
  289.                     for (String p:plugin.getConfig().getConfigurationSection("TicketsStats").getKeys(false)) {
  290.                         double a=plugin.getConfig().getInt("TicketsStats."+p);
  291.                         double conta=a/5;
  292.                         h.put(p, conta);
  293.                     }
  294.                     Map<String, Double> pts =sortByValue(h);
  295.                     List<String> t = new ArrayList<String>();
  296.                     for (String k:pts.keySet())t.add(k);
  297.                     Collections.sort(t);
  298.                     for (String p:t) {
  299.                         sender.sendMessage("§6[§e"+i+"\u00ba§6] §e"+p+"§e: "+pts.get(p)+" pts");
  300.                         i++;
  301.                     }
  302.                 }
  303.                 if (i==1) {
  304.                     sender.sendMessage("§6Nao ha registros!");
  305.                 }
  306.             } else if (args[0].equalsIgnoreCase("list")){
  307.                 if (args.length > 1) {
  308.                     boolean ehInt=false;
  309.                     try {
  310.                         Integer.parseInt(args[1]);
  311.                         ehInt=true;
  312.                     } catch (Exception e){}
  313.                     if (!ehInt) {
  314.                         sender.sendMessage("§cValor invalido!");
  315.                         return false;
  316.                     }
  317.                     int page = Integer.parseInt(args[1]);
  318.                     if (getPage(getTickets(),page).size()==0) {
  319.                         sender.sendMessage("§cPagina invalida!");
  320.                         return false;
  321.                     }
  322.                     int pagenumber=1;
  323.                     while (getPage(getTickets(),pagenumber).size() != 0) {
  324.                         pagenumber++;
  325.                     }
  326.                     sender.sendMessage("§6Mostrando página "+page+" de "+pagenumber+" - Altere usando /ticket list [pagina]");
  327.                     for (String p : getPage(getTickets(), page)) {
  328.                         sender.sendMessage(p);
  329.                     }
  330.                     sender.sendMessage("§6Responda usando /ticket <id> <resposta>");
  331.                     return false;
  332.                 }
  333.                 int pagenumber=1;
  334.                 while (getPage(getTickets(),pagenumber).size() != 0) {
  335.                     pagenumber++;
  336.                 }
  337.                 if (pagenumber>1) {
  338.                     pagenumber--;
  339.                 }
  340.                 sender.sendMessage("§6Mostrando página 1 de "+pagenumber+" - Altere usando /ticket list [pagina]");
  341.                 for (String p : getPage(getTickets(), 1)) {
  342.                     sender.sendMessage(p);
  343.                 }
  344.                 sender.sendMessage("§6Responda usando /ticket <id> <resposta>");
  345.             } else {
  346.                 if (args.length == 1) {
  347.                     sender.sendMessage("§cUso /ticket <id> <resposta>");
  348.                     return false;
  349.                 }
  350.                 boolean ehInt=false;
  351.                 try {
  352.                     Integer.parseInt(args[0]);
  353.                     ehInt=true;
  354.                 } catch (Exception e){}
  355.                 if (!ehInt) {
  356.                     sender.sendMessage("§cValor invalido!");
  357.                     return false;
  358.                 }
  359.                 int id = Integer.parseInt(args[0]);
  360.                 if (!temTicket(id)) {
  361.                     sender.sendMessage("§cEste ticket nao existe!");
  362.                     return false;
  363.                 }
  364.                 int i=1;
  365.                 String mensagem="";
  366.                 while (i!=args.length) {
  367.                     if (mensagem.equalsIgnoreCase("")) {
  368.                         mensagem=args[i];
  369.                     } else {
  370.                         mensagem=mensagem+" "+args[i];
  371.                     }
  372.                     i++;
  373.                 }
  374.                 respondeTicket(id, (Player)sender, mensagem);
  375.                 sender.sendMessage("§f[§6WarTickets§f] §eVoce respondeu ao ticket §6"+id+"§e!");
  376.                 return false;
  377.             }
  378.         }
  379.         return false;
  380.     }
  381.    
  382.     private static <V, K> Map<V, K> invert(Map<K, V> map) {
  383.  
  384.         Map<V, K> inv = new HashMap<V, K>();
  385.  
  386.         for (Entry<K, V> entry : map.entrySet())
  387.             inv.put(entry.getValue(), entry.getKey());
  388.  
  389.         return inv;
  390.     }
  391.    
  392.     public static <K, V extends Comparable<? super V>> Map<K, V>
  393.     sortByValue( Map<K, V> map )
  394. {
  395.     List<Map.Entry<K, V>> list =
  396.         new LinkedList<Map.Entry<K, V>>( map.entrySet() );
  397.     Collections.sort( list, new Comparator<Map.Entry<K, V>>()
  398.     {
  399.         public int compare( Map.Entry<K, V> o1, Map.Entry<K, V> o2 )
  400.         {
  401.             return (o1.getValue()).compareTo( o2.getValue() );
  402.         }
  403.     } );
  404.  
  405.     Map<K, V> result = new LinkedHashMap<K, V>();
  406.     for (Map.Entry<K, V> entry : list)
  407.     {
  408.         result.put( entry.getKey(), entry.getValue() );
  409.     }
  410.     return result;
  411. }
  412.    
  413. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement