Program: 80884
Project: 80884
Buggy source:
@EventHandler public void onPluginMessage(PluginMessageEvent event){
  if (event.getTag().equals(Constants.channel)) {
    event.setCancelled(true);
    if (event.getReceiver() instanceof ProxiedPlayer && event.getSender() instanceof Server) {
      try {
        ProxiedPlayer player=(ProxiedPlayer)event.getReceiver();
        Server server=(Server)event.getSender();
        ObjectInputStream in=new ObjectInputStream(new ByteArrayInputStream(event.getData()));
        String subchannel=in.readUTF();
switch (subchannel) {
case Constants.subchannelUpdateServer:
          updateData(in,getServerDataCache(server.getInfo().getName()));
        break;
case Constants.subchannelUpdatePlayer:
      updateData(in,getPlayerDataCache(player.getUniqueId()));
    break;
case Constants.subchannelPlayerHash:
  if (getPlayerDataCache(player.getUniqueId()).getMap().hashCode() != in.readInt()) {
    requestReset(player);
  }
break;
case Constants.subchannelServerHash:
if (getServerDataCache(server.getInfo().getName()).getMap().hashCode() != in.readInt()) {
requestReset(server);
}
break;
case Constants.subchannelPlaceholder:
plugin.getPlaceholderAPIHook().onPlaceholderConfirmed(in.readUTF());
break;
default :
plugin.getLogger().log(Level.SEVERE,"String_Node_Str" + server.getInfo().getName() + "String_Node_Str");
break;
}
}
 catch (StreamCorruptedException ex) {
plugin.getLogger().log(Level.WARNING,"String_Node_Str",((Server)event.getSender()).getInfo());
}
catch (IOException|ClassNotFoundException ex) {
plugin.getLogger().log(Level.SEVERE,"String_Node_Str",ex);
}
}
}
}

Fixed version (ground truth):
@EventHandler public void onPluginMessage(PluginMessageEvent event){
  if (event.getTag().equals(Constants.channel)) {
    event.setCancelled(true);
    if (event.getReceiver() instanceof ProxiedPlayer && event.getSender() instanceof Server) {
      plugin.runInMainThread(() -> {
        try {
          ProxiedPlayer player=(ProxiedPlayer)event.getReceiver();
          Server server=(Server)event.getSender();
          ObjectInputStream in=new ObjectInputStream(new ByteArrayInputStream(event.getData()));
          String subchannel=in.readUTF();
switch (subchannel) {
case Constants.subchannelUpdateServer:
            updateData(in,getServerDataCache(server.getInfo().getName()));
          break;
case Constants.subchannelUpdatePlayer:
        updateData(in,getPlayerDataCache(player.getUniqueId()));
      break;
case Constants.subchannelPlayerHash:
    if (getPlayerDataCache(player.getUniqueId()).getMap().hashCode() != in.readInt()) {
      requestReset(player);
    }
  break;
case Constants.subchannelServerHash:
if (getServerDataCache(server.getInfo().getName()).getMap().hashCode() != in.readInt()) {
  requestReset(server);
}
break;
case Constants.subchannelPlaceholder:
plugin.getPlaceholderAPIHook().onPlaceholderConfirmed(in.readUTF());
break;
default :
plugin.getLogger().log(Level.SEVERE,"String_Node_Str" + server.getInfo().getName() + "String_Node_Str");
break;
}
}
 catch (StreamCorruptedException ex) {
plugin.getLogger().log(Level.WARNING,"String_Node_Str",((Server)event.getSender()).getInfo());
}
catch (IOException|ClassNotFoundException ex) {
plugin.getLogger().log(Level.SEVERE,"String_Node_Str",ex);
}
}
);
}
}
}