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.game.stateless.types.tetris.game.TetrisGame;
|
||||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.types.tetris.game.Tetromino;
|
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 eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.minestom.server.coordinate.Pos;
|
import net.minestom.server.coordinate.Pos;
|
||||||
@ -24,7 +24,7 @@ class Tetris extends StatelessGame {
|
|||||||
private final Map<Player, TetrisGame> tetrisGames = new HashMap<>();
|
private final Map<Player, TetrisGame> tetrisGames = new HashMap<>();
|
||||||
|
|
||||||
public Tetris() {
|
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));
|
this.setGenerator(new CircularPlateTerrainGenerator(30).setPlateHeight(0));
|
||||||
|
|
||||||
eventNode()
|
eventNode()
|
||||||
@ -108,7 +108,7 @@ class Tetris extends StatelessGame {
|
|||||||
if(tetrisGame == null) return;
|
if(tetrisGame == null) return;
|
||||||
if(tetrisGame.lost && event.getPlayer().getGameMode() != GameMode.SPECTATOR) {
|
if(tetrisGame.lost && event.getPlayer().getGameMode() != GameMode.SPECTATOR) {
|
||||||
event.getPlayer().setGameMode(GameMode.SPECTATOR);
|
event.getPlayer().setGameMode(GameMode.SPECTATOR);
|
||||||
getScore().insertResult(event.getPlayer());
|
getScore().insertResult(event.getPlayer(), tetrisGame.getScore());
|
||||||
tetrisGame.sidebar.removeViewer(event.getPlayer());
|
tetrisGame.sidebar.removeViewer(event.getPlayer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,6 +103,10 @@ public class TetrisGame {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getScore() {
|
||||||
|
return this.score;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean rotate(boolean clockwise) {
|
private boolean rotate(boolean clockwise) {
|
||||||
if(this.lost || this.paused) return false;
|
if(this.lost || this.paused) return false;
|
||||||
|
@ -8,11 +8,21 @@ import java.time.Duration;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class FirstWinsScore extends Score {
|
public class FirstWinsScore extends Score {
|
||||||
|
@Override
|
||||||
|
public void insertResultImplementation(Set<Player> p, int points) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void insertResultImplementation(Set<Player> p) {
|
public void insertResultImplementation(Set<Player> p) {
|
||||||
getScores().add(p);
|
getScores().add(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertResult(Player p, int points) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected TranslatableMessage scoreMessage() {
|
protected TranslatableMessage scoreMessage() {
|
||||||
return new TitleMessage(Duration.ofMillis(1000), Duration.ofSeconds(1)).appendTranslated("score#finish");
|
return new TitleMessage(Duration.ofMillis(1000), Duration.ofSeconds(1)).appendTranslated("score#finish");
|
||||||
|
@ -8,9 +8,19 @@ import java.time.Duration;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class LastWinsScore extends Score {
|
public class LastWinsScore extends Score {
|
||||||
|
@Override
|
||||||
|
public void insertResultImplementation(Set<Player> p, int points) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void insertResultImplementation(Set<Player> p) {
|
public void insertResultImplementation(Set<Player> p) {
|
||||||
getScores().add(0, p);
|
getScores().addFirst(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertResult(Player p, int points) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -10,11 +10,21 @@ public class NoScore extends Score {
|
|||||||
protected void checkGameEnd() {
|
protected void checkGameEnd() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertResultImplementation(Set<Player> p, int points) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void insertResultImplementation(Set<Player> p) {
|
public void insertResultImplementation(Set<Player> p) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertResult(Player p, int points) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected TranslatableMessage scoreMessage() {
|
protected TranslatableMessage scoreMessage() {
|
||||||
return null;
|
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();
|
setDone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public abstract void insertResultImplementation(Set<Player> p, int points);
|
||||||
|
|
||||||
protected abstract void insertResultImplementation(Set<Player> p);
|
protected abstract void insertResultImplementation(Set<Player> p);
|
||||||
|
|
||||||
|
public abstract void insertResult(Player p, int points);
|
||||||
|
|
||||||
protected abstract TranslatableMessage scoreMessage();
|
protected abstract TranslatableMessage scoreMessage();
|
||||||
|
|
||||||
public void insertResult(Player p) {
|
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