minecraft-src/net/minecraft/server/players/SleepStatus.java
2025-07-04 01:41:11 +03:00

50 lines
1.4 KiB
Java

package net.minecraft.server.players;
import java.util.List;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
public class SleepStatus {
private int activePlayers;
private int sleepingPlayers;
public boolean areEnoughSleeping(int requiredSleepPercentage) {
return this.sleepingPlayers >= this.sleepersNeeded(requiredSleepPercentage);
}
public boolean areEnoughDeepSleeping(int requiredSleepPercentage, List<ServerPlayer> sleepingPlayers) {
int i = (int)sleepingPlayers.stream().filter(Player::isSleepingLongEnough).count();
return i >= this.sleepersNeeded(requiredSleepPercentage);
}
public int sleepersNeeded(int requiredSleepPercentage) {
return Math.max(1, Mth.ceil(this.activePlayers * requiredSleepPercentage / 100.0F));
}
public void removeAllSleepers() {
this.sleepingPlayers = 0;
}
public int amountSleeping() {
return this.sleepingPlayers;
}
public boolean update(List<ServerPlayer> players) {
int i = this.activePlayers;
int j = this.sleepingPlayers;
this.activePlayers = 0;
this.sleepingPlayers = 0;
for (ServerPlayer serverPlayer : players) {
if (!serverPlayer.isSpectator()) {
this.activePlayers++;
if (serverPlayer.isSleeping()) {
this.sleepingPlayers++;
}
}
}
return (j > 0 || this.sleepingPlayers > 0) && (i != this.activePlayers || j != this.sleepingPlayers);
}
}