// Path: src/main/java/me/pascoej/ajario/packet/PacketType.java
// public interface PacketType {
//     enum ServerBound implements PacketType {
//         SET_NICKNAME(0), SPECTATE(1), MOUSE_MOVE(16), SPLIT(17), EJECT_MASS(21), RESET_CONNECTION(255);
//         private final byte id;
// 
//         ServerBound(int id) {
//             this.id = (byte) id;
//         }
// 
//         public byte getId() {
//             return id;
//         }
// 
//         private static final Map<Byte, ServerBound> packetTypeById = Collections.unmodifiableMap(initPacketTypeById());
// 
//         private static Map<Byte, ServerBound> initPacketTypeById() {
//             Map<Byte, ServerBound> map = new HashMap<>();
//             for (ServerBound packetType : values()) {
//                 map.put(packetType.getId(), packetType);
//             }
//             return map;
//         }
// 
//         public static ServerBound packetType(byte id) {
//             return packetTypeById.get(id);
//         }
//     }
// 
// 
//     enum ClientBound implements PacketType {
//         UPDATE_NODES(16), UPDATE_POSITION_SIZE(17), CLEAR_ALL_NODES(20), ADD_NODE(32), UPDATE_LEADERBOARD(49),
//         SET_BORDER(64);
//         private final byte id;
// 
//         ClientBound(int id) {
//             this.id = (byte) id;
//         }
// 
//         public byte getId() {
//             return id;
//         }
// 
//         private static final Map<Byte, ClientBound> packetTypeById = Collections.unmodifiableMap(initPacketTypeById());
// 
//         private static Map<Byte, ClientBound> initPacketTypeById() {
//             Map<Byte, ClientBound> map = new HashMap<>();
//             for (ClientBound packetType : values()) {
//                 map.put(packetType.getId(), packetType);
//             }
//             return map;
//         }
// 
//         public static ClientBound packetType(byte id) {
//             return packetTypeById.get(id);
//         }
//     }
// 
//     byte getId();
// }
// 
// Path: src/main/java/me/pascoej/ajario/util/ByteUtil.java
// public class ByteUtil {
//     public static String popString(ByteBuffer byteBuffer) {
//         StringBuilder sb = new StringBuilder(byteBuffer.limit());
//         while (true) {
//             short num = byteBuffer.getShort();
//             if (num == 0) {
//                 return sb.toString();
//             }
//             sb.append((char) num);
//         }
//     }
// 
//     public static String toBinaryString(byte in) {
//         return String.format("%8s", Integer.toBinaryString(in & 0xFF)).replace(' ', '0');
//     }
// }


import me.pascoej.ajario.packet.PacketType;
import me.pascoej.ajario.util.ByteUtil;
import java.nio.ByteBuffer;
import java.util.Arrays;
package me.pascoej.ajario.packet.clientbound;



/**
 * Created by john on 6/14/15.
 */
public class UpdateLeaderBoard extends ClientBoundPacket {
    private final LeaderboardPosition[] leaderboardPositions;

    public UpdateLeaderBoard(ByteBuffer byteBuffer) {
        super(byteBuffer);
        int numberOfNodes = byteBuffer.getInt();
        leaderboardPositions = new LeaderboardPosition[numberOfNodes];
        for (int i = 0; i < numberOfNodes; i++) {
            int nodeId = byteBuffer.getInt();
// Path: src/main/java/me/pascoej/ajario/packet/PacketType.java
// public interface PacketType {
//     enum ServerBound implements PacketType {
//         SET_NICKNAME(0), SPECTATE(1), MOUSE_MOVE(16), SPLIT(17), EJECT_MASS(21), RESET_CONNECTION(255);
//         private final byte id;
// 
//         ServerBound(int id) {
//             this.id = (byte) id;
//         }
// 
//         public byte getId() {
//             return id;
//         }
// 
//         private static final Map<Byte, ServerBound> packetTypeById = Collections.unmodifiableMap(initPacketTypeById());
// 
//         private static Map<Byte, ServerBound> initPacketTypeById() {
//             Map<Byte, ServerBound> map = new HashMap<>();
//             for (ServerBound packetType : values()) {
//                 map.put(packetType.getId(), packetType);
//             }
//             return map;
//         }
// 
//         public static ServerBound packetType(byte id) {
//             return packetTypeById.get(id);
//         }
//     }
// 
// 
//     enum ClientBound implements PacketType {
//         UPDATE_NODES(16), UPDATE_POSITION_SIZE(17), CLEAR_ALL_NODES(20), ADD_NODE(32), UPDATE_LEADERBOARD(49),
//         SET_BORDER(64);
//         private final byte id;
// 
//         ClientBound(int id) {
//             this.id = (byte) id;
//         }
// 
//         public byte getId() {
//             return id;
//         }
// 
//         private static final Map<Byte, ClientBound> packetTypeById = Collections.unmodifiableMap(initPacketTypeById());
// 
//         private static Map<Byte, ClientBound> initPacketTypeById() {
//             Map<Byte, ClientBound> map = new HashMap<>();
//             for (ClientBound packetType : values()) {
//                 map.put(packetType.getId(), packetType);
//             }
//             return map;
//         }
// 
//         public static ClientBound packetType(byte id) {
//             return packetTypeById.get(id);
//         }
//     }
// 
//     byte getId();
// }
// 
// Path: src/main/java/me/pascoej/ajario/util/ByteUtil.java
// public class ByteUtil {
//     public static String popString(ByteBuffer byteBuffer) {
//         StringBuilder sb = new StringBuilder(byteBuffer.limit());
//         while (true) {
//             short num = byteBuffer.getShort();
//             if (num == 0) {
//                 return sb.toString();
//             }
//             sb.append((char) num);
//         }
//     }
// 
//     public static String toBinaryString(byte in) {
//         return String.format("%8s", Integer.toBinaryString(in & 0xFF)).replace(' ', '0');
//     }
// }


// Path: src/main/java/me/pascoej/ajario/packet/clientbound/UpdateLeaderBoard.java
import me.pascoej.ajario.packet.PacketType;
import me.pascoej.ajario.util.ByteUtil;
import java.nio.ByteBuffer;
import java.util.Arrays;

package me.pascoej.ajario.packet.clientbound;



/**
 * Created by john on 6/14/15.
 */
public class UpdateLeaderBoard extends ClientBoundPacket {
    private final LeaderboardPosition[] leaderboardPositions;

    public UpdateLeaderBoard(ByteBuffer byteBuffer) {
        super(byteBuffer);
        int numberOfNodes = byteBuffer.getInt();
        leaderboardPositions = new LeaderboardPosition[numberOfNodes];
        for (int i = 0; i < numberOfNodes; i++) {
            int nodeId = byteBuffer.getInt();
            String name = ByteUtil.popString(byteBuffer);