从迭代器Bukkit 1.16.5中获取播放器



我有一个问题,今天是穿着我深深,我创建了一个插件,添加玩家到数组列表时点击库存(我这样做,不幸的是,因为我不是很好),游戏只有一个,包含2名球员,我不能确保,如果一个球员退出,通过一种方法,他可以给胜利的其他球员,我尝试了很多方法,这是最后一个(在下面的代码中,我尝试放置一个方法,如果我远程理解它应该向玩家发送一个胜利消息,显然它没有,然后执行说客加入,这是一个带你到大厅的方法):

private void makeWinSupport(Player winner, Player loser) {
if (playerInGame.contains(winner) && playerInGame.contains(loser)) {
winner.sendMessage(plugin.cc("&6(!) Hai vinto!"));
LobbyJoin(loser);
LobbyJoin(winner);
playerInGame.remove(winner);
playerInGame.remove(loser);
}
}
public void makePlayerWin(Player loser) {
Iterator<Player> i = playerInGame.iterator();
System.out.println(1);
if(i.hasNext() && i == loser) {
makeWinSupport(i.next(), loser);
} else {
makeWinSupport(playerInGame.get(0), loser);
}
@EventHandler
public void onQuit(PlayerQuitEvent e) {
e.setQuitMessage("");
Player p = e.getPlayer();
if(playerInGame.contains(p)) {
makePlayerWin(p);
}
}
}

你可以使用PlayerQuitEvent在玩家离开时将他们从插件中移除。我假设你有一个名为yourPlayerList的列表,其中存储了2个竞争玩家,但你可以修改它以容纳更多玩家。

@EventHandler
public void onPlayerLeave(PlayerQuitEvent event) {
if(yourPlayerList.remove(event.getPlayer())){//only true if the player was removed from the queue, which only happens if it was in the queue originally
Player loser=event.getPlayer();//the loser
Player winner=yourPlayerList.get(0);//the other player is still in the queue
makeWinSupport(winner,loser);
}
}

别忘了在事件管理器中注册事件。

编辑:如果你想从列表中删除玩家,并且只在只剩下一个玩家时才结束游戏,你可以这样做:

@EventHandler
public void onPlayerLeave(PlayerQuitEvent event) {
if(yourPlayerList.remove(event.getPlayer())&&yourPlayerList.size()==1){//removes the player and checks the amount of active players
Player winner=yourPlayerList.get(0);
//here you can call a method which accepts only the winning player. If you have 4 players, there is no reason to include a 'loser' player.
}
}

最新更新