diff --git a/.gradle/7.4/checksums/checksums.lock b/.gradle/7.4/checksums/checksums.lock
index 45c9f35..145d569 100644
Binary files a/.gradle/7.4/checksums/checksums.lock and b/.gradle/7.4/checksums/checksums.lock differ
diff --git a/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock b/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock
index b49701e..3e6137a 100644
Binary files a/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock and b/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock differ
diff --git a/.gradle/7.4/executionHistory/executionHistory.bin b/.gradle/7.4/executionHistory/executionHistory.bin
index 0dfa9c3..1eaa468 100644
Binary files a/.gradle/7.4/executionHistory/executionHistory.bin and b/.gradle/7.4/executionHistory/executionHistory.bin differ
diff --git a/.gradle/7.4/executionHistory/executionHistory.lock b/.gradle/7.4/executionHistory/executionHistory.lock
index a87e280..881dbb9 100644
Binary files a/.gradle/7.4/executionHistory/executionHistory.lock and b/.gradle/7.4/executionHistory/executionHistory.lock differ
diff --git a/.gradle/7.4/fileHashes/fileHashes.bin b/.gradle/7.4/fileHashes/fileHashes.bin
index 3ee621a..c8728ff 100644
Binary files a/.gradle/7.4/fileHashes/fileHashes.bin and b/.gradle/7.4/fileHashes/fileHashes.bin differ
diff --git a/.gradle/7.4/fileHashes/fileHashes.lock b/.gradle/7.4/fileHashes/fileHashes.lock
index deb4dcd..bcbb142 100644
Binary files a/.gradle/7.4/fileHashes/fileHashes.lock and b/.gradle/7.4/fileHashes/fileHashes.lock differ
diff --git a/.gradle/7.4/fileHashes/resourceHashesCache.bin b/.gradle/7.4/fileHashes/resourceHashesCache.bin
index ef5f3d7..fbf0bed 100644
Binary files a/.gradle/7.4/fileHashes/resourceHashesCache.bin and b/.gradle/7.4/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index a80a216..e8a0767 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 0852492..4903e32 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,3 @@
-
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 774f6ac..a057ca1 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -4,6 +4,8 @@
+
+
\ No newline at end of file
diff --git a/.idea/modules/Minigames.main.iml b/.idea/modules/Minigames.main.iml
index c462275..e2243fb 100644
--- a/.idea/modules/Minigames.main.iml
+++ b/.idea/modules/Minigames.main.iml
@@ -9,4 +9,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules/Minigames.test.iml b/.idea/modules/Minigames.test.iml
index c462275..e2243fb 100644
--- a/.idea/modules/Minigames.test.iml
+++ b/.idea/modules/Minigames.test.iml
@@ -9,4 +9,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules/eu.mhsl.minenet.Minigames.main.iml b/.idea/modules/eu.mhsl.minenet.Minigames.main.iml
new file mode 100644
index 0000000..c462275
--- /dev/null
+++ b/.idea/modules/eu.mhsl.minenet.Minigames.main.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ ADVENTURE
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules/eu.mhsl.minenet.Minigames.test.iml b/.idea/modules/eu.mhsl.minenet.Minigames.test.iml
new file mode 100644
index 0000000..c462275
--- /dev/null
+++ b/.idea/modules/eu.mhsl.minenet.Minigames.test.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ ADVENTURE
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index f63a750..741891b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -33,7 +33,11 @@ dependencies {
//https://jitpack.io/#Minestom/Minestom
//implementation 'com.github.Minestom:Minestom:aa621021e2'
- implementation 'com.github.Minestom.Minestom:Minestom:79ce9570ea'
+ //implementation 'com.github.Minestom.Minestom:Minestom:4f7ff5b474'
+// implementation 'com.github.Minestom.Minestom:Minestom:2cdb3911b0'
+// implementation 'com.github.Minestom:MinestomDataGenerator:ddde11056e'
+ implementation 'com.github.waxeria:Minestom:e0427a36f3'
+
//Tools
//implementation 'com.github.Articdive.JNoise:jnoise-core:4.0.0'
diff --git a/build/resources/main/lang/locales.map.csv b/build/resources/main/lang/locales.map.csv
index 90e9f3b..bc31d23 100644
--- a/build/resources/main/lang/locales.map.csv
+++ b/build/resources/main/lang/locales.map.csv
@@ -37,7 +37,8 @@ join_notFound;Lobby not found: ;Lobby konnte nicht gefunden werden:
ns:score#;;
result;Results;Ergebnisse
thanks;Thank you for Playing;Danke fürs spielen
-finish;Finish;Fertig
+finish;Yout did it;Du hast es geschafft
+death;You are out;Du hast verloren
;;
ns:restriction#;;
fail;Some requirements are not met;Bedinungen sind nicht erfüllt
@@ -83,3 +84,8 @@ description;Only go forward if the Trafficlights show green;Gehe nur bei Grün v
ns:game_Towerdefense#;;
name;Towerdefense;Towerdefense
description;Protect the path ????;??????
+;;
+ns:game_Spleef#;;
+name;Spleef;Spleef;
+description;Spleef other players and be the last survivor;Zerstöre Blöcke unter anderen Spielern und sei der letzte im Feld
+shovelName;Snow thrower;Schneeflug
\ No newline at end of file
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
index df60fe6..19befc1 100644
Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/resources/lang/locales.map.csv b/resources/lang/locales.map.csv
index 90e9f3b..bc31d23 100644
--- a/resources/lang/locales.map.csv
+++ b/resources/lang/locales.map.csv
@@ -37,7 +37,8 @@ join_notFound;Lobby not found: ;Lobby konnte nicht gefunden werden:
ns:score#;;
result;Results;Ergebnisse
thanks;Thank you for Playing;Danke fürs spielen
-finish;Finish;Fertig
+finish;Yout did it;Du hast es geschafft
+death;You are out;Du hast verloren
;;
ns:restriction#;;
fail;Some requirements are not met;Bedinungen sind nicht erfüllt
@@ -83,3 +84,8 @@ description;Only go forward if the Trafficlights show green;Gehe nur bei Grün v
ns:game_Towerdefense#;;
name;Towerdefense;Towerdefense
description;Protect the path ????;??????
+;;
+ns:game_Spleef#;;
+name;Spleef;Spleef;
+description;Spleef other players and be the last survivor;Zerstöre Blöcke unter anderen Spielern und sei der letzte im Feld
+shovelName;Snow thrower;Schneeflug
\ No newline at end of file
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java
index 9d61f3c..7ddb040 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/Game.java
@@ -101,7 +101,7 @@ public abstract class Game extends MineNetInstance implements Spawnable {
}, TaskSchedule.seconds(10), TaskSchedule.stop());
}
- protected void onLoad(CompletableFuture callback) {
+ protected void onLoad(@NotNull CompletableFuture callback) {
callback.complete(null);
}
@@ -133,7 +133,7 @@ public abstract class Game extends MineNetInstance implements Spawnable {
protected void checkAbandoned() {
scheduleNextTick((instance) -> {
- if(instance.getPlayers().size() == 0) this.unload();
+ if(instance.getPlayers().isEmpty()) this.unload();
});
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java
index d0a2afb..101db05 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/StatelessGame.java
@@ -18,14 +18,14 @@ import java.util.concurrent.CompletableFuture;
public class StatelessGame extends Game {
private final String name;
- private final Score score = new Score(this);
+ private Score score;
private int timeLimit = 0;
private int timePlayed = 0;
private final boolean preventExit = false;
- public StatelessGame(DimensionType dimensionType, String gameName) {
+ public StatelessGame(DimensionType dimensionType, String gameName, Score score) {
super(dimensionType);
-
+ this.score = score;
this.name = gameName;
}
@@ -61,6 +61,9 @@ public class StatelessGame extends Game {
@Override
protected void start() {
+ score.setInstance(this);
+ score.attachListeners();
+
countdownStart().thenRun(() -> {
super.start();
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/backrooms/Backrooms.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/backrooms/Backrooms.java
index 0499e07..18d558d 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/backrooms/Backrooms.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/backrooms/Backrooms.java
@@ -2,13 +2,19 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.backrooms;
import eu.mhsl.minenet.minigames.instance.Dimension;
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
+import eu.mhsl.minenet.minigames.score.NoScore;
+import net.minestom.server.event.player.PlayerBlockBreakEvent;
+import org.jetbrains.annotations.NotNull;
public class Backrooms extends StatelessGame {
public Backrooms() {
- super(Dimension.NETHER.DIMENSION, "Backrooms");
+ super(Dimension.NETHER.DIMENSION, "Backrooms", new NoScore());
BackroomsGenerator generator = new BackroomsGenerator();
setGenerator(unit -> generator.generateRoom(unit, 50));
}
-
+ @Override
+ protected void onBlockBreak(@NotNull PlayerBlockBreakEvent playerBlockBreakEvent) {
+ playerBlockBreakEvent.setCancelled(false);
+ }
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/bedwars/Bedwars.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/bedwars/Bedwars.java
index 6b50f52..37d417f 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/bedwars/Bedwars.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/bedwars/Bedwars.java
@@ -5,6 +5,7 @@ import eu.mhsl.minenet.minigames.instance.Dimension;
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
import eu.mhsl.minenet.minigames.instance.game.stateless.types.bedwars.data.BedwarsTeam;
import eu.mhsl.minenet.minigames.message.type.ActionBarMessage;
+import eu.mhsl.minenet.minigames.score.LastWinsScore;
import eu.mhsl.minenet.minigames.util.MaterialUtil;
import eu.mhsl.minenet.minigames.util.Position;
import net.kyori.adventure.text.Component;
@@ -37,7 +38,7 @@ public class Bedwars extends StatelessGame {
public Bedwars() throws IOException {
- super(Dimension.OVERWORLD.DIMENSION, "Bedwars");
+ super(Dimension.OVERWORLD.DIMENSION, "Bedwars", new LastWinsScore());
setChunkLoader(new AnvilLoader(Resource.GAME_MAP.getPath().resolve("bedwars/test")));
Configuration config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(Resource.GAME_MAP.getPath().resolve("bedwars/test/config.yml").toFile());
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 00e41d9..f67f0d1 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
@@ -1,6 +1,7 @@
package eu.mhsl.minenet.minigames.instance.game.stateless.types.deathcube;
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
+import eu.mhsl.minenet.minigames.score.FirstWinsScore;
import eu.mhsl.minenet.minigames.util.BatchUtil;
import eu.mhsl.minenet.minigames.instance.Dimension;
import eu.mhsl.minenet.minigames.world.generator.BlockPallet;
@@ -22,7 +23,7 @@ class Deathcube extends StatelessGame {
final int percentage;
public Deathcube(int radius, int height, int percentage, int pvpEnabled) {
- super(Dimension.THE_END.DIMENSION, "Deathcube");
+ super(Dimension.THE_END.DIMENSION, "Deathcube", new FirstWinsScore());
this.radius = radius;
this.height = height + 49;
this.percentage = percentage;
@@ -38,7 +39,7 @@ class Deathcube extends StatelessGame {
}
@Override
- protected void onLoad(CompletableFuture callback) {
+ protected void onLoad(@NotNull CompletableFuture callback) {
AbsoluteBlockBatch batch = new AbsoluteBlockBatch();
for(int x = -radius; x <= radius; x++) {
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 b58ce05..9e28a7a 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
@@ -2,6 +2,7 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.minerun;
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
import eu.mhsl.minenet.minigames.message.type.ActionBarMessage;
+import eu.mhsl.minenet.minigames.score.FirstWinsScore;
import eu.mhsl.minenet.minigames.util.BatchUtil;
import eu.mhsl.minenet.minigames.util.Intersect;
import eu.mhsl.minenet.minigames.instance.Dimension;
@@ -24,16 +25,16 @@ import java.util.concurrent.CompletableFuture;
class Minerun extends StatelessGame {
- private int minePercentage = 50;
- private int width = 100;
- private int length = 50;
+ private int minePercentage;
+ private int width;
+ private int length;
private final int preRun = 5;
private final int afterMines = 2;
private final int afterFinishLine = 10;
public Minerun(int width, int length, int minePercentage) {
- super(Dimension.THE_END.DIMENSION, "Minerun");
+ super(Dimension.THE_END.DIMENSION, "Minerun", new FirstWinsScore());
setGenerator(new SquareTerrainGenerator(width, length + preRun + afterFinishLine, true));
this.width = width;
@@ -42,7 +43,7 @@ class Minerun extends StatelessGame {
}
@Override
- protected void onLoad(CompletableFuture callback) {
+ protected void onLoad(@NotNull CompletableFuture callback) {
int spawnToFinishLine = preRun + length + afterMines;
Random random = new Random();
@@ -97,9 +98,9 @@ class Minerun extends StatelessGame {
playerMoveEvent.setCancelled(true);
}
- if(getScore().hasResult(p) && 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);
+ 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;
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java
index 1748758..39d9221 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java
@@ -2,6 +2,7 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.stickfight;
import eu.mhsl.minenet.minigames.instance.Dimension;
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
+import eu.mhsl.minenet.minigames.score.LastWinsScore;
import eu.mhsl.minenet.minigames.util.BatchUtil;
import eu.mhsl.minenet.minigames.world.generator.terrain.CircularTerrainGenerator;
import io.github.bloepiloepi.pvp.config.*;
@@ -17,7 +18,7 @@ import java.util.concurrent.CompletableFuture;
public class Stickfight extends StatelessGame {
public Stickfight() {
- super(Dimension.OVERWORLD.DIMENSION, "Stickfight");
+ super(Dimension.OVERWORLD.DIMENSION, "Stickfight", new LastWinsScore());
eventNode().addChild(
PvPConfig.emptyBuilder()
@@ -35,7 +36,7 @@ public class Stickfight extends StatelessGame {
}
@Override
- protected void onLoad(CompletableFuture callback) {
+ protected void onLoad(@NotNull CompletableFuture callback) {
AbsoluteBlockBatch batch = new AbsoluteBlockBatch();
for (int z = -10; z <= 10; z++) {
batch.setBlock(0, 50, z, Block.SANDSTONE);
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/towerdefense/Towerdefense.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/towerdefense/Towerdefense.java
index cfb44a0..ff8db5a 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/towerdefense/Towerdefense.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/towerdefense/Towerdefense.java
@@ -3,13 +3,14 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.towerdefense;
import eu.mhsl.minenet.minigames.instance.Dimension;
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
import eu.mhsl.minenet.minigames.instance.game.stateless.types.towerdefense.generator.MazeGenerator;
+import eu.mhsl.minenet.minigames.score.NoScore;
import net.minestom.server.entity.Player;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
public class Towerdefense extends StatelessGame {
public Towerdefense() {
- super(Dimension.NETHER.DIMENSION, "Towerdefense");
+ super(Dimension.NETHER.DIMENSION, "Towerdefense", new NoScore());
setGenerator(new MazeGenerator());
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java
index 33ef83c..6bdd271 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java
@@ -1,6 +1,7 @@
package eu.mhsl.minenet.minigames.instance.game.stateless.types.trafficlightrace;
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
+import eu.mhsl.minenet.minigames.score.FirstWinsScore;
import eu.mhsl.minenet.minigames.util.BatchUtil;
import eu.mhsl.minenet.minigames.instance.Dimension;
import net.minestom.server.coordinate.Vec;
@@ -18,11 +19,11 @@ class TrafficLightRace extends StatelessGame {
private int phaseCounter = 1;
public TrafficLightRace() {
- super(Dimension.THE_END.DIMENSION, "Ampelrennen");
+ super(Dimension.THE_END.DIMENSION, "Ampelrennen", new FirstWinsScore());
}
@Override
- protected void onLoad(CompletableFuture callback) {
+ protected void onLoad(@NotNull CompletableFuture callback) {
AbsoluteBlockBatch batch = new AbsoluteBlockBatch();
for (int x = -10; x <= 10; x++) {
for (int z = 5; z <= 100; z++) {
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java b/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java
index c1fb834..73e02a9 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java
@@ -13,13 +13,11 @@ import eu.mhsl.minenet.minigames.instance.hub.Hub;
import eu.mhsl.minenet.minigames.instance.room.entity.GameSelector;
import net.minestom.server.MinecraftServer;
import net.minestom.server.coordinate.Pos;
+import net.minestom.server.entity.GameMode;
import net.minestom.server.entity.Player;
import net.minestom.server.event.player.PlayerBlockBreakEvent;
import net.minestom.server.event.player.PlayerDisconnectEvent;
import net.minestom.server.instance.AnvilLoader;
-import team.unnamed.hephaestus.ModelDataCursor;
-import team.unnamed.hephaestus.reader.ModelReader;
-import team.unnamed.hephaestus.reader.blockbench.BBModelReader;
import java.util.*;
import java.util.logging.Logger;
@@ -55,6 +53,7 @@ public class Room extends MineNetInstance implements Spawnable {
p.clearEffects();
p.clearTitle();
p.getInventory().clear();
+ p.setGameMode(GameMode.ADVENTURE);
rooms.put(p, room);
MoveInstance.move(p, room);
}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java
new file mode 100644
index 0000000..390e94c
--- /dev/null
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java
@@ -0,0 +1,45 @@
+package eu.mhsl.minenet.minigames.score;
+
+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;
+
+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
+ 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) {
+ 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();
+ }
+}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java
new file mode 100644
index 0000000..0f600a4
--- /dev/null
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java
@@ -0,0 +1,44 @@
+package eu.mhsl.minenet.minigames.score;
+
+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;
+
+public class LastWinsScore extends Score {
+ private List scores = new ArrayList<>();
+ private int ignoreLastPlayers = 0;
+
+ public LastWinsScore() {}
+
+ public LastWinsScore(int ignoreLastPlayers) {
+ this.ignoreLastPlayers = ignoreLastPlayers;
+ }
+
+ public void setIgnoreLastPlayers(int ignoreLastPlayers) {
+ this.ignoreLastPlayers = ignoreLastPlayers;
+ }
+
+ @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) {
+ 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();
+ }
+}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java
new file mode 100644
index 0000000..84cb2d3
--- /dev/null
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java
@@ -0,0 +1,21 @@
+package eu.mhsl.minenet.minigames.score;
+
+import net.minestom.server.entity.Player;
+
+import java.util.List;
+
+public class NoScore extends Score {
+ @Override
+ protected void checkGameEnd() {
+ }
+
+ @Override
+ public void addResult(Player p) {
+
+ }
+
+ @Override
+ protected List getResults() {
+ 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 5c6f7e1..5b781b2 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/score/Score.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/Score.java
@@ -1,87 +1,53 @@
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.type.ChatMessage;
-import eu.mhsl.minenet.minigames.message.type.TitleMessage;
-import eu.mhsl.minenet.minigames.instance.game.Game;
import net.minestom.server.entity.Player;
-import net.minestom.server.event.Event;
import net.minestom.server.event.instance.AddEntityToInstanceEvent;
import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent;
import net.minestom.server.event.player.PlayerDisconnectEvent;
-import java.time.Duration;
-import java.util.*;
+import java.util.List;
-public class Score {
+public abstract class Score {
+ private boolean isDone = false;
+ protected Game instance;
- private boolean closed = false;
- private final HashMap results = new HashMap<>();
- protected final Game instance;
- private Runnable callback;
+ public void attachListeners() {
+ this.instance.eventNode()
+ .addListener(AddEntityToInstanceEvent.class, addEntityToInstanceEvent -> checkGameEnd())
+ .addListener(RemoveEntityFromInstanceEvent.class, addEntityToInstanceEvent -> checkGameEnd())
+ .addListener(PlayerDisconnectEvent.class, addEntityToInstanceEvent -> checkGameEnd());
+ }
- public Score(Game instance) {
+ abstract protected void checkGameEnd();
+ public abstract void addResult(Player p);
+ abstract protected List getResults();
+
+ public boolean isDone() {
+ return isDone;
+ }
+
+ public void setDone() {
+ isDone = true;
+ new ChatMessage(Icon.STAR)
+ .appendTranslated("score#result")
+ .indent(1)
+ .pipe()
+ .list(getResults())
+ .indent(-1).newLine()
+ .appendTranslated("score#thanks")
+ .send(instance.getPlayers());
+
+ instance.stop();
+ }
+
+ protected void onGameEnd() {
+ this.instance.stop();
+ }
+
+ public void setInstance(Game instance) {
this.instance = instance;
-
- this.callback = instance::stop;
-
- instance.eventNode()
- .addListener(AddEntityToInstanceEvent.class, this::checkGameEnd)
- .addListener(RemoveEntityFromInstanceEvent.class, this::checkGameEnd)
- .addListener(PlayerDisconnectEvent.class, this::checkGameEnd);
}
-
- public void onClose(Runnable callback) {
- this.callback = callback;
- }
-
- private void checkGameEnd(Event e) {
- if(closed) return;
- if(instance.getPlayers().size() < 1) return;
- if(countResults() >= instance.getPlayers().size()) {
- callback.run();
-
- new ChatMessage(Icon.STAR)
- .appendTranslated("score#result").indent(1)
- .list(getMapFormatted())
- .indent(-1).newLine()
- .appendTranslated("score#thanks")
- .send(instance.getPlayers());
-
- closed = true;
- }
- }
-
- public void addResult(Player p) {
- if(closed) return;
- if(results.containsKey(p)) return;
- results.put(p, countResults()+1);
-
- new TitleMessage(Duration.ofMillis(500), Duration.ofSeconds(1)).appendTranslated("score#finish").send(p);
-
- checkGameEnd(null);
- }
-
- public boolean hasResult(Player p) {
- return results.containsKey(p);
- }
-
- public HashMap getMap() {
- return results;
- }
-
- public List getMapFormatted() {
- List out = new ArrayList<>();
-
- for (Map.Entry entry : getMap().entrySet()) {
- out.add(entry.getValue() + ": " + entry.getKey().getUsername());
- }
-
- return out;
- }
-
- public int countResults() {
- return results.size();
- }
-
}
diff --git a/src/main/resources/lang/locales.map.csv b/src/main/resources/lang/locales.map.csv
index 90e9f3b..bc31d23 100644
--- a/src/main/resources/lang/locales.map.csv
+++ b/src/main/resources/lang/locales.map.csv
@@ -37,7 +37,8 @@ join_notFound;Lobby not found: ;Lobby konnte nicht gefunden werden:
ns:score#;;
result;Results;Ergebnisse
thanks;Thank you for Playing;Danke fürs spielen
-finish;Finish;Fertig
+finish;Yout did it;Du hast es geschafft
+death;You are out;Du hast verloren
;;
ns:restriction#;;
fail;Some requirements are not met;Bedinungen sind nicht erfüllt
@@ -83,3 +84,8 @@ description;Only go forward if the Trafficlights show green;Gehe nur bei Grün v
ns:game_Towerdefense#;;
name;Towerdefense;Towerdefense
description;Protect the path ????;??????
+;;
+ns:game_Spleef#;;
+name;Spleef;Spleef;
+description;Spleef other players and be the last survivor;Zerstöre Blöcke unter anderen Spielern und sei der letzte im Feld
+shovelName;Snow thrower;Schneeflug
\ No newline at end of file