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"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||||
<component name="GradleSettings">
|
<component name="GradleSettings">
|
||||||
<option name="linkedExternalProjectsSettings">
|
<option name="linkedExternalProjectsSettings">
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ package com.alttd.hunger_games;
|
||||||
import com.alttd.hunger_games.commands.BaseCommand;
|
import com.alttd.hunger_games.commands.BaseCommand;
|
||||||
import com.alttd.hunger_games.config.Config;
|
import com.alttd.hunger_games.config.Config;
|
||||||
import com.alttd.hunger_games.config.Messages;
|
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.PlayerService;
|
||||||
import com.alttd.hunger_games.services.Round;
|
import com.alttd.hunger_games.services.Round;
|
||||||
import com.alttd.hunger_games.services.RoundService;
|
import com.alttd.hunger_games.services.RoundService;
|
||||||
|
|
@ -43,6 +45,8 @@ public final class Main extends JavaPlugin {
|
||||||
|
|
||||||
private void registerEvents() {
|
private void registerEvents() {
|
||||||
PluginManager pluginManager = getServer().getPluginManager();
|
PluginManager pluginManager = getServer().getPluginManager();
|
||||||
|
pluginManager.registerEvents(new PlayerDisconnectListener(playerService), this);
|
||||||
|
pluginManager.registerEvents(new PlayerJoinListener(playerService), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reloadConfigs() {
|
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 {
|
public static class REGISTER {
|
||||||
private static final String prefix = "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;
|
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.PLAYER_STATE;
|
||||||
import com.alttd.hunger_games.data_objects.ROUND_STATE;
|
import com.alttd.hunger_games.data_objects.ROUND_STATE;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
@ -60,6 +61,24 @@ public class PlayerService implements RoundListener {
|
||||||
return optionalPlayerState;
|
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) {
|
private Optional<PLAYER_STATE> determinePlayerState(UUID playerUuid) {
|
||||||
if (roundState == null) {
|
if (roundState == null) {
|
||||||
return Optional.empty();
|
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.PLAYER_STATE;
|
||||||
import com.alttd.hunger_games.data_objects.ROUND_STATE;
|
import com.alttd.hunger_games.data_objects.ROUND_STATE;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user