示例#1
0
  public void handleChat(Packet3Chat packet3chat) {
    String s = packet3chat.message;
    if (s.length() > 100) {
      kickPlayer("Chat message too long");
      return;
    }
    s = s.trim();
    for (int i = 0; i < s.length(); i++) {
      if (ChatAllowedCharacters.allowedCharacters.indexOf(s.charAt(i)) < 0) {
        kickPlayer("Illegal characters in chat");
        return;
      }
    }

    if (s.startsWith("/")) {
      handleSlashCommand(s);
    } else {
      s =
          (new StringBuilder())
              .append("<")
              .append(playerEntity.username)
              .append("> ")
              .append(s)
              .toString();
      logger.info(s);
      mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat(s));
    }
  }
  /** Handles all incoming connections and packets */
  public void handleNetworkListenThread() {
    for (int var1 = 0; var1 < this.connections.size(); ++var1) {
      NetServerHandler var2 = (NetServerHandler) this.connections.get(var1);

      try {
        var2.handlePackets();
      } catch (Exception var5) {
        if (var2.netManager instanceof MemoryConnection) {
          CrashReport var4 = CrashReport.makeCrashReport(var5, "Ticking memory connection");
          throw new ReportedException(var4);
        }

        this.mcServer
            .getLogAgent()
            .logWarningException(
                "Failed to handle packet for "
                    + var2.playerEntity.getEntityName()
                    + "/"
                    + var2.playerEntity.getPlayerIP()
                    + ": "
                    + var5,
                var5);
        var2.kickPlayer("Internal server error");
      }

      if (var2.connectionClosed) {
        this.connections.remove(var1--);
      }

      var2.netManager.wakeThreads();
    }
  }
示例#3
0
 public void registerPacket(Packet packet) {
   logger.warning(
       (new StringBuilder())
           .append(getClass())
           .append(" wasn't prepared to deal with a ")
           .append(packet.getClass())
           .toString());
   kickPlayer("Protocol error, unexpected packet");
 }
示例#4
0
 public void handleFlying(Packet10Flying packet10flying) {
   WorldServer worldserver = mcServer.getWorldManager(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.configManager.func_613_b(playerEntity);
       lastPosX = playerEntity.posX;
       lastPosY = playerEntity.posY;
       lastPosZ = playerEntity.posZ;
       worldserver.updateEntity(playerEntity);
       return;
     }
     if (playerEntity.func_22057_E()) {
       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.func_22057_E()
           && (d10 > 1.6499999999999999D || d10 < 0.10000000000000001D)) {
         kickPlayer("Illegal stance");
         logger.warning(
             (new StringBuilder())
                 .append(playerEntity.username)
                 .append(" had an illegal stance: ")
                 .append(d10)
                 .toString());
         return;
       }
       if (Math.abs(packet10flying.xPosition) > 32000000D
           || 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 StringBuilder())
               .append(playerEntity.username)
               .append(" moved too quickly!")
               .toString());
       kickPlayer("You moved too quickly :( (Hacking?)");
       return;
     }
     float f4 = 0.0625F;
     boolean flag =
         worldserver
                 .getCollidingBoundingBoxes(
                     playerEntity, playerEntity.boundingBox.copy().getInsetBoundingBox(f4, f4, f4))
                 .size()
             == 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;
     boolean flag1 = false;
     if (d14 > 0.0625D && !playerEntity.func_22057_E()) {
       flag1 = true;
       logger.warning(
           (new StringBuilder())
               .append(playerEntity.username)
               .append(" moved wrongly!")
               .toString());
       System.out.println(
           (new StringBuilder())
               .append("Got position ")
               .append(d3)
               .append(", ")
               .append(d5)
               .append(", ")
               .append(d7)
               .toString());
       System.out.println(
           (new StringBuilder())
               .append("Expected ")
               .append(playerEntity.posX)
               .append(", ")
               .append(playerEntity.posY)
               .append(", ")
               .append(playerEntity.posZ)
               .toString());
     }
     playerEntity.setPositionAndRotation(d3, d5, d7, f2, f3);
     boolean flag2 =
         worldserver
                 .getCollidingBoundingBoxes(
                     playerEntity, playerEntity.boundingBox.copy().getInsetBoundingBox(f4, f4, f4))
                 .size()
             == 0;
     if (flag && (flag1 || !flag2) && !playerEntity.func_22057_E()) {
       teleportTo(lastPosX, lastPosY, lastPosZ, f2, f3);
       return;
     }
     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 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.configManager.func_613_b(playerEntity);
     playerEntity.handleFalling(playerEntity.posY - d1, packet10flying.onGround);
   }
 }