Program: 80888
Project: 80888
Buggy source:
@Override public void onUpdate(PlayerListItem pli){
  try {
    if (pli.getItems().length == 0) {
      return;
    }
    pli=CustomTabList18.rewrite(pli);
    for (    PlayerListItem.Item i : pli.getItems()) {
synchronized (bukkitplayers) {
        String name=i.getUsername();
        if (name == null && i.getUuid() != null) {
          name=uuids.get(i.getUuid());
        }
        if (name != null) {
switch (pli.getAction()) {
case ADD_PLAYER:
            FakePlayer player=new FakePlayer(name,getPlayer().getServer() != null ? getPlayer().getServer().getInfo() : null);
          player.setPing(i.getPing());
        player.setGamemode(i.getGamemode());
      if (i.getUuid() != null && i.getProperties() != null) {
        for (        String[] strings : i.getProperties()) {
          if (strings.length == 3 && strings[0].equals("String_Node_Str")) {
            player.setSkin(new PlayerSkin(i.getUuid(),strings));
          }
        }
      }
    bukkitplayers.put(name,player);
  break;
case UPDATE_GAMEMODE:
bukkitplayers.computeIfPresent(name,(s,fakePlayer) -> {
  fakePlayer.setGamemode(i.getGamemode());
  return fakePlayer;
}
);
break;
case UPDATE_LATENCY:
bukkitplayers.computeIfPresent(name,(s,fakePlayer) -> {
fakePlayer.setPing(i.getPing());
return fakePlayer;
}
);
break;
case UPDATE_DISPLAY_NAME:
break;
case REMOVE_PLAYER:
bukkitplayers.remove(name);
break;
}
}
}
}
if (BungeeTabListPlus.getInstance().getConfigManager().getMainConfig().excludeServers.contains(getPlayer().getServer().getInfo().getName()) || isExcluded || BungeeTabListPlus.getInstance().getProtocolVersionProvider().getProtocolVersion(getPlayer()) >= 47) {
if ((pli.getAction() == PlayerListItem.Action.ADD_PLAYER) || (pli.getAction() == PlayerListItem.Action.REMOVE_PLAYER) || pli.getItems()[0].getUuid().equals(getPlayer().getUniqueId())) {
player.unsafe().sendPacket(pli);
for (PlayerListItem.Item item : pli.getItems()) {
if (item.getUuid() != null) {
requiresUpdate.add(item.getUuid());
}
}
BungeeTabListPlus.getInstance().updateTabListForPlayer(player);
}
synchronized (usernames) {
for (PlayerListItem.Item item : pli.getItems()) {
if (pli.getAction() == PlayerListItem.Action.ADD_PLAYER) {
if (item.getUuid() != null) {
uuids.put(item.getUuid(),item.getUsername());
}
 else {
usernames.add(item.getUsername());
}
}
 else if (pli.getAction() == PlayerListItem.Action.REMOVE_PLAYER) {
if (item.getUuid() != null) {
uuids.remove(item.getUuid());
}
 else {
usernames.remove(item.getUsername());
}
}
}
}
}
}
 catch (Throwable th) {
BungeeTabListPlus.getInstance().reportError(th);
}
}

Fixed version (ground truth):
@Override public void onUpdate(PlayerListItem pli){
  try {
    if (pli.getItems().length == 0) {
      return;
    }
    pli=CustomTabList18.rewrite(pli);
    for (    PlayerListItem.Item i : pli.getItems()) {
synchronized (bukkitplayers) {
        String name=i.getUsername();
        if (name == null && i.getUuid() != null) {
          name=uuids.get(i.getUuid());
        }
        if (name != null) {
switch (pli.getAction()) {
case ADD_PLAYER:
            FakePlayer player=new FakePlayer(name,getPlayer().getServer() != null ? getPlayer().getServer().getInfo() : null);
          player.setPing(i.getPing());
        player.setGamemode(i.getGamemode());
      if (i.getUuid() != null && i.getProperties() != null) {
        for (        String[] strings : i.getProperties()) {
          if (strings.length == 3 && strings[0].equals("String_Node_Str")) {
            player.setSkin(new PlayerSkin(i.getUuid(),strings));
          }
        }
      }
    bukkitplayers.put(name,player);
  break;
case UPDATE_GAMEMODE:
bukkitplayers.computeIfPresent(name,(s,fakePlayer) -> {
  fakePlayer.setGamemode(i.getGamemode());
  return fakePlayer;
}
);
break;
case UPDATE_LATENCY:
bukkitplayers.computeIfPresent(name,(s,fakePlayer) -> {
fakePlayer.setPing(i.getPing());
return fakePlayer;
}
);
break;
case UPDATE_DISPLAY_NAME:
break;
case REMOVE_PLAYER:
bukkitplayers.remove(name);
break;
}
}
}
}
if (BungeeTabListPlus.getInstance().getConfigManager().getMainConfig().excludeServers.contains(getPlayer().getServer().getInfo().getName()) || isExcluded || BungeeTabListPlus.getInstance().getProtocolVersionProvider().getProtocolVersion(getPlayer()) >= 47) {
if ((pli.getAction() == PlayerListItem.Action.ADD_PLAYER) || (pli.getAction() == PlayerListItem.Action.REMOVE_PLAYER) || pli.getItems()[0].getUuid().equals(getPlayer().getUniqueId())) {
if ((pli.getAction() == PlayerListItem.Action.ADD_PLAYER) || (pli.getAction() == PlayerListItem.Action.UPDATE_GAMEMODE)) {
for (PlayerListItem.Item item : pli.getItems()) {
if (item.getGamemode() == 3 && !item.getUuid().equals(getPlayer().getUniqueId())) {
item.setGamemode(0);
}
}
}
player.unsafe().sendPacket(pli);
for (PlayerListItem.Item item : pli.getItems()) {
if (item.getUuid() != null) {
requiresUpdate.add(item.getUuid());
}
}
BungeeTabListPlus.getInstance().updateTabListForPlayer(player);
}
synchronized (usernames) {
for (PlayerListItem.Item item : pli.getItems()) {
if (pli.getAction() == PlayerListItem.Action.ADD_PLAYER) {
if (item.getUuid() != null) {
uuids.put(item.getUuid(),item.getUsername());
}
 else {
usernames.add(item.getUsername());
}
}
 else if (pli.getAction() == PlayerListItem.Action.REMOVE_PLAYER) {
if (item.getUuid() != null) {
uuids.remove(item.getUuid());
}
 else {
usernames.remove(item.getUsername());
}
}
}
}
}
}
 catch (Throwable th) {
BungeeTabListPlus.getInstance().reportError(th);
}
}