From 18689ac0df420ae9137e90f2dc87c711e426f49f Mon Sep 17 00:00:00 2001
From: lars <larslukasneuhaus@gmx.de>
Date: Sat, 23 Nov 2024 23:56:18 +0100
Subject: [PATCH] fixed score

---
 .../game/stateless/types/tetris/Tetris.java   | 22 +++++++-----
 .../minigames/score/FirstWinsScore.java       | 10 ------
 .../minigames/score/LastWinsScore.java        | 10 ------
 .../mhsl/minenet/minigames/score/NoScore.java | 10 ------
 .../minigames/score/PointsWinScore.java       | 12 ++-----
 .../mhsl/minenet/minigames/score/Score.java   | 34 +++++++++++--------
 6 files changed, 35 insertions(+), 63 deletions(-)

diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java
index d08e009..9966aa5 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java
@@ -16,9 +16,7 @@ import net.minestom.server.item.ItemStack;
 import net.minestom.server.item.Material;
 import org.jetbrains.annotations.NotNull;
 
-import java.util.Map;
-import java.util.Random;
-import java.util.WeakHashMap;
+import java.util.*;
 
 class Tetris extends StatelessGame {
     private final Map<Player, TetrisGame> tetrisGames = new WeakHashMap<>();
@@ -42,6 +40,8 @@ class Tetris extends StatelessGame {
 
         Random random = new Random();
         this.randomSeed = random.nextLong();
+
+        System.out.println("1");
     }
 
     @Override
@@ -68,21 +68,23 @@ class Tetris extends StatelessGame {
 
     @Override
     protected void onPlayerLeave(Player p) {
+        System.out.println("2");
         this.tetrisGames.get(p).sidebar.removeViewer(p);
         this.letPlayerLoose(p);
     }
 
     @Override
     protected void onPlayerMove(@NotNull PlayerMoveEvent event) {
-        event.setCancelled(true);
-
         Player player = event.getPlayer();
         Pos previousPosition = event.getPlayer().getPosition();
         Pos currentPosition = event.getNewPosition();
 
         TetrisGame tetrisGame = this.tetrisGames.get(player);
 
-        if(tetrisGame == null) return;
+        if(tetrisGame == null) {
+            event.setCancelled(true);
+            return;
+        }
         if(tetrisGame.lost) return;
         if(player.getGameMode() == GameMode.SPECTATOR) return;
 
@@ -132,11 +134,13 @@ class Tetris extends StatelessGame {
         TetrisGame tetrisGame = this.tetrisGames.get(player);
         if(tetrisGame == null) return;
         if(tetrisGame.lost && player.getGameMode() != GameMode.SPECTATOR) {
+            System.out.println("3");
             letPlayerLoose(player);
         }
     }
 
     private void letPlayerLoose(Player player) {
+        System.out.println("4");
         TetrisGame tetrisGame = this.tetrisGames.get(player);
         player.setGameMode(GameMode.SPECTATOR);
         player.setInvisible(true);
@@ -167,8 +171,10 @@ class Tetris extends StatelessGame {
                 this.hasCombat,
                 this.randomSeed
             );
-            this.tetrisGames.get(p).generate();
-            this.tetrisGames.values().forEach(tetrisGame -> tetrisGame.updateOtherTetrisGames(this.tetrisGames.values()));
+            newTetrisGame.generate();
+            List<TetrisGame> games = new ArrayList<>(this.tetrisGames.values());
+            games.add(newTetrisGame);
+            this.tetrisGames.values().forEach(tetrisGame -> tetrisGame.updateOtherTetrisGames(games));
             return newTetrisGame;
         });
 
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java
index 9595e6f..bc505dd 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java
@@ -8,21 +8,11 @@ import java.time.Duration;
 import java.util.Set;
 
 public class FirstWinsScore extends Score {
-    @Override
-    public void insertResultImplementation(Set<Player> p, int points) {
-
-    }
-
     @Override
     public void insertResultImplementation(Set<Player> p) {
         getScores().add(p);
     }
 
-    @Override
-    public void insertResult(Player p, int points) {
-
-    }
-
     @Override
     protected TranslatableMessage scoreMessage() {
         return new TitleMessage(Duration.ofMillis(1000), Duration.ofSeconds(1)).appendTranslated("score#finish");
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java
index c4a40b3..c37cb96 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java
@@ -8,21 +8,11 @@ import java.time.Duration;
 import java.util.Set;
 
 public class LastWinsScore extends Score {
-    @Override
-    public void insertResultImplementation(Set<Player> p, int points) {
-
-    }
-
     @Override
     public void insertResultImplementation(Set<Player> p) {
         getScores().addFirst(p);
     }
 
-    @Override
-    public void insertResult(Player p, int points) {
-
-    }
-
     @Override
     protected TranslatableMessage scoreMessage() {
         return new TitleMessage(Duration.ofMillis(1000), Duration.ofSeconds(1)).appendTranslated("score#death");
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java
index 232d874..91478d5 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java
@@ -10,21 +10,11 @@ public class NoScore extends Score {
     protected void checkGameEnd() {
     }
 
-    @Override
-    public void insertResultImplementation(Set<Player> p, int points) {
-
-    }
-
     @Override
     public void insertResultImplementation(Set<Player> p) {
 
     }
 
-    @Override
-    public void insertResult(Player p, int points) {
-
-    }
-
     @Override
     protected TranslatableMessage scoreMessage() {
         return null;
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/PointsWinScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/PointsWinScore.java
index 209cfe1..d9190f7 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/score/PointsWinScore.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/PointsWinScore.java
@@ -15,8 +15,8 @@ public class PointsWinScore extends Score {
     private Map<Set<Player>, Integer> scoreOrder = new HashMap<>();
 
     @Override
-    public void insertResultImplementation(Set<Player> p, int points) {
-        this.scoreOrder.put(p, points);
+    protected void insertResultImplementation(Set<Player> p, int currentPoints) {
+        this.scoreOrder.put(p, currentPoints);
         this.scoreOrder = MapUtil.sortByValue(this.scoreOrder);
         getScores().clear();
         this.scoreOrder.forEach((player, integer) -> getScores().addFirst(player));
@@ -27,14 +27,6 @@ public class PointsWinScore extends Score {
         this.insertResultImplementation(p, 0);
     }
 
-    @Override
-    public void insertResult(Player p, int points) {
-        if(hasResult(p)) return;
-        this.scoreMessage().send(p);
-        this.insertResultImplementation(Set.of(p), points);
-        this.checkGameEnd();
-    }
-
     @Override
     public void setDone() {
         if(isClosed()) return;
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/Score.java b/src/main/java/eu/mhsl/minenet/minigames/score/Score.java
index 383a9e5..dce3e92 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/score/Score.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/Score.java
@@ -8,6 +8,7 @@ import net.minestom.server.entity.Player;
 import net.minestom.server.event.instance.AddEntityToInstanceEvent;
 import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent;
 import net.minestom.server.event.player.PlayerDisconnectEvent;
+import org.apache.commons.lang3.NotImplementedException;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -22,10 +23,19 @@ public abstract class Score {
 
     public Score() {}
 
-    public Score(int ignoreLastPlayers) {
-        this.ignoreLastPlayers = ignoreLastPlayers;
+    protected abstract void insertResultImplementation(Set<Player> p);
+
+    protected void insertResultImplementation(Set<Player> p, int points) {
+        throw new NotImplementedException("This Score type is not able to process points");
     }
 
+    public void insertResult(Player p) {
+        this.insertResultProcessor(p, () -> this.insertResultImplementation(Set.of(p)));
+    }
+
+    public void insertResult(Player p, int points) {
+        this.insertResultProcessor(p, () -> this.insertResultImplementation(Set.of(p), points));
+    }
 
     public void attachListeners() {
         this.instance.eventNode()
@@ -46,21 +56,8 @@ public abstract class Score {
         }
     }
 
-    public abstract void insertResultImplementation(Set<Player> p, int points);
-
-    protected abstract void insertResultImplementation(Set<Player> p);
-
-    public abstract void insertResult(Player p, int points);
-
     protected abstract TranslatableMessage scoreMessage();
 
-    public void insertResult(Player p) {
-        if(hasResult(p)) return;
-        this.scoreMessage().send(p);
-        this.insertResultImplementation(Set.of(p));
-        this.checkGameEnd();
-    }
-
     public void insertRemainingPlayers(Set<Player> players) {
         this.insertResultImplementation(players.stream().filter(p -> !hasResult(p)).collect(Collectors.toSet()));
         setDone();
@@ -99,6 +96,13 @@ public abstract class Score {
         instance.stop();
     }
 
+    private void insertResultProcessor(Player p, Runnable callback) {
+        if(hasResult(p)) return;
+        this.scoreMessage().send(p);
+        callback.run();
+        this.checkGameEnd();
+    }
+
     public boolean isClosed() {
         return isClosed;
     }