Uploaded image for project: 'Minecraft: Java Edition'
  1. Minecraft: Java Edition
  2. MC-65034

Chat and commands run via chat trim excess whitespace

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Minecraft 16w04a
    • Minecraft 14w31a, Minecraft 1.8.3, Minecraft 1.8.4, Minecraft 16w04a, Minecraft 1.9, Minecraft 1.9.1 Pre-Release 3, Minecraft 16w15b, Minecraft 1.12, Minecraft 1.12.1, Minecraft 1.12.2, Minecraft 17w47b, Minecraft 1.13.1, Minecraft 1.13.2, Minecraft 18w50a, Minecraft 1.14 Pre-Release 2, 1.14.4, 19w44a, 19w46a, 1.15 Pre-release 1, 1.15 Pre-release 6, 1.15.2, 20w08a, 1.16.3, 20w46a, 20w51a, 21w03a, 1.16.5, 21w05b, 21w06a, 21w07a, 21w08b, 1.17.1, 1.18.1, 1.18.2, 22w19a, 1.19, 1.19.1 Pre-release 4, 1.19.2, 1.19.3, 1.20.1, 1.20.2, 24w03b
    • Confirmed
    • Commands
    • Normal
    • Platform

      The bug

      If you run a command from chat multiple consecutive spaces will be collapsed to a single space.

      Reproductions steps

      1. Execute the following command in chat
        /tellraw @s "1              2"
        

        Only one space is shown between the two numbers

      Code analysis

      The following is based on decompiled version of Minecraft 1.9 using MCP 9.24 beta. All method and class names are the names used in the decompiled version.

      The reason why this is happening is because the method net.minecraft.network.NetHandlerPlayServer.processChatMessage(CPacketChatMessage) removes multiple whitespaces before testing if the entered message is a command or not. The test whether or not the message contains the section character § is probably not needed for commands neither.

      /**
       * Process chat messages (broadcast back to clients) and commands (executes)
       */
      public void processChatMessage(CPacketChatMessage packetIn)
      {
          PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.playerEntity.getServerForPlayer());
      
          if (this.playerEntity.getChatVisibility() == EntityPlayer.EnumChatVisibility.HIDDEN)
          {
              TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("chat.cannotSend", new Object[0]);
              textcomponenttranslation.getChatStyle().setColor(TextFormatting.RED);
              this.sendPacket(new SPacketChat(textcomponenttranslation));
          }
          else
          {
              this.playerEntity.markPlayerActive();
              String s = packetIn.getMessage();
              // Removed this from here
              //s = StringUtils.normalizeSpace(s);
              //
              //for (int i = 0; i < s.length(); ++i)
              //{
              //    if (!ChatAllowedCharacters.isAllowedCharacter(s.charAt(i)))
              //    {
              //        this.kickPlayerFromServer("Illegal characters in chat");
              //        return;
              //    }
              //}
      
              if (s.startsWith("/"))
              {
                  this.handleSlashCommand(s);
              }
              else
              {
                  // Added this here
                  s = StringUtils.normalizeSpace(s);
      
                  for (int i = 0; i < s.length(); ++i)
                  {
                      if (!ChatAllowedCharacters.isAllowedCharacter(s.charAt(i)))
                      {
                          this.kickPlayerFromServer("Illegal characters in chat");
                          return;
                      }
                  }
                  
                  ITextComponent itextcomponent = new TextComponentTranslation("chat.type.text", new Object[] {this.playerEntity.getDisplayName(), s});
                  this.serverController.getPlayerList().sendChatMsgImpl(itextcomponent, false);
              }
      
              this.chatSpamThresholdCount += 20;
      
              if (this.chatSpamThresholdCount > 200 && !this.serverController.getPlayerList().canSendCommands(this.playerEntity.getGameProfile()))
              {
                  this.kickPlayerFromServer("disconnect.spam");
              }
          }
      }
      

        1. command.png
          command.png
          268 kB
        2. sign.png
          sign.png
          194 kB
        3. MC-65034.mp4
          1.99 MB

            Unassigned Unassigned
            SuperMegaDuck Luke Nguyen
            Votes:
            32 Vote for this issue
            Watchers:
            21 Start watching this issue

              Created:
              Updated:
              CHK: