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 d3c6d02..26709ec 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,7 +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.score.LowestPointsWinScore; import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator; import io.github.togar2.pvp.events.FinalAttackEvent; import io.github.togar2.pvp.feature.CombatFeatures; @@ -13,15 +13,17 @@ import net.minestom.server.instance.block.Block; import org.jetbrains.annotations.NotNull; import java.util.List; +import java.util.Map; import java.util.WeakHashMap; import java.util.concurrent.CompletableFuture; public class Stickfight extends StatelessGame { private final double radius = 20; private final WeakHashMap spawnPoints = new WeakHashMap<>(); + private final Map scoreMap = new WeakHashMap<>(); public Stickfight() { - super(Dimension.OVERWORLD.key, "Stickfight", new LastWinsScore()); + super(Dimension.OVERWORLD.key, "Stickfight", new LowestPointsWinScore()); eventNode().addChild( CombatFeatures.empty() @@ -66,6 +68,11 @@ public class Stickfight extends StatelessGame { super.start(); } + @Override + protected void onStop() { + this.scoreMap.forEach((player, score) -> getScore().insertResult(player, score)); + } + private void generateBridge(int startX, int startY, int startZ) { int steps = (int) (radius * 1.5); for (int i = 0; i < steps; i++) { @@ -78,19 +85,22 @@ public class Stickfight extends StatelessGame { @Override protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { - if(!spawnPoints.containsKey(playerMoveEvent.getPlayer())) { + Player player = playerMoveEvent.getPlayer(); + if(!spawnPoints.containsKey(player)) { playerMoveEvent.setCancelled(true); return; } if(isBeforeBeginning) { - if(spawnPoints.get(playerMoveEvent.getPlayer()).distance(playerMoveEvent.getNewPosition()) < 1) return; + if(spawnPoints.get(player).distance(playerMoveEvent.getNewPosition()) < 1) return; playerMoveEvent.setCancelled(true); - playerMoveEvent.getPlayer().teleport(spawnPoints.get(playerMoveEvent.getPlayer())); + player.teleport(spawnPoints.get(player)); } if(playerMoveEvent.getNewPosition().y() < 40) { - playerMoveEvent.getPlayer().teleport(spawnPoints.get(playerMoveEvent.getPlayer())); + player.teleport(spawnPoints.get(player)); + this.scoreMap.putIfAbsent(player, 0); + this.scoreMap.put(player, this.scoreMap.get(player) + 1); } } diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/LowestPointsWinScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/LowestPointsWinScore.java new file mode 100644 index 0000000..4ff4444 --- /dev/null +++ b/src/main/java/eu/mhsl/minenet/minigames/score/LowestPointsWinScore.java @@ -0,0 +1,16 @@ +package eu.mhsl.minenet.minigames.score; + +import eu.mhsl.minenet.minigames.util.MapUtil; +import net.minestom.server.entity.Player; + +import java.util.Set; + +public class LowestPointsWinScore extends PointsWinScore { + @Override + protected void insertResultImplementation(Set p, int currentPoints) { + this.scoreOrder.put(p, currentPoints); + this.scoreOrder = MapUtil.sortReversedByValue(this.scoreOrder); + getScores().clear(); + this.scoreOrder.forEach((player, integer) -> getScores().addFirst(player)); + } +} 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 d9190f7..c8ca7bf 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/score/PointsWinScore.java +++ b/src/main/java/eu/mhsl/minenet/minigames/score/PointsWinScore.java @@ -12,7 +12,7 @@ import java.util.*; import java.util.stream.Collectors; public class PointsWinScore extends Score { - private Map, Integer> scoreOrder = new HashMap<>(); + Map, Integer> scoreOrder = new HashMap<>(); @Override protected void insertResultImplementation(Set p, int currentPoints) { diff --git a/src/main/java/eu/mhsl/minenet/minigames/util/MapUtil.java b/src/main/java/eu/mhsl/minenet/minigames/util/MapUtil.java index ac5506b..a94cf9c 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/util/MapUtil.java +++ b/src/main/java/eu/mhsl/minenet/minigames/util/MapUtil.java @@ -1,9 +1,6 @@ package eu.mhsl.minenet.minigames.util; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class MapUtil { public static > Map sortByValue(Map map) { @@ -17,4 +14,16 @@ public class MapUtil { return result; } + + public static > Map sortReversedByValue(Map map) { + List> list = new ArrayList<>(map.entrySet()); + list.sort(Map.Entry.comparingByValue().reversed()); + + Map result = new LinkedHashMap<>(); + for (Map.Entry entry : list) { + result.put(entry.getKey(), entry.getValue()); + } + + return result; + } } \ No newline at end of file