diff --git a/src/main/java/com/alttd/hunger_games/Main.java b/src/main/java/com/alttd/hunger_games/Main.java
index c1ef04b..f16f265 100644
--- a/src/main/java/com/alttd/hunger_games/Main.java
+++ b/src/main/java/com/alttd/hunger_games/Main.java
@@ -12,6 +12,7 @@ import com.alttd.hunger_games.services.PlayerService;
import com.alttd.hunger_games.services.PlayerTeleporterService;
import com.alttd.hunger_games.services.Round;
import com.alttd.hunger_games.services.RoundService;
+import com.alttd.hunger_games.services.StatService;
import lombok.extern.slf4j.Slf4j;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
@@ -39,9 +40,9 @@ public final class Main extends JavaPlugin {
private void registerServices() {
round = Round.createSingletonInstance();
lootService = new LootService();
- roundService = RoundService.createSingletonInstance(round, this, lootService);
- playerTeleporterService = PlayerTeleporterService.createSingletonInstance();
statService = new StatService(this, round);
+ roundService = RoundService.createSingletonInstance(round, this, lootService, statService);
+ playerTeleporterService = PlayerTeleporterService.createSingletonInstance();
playerService = PlayerService.createSingletonInstance(round, roundService, playerTeleporterService);
}
diff --git a/src/main/java/com/alttd/hunger_games/config/Messages.java b/src/main/java/com/alttd/hunger_games/config/Messages.java
index 31ffc2d..3f6142d 100644
--- a/src/main/java/com/alttd/hunger_games/config/Messages.java
+++ b/src/main/java/com/alttd/hunger_games/config/Messages.java
@@ -81,6 +81,7 @@ public class Messages extends AbstractConfig {
public static String STARTED = "The Hunger Games has begun! Good luck!";
public static String BORDER_SHRINK = "The border is shrinking to blocks!";
public static String CHEST_EMPTY = "This chest is empty!";
+ public static String WINNER = " has won the Hunger Games!";
@SuppressWarnings("unused")
private static void load() {
@@ -88,6 +89,7 @@ public class Messages extends AbstractConfig {
STARTED = config.getString(prefix, "started", STARTED);
BORDER_SHRINK = config.getString(prefix, "border-shrink", BORDER_SHRINK);
CHEST_EMPTY = config.getString(prefix, "chest-empty", CHEST_EMPTY);
+ WINNER = config.getString(prefix, "winner", WINNER);
}
}
diff --git a/src/main/java/com/alttd/hunger_games/services/Round.java b/src/main/java/com/alttd/hunger_games/services/Round.java
index c41bc94..97d392d 100644
--- a/src/main/java/com/alttd/hunger_games/services/Round.java
+++ b/src/main/java/com/alttd/hunger_games/services/Round.java
@@ -46,6 +46,11 @@ public class Round {
listeners.forEach(roundListener -> roundListener.stateChange(roundState));
}
+ public void endRound() {
+ roundState = ROUND_STATE.ENDED;
+ listeners.forEach(roundListener -> roundListener.stateChange(roundState));
+ }
+
private void nextStage() {
Optional optionalNextRoundState = roundState.next();
if (optionalNextRoundState.isEmpty()) {
diff --git a/src/main/java/com/alttd/hunger_games/services/RoundService.java b/src/main/java/com/alttd/hunger_games/services/RoundService.java
index 7feb057..39b75fe 100644
--- a/src/main/java/com/alttd/hunger_games/services/RoundService.java
+++ b/src/main/java/com/alttd/hunger_games/services/RoundService.java
@@ -1,11 +1,14 @@
package com.alttd.hunger_games.services;
import com.alttd.hunger_games.Main;
+import com.alttd.hunger_games.config.Messages;
import com.alttd.hunger_games.data_objects.PLAYER_STATE;
import com.alttd.hunger_games.data_objects.ROUND_STATE;
import com.alttd.hunger_games.event_listeners.PlayerMovementListener;
-import com.alttd.hunger_games.services.StatService;
import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
@@ -13,6 +16,7 @@ import org.bukkit.event.HandlerList;
import java.util.*;
import java.util.stream.Collectors;
+@Slf4j
public class RoundService implements RoundListener {
private static RoundService instance = null;
@@ -25,6 +29,8 @@ public class RoundService implements RoundListener {
private ROUND_STATE roundState;
private final HashMap players = new HashMap<>();
+ private final Round round;
+
public static RoundService createSingletonInstance(Round round, Main main, LootService lootService, StatService statService) {
if (instance != null) {
throw new IllegalStateException("RoundService is already initialized.");
@@ -34,6 +40,7 @@ public class RoundService implements RoundListener {
}
private RoundService(Round round, Main main, LootService lootService, StatService statService) {
+ this.round = round;
this.roundState = round.register(this);
this.main = main;
this.lootService = lootService;
@@ -66,10 +73,17 @@ public class RoundService implements RoundListener {
private void declareWinner(UUID winnerUUID) {
Player player = Bukkit.getPlayer(winnerUUID);
+ if (player == null) {
+ log.error("Winner {} not found", winnerUUID);
+ Bukkit.broadcast(MiniMessage.miniMessage().deserialize("Winner not found"));
+ return;
+ }
+
statService.setPlacement(winnerUUID, 1);
statService.setWon(winnerUUID, true);
- //TODO message
- //TODO reset round
+
+ Bukkit.broadcast(MiniMessage.miniMessage().deserialize(Messages.GAME.WINNER, Placeholder.component("player", player.name())));
+ round.endRound();
}
protected void clear() {