/*
* Copyright 2014 jamietech. All rights reserved.
* https://github.com/jamietech/MinecraftServerPing
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and contributors and should not be interpreted as representing official policies,
* either expressed or implied, of anybody else.
*/
package co.foxdev.foxbot.utils.minecraft;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class MinecraftPingUtil
{
public static byte PACKET_HANDSHAKE = 0x00, PACKET_STATUSREQUEST = 0x00,
PACKET_PING = 0x01;
public static int PROTOCOL_VERSION = 4;
public static int STATUS_HANDSHAKE = 1;
public static void validate(final Object o, final String m)
{
if (o == null)
{
throw new RuntimeException(m);
}
}
public static void io(final boolean b, final String m) throws IOException
{
if (b)
{
throw new IOException(m);
}
}
/**
* @author thinkofdeath
* See: https://gist.github.com/thinkofdeath/e975ddee04e9c87faf22
*/
public static int readVarInt(DataInputStream in) throws IOException
{
int i = 0;
int j = 0;
while (true)
{
int k = in.readByte();
i |= (k & 0x7F) << j++ * 7;
if (j > 5)
{
throw new RuntimeException("VarInt too big");
}
if ((k & 0x80) != 128)
{
break;
}
}
return i;
}
/**
* @throws IOException
* @author thinkofdeath
* See: https://gist.github.com/thinkofdeath/e975ddee04e9c87faf22
*/
public static void writeVarInt(DataOutputStream out, int paramInt) throws IOException
{
while (true)
{
if ((paramInt & 0xFFFFFF80) == 0)
{
out.writeByte(paramInt);
return;
}
out.writeByte(paramInt & 0x7F | 0x80);
paramInt >>>= 7;
}
}
}