Program: 80842
Project: 80842
Buggy source:
public void onMessage(@Nonnull Player player,@Nonnull DataInput input) throws IOException {
  PlayerConnectionInfo connectionInfo=playerPlayerConnectionInfoMap.get(player);
  if (connectionInfo == null) {
    return;
  }
  int messageId=input.readUnsignedByte();
  if (messageId == BridgeProtocolConstants.MESSAGE_ID_INTRODUCE) {
    int proxyIdentifier=input.readInt();
    int protocolVersion=input.readInt();
    int minimumCompatibleProtocolVersion=input.readInt();
    String proxyPluginVersion=input.readUTF();
    int connectionId=proxyIdentifier + serverIdentifier;
    if (connectionId == connectionInfo.connectionIdentifier) {
      return;
    }
    if (BridgeProtocolConstants.VERSION < minimumCompatibleProtocolVersion) {
      throw new IOException("String_Node_Str" + proxyPluginVersion);
    }
    connectionInfo.connectionIdentifier=connectionId;
    connectionInfo.isConnectionValid=true;
    connectionInfo.nextIntroducePacketDelay=1;
    connectionInfo.introducePacketDelay=1;
    connectionInfo.hasReceived=false;
    connectionInfo.protocolVersion=Integer.min(BridgeProtocolConstants.VERSION,protocolVersion);
    connectionInfo.proxyIdentifier=proxyIdentifier;
    connectionInfo.playerBridgeData=new BridgeData();
    connectionInfo.serverBridgeData=serverBridgeDataMap.computeIfAbsent(proxyIdentifier,key -> new BridgeData());
    ByteArrayOutputStream byteArrayOutput=new ByteArrayOutputStream();
    DataOutput output=new DataOutputStream(byteArrayOutput);
    output.writeByte(BridgeProtocolConstants.MESSAGE_ID_ACK);
    output.writeInt(connectionId);
    output.writeInt(0);
    byte[] message=byteArrayOutput.toByteArray();
    sendMessage(player,message);
  }
 else {
    if (!connectionInfo.isConnectionValid) {
      return;
    }
    int connectionId=input.readInt();
    if (connectionId != connectionInfo.connectionIdentifier) {
      return;
    }
    connectionInfo.hasReceived=true;
    int sequenceNumber=input.readInt();
    BridgeData bridgeData;
    boolean isServerMessage;
    if ((messageId & 0x80) == 0) {
      bridgeData=connectionInfo.playerBridgeData;
      isServerMessage=false;
    }
 else {
      bridgeData=connectionInfo.serverBridgeData;
      isServerMessage=true;
    }
    if (bridgeData == null) {
      return;
    }
    messageId=messageId & 0x7f;
    if (messageId == BridgeProtocolConstants.MESSAGE_ID_ACK) {
      int confirmed=sequenceNumber - bridgeData.lastConfirmed;
      if (confirmed > bridgeData.messagesPendingConfirmation.size()) {
        return;
      }
      while (confirmed-- > 0) {
        bridgeData.lastConfirmed++;
        bridgeData.messagesPendingConfirmation.remove();
      }
    }
 else     if (messageId == BridgeProtocolConstants.MESSAGE_ID_REQUEST_DATA) {
      if (sequenceNumber > bridgeData.nextIncomingMessageId) {
        return;
      }
      ByteArrayOutputStream byteArrayOutput=new ByteArrayOutputStream();
      DataOutput output=new DataOutputStream(byteArrayOutput);
      output.writeByte(BridgeProtocolConstants.MESSAGE_ID_ACK | (isServerMessage ? 0x80 : 0x00));
      output.writeInt(connectionId);
      output.writeInt(sequenceNumber);
      byte[] message=byteArrayOutput.toByteArray();
      sendMessage(player,message);
      if (sequenceNumber < bridgeData.nextIncomingMessageId) {
        return;
      }
      bridgeData.nextIncomingMessageId++;
      int size=input.readInt();
      for (int i=0; i < size; i++) {
        DataKey<?> key=DataStreamUtils.readDataKey(input,dataKeyRegistry);
        int keyNetId=input.readInt();
        if (key != null) {
          bridgeData.addRequest(key,keyNetId);
        }
      }
      updatePlayerData(player,connectionInfo);
    }
 else {
      throw new IllegalArgumentException("String_Node_Str" + messageId);
    }
  }
}

Fixed version (ground truth):
public void onMessage(@Nonnull Player player,@Nonnull DataInput input) throws IOException {
  PlayerConnectionInfo connectionInfo=playerPlayerConnectionInfoMap.get(player);
  if (connectionInfo == null) {
    return;
  }
  int messageId=input.readUnsignedByte();
  if (messageId == BridgeProtocolConstants.MESSAGE_ID_INTRODUCE) {
    int proxyIdentifier=input.readInt();
    int protocolVersion=input.readInt();
    int minimumCompatibleProtocolVersion=input.readInt();
    String proxyPluginVersion=input.readUTF();
    int connectionId=proxyIdentifier + serverIdentifier;
    if (connectionId == connectionInfo.connectionIdentifier) {
      return;
    }
    if (BridgeProtocolConstants.VERSION < minimumCompatibleProtocolVersion) {
      throw new IOException("String_Node_Str" + proxyPluginVersion);
    }
    connectionInfo.connectionIdentifier=connectionId;
    connectionInfo.isConnectionValid=true;
    connectionInfo.nextIntroducePacketDelay=1;
    connectionInfo.introducePacketDelay=1;
    connectionInfo.hasReceived=false;
    connectionInfo.protocolVersion=Integer.min(BridgeProtocolConstants.VERSION,protocolVersion);
    connectionInfo.proxyIdentifier=proxyIdentifier;
    connectionInfo.playerBridgeData=new BridgeData();
    connectionInfo.serverBridgeData=serverBridgeDataMap.computeIfAbsent(proxyIdentifier,key -> new BridgeData());
    ByteArrayOutputStream byteArrayOutput=new ByteArrayOutputStream();
    DataOutput output=new DataOutputStream(byteArrayOutput);
    output.writeByte(BridgeProtocolConstants.MESSAGE_ID_ACK);
    output.writeInt(connectionId);
    output.writeInt(0);
    byte[] message=byteArrayOutput.toByteArray();
    sendMessage(player,message);
  }
 else {
    if (!connectionInfo.isConnectionValid) {
      return;
    }
    int connectionId=input.readInt();
    if (connectionId != connectionInfo.connectionIdentifier) {
      return;
    }
    connectionInfo.hasReceived=true;
    int sequenceNumber=input.readInt();
    BridgeData bridgeData;
    boolean isServerMessage;
    if ((messageId & 0x80) == 0) {
      bridgeData=connectionInfo.playerBridgeData;
      isServerMessage=false;
    }
 else {
      bridgeData=connectionInfo.serverBridgeData;
      isServerMessage=true;
    }
    if (bridgeData == null) {
      return;
    }
    messageId=messageId & 0x7f;
    if (messageId == BridgeProtocolConstants.MESSAGE_ID_ACK) {
      int confirmed=sequenceNumber - bridgeData.lastConfirmed;
      if (confirmed > bridgeData.messagesPendingConfirmation.size()) {
        return;
      }
      while (confirmed-- > 0) {
        bridgeData.lastConfirmed++;
        bridgeData.messagesPendingConfirmation.remove();
      }
    }
 else     if (messageId == BridgeProtocolConstants.MESSAGE_ID_REQUEST_DATA) {
      if (sequenceNumber > bridgeData.nextIncomingMessageId) {
        return;
      }
      ByteArrayOutputStream byteArrayOutput=new ByteArrayOutputStream();
      DataOutput output=new DataOutputStream(byteArrayOutput);
      output.writeByte(BridgeProtocolConstants.MESSAGE_ID_ACK | (isServerMessage ? 0x80 : 0x00));
      output.writeInt(connectionId);
      output.writeInt(sequenceNumber);
      byte[] message=byteArrayOutput.toByteArray();
      sendMessage(player,message);
      if (sequenceNumber < bridgeData.nextIncomingMessageId) {
        return;
      }
      bridgeData.nextIncomingMessageId++;
      int size=input.readInt();
      for (int i=0; i < size; i++) {
        DataKey<?> key=DataStreamUtils.readDataKey(input,dataKeyRegistry);
        int keyNetId=input.readInt();
        if (key != null) {
          bridgeData.addRequest(key,keyNetId);
        }
      }
      runAsync(() -> {
        try {
          updatePlayerData(player,connectionInfo);
        }
 catch (        IOException e) {
          e.printStackTrace();
        }
      }
);
    }
 else {
      throw new IllegalArgumentException("String_Node_Str" + messageId);
    }
  }
}