fixed leaderboard with new PointsWinScore class
This commit is contained in:
parent
2799a40c58
commit
1b448e749e
@ -4,7 +4,7 @@ import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.types.tetris.game.TetrisGame;
|
||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||
import eu.mhsl.minenet.minigames.instance.game.stateless.types.tetris.game.Tetromino;
|
||||
import eu.mhsl.minenet.minigames.score.LastWinsScore;
|
||||
import eu.mhsl.minenet.minigames.score.PointsWinScore;
|
||||
import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.coordinate.Pos;
|
||||
@ -24,7 +24,7 @@ class Tetris extends StatelessGame {
|
||||
private final Map<Player, TetrisGame> tetrisGames = new HashMap<>();
|
||||
|
||||
public Tetris() {
|
||||
super(Dimension.THE_END.key, "Tetris", new LastWinsScore());
|
||||
super(Dimension.THE_END.key, "Tetris", new PointsWinScore());
|
||||
this.setGenerator(new CircularPlateTerrainGenerator(30).setPlateHeight(0));
|
||||
|
||||
eventNode()
|
||||
@ -108,7 +108,7 @@ class Tetris extends StatelessGame {
|
||||
if(tetrisGame == null) return;
|
||||
if(tetrisGame.lost && event.getPlayer().getGameMode() != GameMode.SPECTATOR) {
|
||||
event.getPlayer().setGameMode(GameMode.SPECTATOR);
|
||||
getScore().insertResult(event.getPlayer());
|
||||
getScore().insertResult(event.getPlayer(), tetrisGame.getScore());
|
||||
tetrisGame.sidebar.removeViewer(event.getPlayer());
|
||||
}
|
||||
}
|
||||
|
@ -103,6 +103,10 @@ public class TetrisGame {
|
||||
}
|
||||
}
|
||||
|
||||
public int getScore() {
|
||||
return this.score;
|
||||
}
|
||||
|
||||
|
||||
private boolean rotate(boolean clockwise) {
|
||||
if(this.lost || this.paused) return false;
|
||||
|
@ -8,11 +8,21 @@ 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");
|
||||
|
@ -8,9 +8,19 @@ 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().add(0, p);
|
||||
getScores().addFirst(p);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertResult(Player p, int points) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -10,11 +10,21 @@ 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;
|
||||
|
@ -0,0 +1,40 @@
|
||||
package eu.mhsl.minenet.minigames.score;
|
||||
|
||||
import eu.mhsl.minenet.minigames.message.TranslatableMessage;
|
||||
import eu.mhsl.minenet.minigames.message.type.TitleMessage;
|
||||
import eu.mhsl.minenet.minigames.util.MapUtil;
|
||||
import net.minestom.server.entity.Player;
|
||||
import org.apache.commons.lang3.NotImplementedException;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.*;
|
||||
|
||||
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);
|
||||
this.scoreOrder = MapUtil.sortByValue(this.scoreOrder);
|
||||
getScores().clear();
|
||||
this.scoreOrder.forEach((player, integer) -> getScores().addFirst(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void insertResultImplementation(Set<Player> p) {
|
||||
throw new NotImplementedException("PointsWinScore does not support adding entries without points");
|
||||
}
|
||||
|
||||
@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
|
||||
protected TranslatableMessage scoreMessage() {
|
||||
return new TitleMessage(Duration.ofMillis(1000), Duration.ofSeconds(1)).appendTranslated("score#death");
|
||||
}
|
||||
}
|
@ -45,7 +45,13 @@ public abstract class Score {
|
||||
setDone();
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
|
20
src/main/java/eu/mhsl/minenet/minigames/util/MapUtil.java
Normal file
20
src/main/java/eu/mhsl/minenet/minigames/util/MapUtil.java
Normal file
@ -0,0 +1,20 @@
|
||||
package eu.mhsl.minenet.minigames.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class MapUtil {
|
||||
public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
|
||||
List<Map.Entry<K, V>> list = new ArrayList<>(map.entrySet());
|
||||
list.sort(Map.Entry.comparingByValue());
|
||||
|
||||
Map<K, V> result = new LinkedHashMap<>();
|
||||
for (Map.Entry<K, V> entry : list) {
|
||||
result.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user