Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

[Решено]Состояние другого сервера

Тема в разделе "Разработка плагинов для новичков", создана пользователем CraftCoder, 3 июл 2015.

  1. Автор темы
    CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Как получить состояние другого сервера в minecraft 1.8? В 1.5.2 получилось, а в 1.8 видимо протокол поменяли, а инфы найти никакой не могу.

    Решение:
    Код:
    private static JSONObject fetchData(InetSocketAddress host) throws IOException {
            Socket socket = null;
            DataOutputStream dataOut = null;
            DataInputStream dataIn = null;
           
            try {
                socket = new Socket(host.getAddress(), host.getPort());
                socket.setSoTimeout(timeout);
                dataOut = new DataOutputStream(socket.getOutputStream());
                dataIn = new DataInputStream(socket.getInputStream());
                final ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
                final DataOutputStream handshake = new DataOutputStream(byteOut);
                handshake.write(0);
                PacketUtils.writeVarInt(handshake, 4);
                PacketUtils.writeString(handshake, host.getAddress().getHostAddress(), PacketUtils.UTF8);
                handshake.writeShort(host.getPort());
                PacketUtils.writeVarInt(handshake, 1);
                byte[] bytes = byteOut.toByteArray();
                PacketUtils.writeVarInt(dataOut, bytes.length);
                dataOut.write(bytes);
                bytes = new byte[] { 0 };
                PacketUtils.writeVarInt(dataOut, bytes.length);
                dataOut.write(bytes);
                PacketUtils.readVarInt(dataIn);
                PacketUtils.readVarInt(dataIn);
                final byte[] responseData = new byte[PacketUtils.readVarInt(dataIn)];
                dataIn.readFully(responseData);
                final String jsonString = new String(responseData, PacketUtils.UTF8);
                Object jsonObject = JSONValue.parse(jsonString);
                JSONObject json = (JSONObject) jsonObject;
                return json;
            }
            finally {
                PacketUtils.closeQuietly(dataOut);
                PacketUtils.closeQuietly(dataIn);
                PacketUtils.closeQuietly(socket);
            }
        }
    
    JSONObject будет вида:
    Код:
    {
    "version": {
    "name": "1.7.9",
    "protocol": 5
    },
    "players": {
    "max": 100,
    "online": 5,
    "sample": [
    {
    "name": "thinkofdeath",
    "id": "4566e69f-c907-48ee-8d71-d7ba5aa00d20"
    }
    ]
    },
    "description": {
    "text": "Hello world"
    },
    "favicon": "data:image/png;base64,<data>"
    }
    
    @Shevchik @fromgate
     
    Последнее редактирование: 7 июл 2015
  2. Хостинг MineCraft
    <
  3. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
  4. Автор темы
    CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Спасибо огромное за вторую ссылку. А то я уже задолбался битики вручную подбирать.[DOUBLEPOST=1436007649,1435948875][/DOUBLEPOST]Упс, все равно не работает. Там на вики оказывается под 1.7, а на 1.8 не робит чет.
     

Поделиться этой страницей