Bom, vejo muita gente utilizando arraylists de player, como o exemplo a seguir:
Mas ai eu te falo que isso pode acabar ocorrendo problemas em certos casos, além de guardar informações que podem causar um uso de memória desnecessário.
Mas porque pode causar alguns erros? Quando você coloca algum player dentro desse array, você vai estar criando indiretamente uma nova instancia do player, assim mantendo todos os dados dele salvo, caso esse jogador deslogue e você não trate esse evento, pode acabar causando uma fuga de memória pois a chunck onde esse tal player estava vai continuar carregada pois você ainda tem a instancia dele no seu array, as vezes também pode ocorrer do player entrar como OfflinePlayer, pois já vai ter uma instancia dele no server, assim quando ele for re-entrar no servidor, pode acontecer isso, assim podendo acontecer erros como perda de itens e coisas do genero (Isso não se aplica a Keys).
O melhor jeito de criar um array de player seria utilizando nas versões mais novas o UUID dele, que pode ser pego com getUniqueId(), em versões mais antigas basta criar um array de String e colocar nesse array apenas o nome do player, para pegar o jogador depois é só:
Assim evitando erros e bugs =)