Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.mareckoo01.getserverinfo;
- import java.io.ByteArrayOutputStream;
- import java.io.DataOutput;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.net.InetSocketAddress;
- import java.net.Socket;
- import java.util.List;
- import java.util.Scanner;
- import java.util.logging.Logger;
- import org.bukkit.ChatColor;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandSender;
- import org.bukkit.event.Listener;
- import org.bukkit.plugin.PluginManager;
- import org.bukkit.plugin.java.JavaPlugin;
- import org.bukkit.scheduler.BukkitScheduler;
- import com.google.gson.Gson;
- public class GetServerInfo extends JavaPlugin implements Listener{
- Logger logger = getLogger();
- PluginManager pm = getServer().getPluginManager();
- BukkitScheduler scheduler = getServer().getScheduler();
- @Override
- public void onEnable(){
- pm.registerEvents(this, this);
- }
- @Override
- public void onDisable(){
- }
- @Override
- public boolean onCommand(CommandSender sende, Command cm, String label, String[] arg){
- final CommandSender sender = sende;
- final Command cmd = cm;
- final String[] args = arg;
- if(cmd.getName().equalsIgnoreCase("getserverinfo")){
- if(args.length == 1 || args.length == 2){
- if(!sender.hasPermission("getserverinfo.getserverinfo")){
- sender.sendMessage(ChatColor.DARK_RED + "No permission.");
- return true;
- }
- final int port;
- if(args.length == 2){
- try {
- Integer.parseInt(args[1]);
- } catch (NumberFormatException e){
- sender.sendMessage(ChatColor.DARK_RED + "Bad port!");
- return true;
- }
- if(Integer.parseInt(args[1]) < 1 || Integer.parseInt(args[1]) > 65535){
- sender.sendMessage(ChatColor.DARK_RED + "Bad port!");
- return true;
- }
- port = Integer.parseInt(args[1]);
- } else {
- port = 25565;
- }
- Thread thread = new Thread(new Runnable(){
- @Override
- public void run() {
- try{
- InetSocketAddress address = new InetSocketAddress(args[0], port);
- sender.sendMessage(ChatColor.GRAY + "Connecting to " + address);
- Socket socket = new Socket();
- socket.setSoTimeout(5000);
- socket.connect(address, 5000);
- Scanner scanner = new Scanner(socket.getInputStream());
- String s;
- DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dosb = new DataOutputStream(baos);
- dosb.write(0x00);
- writeVarInt(47, dosb);
- writeVarInt(address.getHostString().length(), dosb);
- dosb.writeBytes(address.getHostString());
- dosb.writeShort(address.getPort());
- writeVarInt(1, dosb);
- writeVarInt(baos.size(), dos);
- dos.write(baos.toByteArray());
- dos.write(0x01);
- dos.write(0x00);
- StringBuffer sb = new StringBuffer();
- while(scanner.hasNextLine()){
- s = scanner.nextLine();
- sb.append(s);
- }
- sender.sendMessage(ChatColor.RED + "Closing connection!");
- if(sb.length() > 1){
- String json = sb.substring(sb.indexOf("{"));
- Gson gson = new Gson();
- Info info = gson.fromJson(json, Info.class);
- sender.sendMessage(ChatColor.BLUE + "MOTD: " + ChatColor.YELLOW + info.description);
- sender.sendMessage(ChatColor.BLUE + "Players: " + ChatColor.GREEN + info.players.online + ChatColor.GRAY + "/" + ChatColor.RED + info.players.max);
- sender.sendMessage(ChatColor.BLUE + "Version protocol: " + ChatColor.LIGHT_PURPLE + info.version.protocol + ChatColor.BLUE + ", version name: " + ChatColor.GOLD + info.version.name);
- sender.sendMessage(ChatColor.DARK_GRAY + "If you want sample of players online type /getplayersample <ip> [port]");
- info = null;
- gson = null;
- json = null;
- }
- scanner.close();
- socket.close();
- sb = null;
- dosb = null;
- baos = null;
- dos = null;
- address = null;
- s = null;
- } catch (IOException ex){
- if(port == 25565){
- sender.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "ERROR! Can't connect to " + args[0]);
- } else {
- sender.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "ERROR! Can't connect to " + args[0] + ":" + port);
- }
- }
- }
- });
- thread.start();
- return true;
- }
- return false;
- }
- if(cmd.getName().equalsIgnoreCase("getplayersample")){
- if(args.length == 1 || args.length == 2){
- if(!sender.hasPermission("getserverinfo.getplayersample")){
- sender.sendMessage(ChatColor.DARK_RED + "No permission.");
- return true;
- }
- final int port;
- if(args.length == 2){
- try {
- Integer.parseInt(args[1]);
- } catch (NumberFormatException e){
- sender.sendMessage(ChatColor.DARK_RED + "Bad port!");
- return true;
- }
- if(Integer.parseInt(args[1]) < 1 || Integer.parseInt(args[1]) > 65535){
- sender.sendMessage(ChatColor.DARK_RED + "Bad port!");
- return true;
- }
- port = Integer.parseInt(args[1]);
- } else {
- port = 25565;
- }
- Thread thread = new Thread(new Runnable(){
- @Override
- public void run() {
- try{
- InetSocketAddress address = new InetSocketAddress(args[0], port);
- sender.sendMessage(ChatColor.GRAY + "Connecting to " + address);
- Socket socket = new Socket();
- socket.setSoTimeout(5000);
- socket.connect(address, 5000);
- Scanner scanner = new Scanner(socket.getInputStream());
- String s;
- DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dosb = new DataOutputStream(baos);
- dosb.write(0x00);
- writeVarInt(47, dosb);
- writeVarInt(address.getHostString().length(), dosb);
- dosb.writeBytes(address.getHostString());
- dosb.writeShort(address.getPort());
- writeVarInt(1, dosb);
- writeVarInt(baos.size(), dos);
- dos.write(baos.toByteArray());
- dos.write(0x01);
- dos.write(0x00);
- StringBuffer sb = new StringBuffer();
- while(scanner.hasNextLine()){
- s = scanner.nextLine();
- sb.append(s);
- }
- sender.sendMessage(ChatColor.RED + "Closing connection!");
- if(sb.length() > 1){
- String json = sb.substring(sb.indexOf("{"));
- Gson gson = new Gson();
- Info info = gson.fromJson(json, Info.class);
- int i = 0;
- try{
- if(info.players.sample.size() > 0){
- for(me.mareckoo01.getserverinfo.GetServerInfo.Info.Player player : info.players.sample){
- i++;
- sender.sendMessage(ChatColor.GOLD + "" + i + ". " + ChatColor.AQUA + player.name);
- }
- } else {
- sender.sendMessage(ChatColor.DARK_RED + "No players online");
- }
- } catch (NullPointerException e){
- sender.sendMessage(ChatColor.DARK_RED + "No players online");
- }
- sender.sendMessage(ChatColor.DARK_GRAY + "If you want server info type /getserverinfo <ip> [port]");
- info = null;
- gson = null;
- json = null;
- }
- scanner.close();
- socket.close();
- sb = null;
- dosb = null;
- baos = null;
- dos = null;
- address = null;
- s = null;
- } catch (IOException ex){
- if(port == 25565){
- sender.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "ERROR! Can't connect to " + args[0]);
- } else {
- sender.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "ERROR! Can't connect to " + args[0] + ":" + port);
- }
- }
- }
- });
- thread.start();
- return true;
- }
- return false;
- }
- return false;
- }
- public void writeVarInt(int i, DataOutput out) throws IOException {
- while ((i & 0xFFFFFF80) != 0) {
- out.writeByte((i & 0x7F) | 0x80);
- i >>>= 7;
- }
- out.writeByte(i & 0x7F);
- }
- public class Info {
- public String description;
- public Players players;
- public Version version;
- public class Players {
- public int max;
- public int online;
- public List<Player> sample;
- }
- public class Player {
- public String id;
- public String name;
- }
- public class Version {
- public String name;
- public String protocol;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement