Обсудим Пинг майнкрафт сервера через Java-код.

Destroy

Разработчик
Пользователь
Сообщения
777
Решения
30
Веб-сайт
destroydevs.ru
Оставлю тут пример кода, так как в интернете информации об этом почти нет.

Maven:
Код:
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20180130</version>
        </dependency>


Java:
Java:
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class Server {
    String host;
    int port = 25565;
    public Server(String host) {
        this.host = host;
    }
    public Server(String host, int port) {
        this.host = host;
        this.port = port;
    }

    private String getJsonText() throws IOException {
        URL url = new URL("https://api.mcsrvstat.us/2/"+host+":"+port);
        URLConnection connection = url.openConnection();
        connection.addRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        return reader.readLine();
    }

    private JSONObject toJsonObject() throws IOException {
        return new JSONObject(getJsonText());
    }

    private String getObject(String object) {
        try {
            return toJsonObject().getString(object);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    private String getObject(String object, String subObject) {
        try {
            JSONObject o = toJsonObject().optJSONObject(object);
            return String.valueOf(o.getInt(subObject));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    private boolean getBooleanObject(String object) {
        try {
            return toJsonObject().getBoolean(object);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
    private boolean getBooleanObject(String object, String subObject) {
        try {
            return toJsonObject().getJSONObject(object).getBoolean(subObject);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
    private String getStringObject(String object, String subObject) {
        try {
            JSONObject o = toJsonObject().optJSONObject(object);
            return o.getString(subObject);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    private String getMotdObject(String object, String subObject) {
        try {
            JSONObject o = toJsonObject().optJSONObject(object);
            return o.getJSONArray(subObject).toString().replace("[", "").replace("]", "").replace(",", "\n").replace("\"", "");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public String getIp() {
        return getObject("ip");
    }

    public String getPort() {
        return getObject("port");
    }

    public String getMotd() {
        return getMotdObject("motd", "clean");
    }

    public String getOnlinePlayers() {
        return getObject("players","online");
    }

    public String getMaxOnlinePlayers() {
        return getObject("players", "max");
    }

    public String getVersion() {
        return getObject("version");
    }

    public String getSoft() {
        return getObject("software");
    }

    public String isOnline() {
        return getBooleanObject("debug", "ping") ? "Да" : "Нет";
    }

    public String getPlugins() {
        return getMotdObject("plugins", "names");
    }

}

Использование:
Java:
//пример из моего телеграм бота
    public void check() {
        if(msg.getText().startsWith("/чек ")) {
            User user = User.getUser(msg.getFrom().getId());
            Telegram chat = new Telegram(chatId);
            SendMessage message;
            if(!user.hasPermission(Permission.CHECK)) {
                message = chat.sendMessage("• У Вас недостаточно прав!");
                chat.execute(message, main);
                return;
            }
            String text = msg.getText().replace("/чек ", "");
            String host;
            int port = 25565;
            String[] split;
            if(text.contains(":")) {
                split = text.split(":");
                host = split[0];
                if(split[1] != null) {
                    port = Integer.parseInt(split[1]);
                }
            } else {
                host = text;
            }
            message = chat.sendMessage("Проверяю: "+host+":"+port+", \nЭто может занять некоторое время.");
            message.setReplyToMessageId(msgId);
            chat.execute(message, main);
            long time = System.currentTimeMillis();
            Server server = new Server(host, port);
            String isOnline = server.isOnline();
            if(isOnline.toLowerCase().contains("нет")) {
                message = chat.sendMessage("Не удалось проверить сервер!\n\n• Возможно он оффлайн.");
            } else {
                String motd = server.getMotd();
                String version = server.getVersion();
                String online = server.getOnlinePlayers();
                String maxOnline = server.getMaxOnlinePlayers();
                String ip = server.getIp();
                time = System.currentTimeMillis()-time;
                message = chat.sendMessage(
                        "☄ Информация о сервере:\n\n" +motd+"\n\n"+"• Версия: "+version
                                +"\n\n• Онлайн: " +online +" | " +maxOnline
                                +"\n• Скорость соединения: "+time+"мс"
                                +"\n\n• Адрес: "+ip);
            }
            message.setReplyToMessageId(msgId);
            chat.execute(message, main);
        }
    }

В получении информации используется
 
Назад
Сверху Снизу