Guest User

GetServerInfo

a guest
Oct 13th, 2015
202
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package me.mareckoo01.getserverinfo;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.DataOutput;
  5. import java.io.DataOutputStream;
  6. import java.io.IOException;
  7. import java.net.InetSocketAddress;
  8. import java.net.Socket;
  9. import java.util.List;
  10. import java.util.Scanner;
  11. import java.util.logging.Logger;
  12.  
  13. import org.bukkit.ChatColor;
  14. import org.bukkit.command.Command;
  15. import org.bukkit.command.CommandSender;
  16. import org.bukkit.event.Listener;
  17. import org.bukkit.plugin.PluginManager;
  18. import org.bukkit.plugin.java.JavaPlugin;
  19. import org.bukkit.scheduler.BukkitScheduler;
  20.  
  21. import com.google.gson.Gson;
  22.  
  23. public class GetServerInfo extends JavaPlugin implements Listener{
  24.  
  25.     Logger logger = getLogger();
  26.     PluginManager pm = getServer().getPluginManager();
  27.     BukkitScheduler scheduler = getServer().getScheduler();
  28.  
  29.     @Override
  30.     public void onEnable(){
  31.         pm.registerEvents(this, this);
  32.     }
  33.  
  34.     @Override
  35.     public void onDisable(){
  36.  
  37.     }
  38.  
  39.     @Override
  40.     public boolean onCommand(CommandSender sende, Command cm, String label, String[] arg){
  41.         final CommandSender sender = sende;
  42.         final Command cmd = cm;
  43.         final String[] args = arg;
  44.         if(cmd.getName().equalsIgnoreCase("getserverinfo")){
  45.             if(args.length == 1 || args.length == 2){
  46.                 if(!sender.hasPermission("getserverinfo.getserverinfo")){
  47.                     sender.sendMessage(ChatColor.DARK_RED + "No permission.");
  48.                     return true;
  49.                 }
  50.                 final int port;
  51.                 if(args.length == 2){
  52.                     try {
  53.                         Integer.parseInt(args[1]);
  54.                     } catch (NumberFormatException e){
  55.                         sender.sendMessage(ChatColor.DARK_RED + "Bad port!");
  56.                         return true;
  57.                     }
  58.                     if(Integer.parseInt(args[1]) < 1 || Integer.parseInt(args[1]) > 65535){
  59.                         sender.sendMessage(ChatColor.DARK_RED + "Bad port!");
  60.                         return true;
  61.                     }
  62.                     port = Integer.parseInt(args[1]);
  63.                 } else {
  64.                     port = 25565;
  65.                 }
  66.                 Thread thread = new Thread(new Runnable(){
  67.                     @Override
  68.                     public void run() {
  69.                         try{
  70.                             InetSocketAddress address = new InetSocketAddress(args[0], port);
  71.                             sender.sendMessage(ChatColor.GRAY + "Connecting to " + address);
  72.                             Socket socket = new Socket();
  73.                             socket.setSoTimeout(5000);
  74.                             socket.connect(address, 5000);
  75.                             Scanner scanner = new Scanner(socket.getInputStream());
  76.                             String s;
  77.                             DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
  78.                             ByteArrayOutputStream baos = new ByteArrayOutputStream();
  79.                             DataOutputStream dosb = new DataOutputStream(baos);
  80.                             dosb.write(0x00);
  81.                             writeVarInt(47, dosb);
  82.                             writeVarInt(address.getHostString().length(), dosb);
  83.                             dosb.writeBytes(address.getHostString());
  84.                             dosb.writeShort(address.getPort());
  85.                             writeVarInt(1, dosb);
  86.                             writeVarInt(baos.size(), dos);
  87.                             dos.write(baos.toByteArray());
  88.                             dos.write(0x01);
  89.                             dos.write(0x00);
  90.                             StringBuffer sb = new StringBuffer();
  91.                             while(scanner.hasNextLine()){
  92.                                 s = scanner.nextLine();
  93.                                 sb.append(s);
  94.                             }
  95.                             sender.sendMessage(ChatColor.RED + "Closing connection!");
  96.                             if(sb.length() > 1){
  97.                                 String json = sb.substring(sb.indexOf("{"));
  98.                                 Gson gson = new Gson();
  99.                                 Info info = gson.fromJson(json, Info.class);
  100.                                 sender.sendMessage(ChatColor.BLUE + "MOTD: " + ChatColor.YELLOW + info.description);
  101.                                 sender.sendMessage(ChatColor.BLUE + "Players: " + ChatColor.GREEN + info.players.online + ChatColor.GRAY + "/" + ChatColor.RED + info.players.max);
  102.                                 sender.sendMessage(ChatColor.BLUE + "Version protocol: " + ChatColor.LIGHT_PURPLE + info.version.protocol + ChatColor.BLUE + ", version name: " + ChatColor.GOLD + info.version.name);
  103.                                 sender.sendMessage(ChatColor.DARK_GRAY + "If you want sample of players online type /getplayersample <ip> [port]");
  104.                                 info = null;
  105.                                 gson = null;
  106.                                 json = null;
  107.                             }
  108.                             scanner.close();
  109.                             socket.close();
  110.                             sb = null;
  111.                             dosb = null;
  112.                             baos = null;
  113.                             dos = null;
  114.                             address = null;
  115.                             s = null;
  116.                         } catch (IOException ex){
  117.                             if(port == 25565){
  118.                                 sender.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "ERROR! Can't connect to " + args[0]);
  119.                             } else {
  120.                                 sender.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "ERROR! Can't connect to " + args[0] + ":" + port);
  121.                             }
  122.                         }
  123.                     }
  124.                 });
  125.                 thread.start();
  126.                 return true;
  127.             }
  128.             return false;
  129.         }
  130.         if(cmd.getName().equalsIgnoreCase("getplayersample")){
  131.             if(args.length == 1 || args.length == 2){
  132.                 if(!sender.hasPermission("getserverinfo.getplayersample")){
  133.                     sender.sendMessage(ChatColor.DARK_RED + "No permission.");
  134.                     return true;
  135.                 }
  136.                 final int port;
  137.                 if(args.length == 2){
  138.                     try {
  139.                         Integer.parseInt(args[1]);
  140.                     } catch (NumberFormatException e){
  141.                         sender.sendMessage(ChatColor.DARK_RED + "Bad port!");
  142.                         return true;
  143.                     }
  144.                     if(Integer.parseInt(args[1]) < 1 || Integer.parseInt(args[1]) > 65535){
  145.                         sender.sendMessage(ChatColor.DARK_RED + "Bad port!");
  146.                         return true;
  147.                     }
  148.                     port = Integer.parseInt(args[1]);
  149.                 } else {
  150.                     port = 25565;
  151.                 }
  152.                 Thread thread = new Thread(new Runnable(){
  153.                     @Override
  154.                     public void run() {
  155.                         try{
  156.                             InetSocketAddress address = new InetSocketAddress(args[0], port);
  157.                             sender.sendMessage(ChatColor.GRAY + "Connecting to " + address);
  158.                             Socket socket = new Socket();
  159.                             socket.setSoTimeout(5000);
  160.                             socket.connect(address, 5000);
  161.                             Scanner scanner = new Scanner(socket.getInputStream());
  162.                             String s;
  163.                             DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
  164.                             ByteArrayOutputStream baos = new ByteArrayOutputStream();
  165.                             DataOutputStream dosb = new DataOutputStream(baos);
  166.                             dosb.write(0x00);
  167.                             writeVarInt(47, dosb);
  168.                             writeVarInt(address.getHostString().length(), dosb);
  169.                             dosb.writeBytes(address.getHostString());
  170.                             dosb.writeShort(address.getPort());
  171.                             writeVarInt(1, dosb);
  172.                             writeVarInt(baos.size(), dos);
  173.                             dos.write(baos.toByteArray());
  174.                             dos.write(0x01);
  175.                             dos.write(0x00);
  176.                             StringBuffer sb = new StringBuffer();
  177.                             while(scanner.hasNextLine()){
  178.                                 s = scanner.nextLine();
  179.                                 sb.append(s);
  180.                             }
  181.                             sender.sendMessage(ChatColor.RED + "Closing connection!");
  182.                             if(sb.length() > 1){
  183.                                 String json = sb.substring(sb.indexOf("{"));
  184.                                 Gson gson = new Gson();
  185.                                 Info info = gson.fromJson(json, Info.class);
  186.                                 int i = 0;
  187.                                 try{
  188.                                     if(info.players.sample.size() > 0){
  189.                                         for(me.mareckoo01.getserverinfo.GetServerInfo.Info.Player player : info.players.sample){
  190.                                             i++;
  191.                                             sender.sendMessage(ChatColor.GOLD + "" + i + ". " + ChatColor.AQUA + player.name);
  192.                                         }
  193.                                     } else {
  194.                                         sender.sendMessage(ChatColor.DARK_RED + "No players online");
  195.                                     }
  196.                                 } catch (NullPointerException e){
  197.                                     sender.sendMessage(ChatColor.DARK_RED + "No players online");
  198.                                 }
  199.                                 sender.sendMessage(ChatColor.DARK_GRAY + "If you want server info type /getserverinfo <ip> [port]");
  200.                                 info = null;
  201.                                 gson = null;
  202.                                 json = null;
  203.                             }
  204.                             scanner.close();
  205.                             socket.close();
  206.                             sb = null;
  207.                             dosb = null;
  208.                             baos = null;
  209.                             dos = null;
  210.                             address = null;
  211.                             s = null;
  212.                         } catch (IOException ex){
  213.                             if(port == 25565){
  214.                                 sender.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "ERROR! Can't connect to " + args[0]);
  215.                             } else {
  216.                                 sender.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "ERROR! Can't connect to " + args[0] + ":" + port);
  217.                             }
  218.                         }
  219.                     }
  220.                 });
  221.                 thread.start();
  222.                 return true;
  223.             }
  224.             return false;
  225.         }
  226.         return false;
  227.     }
  228.  
  229.     public void writeVarInt(int i, DataOutput out) throws IOException {
  230.         while ((i & 0xFFFFFF80) != 0) {
  231.             out.writeByte((i & 0x7F) | 0x80);
  232.             i >>>= 7;
  233.         }
  234.         out.writeByte(i & 0x7F);
  235.     }
  236.  
  237.     public class Info {
  238.         public String description;
  239.         public Players players;
  240.         public Version version;
  241.  
  242.         public class Players {
  243.             public int max;
  244.             public int online;
  245.             public List<Player> sample;      
  246.         }
  247.  
  248.         public class Player {
  249.             public String id;
  250.             public String name;
  251.         }
  252.  
  253.         public class Version {
  254.             public String name;
  255.             public String protocol;
  256.         }
  257.     }
  258. }
RAW Paste Data