// 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.ArrayList;
import java.util.Arrays;
import java.util.List;
            byteBuffer.position(byteBuffer.position() + skips);
            String name = ByteUtil.popString(byteBuffer);
            NodeData nodeData = new NodeData(nodeId, x, y, size, r, g, b, name, virus, agitated);
            nodeDataList.add(nodeData);
        }
        activeNodes = byteBuffer.getInt();
        activeNodeIds = new int[activeNodes];
        for (int j = 0; j < activeNodes; j++) {
            activeNodeIds[j] = byteBuffer.getInt();
        }
    }

    private boolean bitSet(byte value1, byte value2) {
        return (value1 & value2) == value2;
    }


    public List<NodeData> getNodeDataList() {
        return nodeDataList;
    }

    public int getActiveNodes() {
        return activeNodes;
    }

    public int[] getActiveNodeIds() {
        return activeNodeIds;
    }

    @Override
// 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/UpdateNodes.java
import me.pascoej.ajario.packet.PacketType;
import me.pascoej.ajario.util.ByteUtil;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

            byteBuffer.position(byteBuffer.position() + skips);
            String name = ByteUtil.popString(byteBuffer);
            NodeData nodeData = new NodeData(nodeId, x, y, size, r, g, b, name, virus, agitated);
            nodeDataList.add(nodeData);
        }
        activeNodes = byteBuffer.getInt();
        activeNodeIds = new int[activeNodes];
        for (int j = 0; j < activeNodes; j++) {
            activeNodeIds[j] = byteBuffer.getInt();
        }
    }

    private boolean bitSet(byte value1, byte value2) {
        return (value1 & value2) == value2;
    }


    public List<NodeData> getNodeDataList() {
        return nodeDataList;
    }

    public int getActiveNodes() {
        return activeNodes;
    }

    public int[] getActiveNodeIds() {
        return activeNodeIds;
    }

    @Override
    public PacketType getType() {