Fix: additional controls over data structures

This commit is contained in:
2026-06-10 16:23:10 +02:00
parent 709d1743d0
commit 507e4923d0
2 changed files with 19 additions and 11 deletions
@@ -704,10 +704,11 @@ public class Game implements Serializable {
private synchronized void nextPlayerSetup() {
if (GameStages.SLOT_CHOICE == currentState.getGameStage()) {
Player tempPlayer = orderLogicCard.pull();
if(disconnectedPlayers.containsKey(tempPlayer) && disconnectedPlayers.get(tempPlayer)) {
nextPlayerSetup();
return;
Player tempPlayer;
while (true) {
tempPlayer = orderLogicCard.pull();
if (tempPlayer == null) break;
if (!disconnectedPlayers.containsKey(tempPlayer) || !disconnectedPlayers.get(tempPlayer)) break;
}
if (tempPlayer != null) {
currentState.PlayerUpdate(tempPlayer, null);
@@ -1006,12 +1007,17 @@ public class Game implements Serializable {
* ordered by prestige value and, in case of a tie, by food value.
*/
public synchronized void endGameForFeit() {
Player winner=playersList.stream().filter(x->!disconnectedPlayers.containsKey(x)||!disconnectedPlayers.get(x)).toList().get(0);
Player winner = playersList.stream()
.filter(x -> !disconnectedPlayers.containsKey(x) || !disconnectedPlayers.get(x))
.findFirst().orElse(null);
if (winner == null) return;
currentState.GameStageUpdate(GameStages.ENDED);
playerStanding=new ArrayList<>(playersList);
playerStanding = new ArrayList<>(playersList);
playerStanding.remove(winner);
playerStanding.sort((y,x)->x.getPrestigeValue()==y.getPrestigeValue()?Integer.compare(x.getFoodValue(),y.getFoodValue()):Integer.compare(x.getPrestigeValue(),y.getPrestigeValue()));
playerStanding.add(0,winner);
playerStanding.sort((y, x) -> x.getPrestigeValue() == y.getPrestigeValue()
? Integer.compare(x.getFoodValue(), y.getFoodValue())
: Integer.compare(x.getPrestigeValue(), y.getPrestigeValue()));
playerStanding.add(0, winner);
}
@@ -83,8 +83,8 @@ public class ClientHandler implements Runnable {
*/
@Override
public void run() {
running = true;
try {
running = true;
while (running) {
NetworkEvent event = (NetworkEvent) in.readObject();
if (!actionQueue.add(event)) {
@@ -92,9 +92,11 @@ public class ClientHandler implements Runnable {
}
}
} catch (IOException e) {
System.err.println("Error in incoming connection/disconnection");
System.err.println("Error in incoming connection/disconnection: " + username);
} catch (ClassNotFoundException e) {
System.err.println("Class not found");
System.err.println("Class not found: " + username);
} finally {
if (running) disconnect();
}
}