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

Chat, /tellraw, and other commands trim excess whitespace

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Reopened
    • Resolution: Unresolved
    • Affects Version/s: 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
    • Fix Version/s: Minecraft 16w04a
    • Labels:
    • Confirmation Status:
      Confirmed
    • Category:
      Commands

      Description

      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");
              }
          }
      }
      

        Attachments

        1. command.png
          command.png
          268 kB
        2. sign.png
          sign.png
          194 kB

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                SuperMegaDuck Luke Nguyen
              • Votes:
                17 Vote for this issue
                Watchers:
                15 Start watching this issue

                Dates

                • Created:
                  Updated:
                  CHK: