在玩家身上存储自定义游戏状态数据:检查存活玩家是否均含特定Metadata
检查存活玩家是否全部拥有指定Metadata的实现方案
你需要在PlayerDeathEvent事件处理逻辑中,移除死亡玩家后,判断剩余存活玩家集合PLAYING中的所有玩家是否都带有"murder"这个Metadata,以下是可行的实现方式:
方案1:使用Java 8+ Stream API(简洁写法)
Player dead = event.getEntity().getPlayer(); PLAYING.remove(dead); SPECTATORS.add(dead); // 检查所有存活玩家是否都有"murder"元数据 boolean allAreMurder = PLAYING.stream() .allMatch(player -> player.hasMetadata("murder")); if (allAreMurder) { Bukkit.broadcastMessage("Murders have won the game!"); }
方案2:传统循环判断(兼容性更好)
如果项目使用的Java版本低于8,可以用循环遍历的方式:
Player dead = event.getEntity().getPlayer(); PLAYING.remove(dead); SPECTATORS.add(dead); boolean allAreMurder = true; for (Player player : PLAYING) { if (!player.hasMetadata("murder")) { allAreMurder = false; break; // 只要有一个不满足,直接跳出循环 } } if (allAreMurder) { Bukkit.broadcastMessage("Murders have won the game!"); }
注意事项
- 确保
PLAYING是线程安全的集合(比如CopyOnWriteArrayList),避免并发修改问题 - 调用
player.hasMetadata("murder")时,玩家对象必须是有效的(非离线状态),如果有离线玩家需要提前过滤
内容的提问来源于stack exchange,提问作者vitekform
相关产品推荐
相关产品推荐

