Example #1
0
 protected override bool AcceptPlayerMove(McpeMovePlayer message, bool isOnGround, bool isFlyingHorizontally)
 {
     if (CooldownTick-- > 0)
     {
         return(true);
     }
     if (!isOnGround)
     {
         if (isFlyingHorizontally)
         {
             //if (!message.onGround)
             //{
             if (!IsSpectator)
             {
                 if (message.y <= 256)
                 {
                     Disconnect("Error #375! Flight is not allow.");
                     //Level.BroadcastMessage(Username + " возможно читер!!!");
                     return(true);
                 }
             }
             //}
         }
     }
     return(true);
 }
Example #2
0
        public void McpePlayStatus_parallel_encode_perf_test()
        {
            byte[] result = new byte[0];

            void Body(int i)
            {
                var input = new McpeMovePlayer();

                result = input.Encode();
            }

            long totalAllocatedBytes = GC.GetTotalMemory(true);
            var  watch = Stopwatch.StartNew();

            Parallel.For(0, _loops, i =>
            {
                var input = new McpeMovePlayer();
                result    = input.Encode();
            });
            if (result.Length < 0)
            {
                return;
            }

            long watchElapsedMilliseconds = watch.ElapsedMilliseconds;

            Console.WriteLine($"Time: {watchElapsedMilliseconds:N}ms, mem: {(GC.GetTotalMemory(true) - totalAllocatedBytes) / 1024f:N}KB");
        }
Example #3
0
        public Package HandleIncomingMove(McpeMovePlayer packet, Player player)
        {
            var spawn = player.Level.SpawnPoint;

            if (packet.x <= spawn.X + Boder && packet.x >= spawn.X - Boder)
            {
                if (packet.z <= spawn.Z + Boder && packet.z >= spawn.Z - Boder)
                {
                    return(packet);
                }
            }


            player.SetPosition(new PlayerLocation(
                                   player.KnownPosition.X - (packet.x - player.KnownPosition.X),
                                   player.KnownPosition.Y,
                                   player.KnownPosition.Z - (packet.z - player.KnownPosition.Z))
            {
                HeadYaw = packet.headYaw,
                Pitch   = packet.pitch,
                Yaw     = packet.yaw
            });


            player.SendMessage("Out of bounce");
            return(packet);
        }
Example #4
0
        public ChunkColumn GenerateChunkColumn(ChunkCoordinates chunkCoordinates)
        {
            var sw           = Stopwatch.StartNew();
            var playerCoords = (BlockCoordinates)chunkCoordinates;

            var movePlayerPacket = McpeMovePlayer.CreateObject();

            movePlayerPacket.runtimeEntityId = _client.EntityId;
            movePlayerPacket.x = playerCoords.X;
            movePlayerPacket.y = 255;
            movePlayerPacket.z = playerCoords.Z;
            _client.SendPacket(movePlayerPacket);

            int         count = 0;
            ChunkColumn chunk = null;

            while (count++ < 100 && !_client.Chunks.TryGetValue(chunkCoordinates, out chunk))
            {
                Thread.Sleep(50);
            }

            if (chunk == null)
            {
                Log.Warn($"Failed to locate chunk {chunkCoordinates}. Tried {count} times");
            }
            else
            {
                Log.Debug($"Successful return of chunk {chunkCoordinates} in {sw.ElapsedMilliseconds}ms. Tried {count} times");
            }

            return(chunk);
        }
Example #5
0
 public Package OnPlayerMove(McpeMovePlayer packet, Player player)
 {
     var userManager = Context.Server.UserManager;
     var user = userManager.FindByNameAsync(player.Username).Result;
     if (user != null)
     {
         if (!user.IsAuthenticated)
         {
             player.SetPosition(player.SpawnPosition);
             player.ClearPopups();
             player.AddPopup(new Popup()
             {
                 Message = $"{ChatColors.Green}Type your password to login!",
                 Duration = 10,
                 Priority = 1000
             });
         }
     }
     else
     {
         player.SetPosition(player.SpawnPosition);
         player.ClearPopups();
         player.AddPopup(new Popup()
         {
             Message = $"{ChatColors.Green}Type /reg password to register!",
             Duration = 10,
             Priority = 1000
         });
     }
     return packet;
 }
Example #6
0
        private void OnMcpeMovePlayer(Package message)
        {
            McpeMovePlayer msg = (McpeMovePlayer)message;

            Log.DebugFormat("Entity ID: {0}", msg.entityId);

            CurrentLocation = new PlayerLocation(msg.x, msg.y + 10, msg.z);
            SendMcpeMovePlayer();
        }
Example #7
0
 public Package onMovePlayer(McpeMovePlayer packet, Player player)
 {
     if (!Class1.lged.ContainsKey(player.Username.ToLower()))
     {
         notlogin(player);
         return(null);
     }
     return(packet);
 }
Example #8
0
        /*  private int _lastPlayerMoveSequenceNUmber;
         * private int _lastOrderingIndex;
         * private object _moveSyncLock = new object();
         * public override void HandleMcpeMovePlayer(McpeMovePlayer message)
         * {
         *        if (!IsSpawned || HealthManager.IsDead) return;
         *
         *        if (_plugin.OpenServer.ServerRole != ServerRole.Node)
         *        {
         *                lock (_moveSyncLock)
         *                {
         *                        if (_lastPlayerMoveSequenceNUmber > message.DatagramSequenceNumber)
         *                        {
         *                                return;
         *                        }
         *
         *                        _lastPlayerMoveSequenceNUmber = message.DatagramSequenceNumber;
         *
         *                        if (_lastOrderingIndex > message.OrderingIndex)
         *                        {
         *                                return;
         *                        }
         *
         *                        _lastOrderingIndex = message.OrderingIndex;
         *                }
         *        }
         *
         *        var newPosition = new PlayerLocation(message.x, message.y, message.z, message.headYaw, message.yaw,
         *                message.pitch);
         *
         *        EventDispatcher.DispatchEventAsync(new PlayerMoveEvent(this, KnownPosition, newPosition, false))
         *                .Then(
         *                        result =>
         *                        {
         *                                if (result.IsCancelled)
         *                                        return;
         *
         *                                base.HandleMcpeMovePlayer(message);
         *                                //base.Teleport(result.To);
         *                        });
         * }*/

        protected override bool AcceptPlayerMove(McpeMovePlayer message, bool isOnGround, bool isFlyingHorizontally)
        {
            //  return true;

            if (!PlayerMoveEvent(KnownPosition, new PlayerLocation(message.x, message.y, message.z, message.headYaw, message.yaw, message.pitch)))
            {
                return(false);
            }

            return(base.AcceptPlayerMove(message, isOnGround, isFlyingHorizontally));
        }
Example #9
0
 public Package overRedstoneBlock(McpeMovePlayer message, MiniPEPlayer player) // <- isn't working too
 {
     if (jumpManager.playsJump(player))
     {
         if (player.Level.GetBlock(new BlockCoordinates((int)player.KnownPosition.X, (int)player.KnownPosition.Y - 1, (int)player.KnownPosition.Z)).Id == 152)
         {
             jumpManager.getMatchByPlayer(player).removePlayer(player);
         }
     }
     return(message);
 }
Example #10
0
 public override void HandleMcpeMovePlayer(McpeMovePlayer message)
 {
     base.HandleMcpeMovePlayer(message);
     if (Level is xCoreLevel)
     {
         if (((xCoreLevel)Level).Game.isMove)
         {
             ((xCoreLevel)Level).Game.MovePlayer(message, this);
         }
         return;
     }
 }
Example #11
0
        public Packet HandleIncoming(McpeMovePlayer packet, Player player)
        {
            if (_playerEntities.ContainsKey(player))
            {
                var entity = _playerEntities[player];
                entity.KnownPosition = player.KnownPosition;
                var message = McpeMoveEntity.CreateObject();
                message.runtimeEntityId = entity.EntityId;
                message.position        = entity.KnownPosition;
                player.Level.RelayBroadcast(message);
            }

            return(packet);            // Process
        }
Example #12
0
        public Package HandleIncoming(McpeMovePlayer packet, Player player)
        {
            if (_playerEntities.ContainsKey(player))
            {
                var entity = _playerEntities[player];
                entity.KnownPosition = player.KnownPosition;
                var message = new McpeMoveEntity();
                message.entities = new EntityLocations();
                message.entities.Add(entity.EntityId, entity.KnownPosition);
                player.Level.RelayBroadcast(message);
            }

            return packet; // Process
        }
Example #13
0
        public Package HandleIncoming(McpeMovePlayer packet, Player player)
        {
            if (_playerEntities.ContainsKey(player))
            {
                var entity = _playerEntities[player];
                entity.KnownPosition = player.KnownPosition;
                var message = McpeMoveEntity.CreateObject();
                message.entities = new EntityLocations();
                message.entities.Add(entity.EntityId, entity.KnownPosition);
                player.Level.RelayBroadcast(message);
            }

            return(packet);            // Process
        }
Example #14
0
        public virtual void HandleMcpeMovePlayer(McpeMovePlayer message)
        {
            if (message.runtimeEntityId != Client.EntityId)
            {
                return;
            }

            Client.CurrentLocation = new PlayerLocation(message.x, message.y, message.z);

            //Client.LevelInfo.SpawnX = (int) message.x;
            //Client.LevelInfo.SpawnY = (int) message.y;
            //Client.LevelInfo.SpawnZ = (int) message.z;

            //Client.SendMcpeMovePlayer();
        }
Example #15
0
        public void SendMovePlayer()
        {
            var package = McpeMovePlayer.CreateObject();

            package.entityId = EntityId;
            package.x        = KnownPosition.X;
            package.y        = KnownPosition.Y + 1.62f;
            package.z        = KnownPosition.Z;
            package.yaw      = KnownPosition.Yaw;
            package.headYaw  = KnownPosition.HeadYaw;
            package.pitch    = KnownPosition.Pitch;
            package.teleport = 0x0;

            SendPackage(package);
        }
Example #16
0
        /// <summary>
        ///     Handles the move player.
        /// </summary>
        /// <param name="message">The message.</param>
        private void HandleMovePlayer(McpeMovePlayer message)
        {
            if (HealthManager.IsDead)
            {
                return;
            }

            if (DateTime.UtcNow.Ticks - LastUpdatedTime.Ticks < 20000)
            {
                return;
            }

            KnownPosition = new PlayerLocation
            {
                X       = message.x,
                Y       = message.y - 1.62f,
                Z       = message.z,
                Pitch   = message.pitch,
                Yaw     = message.yaw,
                HeadYaw = message.headYaw
            };

            LastUpdatedTime = DateTime.UtcNow;

            if (IsBot)
            {
                return;
            }

            //if (Level.Random.Next(0, 5) == 0)
            //{
            //	int data = 0;
            //	//data = (int) uint.Parse("FFFF0000", NumberStyles.HexNumber);
            //	data = Level.Random.Next((int) uint.Parse("FFFF0000", NumberStyles.HexNumber), (int) uint.Parse("FFFFFFFF", NumberStyles.HexNumber));

            //	Level.RelayBroadcast(new McpeLevelEvent
            //	{
            //		eventId = 0x4000 | 22,
            //		x = KnownPosition.X,
            //		//y = KnownPosition.Y - 1.62f,
            //		y = KnownPosition.Y - 1f,
            //		z = KnownPosition.Z,
            //		data = data
            //	});
            //}

            SendChunksForKnownPosition();
        }
Example #17
0
        public override void HandleMcpeMovePlayer(McpeMovePlayer message)
        {
            if (message.runtimeEntityId != Client.EntityId)
            {
                BaseClient.WorldReceiver.UpdateEntityPosition(message.runtimeEntityId,
                                                              new PlayerLocation(message.x, message.y - Player.EyeLevel, message.z, message.headYaw, message.yaw, message.pitch));
                return;
            }

            BaseClient.WorldReceiver.UpdatePlayerPosition(new
                                                          PlayerLocation(message.x, message.y, message.z));

            //BaseClient.SendMcpeMovePlayer();
            Client.CurrentLocation = new MiNET.Utils.PlayerLocation(message.x, message.y, message.z);
            BaseClient.SendMcpeMovePlayer();
        }
Example #18
0
        public void SendMcpeMovePlayer()
        {
            //var movePlayerPacket = McpeMovePlayer.AddReference();
            McpeMovePlayer movePlayerPacket = McpeMovePlayer.CreateObject();

            movePlayerPacket.entityId = 0;
            movePlayerPacket.x        = CurrentLocation.X;
            movePlayerPacket.y        = CurrentLocation.Y;
            movePlayerPacket.z        = CurrentLocation.Z;
            movePlayerPacket.yaw      = 91;
            movePlayerPacket.pitch    = 28;
            movePlayerPacket.headYaw  = 91;

            SendPackage(movePlayerPacket);

            //SendChat("Movin " + CurrentLocation);
        }
Example #19
0
        public void SendMcpeMovePlayer()
        {
            //Log.Debug($"Sending move {EntityId}: {CurrentLocation}");

            McpeMovePlayer movePlayerPacket = McpeMovePlayer.CreateObject();

            movePlayerPacket.runtimeEntityId = EntityId;
            movePlayerPacket.x       = CurrentLocation.X;
            movePlayerPacket.y       = CurrentLocation.Y;
            movePlayerPacket.z       = CurrentLocation.Z;
            movePlayerPacket.yaw     = 91;
            movePlayerPacket.pitch   = 28;
            movePlayerPacket.headYaw = 91;

            _toNodeHandler.WriteBytes(movePlayerPacket.Encode());
            movePlayerPacket.PutPool();
        }
Example #20
0
        public void SendMcpeMovePlayer()
        {
            //var movePlayerPacket = McpeMovePlayer.AddReference();
            McpeMovePlayer movePlayerPacket = new McpeMovePlayer();

            movePlayerPacket.entityId = _entityId;
            movePlayerPacket.x        = _currentLocation.X;
            movePlayerPacket.y        = _currentLocation.Y;
            movePlayerPacket.z        = _currentLocation.Z;
            movePlayerPacket.yaw      = 91;
            movePlayerPacket.pitch    = 28;
            movePlayerPacket.headYaw  = 91;

            SendPackage(movePlayerPacket);

            //SendChat("Testing");
        }
Example #21
0
 public Package inWater(McpeMovePlayer message, MiniPEPlayer player) // <- this is not called I think (maybe because of the Server creates no MiniPEPlayer Objects)
 {
     if (jumpManager.playsJump(player))
     {
         if (player.Level.GetBlock(new BlockCoordinates(player.KnownPosition)).Id == 8)
         {
             player.KnownPosition = new PlayerLocation(new Vector3(340, 10, 454));
             player.SendMovePlayer(true);
         }
         if (player.Level.GetBlock(new BlockCoordinates(player.KnownPosition)).Id == 9)
         {
             player.KnownPosition = new PlayerLocation(new Vector3(340, 10, 454));
             player.SendMovePlayer(true);
         }
     }
     return(message);
 }
Example #22
0
        public void SetPosition(PlayerLocation position, bool teleport = true)
        {
            KnownPosition   = position;
            LastUpdatedTime = DateTime.UtcNow;

            var package = McpeMovePlayer.CreateObject();

            package.runtimeEntityId = EntityId;
            package.x       = position.X;
            package.y       = position.Y + 1.62f;
            package.z       = position.Z;
            package.yaw     = position.HeadYaw;
            package.headYaw = position.Yaw;
            package.pitch   = position.Pitch;
            package.mode    = (byte)(teleport ? 1 : 0);

            Level.RelayBroadcast(package);
        }
Example #23
0
        public ChunkColumn GenerateChunkColumn(ChunkCoordinates chunkCoordinates)
        {
            var sw           = Stopwatch.StartNew();
            var playerCoords = (BlockCoordinates)chunkCoordinates;

            if (_client.Chunks.TryGetValue(chunkCoordinates, out ChunkColumn chunk))
            {
                Log.Debug($"Successful return of chunk {chunkCoordinates} from cache.");
                _client.Chunks.TryRemove(chunkCoordinates, out _);
                return(chunk);
            }

            _client.Chunks.TryAdd(chunkCoordinates, null);             // register to receive chunks.

            var movePlayerPacket = McpeMovePlayer.CreateObject();

            movePlayerPacket.runtimeEntityId = _client.EntityId;
            movePlayerPacket.x = playerCoords.X;
            movePlayerPacket.y = 255;
            movePlayerPacket.z = playerCoords.Z;
            _client.SendPacket(movePlayerPacket);

            while (sw.ElapsedMilliseconds < 2000)
            {
                _client.Chunks.TryGetValue(chunkCoordinates, out chunk);
                if (chunk != null)
                {
                    break;
                }
                Thread.Sleep(50);
            }

            if (chunk == null)
            {
                Log.Warn($"Failed to locate chunk {chunkCoordinates}. Tried {sw.ElapsedMilliseconds}ms");
            }
            else
            {
                Log.Debug($"Successful return of chunk {chunkCoordinates} in {sw.ElapsedMilliseconds}ms. Have {_client.Chunks.Count} chunks in memory now.");
            }

            return(chunk);
        }
Example #24
0
        public void McpePlayStatus_pooled_encode_perf_test()
        {
            long totalAllocatedBytes = GC.GetTotalMemory(true);
            var  watch = Stopwatch.StartNew();

            byte[] result = new byte[0];
            for (int i = 0; i < _loops; i++)
            {
                var input = McpeMovePlayer.CreateObject();
                result = input.Encode();
                input.PutPool();
            }
            if (result.Length < 0)
            {
                return;
            }
            long watchElapsedMilliseconds = watch.ElapsedMilliseconds;

            Console.WriteLine($"Time: {watchElapsedMilliseconds:N}ms, mem: {(GC.GetTotalMemory(true) - totalAllocatedBytes) / 1024f:N}KB");
        }
Example #25
0
 public void HandleMcpeMovePlayer(McpeMovePlayer message)
 {
 }
Example #26
0
 public Package PlayerMove(McpeMovePlayer package, Player player)
 {
     if (!_registerlist.Contains(player.User) || !player.User.IsAuthenticated)
     {
         player.KnownPosition = player.Level.SpawnPoint;
     }
     return package;
 }
Example #27
0
 public MiNetClient(IPEndPoint endpoint = null)
 {
     _endpoint = new IPEndPoint(IPAddress.Any, 0);
     _serverEndpoint = endpoint ?? new IPEndPoint(IPAddress.Loopback, 19132);
     _movePlayerPacket = new McpeMovePlayer();
 }
Example #28
0
		protected virtual bool AcceptPlayerMove(McpeMovePlayer message)
		{
			if (GameMode != GameMode.Creative && _isKnownCheater <= _cheatLimit)
			{
				long td = DateTime.UtcNow.Ticks - LastUpdatedTime.Ticks;
				if (HealthManager.CooldownTick == 0 && td > 49*TimeSpan.TicksPerMillisecond && td < 500*TimeSpan.TicksPerMillisecond && Level.SpawnPoint.DistanceTo(KnownPosition) > 2.0)
				{
					double horizSpeed;
					{
						// Speed in the xz plane

						Vector3 origin = new Vector3(KnownPosition.X, 0, KnownPosition.Z);
						double distanceTo = origin.DistanceTo(new Vector3(message.x, 0, message.z));
						horizSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
						//if (horizSpeed > 11.0d)
						//{
						//	_isKnownCheater = true;
						//	Level.BroadcastMessage(string.Format("{0} is spead cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), horizSpeed), type: MessageType.Raw);
						//	AddPopup(new Popup
						//	{
						//		MessageType = MessageType.Tip,
						//		Message = string.Format("{0} sprinting {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int)((double)td / TimeSpan.TicksPerMillisecond), horizSpeed),
						//		Duration = 1
						//	});

						//	LastUpdatedTime = DateTime.UtcNow;
						//	//HealthManager.TakeHit(this, 1, DamageCause.Suicide);
						//	//SendMovePlayer();
						//	return;
						//}
					}

					double verticalSpeed;
					{
						// Speed in 3d
						double speedLimit = (message.y - 1.62) - KnownPosition.Y < 0 ? -70d : 12d; //6d;
						double distanceTo = (message.y - 1.62) - KnownPosition.Y;
						verticalSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
						if (!(horizSpeed > 0) && Math.Abs(verticalSpeed) > Math.Abs(speedLimit))
						{
							if (_isKnownCheater == _cheatLimit)
							{
								Level.BroadcastMessage(string.Format("{0} is detected as flying {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed), type: MessageType.Raw);
								Log.WarnFormat("{0} is fly cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed);
							}
							//AddPopup(new Popup
							//{
							//	MessageType = MessageType.Tip,
							//	Message = string.Format("{3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int)((double)td / TimeSpan.TicksPerMillisecond), verticalSpeed),
							//	Duration = 1
							//});

							LastUpdatedTime = DateTime.UtcNow;
							//HealthManager.TakeHit(this, 1, DamageCause.Suicide);
							//SendMovePlayer();
							_isKnownCheater++;
							return false;
						}
					}

					AddPopup(new Popup
					{
						MessageType = MessageType.Tip,
						Message = string.Format("Horiz: {0:##.##}m/s Vert: {1:##.##}m/s", horizSpeed, verticalSpeed),
						Duration = 1
					});
				}
			}

			return true;
		}
Example #29
0
		protected virtual void HandleMovePlayer(McpeMovePlayer message)
		{
			if (!IsSpawned || HealthManager.IsDead) return;

			lock (_moveSyncLock)
			{
				if (_lastPlayerMoveSequenceNUmber > message.DatagramSequenceNumber)
				{
					return;
				}
				_lastPlayerMoveSequenceNUmber = message.DatagramSequenceNumber;

				if (_lastOrderingIndex > message.OrderingIndex)
				{
					return;
				}
				_lastOrderingIndex = message.OrderingIndex;
			}

			if (!AcceptPlayerMove(message)) return;

			KnownPosition = new PlayerLocation
			{
				X = message.x, Y = message.y - 1.62f, Z = message.z, Pitch = message.pitch, Yaw = message.yaw, HeadYaw = message.headYaw
			};

			LastUpdatedTime = DateTime.UtcNow;

			ThreadPool.QueueUserWorkItem(delegate(object state) { SendChunksForKnownPosition(); });
		}
Example #30
0
        /// <summary>
        ///     Handles the move player.
        /// </summary>
        /// <param name="message">The message.</param>
        private void HandleMovePlayer(McpeMovePlayer message)
        {
            if (HealthManager.IsDead) return;

            if (DateTime.UtcNow.Ticks - LastUpdatedTime.Ticks < 20000) return;

            KnownPosition = new PlayerLocation
            {
                X = message.x,
                Y = message.y - 1.62f,
                Z = message.z,
                Pitch = message.pitch,
                Yaw = message.yaw,
                HeadYaw = message.headYaw
            };

            LastUpdatedTime = DateTime.UtcNow;

            if (IsBot) return;

            //if (Level.Random.Next(0, 5) == 0)
            //{
            //	int data = 0;
            //	//data = (int) uint.Parse("FFFF0000", NumberStyles.HexNumber);
            //	data = Level.Random.Next((int) uint.Parse("FFFF0000", NumberStyles.HexNumber), (int) uint.Parse("FFFFFFFF", NumberStyles.HexNumber));

            //	Level.RelayBroadcast(new McpeLevelEvent
            //	{
            //		eventId = 0x4000 | 22,
            //		x = KnownPosition.X,
            //		//y = KnownPosition.Y - 1.62f,
            //		y = KnownPosition.Y - 1f,
            //		z = KnownPosition.Z,
            //		data = data
            //	});
            //}

            SendChunksForKnownPosition();
        }
Example #31
0
 public Package MinimalHandler(McpeMovePlayer packet, Player source)
 {
     return packet; // Handled
 }
Example #32
0
 public Package HandleSendMove(McpeMovePlayer packet, Player source)
 {
     return packet;
 }
Example #33
0
        protected virtual void BroadCastMovement(Player[] players, Entity[] entities)
        {
            if (players.Length == 0)
            {
                return;
            }

            DateTime tickTime = _lastSendTime;

            _lastSendTime = DateTime.UtcNow;
            DateTime now = DateTime.UtcNow;

            MemoryStream stream = MiNetServer.MemoryStreamManager.GetStream();

            int            count = 0;
            McpeMovePlayer move  = McpeMovePlayer.CreateObject();

            foreach (var player in players)
            {
                if (((now - player.LastUpdatedTime) <= now - tickTime))
                {
                    PlayerLocation knownPosition = player.KnownPosition;

                    move.entityId = player.EntityId;
                    move.x        = knownPosition.X;
                    move.y        = knownPosition.Y + 1.62f;
                    move.z        = knownPosition.Z;
                    move.yaw      = knownPosition.Yaw;
                    move.pitch    = knownPosition.Pitch;
                    move.headYaw  = knownPosition.HeadYaw;
                    move.mode     = 0;
                    byte[] bytes = move.Encode();
                    stream.Write(BitConverter.GetBytes(Endian.SwapInt32(bytes.Length)), 0, 4);
                    stream.Write(bytes, 0, bytes.Length);
                    move.Reset();
                    count++;
                }
            }
            move.PutPool();

            McpeMoveEntity moveEntity = McpeMoveEntity.CreateObject();

            moveEntity.entities = new EntityLocations();

            McpeSetEntityMotion entityMotion = McpeSetEntityMotion.CreateObject();

            entityMotion.entities = new EntityMotions();

            foreach (var entity in entities)
            {
                if (((now - entity.LastUpdatedTime) <= now - tickTime))
                {
                    moveEntity.entities.Add(entity.EntityId, entity.KnownPosition);
                    entityMotion.entities.Add(entity.EntityId, entity.Velocity);
                    count++;
                }
            }

            if (moveEntity.entities.Count > 0)
            {
                byte[] bytes = moveEntity.Encode();
                stream.Write(BitConverter.GetBytes(Endian.SwapInt32(bytes.Length)), 0, 4);
                stream.Write(bytes, 0, bytes.Length);
            }
            moveEntity.PutPool();

            if (moveEntity.entities.Count > 0)
            {
                byte[] bytes = entityMotion.Encode();
                stream.Write(BitConverter.GetBytes(Endian.SwapInt32(bytes.Length)), 0, 4);
                stream.Write(bytes, 0, bytes.Length);
            }
            entityMotion.PutPool();

            if (count == 0)
            {
                return;
            }

            McpeBatch batch = McpeBatch.CreateObject(players.Length);

            byte[] buffer = Player.CompressBytes(stream.ToArray(), CompressionLevel.Optimal);
            batch.payloadSize = buffer.Length;
            batch.payload     = buffer;
            batch.Encode(true);

            foreach (var player in players)
            {
                Task sendTask = new Task(obj => ((Player)obj).SendMoveList(batch, now), player);
                sendTask.Start();
            }
        }
Example #34
0
 public Package HandlePacketTest(McpeMovePlayer packet, Player source)
 {
     Log.DebugFormat("Player (x,y,z): {0},{1},{2}", packet.x, packet.y, packet.z);
     return packet; // Handled
 }
Example #35
0
        /// <summary>
        ///     Handles the specified package.
        /// </summary>
        /// <param name="message">The package.</param>
        /// <param name="senderEndpoint">The sender's endpoint.</param>
        private void HandlePackage(Package message, IPEndPoint senderEndpoint)
        {
            if (typeof(McpeBatch) == message.GetType())
            {
                McpeBatch batch = (McpeBatch)message;

                var messages = new List <Package>();

                // Get bytes
                byte[] payload = batch.payload;
                // Decompress bytes

                MemoryStream stream = new MemoryStream(payload);
                if (stream.ReadByte() != 0x78)
                {
                    throw new InvalidDataException("Incorrect ZLib header. Expected 0x78 0x9C");
                }
                stream.ReadByte();
                using (var defStream2 = new DeflateStream(stream, CompressionMode.Decompress, false))
                {
                    // Get actual package out of bytes
                    MemoryStream destination = new MemoryStream();
                    defStream2.CopyTo(destination);
                    byte[] internalBuffer = destination.ToArray();
                    messages.Add(PackageFactory.CreatePackage(internalBuffer[0], internalBuffer) ?? new UnknownPackage(internalBuffer[0], internalBuffer));
                }
                foreach (var msg in messages)
                {
                    HandlePackage(msg, senderEndpoint);
                }
                return;
            }

            TraceReceive(message);

            if (typeof(UnknownPackage) == message.GetType())
            {
                return;
            }

            if (typeof(McpeDisconnect) == message.GetType())
            {
                McpeDisconnect msg = (McpeDisconnect)message;
                Log.Debug(msg.message);
                StopServer();
                return;
            }

            if (typeof(ConnectedPing) == message.GetType())
            {
                ConnectedPing msg = (ConnectedPing)message;
                SendConnectedPong(msg.sendpingtime);
                return;
            }

            if (typeof(McpeFullChunkData) == message.GetType())
            {
                McpeFullChunkData msg   = (McpeFullChunkData)message;
                ChunkColumn       chunk = ClientUtils.DecocedChunkColumn(msg.chunkData);
                if (chunk != null)
                {
                    Log.DebugFormat("Chunk X={0}", chunk.x);
                    Log.DebugFormat("Chunk Z={0}", chunk.z);

                    ClientUtils.SaveChunkToAnvil(chunk);
                }
                return;
            }

            if (typeof(ConnectionRequestAccepted) == message.GetType())
            {
                Thread.Sleep(50);
                SendNewIncomingConnection();
                var t1 = new Timer(state => SendConnectedPing(), null, 2000, 5000);
                Thread.Sleep(50);
                SendLogin("Client12");
                return;
            }

            if (typeof(McpeSetSpawnPosition) == message.GetType())
            {
                McpeSetSpawnPosition msg = (McpeSetSpawnPosition)message;
                _spawn        = new Vector3(msg.x, msg.y, msg.z);
                _level.SpawnX = (int)_spawn.X;
                _level.SpawnY = (int)_spawn.Y;
                _level.SpawnZ = (int)_spawn.Z;

                return;
            }

            if (typeof(McpeStartGame) == message.GetType())
            {
                McpeStartGame msg = (McpeStartGame)message;
                _entityId        = msg.entityId;
                _spawn           = new Vector3(msg.x, msg.y, msg.z);
                _level.LevelName = "Default";
                _level.Version   = 19133;
                _level.GameType  = msg.gamemode;

                ClientUtils.SaveLevel(_level);

                return;
            }

            if (typeof(McpeTileEvent) == message.GetType())
            {
                McpeTileEvent msg = (McpeTileEvent)message;
                Log.DebugFormat("X: {0}", msg.x);
                Log.DebugFormat("Y: {0}", msg.y);
                Log.DebugFormat("Z: {0}", msg.z);
                Log.DebugFormat("Case 1: {0}", msg.case1);
                Log.DebugFormat("Case 2: {0}", msg.case2);
                return;
            }
            if (typeof(McpeAddEntity) == message.GetType())
            {
                McpeAddEntity msg = (McpeAddEntity)message;
                Log.DebugFormat("Entity ID: {0}", msg.entityId);
                Log.DebugFormat("Entity Type: {0}", msg.entityType);
                Log.DebugFormat("X: {0}", msg.x);
                Log.DebugFormat("Y: {0}", msg.y);
                Log.DebugFormat("Z: {0}", msg.z);
                Log.DebugFormat("Yaw: {0}", msg.yaw);
                Log.DebugFormat("Pitch: {0}", msg.pitch);
                Log.DebugFormat("Velocity X: {0}", msg.speedX);
                Log.DebugFormat("Velocity Y: {0}", msg.speedY);
                Log.DebugFormat("Velocity Z: {0}", msg.speedZ);
                Log.DebugFormat("Metadata: {0}", msg.metadata.ToString());
                Log.DebugFormat("Links count: {0}", msg.links);

                return;
            }
            if (typeof(McpeSetEntityData) == message.GetType())
            {
                McpeSetEntityData msg = (McpeSetEntityData)message;
                Log.DebugFormat("Entity ID: {0}", msg.entityId);
                MetadataDictionary metadata = msg.metadata;
                Log.DebugFormat("Metadata: {0}", metadata.ToString());
                return;
            }

            if (typeof(McpeMovePlayer) == message.GetType())
            {
                McpeMovePlayer msg = (McpeMovePlayer)message;
                Log.DebugFormat("Entity ID: {0}", msg.entityId);

                _currentLocation = new PlayerLocation(msg.x, msg.y + 10, msg.z);
                SendMcpeMovePlayer();
                return;
            }

            if (typeof(McpeUpdateBlock) == message.GetType())
            {
                McpeUpdateBlock msg = (McpeUpdateBlock)message;
                Log.DebugFormat("No of Blocks: {0}", msg.blocks.Count);
                return;
            }

            if (typeof(McpeLevelEvent) == message.GetType())
            {
                McpeLevelEvent msg = (McpeLevelEvent)message;
                Log.DebugFormat("Event ID: {0}", msg.eventId);
                Log.DebugFormat("X: {0}", msg.x);
                Log.DebugFormat("Y: {0}", msg.y);
                Log.DebugFormat("Z: {0}", msg.z);
                Log.DebugFormat("Data: {0}", msg.data);
                return;
            }
        }
Example #36
0
 public override void HandleMcpeMovePlayer(McpeMovePlayer message)
 {
     base.HandleMcpeMovePlayer(message);
 }
Example #37
0
 public Package HandleOutgoing(McpeMovePlayer packet)
 {
     return packet; // Send
 }
Example #38
0
        public void SendMcpeMovePlayer()
        {
            //var movePlayerPacket = McpeMovePlayer.AddReference();
            McpeMovePlayer movePlayerPacket = new McpeMovePlayer();
            movePlayerPacket.entityId = _entityId;
            movePlayerPacket.x = _currentLocation.X;
            movePlayerPacket.y = _currentLocation.Y;
            movePlayerPacket.z = _currentLocation.Z;
            movePlayerPacket.yaw = 91;
            movePlayerPacket.pitch = 28;
            movePlayerPacket.headYaw = 91;

            SendPackage(movePlayerPacket);

            //SendChat("Testing");
        }
Example #39
0
 public Package HandleIncoming(McpeMovePlayer packet)
 {
     return packet; // Process
 }
Example #40
0
        public static Action <Task, PlayerLocation> DoMoveTo(MiNetClient client)
        {
            Action <Task, PlayerLocation> doMoveTo = (t, loc) =>
            {
                Vector3 originalPosition = client.CurrentLocation.ToVector3();
                Vector3 targetPosition   = loc.ToVector3();

                PlayerLocation lookAtPos = LookAt(originalPosition + new Vector3(0, 1.62f, 0), targetPosition);

                {
                    // First just rotate towards target pos
                    McpeMovePlayer movePlayerPacket = McpeMovePlayer.CreateObject();
                    movePlayerPacket.runtimeEntityId = client.EntityId;
                    movePlayerPacket.x       = client.CurrentLocation.X;
                    movePlayerPacket.y       = client.CurrentLocation.Y;
                    movePlayerPacket.z       = client.CurrentLocation.Z;
                    movePlayerPacket.yaw     = lookAtPos.Yaw;
                    movePlayerPacket.pitch   = lookAtPos.Pitch;
                    movePlayerPacket.headYaw = lookAtPos.HeadYaw;
                }
                float lenght = Math.Abs((originalPosition - targetPosition).Length());

                float stepLen = 0.5f;
                float weight;

                while (true)
                {
                    if (Math.Abs((targetPosition - client.CurrentLocation.ToVector3()).Length()) > stepLen)
                    {
                        float lenLeft = Math.Abs((client.CurrentLocation.ToVector3() - targetPosition).Length());
                        weight = Math.Abs((float)((lenLeft - stepLen) / lenght));

                        client.CurrentLocation = new PlayerLocation(Vector3.Lerp(originalPosition, targetPosition, 1 - weight));

                        McpeMovePlayer movePlayerPacket = McpeMovePlayer.CreateObject();
                        movePlayerPacket.runtimeEntityId = client.EntityId;
                        movePlayerPacket.x       = client.CurrentLocation.X;
                        movePlayerPacket.y       = client.CurrentLocation.Y;
                        movePlayerPacket.z       = client.CurrentLocation.Z;
                        movePlayerPacket.yaw     = lookAtPos.Yaw;
                        movePlayerPacket.pitch   = lookAtPos.Pitch;
                        movePlayerPacket.headYaw = lookAtPos.HeadYaw;

                        client.SendPackage(movePlayerPacket);

                        Thread.Sleep(50);
                        continue;
                    }
                    {
                        client.CurrentLocation = new PlayerLocation(targetPosition);

                        McpeMovePlayer movePlayerPacket = McpeMovePlayer.CreateObject();
                        movePlayerPacket.runtimeEntityId = client.EntityId;
                        movePlayerPacket.x       = client.CurrentLocation.X;
                        movePlayerPacket.y       = client.CurrentLocation.Y;
                        movePlayerPacket.z       = client.CurrentLocation.Z;
                        movePlayerPacket.yaw     = lookAtPos.Yaw;
                        movePlayerPacket.pitch   = lookAtPos.Pitch;
                        movePlayerPacket.headYaw = lookAtPos.HeadYaw;

                        client.SendPackage(movePlayerPacket);
                    }
                    break;
                }
            };

            return(doMoveTo);
        }
Example #41
0
        /// <summary>
        ///     Handles the move player.
        /// </summary>
        /// <param name="message">The message.</param>
        private void HandleMovePlayer(McpeMovePlayer message)
        {
            if (HealthManager.IsDead) return;

            long td = DateTime.UtcNow.Ticks - LastUpdatedTime.Ticks;
            if (GameMode == GameMode.Survival
                && HealthManager.CooldownTick == 0
                && td > 49*TimeSpan.TicksPerMillisecond
                && td < 500*TimeSpan.TicksPerMillisecond
                && Level.SpawnPoint.DistanceTo(new BlockCoordinates(KnownPosition)) > 2.0
                )
            {
                double horizSpeed;
                {
                    // Speed in the xz plane

                    Vector3 origin = new Vector3(KnownPosition.X, 0, KnownPosition.Z);
                    double distanceTo = origin.DistanceTo(new Vector3(message.x, 0, message.z));
                    horizSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
                    if (horizSpeed > 11.0d)
                    {
                        Level.BroadcastTextMessage(string.Format("{0} spead cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), horizSpeed), type: MessageType.Chat);
                        AddPopup(new Popup
                        {
                            MessageType = MessageType.Chat,
                            Message = string.Format("{0} sprinting {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), horizSpeed),
                            Duration = 1
                        });

                        LastUpdatedTime = DateTime.UtcNow;
                        HealthManager.TakeHit(this, 1, DamageCause.Suicide);
                        SendMovePlayer();
                        return;
                    }
                }

                double verticalSpeed;
                {
                    // Speed in 3d
                    double speedLimit = (message.y - 1.62) - KnownPosition.Y < 0 ? -70d : 6d;
                    double distanceTo = (message.y - 1.62) - KnownPosition.Y;
                    verticalSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
                    if (!(horizSpeed > 0) && Math.Abs(verticalSpeed) > Math.Abs(speedLimit))
                    {
                        //Level.BroadcastTextMessage(string.Format("{0} fly cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed), type: MessageType.Raw);
                        AddPopup(new Popup
                        {
                            MessageType = MessageType.Tip,
                            Message = string.Format("{3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed),
                            Duration = 1
                        });

                        LastUpdatedTime = DateTime.UtcNow;
                        HealthManager.TakeHit(this, 1, DamageCause.Suicide);
                        //SendMovePlayer();
                        return;
                    }
                }
                AddPopup(new Popup
                {
                    MessageType = MessageType.Tip,
                    Message = string.Format("Horiz: {0:##.##}m/s Vert: {1:##.##}m/s", horizSpeed, verticalSpeed),
                    Duration = 1
                });
            }

            KnownPosition = new PlayerLocation
            {
                X = message.x,
                Y = message.y - 1.62f,
                Z = message.z,
                Pitch = message.pitch,
                Yaw = message.yaw,
                HeadYaw = message.headYaw
            };
            LastUpdatedTime = DateTime.UtcNow;

            if (IsBot) return;

            //if (Level.Random.Next(0, 5) == 0)
            //{
            //	int data = 0;
            //	//data = (int) uint.Parse("FFFF0000", NumberStyles.HexNumber);
            //	data = Level.Random.Next((int) uint.Parse("FFFF0000", NumberStyles.HexNumber), (int) uint.Parse("FFFFFFFF", NumberStyles.HexNumber));

            //	Level.RelayBroadcast(new McpeLevelEvent
            //	{
            //		eventId = 0x4000 | 22,
            //		x = KnownPosition.X,
            //		//y = KnownPosition.Y - 1.62f,
            //		y = KnownPosition.Y - 1f,
            //		z = KnownPosition.Z,
            //		data = data
            //	});
            //}

            SendChunksForKnownPosition();
        }
Example #42
0
        protected virtual void BroadCastMovement(Player[] players, Entity[] entities)
        {
            DateTime now = DateTime.UtcNow;

            if (players.Length == 0)
            {
                return;
            }

            if (players.Length <= 1 && entities.Length == 0)
            {
                return;
            }

            if (now - _lastBroadcast < TimeSpan.FromMilliseconds(50))
            {
                return;
            }

            DateTime tickTime = _lastSendTime;

            _lastSendTime = DateTime.UtcNow;

            using (MemoryStream stream = MiNetServer.MemoryStreamManager.GetStream())
            {
                int playerMoveCount = 0;
                int entiyMoveCount  = 0;

                foreach (var player in players)
                {
                    if (now - player.LastUpdatedTime <= now - tickTime)
                    {
                        PlayerLocation knownPosition = player.KnownPosition;

                        McpeMovePlayer move = McpeMovePlayer.CreateObject();
                        move.entityId = player.EntityId;
                        move.x        = knownPosition.X;
                        move.y        = knownPosition.Y + 1.62f;
                        move.z        = knownPosition.Z;
                        move.yaw      = knownPosition.Yaw;
                        move.pitch    = knownPosition.Pitch;
                        move.headYaw  = knownPosition.HeadYaw;
                        move.mode     = 0;
                        byte[] bytes = move.Encode();
                        BatchUtils.WriteLength(stream, bytes.Length);
                        stream.Write(bytes, 0, bytes.Length);
                        move.PutPool();
                        playerMoveCount++;
                    }
                }

                foreach (var entity in entities)
                {
                    if (now - entity.LastUpdatedTime <= now - tickTime)
                    {
                        {
                            McpeMoveEntity moveEntity = McpeMoveEntity.CreateObject();
                            moveEntity.entityId    = entity.EntityId;
                            moveEntity.position    = (PlayerLocation)entity.KnownPosition.Clone();
                            moveEntity.position.Y += entity.PositionOffset;
                            byte[] bytes = moveEntity.Encode();
                            BatchUtils.WriteLength(stream, bytes.Length);
                            stream.Write(bytes, 0, bytes.Length);
                            moveEntity.PutPool();
                        }
                        {
                            McpeSetEntityMotion entityMotion = McpeSetEntityMotion.CreateObject();
                            entityMotion.entityId = entity.EntityId;
                            entityMotion.velocity = entity.Velocity;
                            byte[] bytes = entityMotion.Encode();
                            BatchUtils.WriteLength(stream, bytes.Length);
                            stream.Write(bytes, 0, bytes.Length);
                            entityMotion.PutPool();
                        }
                        entiyMoveCount++;
                    }
                }

                if (playerMoveCount == 0 && entiyMoveCount == 0)
                {
                    return;
                }

                if (players.Length == 1 && entiyMoveCount == 0)
                {
                    return;
                }

                McpeBatch batch = BatchUtils.CreateBatchPacket(stream.GetBuffer(), 0, (int)stream.Length, CompressionLevel.Optimal, false);
                batch.AddReferences(players.Length - 1);
                batch.Encode();
                //batch.ValidUntil = now + TimeSpan.FromMilliseconds(50);
                foreach (var player in players)
                {
                    MiNetServer.FastThreadPool.QueueUserWorkItem(() => player.SendPackage(batch));
                }
                _lastBroadcast = DateTime.UtcNow;
            }
        }
Example #43
0
        public Package Hookshot(McpeUseItem packet, Player player)
        {
            if (!(packet.face == -1 & player.Inventory.GetItemInHand().Id == 346))
            {
                return(packet);
            }
            player.Level.BroadcastMessage("test: arrow", type: MessageType.Raw); // Message typeはtip popup messageが選べる!

            const int force = 1;
            //Arrow arrow = new Arrow(player, player.Level, !(force < 1.0));
            Arrow arrow = new Arrow(player, player.Level);

            arrow.KnownPosition    = (PlayerLocation)player.KnownPosition.Clone();
            arrow.KnownPosition.Y += 1.62f;

            arrow.Velocity            = arrow.KnownPosition.GetHeadDirection() * (force * 2.0f * 1.5f);
            arrow.KnownPosition.Yaw   = (float)arrow.Velocity.GetYaw();
            arrow.KnownPosition.Pitch = (float)arrow.Velocity.GetPitch();
            arrow.BroadcastMovement   = true;
            arrow.DespawnOnImpact     = false;

            //arrow.HitEvent += testary;

            arrow.SpawnEntity();
            var setEntityLinkPk = McpeSetEntityLink.CreateObject();

            setEntityLinkPk.riderId  = 0;
            setEntityLinkPk.riddenId = arrow.EntityId;
            setEntityLinkPk.linkType = 2;

            /*    public static final byte TYPE_REMOVE = 0;
             *       public static final byte TYPE_RIDE = 1;
             *   public static final byte TYPE_PASSENGER = 2;
             */
            new Task(() => player.Level.RelayBroadcast(setEntityLinkPk)).Start();



            Level level  = player.Level;
            Mob   entity = new Mob(EntityType.Zombie, level)
            {
                KnownPosition = player.KnownPosition,
            };

            entity.SpawnEntity();
            entity.IsAngry = true;
            entity.


            Task.Run(() =>
            {
                PlayerLocation pos = null;
                while (arrow.Velocity.Length() > 0)
                {
                    pos = arrow.KnownPosition;

                    Thread.Sleep(100);
                }
                McpeMovePlayer mp = McpeMovePlayer.CreateObject();
                mp.entityId       = 0;
                mp.x       = pos.X;
                mp.y       = pos.Y;
                mp.z       = pos.Z;
                mp.pitch   = player.KnownPosition.Pitch;
                mp.headYaw = player.KnownPosition.HeadYaw;
                mp.yaw     = player.KnownPosition.Yaw;
                new Task(() => player.Level.RelayBroadcast(mp)).Start();

                /*Console.Write("done!!" + pos);
                 * Block block = BlockFactory.GetBlockById((byte)1);
                 * block.Coordinates = new BlockCoordinates((int)arrow.KnownPosition.X, (int)arrow.KnownPosition.Y - 2, (int)arrow.KnownPosition.Z);
                 * //arrow.Level.SetBlock(block);
                 *
                 * Block item = new Block(35);
                 * player.KnownPosition.Y -= 2;*/
            });
            return(packet);
        }
Example #44
0
        protected virtual void HandleMovePlayer(McpeMovePlayer message)
        {
            if (!IsSpawned || HealthManager.IsDead) return;

            lock (_moveSyncLock)
            {
                if (_lastPlayerMoveSequenceNUmber > message.DatagramSequenceNumber)
                {
                    Log.DebugFormat("Skipping move datagram {1}/{2} for player {0}", Username, _lastPlayerMoveSequenceNUmber, message.DatagramSequenceNumber);
                    return;
                }
                else
                {
                    _lastPlayerMoveSequenceNUmber = message.DatagramSequenceNumber;
                }

                if (_lastOrderingIndex > message.OrderingIndex)
                {
                    Log.DebugFormat("Skipping move ordering {1}/{2} for player {0}", Username, _lastOrderingIndex, message.OrderingIndex);
                    return;
                }
                else
                {
                    _lastOrderingIndex = message.OrderingIndex;
                }

                long td = DateTime.UtcNow.Ticks - LastUpdatedTime.Ticks;
                Vector3 origin = new Vector3(KnownPosition.X, 0, KnownPosition.Z);
                double distanceTo = origin.DistanceTo(new Vector3(message.x, 0, message.z));
                if (distanceTo/td*TimeSpan.TicksPerSecond > 25.0d)
                {
                    //SendMovePlayer();
                    return;
                }
            }

            //bool useAntiCheat = false;
            //if (useAntiCheat)
            //{
            //	long td = DateTime.UtcNow.Ticks - LastUpdatedTime.Ticks;
            //	if (GameMode == GameMode.Survival
            //		&& HealthManager.CooldownTick == 0
            //		&& td > 49*TimeSpan.TicksPerMillisecond
            //		&& td < 500*TimeSpan.TicksPerMillisecond
            //		&& Level.SpawnPoint.DistanceTo(new BlockCoordinates(KnownPosition)) > 2.0
            //		)
            //	{
            //		double horizSpeed;
            //		{
            //			// Speed in the xz plane

            //			Vector3 origin = new Vector3(KnownPosition.X, 0, KnownPosition.Z);
            //			double distanceTo = origin.DistanceTo(new Vector3(message.x, 0, message.z));
            //			horizSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
            //			if (horizSpeed > 11.0d)
            //			{
            //				//Level.BroadcastTextMessage(string.Format("{0} spead cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), horizSpeed), type: MessageType.Raw);
            //				AddPopup(new Popup
            //				{
            //					MessageType = MessageType.Tip,
            //					Message = string.Format("{0} sprinting {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), horizSpeed),
            //					Duration = 1
            //				});

            //				LastUpdatedTime = DateTime.UtcNow;
            //				HealthManager.TakeHit(this, 1, DamageCause.Suicide);
            //				SendMovePlayer();
            //				return;
            //			}
            //		}

            //		double verticalSpeed;
            //		{
            //			// Speed in 3d
            //			double speedLimit = (message.y - 1.62) - KnownPosition.Y < 0 ? -70d : 6d;
            //			double distanceTo = (message.y - 1.62) - KnownPosition.Y;
            //			verticalSpeed = distanceTo/td*TimeSpan.TicksPerSecond;
            //			if (!(horizSpeed > 0) && Math.Abs(verticalSpeed) > Math.Abs(speedLimit))
            //			{
            //				//Level.BroadcastTextMessage(string.Format("{0} fly cheating {3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed), type: MessageType.Raw);
            //				AddPopup(new Popup
            //				{
            //					MessageType = MessageType.Tip,
            //					Message = string.Format("{3:##.##}m/s {1:##.##}m {2}ms", Username, distanceTo, (int) ((double) td/TimeSpan.TicksPerMillisecond), verticalSpeed),
            //					Duration = 1
            //				});

            //				LastUpdatedTime = DateTime.UtcNow;
            //				HealthManager.TakeHit(this, 1, DamageCause.Suicide);
            //				//SendMovePlayer();
            //				return;
            //			}
            //		}
            //		AddPopup(new Popup
            //		{
            //			MessageType = MessageType.Tip,
            //			Message = string.Format("Horiz: {0:##.##}m/s Vert: {1:##.##}m/s", horizSpeed, verticalSpeed),
            //			Duration = 1
            //		});
            //	}
            //}

            KnownPosition = new PlayerLocation
            {
                X = message.x,
                Y = message.y - 1.62f,
                Z = message.z,
                Pitch = message.pitch,
                Yaw = message.yaw,
                HeadYaw = message.headYaw
            };

            LastUpdatedTime = DateTime.UtcNow;

            //if (Level.Random.Next(0, 5) == 0)
            //{
            //	int data = 0;
            //	//data = (int) uint.Parse("FFFF0000", NumberStyles.HexNumber);
            //	data = Level.Random.Next((int) uint.Parse("FFFF0000", NumberStyles.HexNumber), (int) uint.Parse("FFFFFFFF", NumberStyles.HexNumber));

            //	Level.RelayBroadcast(new McpeLevelEvent
            //	{
            //		eventId = 0x4000 | 22,
            //		x = KnownPosition.X,
            //		//y = KnownPosition.Y - 1.62f,
            //		y = KnownPosition.Y - 1f,
            //		z = KnownPosition.Z,
            //		data = data
            //	});
            //}

            ThreadPool.QueueUserWorkItem(delegate(object state) { SendChunksForKnownPosition(); });
        }
Example #45
0
 public bool MovePlayer(McpeMovePlayer package, Player player)        //готово
 {
     return(true);
 }
Example #46
0
 public void HandleMcpeMovePlayer(McpeMovePlayer message)
 {
 }
Example #47
0
        public Package HandleIncoming(McpeMovePlayer packet, Player player)
        {
            if (_playerEntities.ContainsKey(player))
            {
                var entity = _playerEntities[player];
                entity.KnownPosition = player.KnownPosition;
                var message = McpeMoveEntity.CreateObject();
                message.entityId = entity.EntityId;
                message.position = entity.KnownPosition;
                player.Level.RelayBroadcast(message);
            }

            return packet; // Process
        }