You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

944 lines
36 KiB

package cx.sfy.TheBridge.game;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Firework;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkMeta;
import org.bukkit.inventory.meta.LeatherArmorMeta;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import cx.sfy.TheBridge.Main;
import cx.sfy.TheBridge.database.PlayerStat;
import cx.sfy.TheBridge.hologram.TruenoHologram;
import cx.sfy.TheBridge.hologram.TruenoHologramAPI;
import cx.sfy.TheBridge.team.TeamFour;
import cx.sfy.TheBridge.utils.CenterMessage;
import cx.sfy.TheBridge.utils.ItemBuilder;
import cx.sfy.TheBridge.utils.Utils;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
public class GameFour {
private Main plugin;
private HashMap<ChatColor, TeamFour> teams;
private HashMap<Player, ChatColor> teamPlayer;
private ArrayList<Player> players;
private ArrayList<Player> spects;
private HashMap<Player, PlayerData> pd = new HashMap<Player, PlayerData>();
private HashMap<Player, Integer> goals = new HashMap<Player, Integer>();
private HashMap<Player, Integer> kills = new HashMap<Player, Integer>();
private ArrayList<Location> build = new ArrayList<Location>();
private ArrayList<Location> placed = new ArrayList<Location>();
private ArrayList<TruenoHologram> holograms = new ArrayList<TruenoHologram>();
private Location lobby;
private Location spect;
private String name;
private String mode;
private int min;
private int max;
private int teamSize;
private int starting;
private int prestart;
private BukkitTask start;
private FState state;
public GameFour(Main plugin, String name, int min, int max, int teamSize, int starting, int prestart,
Location lobby, Location spect, Location buildMin, Location buildMax, Location spawnRed, Location spawnBlue,
Location spawnGreen, Location spawnYellow, Location respawnRed, Location respawnBlue, Location respawnGreen,
Location respawnYellow, ArrayList<Location> portalRed, ArrayList<Location> portalBlue,
ArrayList<Location> portalGreen, ArrayList<Location> portalYellow, Location hRed, Location hBlue,
Location hGreen, Location hYellow) {
this.plugin = plugin;
this.name = name;
this.starting = starting;
this.prestart = prestart;
this.mode = teamSize + "v" + teamSize + "v" + teamSize + "v" + teamSize;
this.max = max;
this.min = min;
this.lobby = lobby;
this.spect = spect;
this.teamSize = teamSize;
this.teamPlayer = new HashMap<>();
this.teams = new HashMap<>();
this.players = new ArrayList<>();
this.spects = new ArrayList<>();
int gn = Math.min(buildMin.getBlockX(), buildMax.getBlockX());
int gn2 = Math.max(buildMin.getBlockX(), buildMax.getBlockX());
int gn3 = Math.min(buildMin.getBlockZ(), buildMax.getBlockZ());
int gn4 = Math.max(buildMin.getBlockZ(), buildMax.getBlockZ());
int gn5 = Math.min(buildMin.getBlockY(), buildMax.getBlockY());
int gn6 = Math.max(buildMin.getBlockY(), buildMax.getBlockY());
for (int i = gn; i <= gn2; ++i) {
for (int j = gn5; j <= gn6; ++j) {
for (int k = gn3; k <= gn4; ++k) {
Location location3 = new Location(buildMin.getWorld(), (double) i, (double) j, (double) k);
build.add(location3);
}
}
}
this.teams.put(ChatColor.BLUE, new TeamFour(this, ChatColor.BLUE, Color.BLUE,
plugin.getConfig().getString("names.blue"), spawnBlue, respawnBlue, portalBlue, hBlue));
this.teams.put(ChatColor.RED, new TeamFour(this, ChatColor.RED, Color.RED,
plugin.getConfig().getString("names.red"), spawnRed, respawnRed, portalRed, hRed));
this.teams.put(ChatColor.GREEN, new TeamFour(this, ChatColor.GREEN, Color.GREEN,
plugin.getConfig().getString("names.green"), spawnGreen, respawnGreen, portalGreen, hGreen));
this.teams.put(ChatColor.YELLOW, new TeamFour(this, ChatColor.YELLOW, Color.YELLOW,
plugin.getConfig().getString("names.yellow"), spawnYellow, respawnYellow, portalYellow, hYellow));
setState(FState.WAITING);
updateSign();
}
public void checkCancel() {
if (isState(FState.STARTING) && players.size() <= getMin()) {
if (start != null) {
start.cancel();
}
setState(FState.WAITING);
starting = 30;
updateSign();
for (Player on : players) {
updateSB(on);
}
}
}
public void updateSB(Player p) {
plugin.getSB().update(p);
}
public void updateSign() {
plugin.getSIM().updateGameFourSign(this);
}
public String getMode() {
return mode;
}
public boolean checkWin(TeamFour win, TeamFour death, Player e) {
if (getTeamsAlive() <= 1 && !isState(FState.FINISH)) {
setState(FState.FINISH);
updateSign();
DecimalFormat df = new DecimalFormat("#.##");
for (Player w : win.getTeamPlayers()) {
PlayerStat.getPlayerStat(w).addFourWins();
}
for (Player p : players) {
plugin.getNMS().sendTitle(p, 0, 60, 0,
plugin.getLang().get("titles.winFour.title").replaceAll("<life>", win.getLifeString())
.replaceAll("<team>", win.getTeamName()).replaceAll("<color>", win.getColor() + ""),
plugin.getLang().get("titles.winFour.subtitle").replaceAll("<life>", win.getLifeString())
.replaceAll("<team>", win.getTeamName()).replaceAll("<color>", win.getColor() + ""));
for (String msg : plugin.getLang().getList("messages.winFour")) {
CenterMessage.sendCenteredMessage(p, msg.replaceAll("&", "§").replaceAll("<player>", e.getName())
.replaceAll("<health>", df.format(e.getHealth())).replaceAll("<team>", win.getTeamName())
.replaceAll("<goals>", String.valueOf(goals.get(e)))
.replaceAll("<es>", (goals.get(e) > 1) ? "es" : "")
.replaceAll("<red>", teams.get(ChatColor.RED).getTeamName())
.replaceAll("<redLife>", teams.get(ChatColor.RED).getLifeString())
.replaceAll("<blue>", teams.get(ChatColor.BLUE).getTeamName())
.replaceAll("<blueLife>", teams.get(ChatColor.BLUE).getLifeString())
.replaceAll("<yellow>", teams.get(ChatColor.YELLOW).getTeamName())
.replaceAll("<yellowLife>", teams.get(ChatColor.YELLOW).getLifeString())
.replaceAll("<green>", teams.get(ChatColor.GREEN).getTeamName()).replaceAll("<heart>", "❤")
.replaceAll("<greenLife>", teams.get(ChatColor.GREEN).getLifeString())
.replaceAll("<teamStole>", (death.getTeamName() == null) ? "Stole" : death.getTeamName())
.replaceAll("<color>",
(win.getColor() == null) ? ChatColor.WHITE + "" : win.getColor() + ""));
}
}
new BukkitRunnable() {
@Override
public void run() {
for (TruenoHologram th : holograms) {
th.delete();
}
for (Player p : spect.getWorld().getPlayers()) {
if (pd.containsKey(p)) {
for (Player on : Bukkit.getOnlinePlayers()) {
on.showPlayer(p);
p.showPlayer(on);
}
plugin.getGM().removePlayerFourGames(p);
} else {
p.teleport(plugin.getMainLobby());
}
}
}
}.runTaskLater(plugin, 20 * 10);
new BukkitRunnable() {
@Override
public void run() {
plugin.getGM().resetFourGame(getName());
}
}.runTaskLater(plugin, 20 * 12);
return true;
}
return false;
}
public void celebrateGoal(TeamFour team, TeamFour death, Player e) {
DecimalFormat df = new DecimalFormat("#.##");
addGoal(e);
PlayerStat.getPlayerStat(e).addFourGoals();
firework(getSpect(), team.getFColor());
e.teleport(team.getTeamRespawn());
if (getTeamsAlive() == 2) {
death.removeLife(1);
if (death.getLife() == 0) {
death.killTeam();
if (checkWin(team, death, e)) {
return;
}
for (Player p : players) {
plugin.getNMS().sendTitle(p, 0, 20, 0,
plugin.getLang().get("titles.goalFinal.title").replaceAll("<player>", e.getName())
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName())
.replaceAll("<teamStole>", death.getTeamName())
.replaceAll("<color>", team.getColor() + ""),
plugin.getLang().get("titles.goalFinal.subtitle").replaceAll("<player>", e.getName())
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName())
.replaceAll("<teamStole>", death.getTeamName())
.replaceAll("<color>", team.getColor() + ""));
}
} else {
for (Player p : players) {
plugin.getNMS().sendTitle(p, 0, 20, 0,
plugin.getLang().get("titles.goalNormal.title").replaceAll("<player>", e.getName())
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName())
.replaceAll("<teamStole>", death.getTeamName())
.replaceAll("<color>", team.getColor() + ""),
plugin.getLang().get("titles.goalNormal.subtitle").replaceAll("<player>", e.getName())
.replaceAll("<heart>", "�").replaceAll("<teamOther>", team.getTeamName())
.replaceAll("<teamStole>", death.getTeamName())
.replaceAll("<color>", team.getColor() + ""));
}
}
for (Player p : players) {
updateSB(p);
for (String msg : plugin.getLang().getList("messages.final")) {
CenterMessage.sendCenteredMessage(p,
msg.replaceAll("&", "§").replaceAll("<teamStole>", death.getTeamName())
.replaceAll("<goals>", String.valueOf(goals.get(e)))
.replaceAll("<es>", (goals.get(e) > 1) ? "es" : "")
.replaceAll("<teamOther>", team.getTeamName())
.replaceAll("<color>", "" + team.getColor()).replaceAll("<player>", e.getName())
.replaceAll("<health>", df.format(e.getHealth()))
.replaceAll("<team>", team.getTeamName())
.replaceAll("<red>", teams.get(ChatColor.RED).getTeamName())
.replaceAll("<redLife>", teams.get(ChatColor.RED).getLifeString())
.replaceAll("<blue>", teams.get(ChatColor.BLUE).getTeamName())
.replaceAll("<blueLife>", teams.get(ChatColor.BLUE).getLifeString())
.replaceAll("<yellow>", teams.get(ChatColor.YELLOW).getTeamName())
.replaceAll("<yellowLife>", teams.get(ChatColor.YELLOW).getLifeString())
.replaceAll("<green>", teams.get(ChatColor.GREEN).getTeamName())
.replaceAll("<greenLife>", teams.get(ChatColor.GREEN).getLifeString())
.replaceAll("<heart>", "❤"));
}
}
} else {
team.addLife(1);
death.removeLife(1);
if (death.getLife() == 0) {
death.killTeam();
if (checkWin(team, death, e)) {
return;
}
for (Player p : players) {
plugin.getNMS().sendTitle(p, 0, 20, 0,
plugin.getLang().get("titles.goalFinal.title").replaceAll("<player>", e.getName())
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName())
.replaceAll("<teamStole>", death.getTeamName())
.replaceAll("<color>", team.getColor() + ""),
plugin.getLang().get("titles.goalFinal.subtitle").replaceAll("<player>", e.getName())
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName())
.replaceAll("<teamStole>", death.getTeamName())
.replaceAll("<color>", team.getColor() + ""));
}
} else {
for (Player p : players) {
plugin.getNMS().sendTitle(p, 0, 20, 0,
plugin.getLang().get("titles.goalNormal.title").replaceAll("<player>", e.getName())
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName())
.replaceAll("<teamStole>", death.getTeamName())
.replaceAll("<color>", team.getColor() + ""),
plugin.getLang().get("titles.goalNormal.subtitle").replaceAll("<player>", e.getName())
.replaceAll("<heart>", "❤").replaceAll("<teamOther>", team.getTeamName())
.replaceAll("<teamStole>", death.getTeamName())
.replaceAll("<color>", team.getColor() + ""));
}
}
for (Player p : players) {
updateSB(p);
for (String msg : plugin.getLang().getList("messages.stole")) {
CenterMessage.sendCenteredMessage(p,
msg.replaceAll("&", "§").replaceAll("<teamStole>", death.getTeamName())
.replaceAll("<goals>", String.valueOf(goals.get(e)))
.replaceAll("<es>", (goals.get(e) > 1) ? "es" : "")
.replaceAll("<color>", "" + team.getColor())
.replaceAll("<teamOther>", team.getTeamName()).replaceAll("<player>", e.getName())
.replaceAll("<health>", df.format(e.getHealth()))
.replaceAll("<red>", teams.get(ChatColor.RED).getTeamName())
.replaceAll("<redLife>", teams.get(ChatColor.RED).getLifeString())
.replaceAll("<blue>", teams.get(ChatColor.BLUE).getTeamName())
.replaceAll("<blueLife>", teams.get(ChatColor.BLUE).getLifeString())
.replaceAll("<yellow>", teams.get(ChatColor.YELLOW).getTeamName())
.replaceAll("<yellowLife>", teams.get(ChatColor.YELLOW).getLifeString())
.replaceAll("<green>", teams.get(ChatColor.GREEN).getTeamName())
.replaceAll("<greenLife>", teams.get(ChatColor.GREEN).getLifeString())
.replaceAll("<heart>", "❤"));
}
}
}
}
public void firework(Location loc, Color c1) {
Firework fa = (Firework) loc.getWorld().spawn(
loc.clone().add(new Random().nextInt(5) + 1, new Random().nextInt(1) + 1, new Random().nextInt(5) + 1),
Firework.class);
FireworkMeta fam = fa.getFireworkMeta();
FireworkEffect.Type tipo = FireworkEffect.Type.STAR;
Color c2 = Color.WHITE;
FireworkEffect ef = FireworkEffect.builder().withColor(c1).withFade(c2).with(tipo).build();
fam.addEffect(ef);
fam.setPower(0);
fa.setFireworkMeta(fam);
new BukkitRunnable() {
@Override
public void run() {
Firework fa = (Firework) loc.getWorld().spawn(loc.clone().add(new Random().nextInt(5) + 1,
new Random().nextInt(1) + 1, new Random().nextInt(5) + 1), Firework.class);
FireworkMeta fam = fa.getFireworkMeta();
FireworkEffect.Type tipo = FireworkEffect.Type.STAR;
Color c2 = Color.WHITE;
FireworkEffect ef = FireworkEffect.builder().withColor(c1).withFade(c2).with(tipo).build();
fam.addEffect(ef);
fam.setPower(0);
fa.setFireworkMeta(fam);
}
}.runTaskLater(plugin, 2);
}
public void addPlayer(Player p) {
pd.put(p, new PlayerData(p));
Utils.setCleanPlayer(p);
players.add(p);
kills.put(p, 0);
goals.put(p, 0);
p.teleport(getLobby());
if (isState(FState.WAITING) || isState(FState.STARTING)) {
new BukkitRunnable() {
@Override
public void run() {
givePlayerItems(p);
}
}.runTaskLater(plugin, 20);
for (Player on : players) {
on.sendMessage(plugin.getLang().get("messages.join").replaceAll("<player>", p.getName())
.replaceAll("<players>", String.valueOf(players.size()))
.replaceAll("<max>", String.valueOf(getMax())));
on.playSound(on.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.join")), 1.0f, 1.0f);
updateSB(on);
}
}
updateSign();
}
public void removePlayer(Player p) {
Utils.setCleanPlayer(p);
pd.get(p).restore();
removeAllPlayerTeam(p);
players.remove(p);
if (isState(FState.WAITING) || isState(FState.STARTING)) {
for (Player on : players) {
on.sendMessage(plugin.getLang().get("messages.quit").replaceAll("<player>", p.getName())
.replaceAll("<players>", String.valueOf(players.size()))
.replaceAll("<max>", String.valueOf(getMax())));
on.playSound(on.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.quit")), 1.0f, 1.0f);
updateSB(on);
}
} else {
if (getTeamsAlive() == 1) {
checkWin(getLastTeam(), getTeamPlayer(p), getLastTeam().getTeamPlayers().get(0));
}
}
updateSign();
checkCancel();
}
public void updateGame() {
if (isState(FState.WAITING) && players.size() >= getMin()) {
setState(FState.STARTING);
updateSign();
for (Player p : players) {
p.setGameMode(GameMode.ADVENTURE);
}
}
if (isState(FState.STARTING)) {
for (Player p : players) {
updateSB(p);
}
if (starting == 240 || starting == 180 || starting == 120) {
for (Player p : players) {
p.sendMessage(plugin.getLang().get(p, "messages.starting")
.replaceAll("<time>", String.valueOf(starting / 60))
.replaceAll("<units>", plugin.getLang().get(p, "units.minutes")));
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f,
1.0f);
plugin.getTM().sendStartTitle(p, starting, true);
}
}
if (starting == 60) {
for (Player p : players) {
p.sendMessage(plugin.getLang().get(p, "messages.starting")
.replaceAll("<time>", String.valueOf(starting / 60))
.replaceAll("<units>", plugin.getLang().get(p, "units.minute")));
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f,
1.0f);
plugin.getTM().sendStartTitle(p, starting, true);
}
}
if (starting == 30 || starting == 15 || starting == 10 || starting == 5 || starting == 4 || starting == 3
|| starting == 2) {
for (Player p : players) {
p.sendMessage(
plugin.getLang().get(p, "messages.starting").replaceAll("<time>", String.valueOf(starting))
.replaceAll("<units>", plugin.getLang().get(p, "units.seconds")));
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f,
1.0f);
plugin.getTM().sendStartTitle(p, starting, true);
}
}
if (starting == 1) {
setState(FState.PREGAME);
updateSign();
for (Player p : players) {
p.sendMessage(
plugin.getLang().get(p, "messages.starting").replaceAll("<time>", String.valueOf(starting))
.replaceAll("<units>", plugin.getLang().get(p, "units.second")));
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.starting")), 1.0f,
1.0f);
p.getInventory().clear();
p.getOpenInventory().close();
plugin.getTM().sendStartTitle(p, starting, false);
if (getTeamPlayer(p) == null) {
addRandomTeam(p);
}
}
if (plugin.isCage()) {
for (TeamFour team : teams.values()) {
if (!team.isCage()) {
if (team.getTeamPlayers().size() > 0 && team.getTeamPlayers().get(0) != null) {
team.createCage(plugin.getCM().getCageByName(
PlayerStat.getPlayerStat(team.getTeamPlayers().get(0)).getCage()));
team.setCage(true);
} else {
team.createCage(
plugin.getCM().getCageByName(plugin.getConfig().getString("defaultCage")));
team.setCage(true);
}
}
}
} else {
for (ChatColor color : teams.keySet()) {
plugin.getGLM().createCage(teams.get(color).getTeamSpawn(), color);
}
}
for (Player p : players) {
p.teleport(getTeamPlayer(p).getTeamSpawn().clone().add(0, 1, 0));
giveKit(p, getTeamPlayer(p));
}
Location hRed = teams.get(ChatColor.RED).getHologram();
Location hBlue = teams.get(ChatColor.BLUE).getHologram();
Location hGreen = teams.get(ChatColor.GREEN).getHologram();
Location hYellow = teams.get(ChatColor.YELLOW).getHologram();
if (hRed != null && hBlue != null && hGreen != null && hYellow != null) {
for (Player p : teams.get(ChatColor.RED).getTeamPlayers()) {
ArrayList<String> pRed = new ArrayList<String>();
TruenoHologram phRed = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.you")) {
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED)
.replaceAll("<team>", plugin.getLang().get("holograms.your")));
}
ArrayList<String> pBlue = new ArrayList<String>();
TruenoHologram phBlue = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE)
.replaceAll("<team>", teams.get(ChatColor.BLUE).getTeamName()));
}
ArrayList<String> pGreen = new ArrayList<String>();
TruenoHologram phGreen = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN)
.replaceAll("<team>", teams.get(ChatColor.GREEN).getTeamName()));
}
ArrayList<String> pYellow = new ArrayList<String>();
TruenoHologram phYellow = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pYellow.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.YELLOW)
.replaceAll("<team>", teams.get(ChatColor.YELLOW).getTeamName()));
}
phBlue.setupPlayerHologram(p, hBlue, pBlue);
phBlue.display();
phRed.setupPlayerHologram(p, hRed, pRed);
phRed.display();
phGreen.setupPlayerHologram(p, hGreen, pGreen);
phGreen.display();
phYellow.setupPlayerHologram(p, hYellow, pYellow);
phYellow.display();
holograms.add(phRed);
holograms.add(phBlue);
holograms.add(phGreen);
holograms.add(phYellow);
}
for (Player p : teams.get(ChatColor.BLUE).getTeamPlayers()) {
ArrayList<String> pRed = new ArrayList<String>();
TruenoHologram phRed = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED)
.replaceAll("<team>", teams.get(ChatColor.RED).getTeamName()));
}
ArrayList<String> pBlue = new ArrayList<String>();
TruenoHologram phBlue = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.you")) {
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE)
.replaceAll("<team>", plugin.getLang().get("holograms.your")));
}
ArrayList<String> pGreen = new ArrayList<String>();
TruenoHologram phGreen = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN)
.replaceAll("<team>", teams.get(ChatColor.GREEN).getTeamName()));
}
ArrayList<String> pYellow = new ArrayList<String>();
TruenoHologram phYellow = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pYellow.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.YELLOW)
.replaceAll("<team>", teams.get(ChatColor.YELLOW).getTeamName()));
}
phBlue.setupPlayerHologram(p, hBlue, pBlue);
phBlue.display();
phRed.setupPlayerHologram(p, hRed, pRed);
phRed.display();
phGreen.setupPlayerHologram(p, hGreen, pGreen);
phGreen.display();
phYellow.setupPlayerHologram(p, hYellow, pYellow);
phYellow.display();
holograms.add(phRed);
holograms.add(phBlue);
holograms.add(phGreen);
holograms.add(phYellow);
}
for (Player p : teams.get(ChatColor.GREEN).getTeamPlayers()) {
ArrayList<String> pRed = new ArrayList<String>();
TruenoHologram phRed = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED)
.replaceAll("<team>", teams.get(ChatColor.RED).getTeamName()));
}
ArrayList<String> pBlue = new ArrayList<String>();
TruenoHologram phBlue = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE)
.replaceAll("<team>", teams.get(ChatColor.BLUE).getTeamName()));
}
ArrayList<String> pGreen = new ArrayList<String>();
TruenoHologram phGreen = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.you")) {
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN)
.replaceAll("<team>", plugin.getLang().get("holograms.your")));
}
ArrayList<String> pYellow = new ArrayList<String>();
TruenoHologram phYellow = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pYellow.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.YELLOW)
.replaceAll("<team>", teams.get(ChatColor.YELLOW).getTeamName()));
}
phBlue.setupPlayerHologram(p, hBlue, pBlue);
phBlue.display();
phRed.setupPlayerHologram(p, hRed, pRed);
phRed.display();
phGreen.setupPlayerHologram(p, hGreen, pGreen);
phGreen.display();
phYellow.setupPlayerHologram(p, hYellow, pYellow);
phYellow.display();
holograms.add(phRed);
holograms.add(phBlue);
holograms.add(phGreen);
holograms.add(phYellow);
}
for (Player p : teams.get(ChatColor.YELLOW).getTeamPlayers()) {
ArrayList<String> pRed = new ArrayList<String>();
TruenoHologram phRed = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED)
.replaceAll("<team>", teams.get(ChatColor.RED).getTeamName()));
}
ArrayList<String> pBlue = new ArrayList<String>();
TruenoHologram phBlue = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE)
.replaceAll("<team>", teams.get(ChatColor.BLUE).getTeamName()));
}
ArrayList<String> pGreen = new ArrayList<String>();
TruenoHologram phGreen = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.enemy")) {
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN)
.replaceAll("<team>", teams.get(ChatColor.GREEN).getTeamName()));
}
ArrayList<String> pYellow = new ArrayList<String>();
TruenoHologram phYellow = TruenoHologramAPI.getNewHologram();
for (String portal : plugin.getLang().getList("holograms.portal.you")) {
pYellow.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.YELLOW)
.replaceAll("<team>", plugin.getLang().get("holograms.your")));
}
phBlue.setupPlayerHologram(p, hBlue, pBlue);
phBlue.display();
phRed.setupPlayerHologram(p, hRed, pRed);
phRed.display();
phGreen.setupPlayerHologram(p, hGreen, pGreen);
phGreen.display();
phYellow.setupPlayerHologram(p, hYellow, pYellow);
phYellow.display();
holograms.add(phRed);
holograms.add(phBlue);
holograms.add(phGreen);
holograms.add(phYellow);
}
}
teams.get(ChatColor.RED).createPortal();
teams.get(ChatColor.BLUE).createPortal();
teams.get(ChatColor.YELLOW).createPortal();
teams.get(ChatColor.GREEN).createPortal();
}
starting--;
}
if (isState(FState.PREGAME)) {
for (Player p : players) {
updateSB(p);
}
if (prestart == 10 || prestart == 5 || prestart == 4 || prestart == 3 || prestart == 2) {
for (Player p : players) {
p.sendMessage(
plugin.getLang().get(p, "messages.prestart").replaceAll("<time>", String.valueOf(prestart))
.replaceAll("<units>", plugin.getLang().get(p, "units.seconds")));
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.prestart")), 1.0f,
1.0f);
plugin.getTM().sendPreTitle(p, prestart, true);
}
}
if (prestart == 1) {
for (Player p : players) {
p.sendMessage(
plugin.getLang().get(p, "messages.prestart").replaceAll("<time>", String.valueOf(prestart))
.replaceAll("<units>", plugin.getLang().get(p, "units.second")));
p.playSound(p.getLocation(), Sound.valueOf(plugin.getSounds().get("sounds.game.prestart")), 1.0f,
1.0f);
plugin.getTM().sendPreTitle(p, prestart, false);
for (String msg : plugin.getLang().getList("messages.startFour")) {
CenterMessage.sendCenteredMessage(p, msg.replaceAll("&", "§").replaceAll("<heart>", "❤"));
}
}
}
if (prestart == 0) {
setState(FState.INGAME);
updateSign();
for (Player p : players) {
p.setGameMode(GameMode.SURVIVAL);
}
if (plugin.isCage()) {
for (TeamFour team : teams.values()) {
if (team.isCage()) {
team.removeCage();
team.setCage(false);
}
}
} else {
for (ChatColor color : teams.keySet()) {
plugin.getGLM().removeGlass(teams.get(color).getTeamSpawn());
}
}
}
prestart--;
}
}
public void addPlayerTeam(Player p, TeamFour t) {
t.addPlayer(p);
teamPlayer.put(p, t.getColor());
}
public void addRandomTeam(Player p) {
TeamFour red = teams.get(ChatColor.RED);
TeamFour blue = teams.get(ChatColor.BLUE);
TeamFour green = teams.get(ChatColor.GREEN);
TeamFour yellow = teams.get(ChatColor.YELLOW);
if (red.getTeamSize() <= blue.getTeamSize() && red.getTeamSize() <= green.getTeamSize()
&& red.getTeamSize() <= yellow.getTeamSize()) {
red.addPlayer(p);
teamPlayer.put(p, red.getColor());
} else if (blue.getTeamSize() <= red.getTeamSize() && blue.getTeamSize() <= green.getTeamSize()
&& blue.getTeamSize() <= yellow.getTeamSize()) {
blue.addPlayer(p);
teamPlayer.put(p, blue.getColor());
} else if (green.getTeamSize() <= red.getTeamSize() && green.getTeamSize() <= blue.getTeamSize()
&& green.getTeamSize() <= yellow.getTeamSize()) {
green.addPlayer(p);
teamPlayer.put(p, green.getColor());
} else {
yellow.addPlayer(p);
teamPlayer.put(p, yellow.getColor());
}
}
public TeamFour getTeamPlayer(Player p) {
return teams.get(teamPlayer.get(p));
}
public HashMap<ChatColor, TeamFour> getTeams() {
return teams;
}
public Location getLobby() {
return lobby;
}
public Location getSpect() {
return spect;
}
public String getName() {
return name;
}
public int getMax() {
return max;
}
public int getMin() {
return min;
}
public Main get() {
return plugin;
}
public FState getState() {
return this.state;
}
public void setState(FState state) {
this.state = state;
}
public boolean isState(FState state) {
if (this.state == state) {
return true;
}
return false;
}
public int getGoals(Player p) {
return goals.get(p);
}
public int getKills(Player p) {
return kills.get(p);
}
public void addGoal(Player p) {
goals.put(p, goals.get(p) + 1);
updateSB(p);
}
public void addKill(Player p) {
kills.put(p, kills.get(p) + 1);
updateSB(p);
}
public enum FState {
WAITING, STARTING, PREGAME, INGAME, FINISH, RESTARTING;
}
public int getTeamsAlive() {
int cantidad = 0;
for (TeamFour team : teams.values()) {
if (team.getTeamSize() == 0) {
team.setDeath(true);
continue;
}
if (!team.getDeath() || team.getTeamSize() > 0) {
cantidad++;
}
}
return cantidad;
}
public TeamFour getLastTeam() {
for (TeamFour team : teams.values()) {
if (team.getTeamSize() > 0) {
return team;
}
}
return null;
}
public void removeAllPlayerTeam(Player p) {
for (TeamFour t : teams.values()) {
if (t.getTeamPlayers().contains(p)) {
t.removePlayer(p);
}
}
}
public ArrayList<Player> getPlayers() {
return players;
}
public ArrayList<Player> getSpects() {
return spects;
}
public void setSpect(Player p) {
Utils.setCleanPlayer(p);
removeAllPlayerTeam(p);
spects.add(p);
for (Player on : players) {
on.hidePlayer(p);
}
for (Player on : spects) {
on.hidePlayer(p);
}
new BukkitRunnable() {
@Override
public void run() {
giveSpectItems(p);
}
}.runTaskLater(plugin, 5);
}
public void giveSpectItems(Player p) {
ItemStack team = ItemBuilder.item(Material.COMPASS, 1, (short) 0,
plugin.getLang().get("items.spectate.nameItem"), plugin.getLang().get("items.spectate.loreItem"));
ItemStack option = ItemBuilder.item(Material.REDSTONE_COMPARATOR, 1, (short) 0,
plugin.getLang().get("items.config.nameItem"), plugin.getLang().get("items.config.loreItem"));
ItemStack leave = ItemBuilder.item(Material.BED, 1, (short) 0, plugin.getLang().get("items.leave.nameItem"),
plugin.getLang().get("items.leave.loreItem"));
p.getInventory().setItem(0, team);
p.getInventory().setItem(4, option);
p.getInventory().setItem(8, leave);
}
public void givePlayerItems(Player p) {
ItemStack team = ItemBuilder.item(Material.PAPER, 1, (short) 0, plugin.getLang().get("items.teams.nameItem"),
plugin.getLang().get("items.teams.loreItem"));
ItemStack leave = ItemBuilder.item(Material.BED, 1, (short) 0, plugin.getLang().get("items.leave.nameItem"),
plugin.getLang().get("items.leave.loreItem"));
p.getInventory().setItem(0, team);
p.getInventory().setItem(8, leave);
}
public void giveKit(Player p, TeamFour team) {
ItemStack peche = new ItemStack(Material.LEATHER_CHESTPLATE, 1);
LeatherArmorMeta pecheM = (LeatherArmorMeta) peche.getItemMeta();
pecheM.setColor(team.getFColor());
peche.setItemMeta(pecheM);
ItemStack panta = new ItemStack(Material.LEATHER_LEGGINGS, 1);
LeatherArmorMeta pantaM = (LeatherArmorMeta) panta.getItemMeta();
pantaM.setColor(team.getFColor());
panta.setItemMeta(pantaM);
ItemStack boots = new ItemStack(Material.LEATHER_BOOTS, 1);
LeatherArmorMeta bootsM = (LeatherArmorMeta) boots.getItemMeta();
bootsM.setColor(team.getFColor());
boots.setItemMeta(bootsM);
p.getInventory().setChestplate(peche);
p.getInventory().setLeggings(panta);
p.getInventory().setBoots(boots);
if (PlayerStat.getPlayerStat(p).getHotbar() == null) {
ItemStack[] items = plugin.getGM().getKit().getContents();
for (int slot = 0; slot < 35; slot++) {
ItemStack item = items[slot];
if (item == null || item.getType() == Material.BARRIER) {
p.getInventory().setItem(slot, new ItemStack(Material.AIR));
continue;
}
if (item.getType().equals(Material.STAINED_CLAY)) {
ItemStack item2 = new ItemStack(item.getType(), item.getAmount(), getColor(team.getFColor()));
p.getInventory().setItem(slot, item2);
continue;
}
p.getInventory().setItem(slot, item);
}
} else {
ItemStack[] items = PlayerStat.getPlayerStat(p).getHotbar();
for (int slot = 0; slot < 35; slot++) {
ItemStack item = items[slot];
if (item == null || item.getType() == Material.BARRIER) {
p.getInventory().setItem(slot, new ItemStack(Material.AIR));
continue;
}
if (item.getType().equals(Material.STAINED_CLAY)) {
ItemStack item2 = new ItemStack(item.getType(), item.getAmount(), getColor(team.getFColor()));
p.getInventory().setItem(slot, item2);
continue;
}
p.getInventory().setItem(slot, item);
}
}
}
public void addPlace(Location loc) {
placed.add(loc);
}
public ArrayList<Location> getPlaced() {
return placed;
}
public byte getColor(Color color) {
if (color.equals(Color.RED)) {
return 14;
}
if (color.equals(Color.BLUE)) {
return 11;
}
if (color.equals(Color.YELLOW)) {
return 4;
}
if (color.equals(Color.GREEN)) {
return 5;
}
return 0;
}
public int getTeamSize() {
return teamSize;
}
public ArrayList<Location> getBuild() {
return build;
}
public int getStarting() {
return starting;
}
public HashMap<Player, PlayerData> getPD() {
return pd;
}
}