Initial commit
This commit is contained in:
90
src/main/java/eu/mhsl/minenet/minigames/score/Score.java
Normal file
90
src/main/java/eu/mhsl/minenet/minigames/score/Score.java
Normal file
@@ -0,0 +1,90 @@
|
||||
package eu.mhsl.minenet.minigames.score;
|
||||
|
||||
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.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
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.*;
|
||||
|
||||
public class Score {
|
||||
|
||||
private boolean closed = false;
|
||||
private final HashMap<Player, Integer> results = new HashMap<>();
|
||||
protected final Game instance;
|
||||
private Runnable callback;
|
||||
|
||||
public Score(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)
|
||||
.appendStatic("Ergebnisse:").indent(1)
|
||||
.list(getMapFormatted())
|
||||
.indent(-1).newLine()
|
||||
.appendStatic("Vielen Dank für's Spielen!")
|
||||
.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)).appendStatic(Component.text("Fertig", NamedTextColor.GREEN)).send(p);
|
||||
|
||||
checkGameEnd(null);
|
||||
}
|
||||
|
||||
public boolean hasResult(Player p) {
|
||||
return results.containsKey(p);
|
||||
}
|
||||
|
||||
public HashMap<Player, Integer> getMap() {
|
||||
return results;
|
||||
}
|
||||
|
||||
public List<String> getMapFormatted() {
|
||||
List<String> out = new ArrayList<>();
|
||||
|
||||
int counter = 0;
|
||||
for (Map.Entry<Player, Integer> entry : getMap().entrySet()) {
|
||||
out.add(entry.getValue() + ": " + entry.getKey().getUsername());
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
public int countResults() {
|
||||
return results.size();
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user