public Task <string> UpdatePlayer(string playerSessionID, IPlayerObserver playerObserver, Vec3 position) { int idx = mActivePlayers.FindIndex(item => (item.mID == playerSessionID)); if (idx >= 0) { if ((position.x < mMinLocation.x) || (position.y < mMinLocation.y) || (position.z < mMinLocation.z) || (position.x > mMaxLocation.x) || (position.y > mMaxLocation.y) || (position.z > mMaxLocation.z)) { IChunkGrain transfer = TransferPlayerTo(playerSessionID, playerObserver, ref position, mActivePlayers[idx].mPosition); if (transfer != null) { LeavePlayer(playerSessionID); return(Task.FromResult <string>(transfer.GetPrimaryKeyString())); } } mActivePlayers[idx].mPosition = position; mActivePlayers[idx].mVersion = MinecraftVersion.GetNext(); return(Task.FromResult <string>(this.GetPrimaryKeyString())); } return(Task.FromResult <string>(null)); }