public override void ReceiveDataEvent(DataType type, PlayerInfo playerInfo, byte[] data, int index = 0)
    {
        base.ReceiveDataEvent(type, playerInfo, data, index);

        ByteReceiver br = new ByteReceiver(data, index);

        switch (type)
        {
        case DataType.ListUpdate:
            switch ((ListUpdateType)br.getInt())
            {
            case ListUpdateType.UpdateYourself:
                receiveUpdateYourself(br);
                break;

            case ListUpdateType.SyncOthers:
                receiveSyncOthers(br);
                break;
            }
            break;

        case DataType.Relay:
            int[] uniqueIDs   = br.getIntArray();
            bool  runInServer = br.getBool();
            br.clean();
            sendRelayS(br.data, playerInfo.uniqueID, uniqueIDs);
            if (runInServer)
            {
                receiveRelayData(br, playerInfo.uniqueID);
            }

            break;

        case DataType.RelayS:
            receiveRelayS(br);
            break;
        }
    }