package com.github.jamesnorris.ablockalypse.event.bukkit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import com.github.jamesnorris.ablockalypse.aspect.Game;
import com.github.jamesnorris.ablockalypse.aspect.PlayerState;
import com.github.jamesnorris.ablockalypse.aspect.ZAPlayer;
import com.github.jamesnorris.ablockalypse.enumerated.PlayerStatus;
import com.github.jamesnorris.ablockalypse.threading.inherent.RespawnTask;
public class PlayerJoin implements Listener {
public static HashMap<String, Integer> gameLevels = new HashMap<String, Integer>();
private static HashMap<String, ZAPlayer> offlinePlayers = new HashMap<String, ZAPlayer>();
private static HashMap<String, Location> spawnLocations = new HashMap<String, Location>();
private static HashMap<String, Map<String, Object>> playerSavings = new HashMap<String, Map<String, Object>>();
public static List<PlayerState> toLoad = new ArrayList<PlayerState>();
public static List<ZAPlayer> getQueues(Game game) {
List<ZAPlayer> queues = new ArrayList<ZAPlayer>();
for (String name : offlinePlayers.keySet()) {
ZAPlayer zap = offlinePlayers.get(name);
if (zap.getGame().getName().equals(game.getName())) {
queues.add(zap);
}
}
return queues;
}
public static boolean isQueued(ZAPlayer offlineZAPlayer) {
return offlinePlayers.containsKey(offlineZAPlayer.getState().getSave().get("name"));
}
public static void queuePlayer(ZAPlayer offlineZAPlayer, Location spawn, Map<String, Object> savings) {
if (offlineZAPlayer.hasBeenSentIntoGame()) {
return;
}
Map<String, Object> save = offlineZAPlayer.getState().getSave();
offlinePlayers.put((String) save.get("name"), offlineZAPlayer);
spawnLocations.put((String) save.get("name"), spawn);
playerSavings.put((String) save.get("name"), savings);
}
/* Called when a player joins the server.
* Used mainly for loading game data if it has not already been loaded. */
@EventHandler(priority = EventPriority.HIGHEST) public void PJE(PlayerJoinEvent event) {
Player p = event.getPlayer();
for (PlayerState state : toLoad) {
if (state.getPlayer().getPlayer().getUniqueId().equals(p.getUniqueId())) {
state.update();
toLoad.remove(state);
break;
}
}
if (offlinePlayers.containsKey(p.getName()) && spawnLocations.containsKey(p.getName())) {
ZAPlayer zap = offlinePlayers.get(p.getName());
zap.loadSavedVersion(playerSavings.get(p.getName()));
zap.setStatus(PlayerStatus.LIMBO);
zap.getState().update();
RespawnTask rt = new RespawnTask(zap.getPlayer(), 5, true, false);
rt.setSpawnLocation(spawnLocations.get(p.getName()));
offlinePlayers.remove(p.getName());
spawnLocations.remove(p.getName());
playerSavings.remove(p.getName());
}
}
}