如何解决从迭代器 Bukkit 1.16.5 中获取播放器
我有一个问题,今天让我很沮丧,我创建了一个插件,在点击库存时将玩家添加到数组列表中(不幸的是我这样做了,因为我不是很好),游戏只有一个并且包含 2 个玩家,我不能确定如果一个玩家退出,通过一个方法,他可以让另一个玩家获胜,我尝试了很多方法,这是最后一个(在下面的这段代码中,我尝试将一种方法,如果我远程理解它应该向玩家发送胜利消息,显然它不会,然后执行 LobbyJoin,这是一种将您带到大厅的方法):
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.
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。