package com.walrusone.skywars.game;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import com.walrusone.skywars.SkyWarsReloaded;
import com.walrusone.skywars.utilities.Tagged;
public class GamePlayer {
private UUID uuid;
private boolean isSpectating = false;
private String name;
private String color;
private String effect;
private String projEffect;
private int wins;
private int kills;
private int deaths;
private int gamesPlayed;
private int score;
private int blocksPlaced;
private int balance;
private boolean hasKitSelected;
private GameKit selectedKit;
private Tagged taggedBy;
private boolean inGame = false;
private int game = -1;
private int specGame = -1;
private int votedForOP = 0;
private int timeVote = 0;
private int jumpVote = 0;
private int weatherVote = 0;
private List<String> permissions = new ArrayList<String>();
private List<String> newPerms = new ArrayList<String>();
public GamePlayer (UUID uuid) {
this.uuid = uuid;
SkyWarsReloaded.getDS().loadPlayer(this);
name = getP().getName();
setTagged(this);
}
public Player getP() {
return SkyWarsReloaded.get().getServer().getPlayer(uuid);
}
public UUID getUUID() {
return uuid;
}
public GamePlayer getGamePlayer() {
return this;
}
public void setBalance(int x) {
balance = x;
}
public int getBalance() {
return balance;
}
public String getName() {
if (getP() != null) {
name = getP().getName();
return name;
} else {
return name;
}
}
public void setWins(int w) {
wins = w;
}
public void setKills(int k) {
kills = k;
}
public void setDeaths(int d) {
deaths = d;
}
public int getWins() {
return wins;
}
public int getKills() {
return kills;
}
public int getDeaths() {
return deaths;
}
public void setSpectating(boolean b) {
isSpectating = b;
}
public boolean isSpectating() {
return isSpectating;
}
public void setTagged(GamePlayer player) {
taggedBy = new Tagged(player, System.currentTimeMillis());
}
public Tagged getTagged() {
return taggedBy;
}
public void setGame(int game) {
this.game = game;
}
public Game getGame() {
return SkyWarsReloaded.getGC().getGame(game);
}
public int getGamesPlayed() {
return gamesPlayed;
}
public void setGamesPlayed(int gp) {
gamesPlayed = gp;
}
public int getScore() {
return score;
}
public void setScore(int s) {
score = s;
}
public void setKitSelected(boolean b) {
hasKitSelected = b;
}
public boolean hasKitSelected() {
return hasKitSelected;
}
public GameKit getSelectedKit() {
return selectedKit;
}
public void setSelectedKit(GameKit kit) {
selectedKit = kit;
}
public int getBlocks() {
return blocksPlaced;
}
public void setBlocks(int s) {
blocksPlaced = s;
}
public void setSpecGame(int game) {
specGame = game;
}
public Game getSpecGame() {
return SkyWarsReloaded.getGC().getGame(specGame);
}
public void setInGame(boolean state) {
inGame = state;
}
public boolean inGame() {
return inGame;
}
public void spectateMode(boolean state, Game game, Location location, boolean shutdown) {
if (state) {
if (getP() != null) {
setSpectating(state);
game.addSpectator(this);
setSpecGame(game.getGameNumber());
for (Player target: SkyWarsReloaded.get().getServer().getOnlinePlayers()) {
target.hidePlayer(getP());
}
getP().setGameMode(GameMode.ADVENTURE);
getP().setFoodLevel(20);
getP().setScoreboard(game.getScoreboard());
getP().addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 15));
getP().teleport(location, TeleportCause.PLUGIN);
SkyWarsReloaded.get().getServer().getScheduler().scheduleSyncDelayedTask(SkyWarsReloaded.get(), new Runnable() {
@Override
public void run() {
if (getP() != null) {
getP().setAllowFlight(true);
getP().setFlying(true);
getP().getInventory().clear();
giveSpectateItems();
}
}
}, 5);
}
} else {
if (getP() != null) {
setSpectating(state);
setSpecGame(-1);
for (Player target: SkyWarsReloaded.get().getServer().getOnlinePlayers()) {
if (getP() != null) {
target.showPlayer(getP());
}
}
getP().setScoreboard(SkyWarsReloaded.get().getServer().getScoreboardManager().getNewScoreboard());
for (PotionEffect effect : getP().getActivePotionEffects()) {
getP().removePotionEffect(effect.getType());
}
getP().setFireTicks(0);
getP().teleport(location, TeleportCause.PLUGIN);
if (!shutdown) {
SkyWarsReloaded.get().getServer().getScheduler().scheduleSyncDelayedTask(SkyWarsReloaded.get(), new Runnable() {
@Override
public void run() {
if (getP() != null) {
getP().setAllowFlight(false);
getP().setFlying(false);
SkyWarsReloaded.getInvC().restoreInventory(getP());
}
}
}, 5);
}
}
}
}
private void giveSpectateItems() {
if (getP() != null) {
getP().getInventory().clear();
getP().getInventory().setItem(SkyWarsReloaded.getCfg().getExitItemSlot(), SkyWarsReloaded.getCfg().getExitGameItem());
if (SkyWarsReloaded.getCfg().spectateShopEnabled()) {
if (getP().hasPermission("swr.spectateshop")) {
getP().getInventory().setItem(SkyWarsReloaded.getCfg().getSpecStoreItemSlot(), SkyWarsReloaded.getCfg().getSpecStoreMenuItem());
}
}
getP().getInventory().setItem(SkyWarsReloaded.getCfg().getSpectateItemSlot(), SkyWarsReloaded.getCfg().getSpectatePlayerItem());
}
}
public boolean gamemodeChangeAllowed() {
if (isSpectating) {
return false;
}
return true;
}
public int getOpVote() {
return votedForOP;
}
public void setOpVote(int vote) {
votedForOP = vote;
}
public int getJumpVote() {
return jumpVote;
}
public void setJumpVote(int vote) {
jumpVote = vote;
}
public int getWeatherVote() {
return weatherVote;
}
public void setWeatherVote(int vote) {
weatherVote = vote;
}
public void setTimeVote(int i) {
timeVote = i;
}
public int getTimeVote() {
return timeVote;
}
public void setGlass(String name2) {
if (name2 != null) {
color = name2;
} else {
color = "normal";
}
}
public String getGlass() {
return color;
}
public List<String> getPerms() {
return permissions;
}
public void addPerm(String perm) {
newPerms.add(perm);
permissions.add(perm);
}
public void clearNewPerms() {
newPerms = null;
newPerms = new ArrayList<String>();
}
public List<String> getNewPerms() {
return newPerms;
}
public boolean hasPerm(String perm) {
if (permissions.contains(perm)) {
return true;
}
return false;
}
public void setPerms(List<String> perms) {
for (String perm: perms) {
permissions.add(perm);
}
}
public String getEffect() {
return effect;
}
public void setEffect(String effect) {
if (effect != null) {
this.effect = effect;
} else {
this.effect = "normal";
}
}
public String getProjEffect() {
return projEffect;
}
public void setProjEffect(String effect) {
if (effect != null) {
this.projEffect = effect;
} else {
this.projEffect = "normal";
}
}
}