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

Write variant long in PacketDataSerializer doesn't work properly

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Minecraft 15w45a
    • Minecraft 1.8
    • None
    • doesn't matter
    • Unconfirmed

      I dug into the minecraft source and found out that in the class PacketDataSerializer (Obfuscated class name: hd) the method writeVarLong (Obfuscated method name: public void b(long paramLong)) is using the same bitmask as the write variant int method (bitmask: 0xFFFFFF80) (Obfuscated method name: public void b(int paramInt)) but because a long has 64 bit in java this bitmask has to be (0xFFFFFFFFFFFFFF80l)

      current source in 1.8
        public void b(long paramLong)
        {
          for ( ; ; )
          {
            if ((paramLong & 0xFFFFFF80) == 0L)
            {
              writeByte((int)paramLong);
              return;
            }
            writeByte((int)(paramLong & 0x7F) | 0x80);
            paramLong >>>= 7;
          }
        }
      
      Solution
        public void b(long paramLong)
        {
          for ( ; ; )
          {
            if ((paramLong & 0xFFFFFFFFFFFFFF80l) == 0L)
            {
              writeByte((int)paramLong);
              return;
            }
            writeByte((int)(paramLong & 0x7F) | 0x80);
            paramLong >>>= 7;
          }
        }
      

            Unassigned Unassigned
            makeo Manuel
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: