@Override
    public void fromBytes(ByteBuf buffer) {
      packetType = PortableTeleporterPacketType.values()[buffer.readInt()];

      if (packetType == PortableTeleporterPacketType.DATA_REQUEST) {
        if (buffer.readBoolean()) {
          frequency =
              new Frequency(PacketHandler.readString(buffer), null).setPublic(buffer.readBoolean());
        }
      } else if (packetType == PortableTeleporterPacketType.DATA_RESPONSE) {
        if (buffer.readBoolean()) {
          frequency =
              new Frequency(PacketHandler.readString(buffer), null).setPublic(buffer.readBoolean());
        }

        status = buffer.readByte();

        int amount = buffer.readInt();

        for (int i = 0; i < amount; i++) {
          publicCache.add(new Frequency(buffer));
        }

        amount = buffer.readInt();

        for (int i = 0; i < amount; i++) {
          privateCache.add(new Frequency(buffer));
        }
      } else if (packetType == PortableTeleporterPacketType.SET_FREQ) {
        frequency =
            new Frequency(PacketHandler.readString(buffer), null).setPublic(buffer.readBoolean());
      } else if (packetType == PortableTeleporterPacketType.DEL_FREQ) {
        frequency =
            new Frequency(PacketHandler.readString(buffer), null).setPublic(buffer.readBoolean());
      } else if (packetType == PortableTeleporterPacketType.TELEPORT) {
        frequency =
            new Frequency(PacketHandler.readString(buffer), null).setPublic(buffer.readBoolean());
      }
    }