Ejemplo n.º 1
0
 public override void HandleFlying(net.minecraft.src.Packet10Flying packet10flying
                                   )
 {
     net.minecraft.src.WorldServer worldserver = mcServer.GetWorldServer(playerEntity
                                                                         .dimension);
     field_22003_h = true;
     if (!hasMoved)
     {
         double d = packet10flying.yPosition - lastPosY;
         if (packet10flying.xPosition == lastPosX && d * d < 0.01D && packet10flying.zPosition
             == lastPosZ)
         {
             hasMoved = true;
         }
     }
     if (hasMoved)
     {
         if (playerEntity.ridingEntity != null)
         {
             float f  = playerEntity.rotationYaw;
             float f1 = playerEntity.rotationPitch;
             playerEntity.ridingEntity.UpdateRiderPosition();
             double d2 = playerEntity.posX;
             double d4 = playerEntity.posY;
             double d6 = playerEntity.posZ;
             double d8 = 0.0D;
             double d9 = 0.0D;
             if (packet10flying.rotating)
             {
                 f  = packet10flying.yaw;
                 f1 = packet10flying.pitch;
             }
             if (packet10flying.moving && packet10flying.yPosition == -999D && packet10flying.
                 stance == -999D)
             {
                 d8 = packet10flying.xPosition;
                 d9 = packet10flying.zPosition;
             }
             playerEntity.onGround = packet10flying.onGround;
             playerEntity.OnUpdateEntity(true);
             playerEntity.MoveEntity(d8, 0.0D, d9);
             playerEntity.SetPositionAndRotation(d2, d4, d6, f, f1);
             playerEntity.motionX = d8;
             playerEntity.motionZ = d9;
             if (playerEntity.ridingEntity != null)
             {
                 worldserver.Func_12017_b(playerEntity.ridingEntity, true);
             }
             if (playerEntity.ridingEntity != null)
             {
                 playerEntity.ridingEntity.UpdateRiderPosition();
             }
             mcServer.serverConfigurationManager.Func_613_b(playerEntity);
             lastPosX = playerEntity.posX;
             lastPosY = playerEntity.posY;
             lastPosZ = playerEntity.posZ;
             worldserver.UpdateEntity(playerEntity);
             return;
         }
         if (playerEntity.IsSleeping())
         {
             playerEntity.OnUpdateEntity(true);
             playerEntity.SetPositionAndRotation(lastPosX, lastPosY, lastPosZ, playerEntity.rotationYaw
                                                 , playerEntity.rotationPitch);
             worldserver.UpdateEntity(playerEntity);
             return;
         }
         double d1 = playerEntity.posY;
         lastPosX = playerEntity.posX;
         lastPosY = playerEntity.posY;
         lastPosZ = playerEntity.posZ;
         double d3 = playerEntity.posX;
         double d5 = playerEntity.posY;
         double d7 = playerEntity.posZ;
         float  f2 = playerEntity.rotationYaw;
         float  f3 = playerEntity.rotationPitch;
         if (packet10flying.moving && packet10flying.yPosition == -999D && packet10flying.
             stance == -999D)
         {
             packet10flying.moving = false;
         }
         if (packet10flying.moving)
         {
             d3 = packet10flying.xPosition;
             d5 = packet10flying.yPosition;
             d7 = packet10flying.zPosition;
             double d10 = packet10flying.stance - packet10flying.yPosition;
             if (!playerEntity.IsSleeping() && (d10 > 1.6499999999999999D || d10 < 0.10000000000000001D
                                                ))
             {
                 KickPlayer("Illegal stance");
                 logger.Warning((new java.lang.StringBuilder()).Append(playerEntity.username).Append
                                    (" had an illegal stance: ").Append(d10).ToString());
                 return;
             }
             if (System.Math.Abs(packet10flying.xPosition) > 32000000D || System.Math.Abs(packet10flying
                                                                                          .zPosition) > 32000000D)
             {
                 KickPlayer("Illegal position");
                 return;
             }
         }
         if (packet10flying.rotating)
         {
             f2 = packet10flying.yaw;
             f3 = packet10flying.pitch;
         }
         playerEntity.OnUpdateEntity(true);
         playerEntity.ySize = 0.0F;
         playerEntity.SetPositionAndRotation(lastPosX, lastPosY, lastPosZ, f2, f3);
         if (!hasMoved)
         {
             return;
         }
         double d11 = d3 - playerEntity.posX;
         double d12 = d5 - playerEntity.posY;
         double d13 = d7 - playerEntity.posZ;
         double d14 = d11 * d11 + d12 * d12 + d13 * d13;
         if (d14 > 100D)
         {
             logger.Warning((new java.lang.StringBuilder()).Append(playerEntity.username).Append
                                (" moved too quickly!").ToString());
             KickPlayer("You moved too quickly :( (Hacking?)");
             return;
         }
         float f4   = 0.0625F;
         bool  flag = worldserver.GetCollidingBoundingBoxes(playerEntity, playerEntity.boundingBox
                                                            .Copy().GetInsetBoundingBox(f4, f4, f4)).Count == 0;
         playerEntity.MoveEntity(d11, d12, d13);
         d11 = d3 - playerEntity.posX;
         d12 = d5 - playerEntity.posY;
         if (d12 > -0.5D || d12 < 0.5D)
         {
             d12 = 0.0D;
         }
         d13 = d7 - playerEntity.posZ;
         d14 = d11 * d11 + d12 * d12 + d13 * d13;
         bool flag1 = false;
         if (d14 > 0.0625D && !playerEntity.IsSleeping())
         {
             flag1 = true;
             logger.Warning((new java.lang.StringBuilder()).Append(playerEntity.username).Append
                                (" moved wrongly!").ToString());
             System.Console.Out.WriteLine((new java.lang.StringBuilder()).Append("Got position "
                                                                                 ).Append(d3).Append(", ").Append(d5).Append(", ").Append(d7).ToString());
             System.Console.Out.WriteLine((new java.lang.StringBuilder()).Append("Expected ").
                                          Append(playerEntity.posX).Append(", ").Append(playerEntity.posY).Append(", ").Append
                                              (playerEntity.posZ).ToString());
         }
         playerEntity.SetPositionAndRotation(d3, d5, d7, f2, f3);
         bool flag2 = worldserver.GetCollidingBoundingBoxes(playerEntity, playerEntity.boundingBox
                                                            .Copy().GetInsetBoundingBox(f4, f4, f4)).Count == 0;
         if (flag && (flag1 || !flag2) && !playerEntity.IsSleeping())
         {
             TeleportTo(lastPosX, lastPosY, lastPosZ, f2, f3);
             return;
         }
         net.minecraft.src.AxisAlignedBB axisalignedbb = playerEntity.boundingBox.Copy().Expand
                                                             (f4, f4, f4).AddCoord(0.0D, -0.55000000000000004D, 0.0D);
         if (!mcServer.allowFlight && !worldserver.Func_27069_b(axisalignedbb))
         {
             if (d12 >= -0.03125D)
             {
                 playerInAirTime++;
                 if (playerInAirTime > 80)
                 {
                     logger.Warning((new java.lang.StringBuilder()).Append(playerEntity.username).Append
                                        (" was kicked for floating too long!").ToString());
                     KickPlayer("Flying is not enabled on this server");
                     return;
                 }
             }
         }
         else
         {
             playerInAirTime = 0;
         }
         playerEntity.onGround = packet10flying.onGround;
         mcServer.serverConfigurationManager.Func_613_b(playerEntity);
         playerEntity.HandleFalling(playerEntity.posY - d1, packet10flying.onGround);
     }
 }