Add player join and disconnect event handling with state updates

This commit is contained in:
akastijn 2026-05-24 17:04:50 +02:00
parent c832a6648b
commit 2746a43837
7 changed files with 71 additions and 1 deletions

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>

View File

@ -3,6 +3,8 @@ package com.alttd.hunger_games;
import com.alttd.hunger_games.commands.BaseCommand;
import com.alttd.hunger_games.config.Config;
import com.alttd.hunger_games.config.Messages;
import com.alttd.hunger_games.event_listeners.PlayerDisconnectListener;
import com.alttd.hunger_games.event_listeners.PlayerJoinListener;
import com.alttd.hunger_games.services.PlayerService;
import com.alttd.hunger_games.services.Round;
import com.alttd.hunger_games.services.RoundService;
@ -43,6 +45,8 @@ public final class Main extends JavaPlugin {
private void registerEvents() {
PluginManager pluginManager = getServer().getPluginManager();
pluginManager.registerEvents(new PlayerDisconnectListener(playerService), this);
pluginManager.registerEvents(new PlayerJoinListener(playerService), this);
}
public void reloadConfigs() {

View File

@ -66,6 +66,17 @@ public class Messages extends AbstractConfig {
}
}
public static class RECONNECT {
private static final String prefix = "reconnect.";
public static String FORFEITED = "<red>You disconnected during the round and have forfeited the game. You are now spectating.</red>";
@SuppressWarnings("unused")
private static void load() {
FORFEITED = config.getString(prefix, "forfeited", FORFEITED);
}
}
public static class REGISTER {
private static final String prefix = "register.";

View File

@ -0,0 +1,18 @@
package com.alttd.hunger_games.event_listeners;
import com.alttd.hunger_games.services.PlayerService;
import lombok.RequiredArgsConstructor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
@RequiredArgsConstructor
public class PlayerDisconnectListener implements Listener {
private final PlayerService playerService;
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
playerService.handleDisconnect(event.getPlayer());
}
}

View File

@ -0,0 +1,18 @@
package com.alttd.hunger_games.event_listeners;
import com.alttd.hunger_games.services.PlayerService;
import lombok.RequiredArgsConstructor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
@RequiredArgsConstructor
public class PlayerJoinListener implements Listener {
private final PlayerService playerService;
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
playerService.handleJoin(event.getPlayer());
}
}

View File

@ -1,5 +1,6 @@
package com.alttd.hunger_games.services;
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 lombok.RequiredArgsConstructor;
@ -60,6 +61,24 @@ public class PlayerService implements RoundListener {
return optionalPlayerState;
}
public void handleDisconnect(Player player) {
UUID uuid = player.getUniqueId();
roundService.setPlayerState(uuid, PLAYER_STATE.DISCONNECTED);
}
public void handleJoin(Player player) {
UUID uuid = player.getUniqueId();
Optional<PLAYER_STATE> state = roundService.getPlayerState(uuid);
if (state.isEmpty()) {
return;
}
if (state.get() != PLAYER_STATE.DISCONNECTED) {
return;
}
roundService.setPlayerState(uuid, PLAYER_STATE.SPECTATING);
player.sendRichMessage(Messages.RECONNECT.FORFEITED);
}
private Optional<PLAYER_STATE> determinePlayerState(UUID playerUuid) {
if (roundState == null) {
return Optional.empty();

View File

@ -3,7 +3,6 @@ package com.alttd.hunger_games.services;
import com.alttd.hunger_games.data_objects.PLAYER_STATE;
import com.alttd.hunger_games.data_objects.ROUND_STATE;
import lombok.Getter;
import org.bukkit.entity.Player;
import java.util.*;
import java.util.stream.Collectors;