Add player join and disconnect event handling with state updates
This commit is contained in:
parent
c832a6648b
commit
2746a43837
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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.";
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user