基本的なチェックを行い、現在一連の条件を満たしているプレーヤーのリストを維持するために、毎秒 1 回更新される ArrayList があります。
これを行うための最高のパフォーマンスの方法は、2つの提案されたソリューションがあることだと思います。
public void update() {
for (Player player : Bukkit.getOnlinePlayers()) {
if (!playersOnLadder.contains(player)) {
if (checkPlayerOnLadder(player)) {
playersOnLadder.add(player);
}
} else {
if (checkPlayerOnLadder(player)) {
playersOnLadder.remove(player);
}
}
}
}
public void update() {
playersOnLadder.clear();
for (Player player : Bukkit.getOnlinePlayers()) {
if (checkPlayerOnLadder(player)) {
playersOnLadder.add(player);
}
}
}
通常、この配列リストには常に約 75 人のプレイヤーがいます。「ラダーメソッドでプレイヤーをチェック」は次のようになります。
private boolean checkPlayerOnLadder(Player player) {
int ladderAbsolute = this.getX()+this.getZ();
int playerAbsolute = (int) player.getLocation().getX()+ (int) player.getLocation().getZ();
//If the player is within 4 blocks (2 in each direction) of the ladder then return true.
if (ladderAbsolute == playerAbsolute || (ladderAbsolute-2 > playerAbsolute && ladderAbsolute+2 < playerAbsolute)) {
return true;
} else {
return false;
}
}
HashSet に変換された EDITED