From 4b82b81d63ae778934404ef5093a7aaf36f7bc97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 1 Oct 2023 20:54:48 +0200 Subject: [PATCH] Refactored score system --- .../compileJava/previous-compilation-data.bin | Bin 64004 -> 0 bytes .../stateless/types/deathcube/Deathcube.java | 2 +- .../game/stateless/types/minerun/Minerun.java | 11 ++- .../game/stateless/types/spleef/Spleef.java | 5 +- .../minigames/score/FirstWinsScore.java | 40 ++------- .../minigames/score/LastWinsScore.java | 41 ++------- .../mhsl/minenet/minigames/score/NoScore.java | 9 +- .../mhsl/minenet/minigames/score/Score.java | 82 ++++++++++++++++-- 8 files changed, 102 insertions(+), 88 deletions(-) delete mode 100644 build/tmp/compileJava/previous-compilation-data.bin diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin deleted file mode 100644 index 98411aa7f38cb904697710f06f115543711f93e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64004 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 gG29QS4??kXA&7w<{Io$sQDz{uTlaaLZUBY<4 diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java index f67f0d1..f8710e3 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java @@ -61,7 +61,7 @@ class Deathcube extends StatelessGame { protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { super.onPlayerMove(playerMoveEvent); if(isBeforeBeginning) if(playerMoveEvent.getNewPosition().y() > 51.5) playerMoveEvent.setCancelled(true); - if(playerMoveEvent.getNewPosition().y() > height) getScore().addResult(playerMoveEvent.getPlayer()); + if(playerMoveEvent.getNewPosition().y() > height) getScore().insertResult(playerMoveEvent.getPlayer()); } @Override diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java index 9e28a7a..e7da287 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java @@ -94,14 +94,13 @@ class Minerun extends StatelessGame { new ActionBarMessage().appendStatic(Component.text("Please stay in line!", NamedTextColor.RED)).send(p); } - if(!isRunning && middle.z() > preRun+0.5) { //player cannot go forward before game start + if(!isRunning && middle.z() > preRun+0.5) { //player cannot go forward before the game start playerMoveEvent.setCancelled(true); } - if(middle.z() < preRun + length + afterMines) { // player cannot go back -// playerMoveEvent.setCancelled(true); -// new ActionBarMessage().appendStatic(Component.text("You cannot go back on the Field!", NamedTextColor.RED)).send(p); - return; + if(middle.z() < preRun + length + afterMines && getScore().hasResult(p)) { // player cannot go back after winning + playerMoveEvent.setCancelled(true); + new ActionBarMessage().appendStatic(Component.text("You cannot go back on the Field!", NamedTextColor.RED)).send(p); } if(Intersect.withPressurePlate(this, BlockPallet.PRESSURE_PLATES, middle)) { //Player died @@ -111,7 +110,7 @@ class Minerun extends StatelessGame { } if(middle.z() > preRun + length + afterMines) { // Player finished - getScore().addResult(p); + getScore().insertResult(p); } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java index 7078a9e..456388c 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java @@ -26,7 +26,8 @@ public class Spleef extends StatelessGame { final int totalElevation = 50; public Spleef(int radius, int stackCount) { - super(Dimension.OVERWORLD.DIMENSION, "Spleef", new LastWinsScore(1)); + super(Dimension.OVERWORLD.DIMENSION, "Spleef", new LastWinsScore()); + getScore().setIgnoreLastPlayers(1); this.radius = radius; this.stackCount = stackCount; @@ -78,7 +79,7 @@ public class Spleef extends StatelessGame { if(playerMoveEvent.getNewPosition().y() < totalElevation) { playerMoveEvent.getPlayer().setGameMode(GameMode.SPECTATOR); playerMoveEvent.getPlayer().getInventory().clear(); - getScore().addResult(playerMoveEvent.getPlayer()); + getScore().insertResult(playerMoveEvent.getPlayer()); } } 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 af542be..bc505dd 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java +++ b/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java @@ -1,46 +1,20 @@ package eu.mhsl.minenet.minigames.score; +import eu.mhsl.minenet.minigames.message.TranslatableMessage; import eu.mhsl.minenet.minigames.message.type.TitleMessage; import net.minestom.server.entity.Player; import java.time.Duration; -import java.util.ArrayList; -import java.util.List; +import java.util.Set; public class FirstWinsScore extends Score { - private List scores = new ArrayList<>(); - private int ignoreLastPlayers = 0; - - - public FirstWinsScore() {} - - public FirstWinsScore(int ignoreLastPlayers) { - this.ignoreLastPlayers = ignoreLastPlayers; - } - - public void setIgnoreLastPlayers(int ignoreLastPlayers) { - this.ignoreLastPlayers = ignoreLastPlayers; + @Override + public void insertResultImplementation(Set p) { + getScores().add(p); } @Override - protected void checkGameEnd() { - if(this.isDone()) return; - if(instance.getPlayers().isEmpty()) return; - if(scores.size() >= instance.getPlayers().size() - ignoreLastPlayers) setDone(); - } - - @Override - public void addResult(Player p) { - if(scores.contains(p)) return; - scores.add(p); - - new TitleMessage(Duration.ofMillis(1000), Duration.ofSeconds(1)).appendTranslated("score#finish").send(p); - - this.checkGameEnd(); - } - - @Override - protected List getResults() { - return scores.stream().map(Player::getUsername).toList(); + 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 dc05cf5..c2bae16 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java +++ b/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java @@ -1,47 +1,20 @@ package eu.mhsl.minenet.minigames.score; +import eu.mhsl.minenet.minigames.message.TranslatableMessage; import eu.mhsl.minenet.minigames.message.type.TitleMessage; import net.minestom.server.entity.Player; import java.time.Duration; -import java.util.ArrayList; -import java.util.List; +import java.util.Set; public class LastWinsScore extends Score { - private List scores = new ArrayList<>(); - private int ignoreLastPlayers = 0; - - public LastWinsScore() {} - - public LastWinsScore(int ignoreLastPlayers) { - this.ignoreLastPlayers = ignoreLastPlayers; + @Override + public void insertResultImplementation(Set p) { + getScores().add(0, p); } @Override - protected void checkGameEnd() { - if(this.isDone()) return; - if(!instance.isRunning()) return; - if(instance.getPlayers().isEmpty()) return; - if(scores.size() >= instance.getPlayers().size() - ignoreLastPlayers) { - if(ignoreLastPlayers > 0) { - instance.getPlayers().stream().filter(player -> !scores.contains(player)).forEach(this::addResult); - } - setDone(); - } - } - - @Override - public void addResult(Player p) { - if(scores.contains(p)) return; - scores.add(0, p); - - new TitleMessage(Duration.ofMillis(1000), Duration.ofSeconds(1)).appendTranslated("score#death").send(p); - - this.checkGameEnd(); - } - - @Override - protected List getResults() { - return scores.stream().map(Player::getUsername).toList(); + 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 84cb2d3..91478d5 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java +++ b/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java @@ -1,8 +1,9 @@ package eu.mhsl.minenet.minigames.score; +import eu.mhsl.minenet.minigames.message.TranslatableMessage; import net.minestom.server.entity.Player; -import java.util.List; +import java.util.Set; public class NoScore extends Score { @Override @@ -10,12 +11,14 @@ public class NoScore extends Score { } @Override - public void addResult(Player p) { + public void insertResultImplementation(Set p) { } @Override - protected List getResults() { + protected TranslatableMessage scoreMessage() { return null; } + + } 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 225fc29..7ad4c15 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/score/Score.java +++ b/src/main/java/eu/mhsl/minenet/minigames/score/Score.java @@ -2,17 +2,30 @@ package eu.mhsl.minenet.minigames.score; import eu.mhsl.minenet.minigames.instance.game.Game; import eu.mhsl.minenet.minigames.message.Icon; +import eu.mhsl.minenet.minigames.message.TranslatableMessage; import eu.mhsl.minenet.minigames.message.type.ChatMessage; 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 java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; public abstract class Score { - private boolean isDone = false; + private int ignoreLastPlayers = 0; + private boolean isClosed = false; protected Game instance; + private List> scores = new ArrayList<>(); + + public Score() {} + + public Score(int ignoreLastPlayers) { + this.ignoreLastPlayers = ignoreLastPlayers; + } + public void attachListeners() { this.instance.eventNode() @@ -21,22 +34,57 @@ public abstract class Score { .addListener(PlayerDisconnectEvent.class, addEntityToInstanceEvent -> checkGameEnd()); } - abstract protected void checkGameEnd(); - public abstract void addResult(Player p); - abstract protected List getResults(); + protected void checkGameEnd() { + if(this.isClosed()) return; + if(!instance.isRunning()) return; + if(instance.getPlayers().isEmpty()) return; + if(resultCount() >= instance.getPlayers().size() - ignoreLastPlayers) { + if(ignoreLastPlayers > 0) { + insertRemainingPlayers(instance.getPlayers().stream().filter(player -> !hasResult(player)).collect(Collectors.toSet())); + } + setDone(); + } + } + protected abstract void insertResultImplementation(Set p); + protected abstract TranslatableMessage scoreMessage(); - public boolean isDone() { - return isDone; + public void insertResult(Player p) { + if(hasResult(p)) return; + this.scoreMessage().send(p); + this.insertResultImplementation(Set.of(p)); + this.checkGameEnd(); + } + + private void insertRemainingPlayers(Set p) { + if(p.stream().anyMatch(this::hasResult)) return; + this.insertResultImplementation((p)); + } + + public boolean hasResult(Player p) { + return this.getScores().stream().anyMatch(players -> players.contains(p)); + } + + public int resultCount() { + return this.getScores().stream().map(Set::size).reduce(Integer::sum).orElse(0); } public void setDone() { - if(isDone) return; - isDone = true; + if(isClosed) return; + isClosed = true; new ChatMessage(Icon.STAR, true) .appendTranslated("score#result") .newLine() .indent() - .numberedList(getResults()) + .numberedList( + getScores() + .stream() + .map(players -> players + .stream() + .map(Player::getUsername) + .collect(Collectors.joining(", ")) + ) + .toList() + ) .undent() .newLine() .appendTranslated("score#thanks") @@ -45,11 +93,27 @@ public abstract class Score { instance.stop(); } + public boolean isClosed() { + return isClosed; + } + protected void onGameEnd() { this.instance.stop(); } + public List> getScores() { + return scores; + } + public void setInstance(Game instance) { this.instance = instance; } + + public int getIgnoreLastPlayers() { + return ignoreLastPlayers; + } + + public void setIgnoreLastPlayers(int ignoreLastPlayers) { + this.ignoreLastPlayers = ignoreLastPlayers; + } }