diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java index eab5b3e5b..b321761f8 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhServerLevel.java @@ -413,7 +413,7 @@ public abstract class AbstractDhServerLevel extends AbstractDhLevel implements I CompletableFuture.runAsync(() -> { FullDataPayload payload = new FullDataPayload(data); - for (ServerPlayerState serverPlayerState : this.serverPlayerStateManager.getConnectedPlayers()) + for (ServerPlayerState serverPlayerState : this.serverPlayerStateManager.getReadyPlayers()) { if (serverPlayerState.getServerPlayer().getLevel() != this.serverLevelWrapper) { diff --git a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerState.java b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerState.java index c5674a763..64dd742f9 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerState.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerState.java @@ -32,6 +32,7 @@ public class ServerPlayerState implements Closeable @NotNull public final SessionConfig sessionConfig = new SessionConfig(); + public boolean isReady() { return this.sessionConfig.constrainingConfig != null; } private final ConcurrentHashMap rateLimiterSets = new ConcurrentHashMap<>(); public RateLimiterSet getRateLimiterSet(AbstractDhServerLevel level) { return this.rateLimiterSets.computeIfAbsent(level, ignored -> new RateLimiterSet()); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerStateManager.java b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerStateManager.java index a0bff6fd7..b4520d395 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerStateManager.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/server/ServerPlayerStateManager.java @@ -4,6 +4,7 @@ import com.seibel.distanthorizons.core.network.messages.AbstractNetworkMessage; import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IServerPlayerWrapper; import org.jetbrains.annotations.Nullable; +import java.util.Collection; import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; @@ -80,7 +81,8 @@ public class ServerPlayerStateManager @Nullable public ServerPlayerState getConnectedPlayer(IServerPlayerWrapper player) { return this.connectedPlayerStateByPlayerWrapper.get(player); } - public Iterable getConnectedPlayers() { return this.connectedPlayerStateByPlayerWrapper.values(); } + public Collection getConnectedPlayers() { return this.connectedPlayerStateByPlayerWrapper.values(); } + public Iterable getReadyPlayers() { return this.getConnectedPlayers().stream().filter(ServerPlayerState::isReady)::iterator; } private static class MessageQueueState