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.

877 lines
36 KiB

package cx.sfy.TheBridge.game;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
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;
public class GameFour {
private final Main plugin;
private final HashMap<ChatColor, TeamFour> teams;
private final HashMap<Player, ChatColor> teamPlayer;
private final ArrayList<Player> players;
private final ArrayList<Player> spects;
private final HashMap<Player, PlayerData> pd = new HashMap<>();
private final HashMap<Player, Integer> goals = new HashMap<>();
private final HashMap<Player, Integer> kills = new HashMap<>();
private final ArrayList<Location> build = new ArrayList<>();
private final ArrayList<Location> placed = new ArrayList<>();
private final ArrayList<TruenoHologram> holograms = new ArrayList<>();
private final Location lobby;
private final Location spect;
private final String name;
private final String mode;
private final int min;
private final int max;
private final 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<>();
final int gn = Math.min(buildMin.getBlockX(), buildMax.getBlockX());
final int gn2 = Math.max(buildMin.getBlockX(), buildMax.getBlockX());
final int gn3 = Math.min(buildMin.getBlockZ(), buildMax.getBlockZ());
final int gn4 = Math.max(buildMin.getBlockZ(), buildMax.getBlockZ());
final int gn5 = Math.min(buildMin.getBlockY(), buildMax.getBlockY());
final 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) {
final Location location3 = new Location(buildMin.getWorld(), i, j, 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 (final 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();
final DecimalFormat df = new DecimalFormat("#.##");
for (final Player w : win.getTeamPlayers())
PlayerStat.getPlayerStat(w).addFourWins();
for (final Player p : players) {
p.getInventory().clear();
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 (final 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 (final TruenoHologram th : holograms)
th.delete();
for (final Player p : spect.getWorld().getPlayers())
if (pd.containsKey(p)) {
for (final 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) {
final 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 (final 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 (final 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 (final Player p : players) {
updateSB(p);
for (final 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 (final 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 (final 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 (final Player p : players) {
updateSB(p);
for (final 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) {
final Firework fa = loc.getWorld().spawn(
loc.clone().add(new Random().nextInt(5) + 1, new Random().nextInt(1) + 1, new Random().nextInt(5) + 1),
Firework.class);
final FireworkMeta fam = fa.getFireworkMeta();
final FireworkEffect.Type tipo = FireworkEffect.Type.STAR;
final Color c2 = Color.WHITE;
final 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() {
final Firework fa = loc.getWorld().spawn(loc.clone().add(new Random().nextInt(5) + 1,
new Random().nextInt(1) + 1, new Random().nextInt(5) + 1), Firework.class);
final FireworkMeta fam = fa.getFireworkMeta();
final FireworkEffect.Type tipo = FireworkEffect.Type.STAR;
final Color c2 = Color.WHITE;
final 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 (final 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 (final 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 (final Player p : players)
p.setGameMode(GameMode.ADVENTURE);
}
if (isState(FState.STARTING)) {
for (final Player p : players)
updateSB(p);
if (starting == 240 || starting == 180 || starting == 120)
for (final 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 (final 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 (final 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 (final 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 (final 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 (final ChatColor color : teams.keySet())
plugin.getGLM().createCage(teams.get(color).getTeamSpawn(), color);
for (final Player p : players) {
p.teleport(getTeamPlayer(p).getTeamSpawn().clone().add(0, 1, 0));
giveKit(p, getTeamPlayer(p));
}
final Location hRed = teams.get(ChatColor.RED).getHologram();
final Location hBlue = teams.get(ChatColor.BLUE).getHologram();
final Location hGreen = teams.get(ChatColor.GREEN).getHologram();
final Location hYellow = teams.get(ChatColor.YELLOW).getHologram();
if (hRed != null && hBlue != null && hGreen != null && hYellow != null) {
for (final Player p : teams.get(ChatColor.RED).getTeamPlayers()) {
final ArrayList<String> pRed = new ArrayList<>();
final TruenoHologram phRed = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.you"))
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED)
.replaceAll("<team>", plugin.getLang().get("holograms.your")));
final ArrayList<String> pBlue = new ArrayList<>();
final TruenoHologram phBlue = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.enemy"))
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE)
.replaceAll("<team>", teams.get(ChatColor.BLUE).getTeamName()));
final ArrayList<String> pGreen = new ArrayList<>();
final TruenoHologram phGreen = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.enemy"))
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN)
.replaceAll("<team>", teams.get(ChatColor.GREEN).getTeamName()));
final ArrayList<String> pYellow = new ArrayList<>();
final TruenoHologram phYellow = TruenoHologramAPI.getNewHologram();
for (final 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 (final Player p : teams.get(ChatColor.BLUE).getTeamPlayers()) {
final ArrayList<String> pRed = new ArrayList<>();
final TruenoHologram phRed = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.enemy"))
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED)
.replaceAll("<team>", teams.get(ChatColor.RED).getTeamName()));
final ArrayList<String> pBlue = new ArrayList<>();
final TruenoHologram phBlue = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.you"))
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE)
.replaceAll("<team>", plugin.getLang().get("holograms.your")));
final ArrayList<String> pGreen = new ArrayList<>();
final TruenoHologram phGreen = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.enemy"))
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN)
.replaceAll("<team>", teams.get(ChatColor.GREEN).getTeamName()));
final ArrayList<String> pYellow = new ArrayList<>();
final TruenoHologram phYellow = TruenoHologramAPI.getNewHologram();
for (final 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 (final Player p : teams.get(ChatColor.GREEN).getTeamPlayers()) {
final ArrayList<String> pRed = new ArrayList<>();
final TruenoHologram phRed = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.enemy"))
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED)
.replaceAll("<team>", teams.get(ChatColor.RED).getTeamName()));
final ArrayList<String> pBlue = new ArrayList<>();
final TruenoHologram phBlue = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.enemy"))
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE)
.replaceAll("<team>", teams.get(ChatColor.BLUE).getTeamName()));
final ArrayList<String> pGreen = new ArrayList<>();
final TruenoHologram phGreen = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.you"))
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN)
.replaceAll("<team>", plugin.getLang().get("holograms.your")));
final ArrayList<String> pYellow = new ArrayList<>();
final TruenoHologram phYellow = TruenoHologramAPI.getNewHologram();
for (final 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 (final Player p : teams.get(ChatColor.YELLOW).getTeamPlayers()) {
final ArrayList<String> pRed = new ArrayList<>();
final TruenoHologram phRed = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.enemy"))
pRed.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.RED)
.replaceAll("<team>", teams.get(ChatColor.RED).getTeamName()));
final ArrayList<String> pBlue = new ArrayList<>();
final TruenoHologram phBlue = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.enemy"))
pBlue.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.BLUE)
.replaceAll("<team>", teams.get(ChatColor.BLUE).getTeamName()));
final ArrayList<String> pGreen = new ArrayList<>();
final TruenoHologram phGreen = TruenoHologramAPI.getNewHologram();
for (final String portal : plugin.getLang().getList("holograms.portal.enemy"))
pGreen.add(portal.replaceAll("&", "§").replaceAll("<color>", "" + ChatColor.GREEN)
.replaceAll("<team>", teams.get(ChatColor.GREEN).getTeamName()));
final ArrayList<String> pYellow = new ArrayList<>();
final TruenoHologram phYellow = TruenoHologramAPI.getNewHologram();
for (final 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 (final Player p : players)
updateSB(p);
if (prestart == 10 || prestart == 5 || prestart == 4 || prestart == 3 || prestart == 2)
for (final 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 (final 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 (final String msg : plugin.getLang().getList("messages.startFour"))
CenterMessage.sendCenteredMessage(p, msg.replaceAll("&", "§").replaceAll("<heart>", "❤"));
}
if (prestart == 0) {
setState(FState.INGAME);
updateSign();
for (final Player p : players)
p.setGameMode(GameMode.SURVIVAL);
if (plugin.isCage()) {
for (final TeamFour team : teams.values())
if (team.isCage()) {
team.removeCage();
team.setCage(false);
}
} else
for (final 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) {
final TeamFour red = teams.get(ChatColor.RED);
final TeamFour blue = teams.get(ChatColor.BLUE);
final TeamFour green = teams.get(ChatColor.GREEN);
final 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 (final 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 (final TeamFour team : teams.values())
if (team.getTeamSize() > 0)
return team;
return null;
}
public void removeAllPlayerTeam(Player p) {
for (final 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 (final Player on : players)
on.hidePlayer(p);
for (final Player on : spects)
on.hidePlayer(p);
new BukkitRunnable() {
@Override
public void run() {
giveSpectItems(p);
}
}.runTaskLater(plugin, 5);
}
public void giveSpectItems(Player p) {
final ItemStack team = ItemBuilder.item(Material.COMPASS, 1, (short) 0,
plugin.getLang().get("items.spectate.nameItem"), plugin.getLang().get("items.spectate.loreItem"));
final ItemStack option = ItemBuilder.item(Material.REDSTONE_COMPARATOR, 1, (short) 0,
plugin.getLang().get("items.config.nameItem"), plugin.getLang().get("items.config.loreItem"));
final 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) {
final ItemStack team = ItemBuilder.item(Material.PAPER, 1, (short) 0, plugin.getLang().get("items.teams.nameItem"),
plugin.getLang().get("items.teams.loreItem"));
final 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) {
final ItemStack peche = new ItemStack(Material.LEATHER_CHESTPLATE, 1);
final LeatherArmorMeta pecheM = (LeatherArmorMeta) peche.getItemMeta();
pecheM.setColor(team.getFColor());
peche.setItemMeta(pecheM);
final ItemStack panta = new ItemStack(Material.LEATHER_LEGGINGS, 1);
final LeatherArmorMeta pantaM = (LeatherArmorMeta) panta.getItemMeta();
pantaM.setColor(team.getFColor());
panta.setItemMeta(pantaM);
final ItemStack boots = new ItemStack(Material.LEATHER_BOOTS, 1);
final 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) {
final ItemStack[] items = plugin.getGM().getKit().getContents();
for (int slot = 0; slot < 35; slot++) {
final 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)) {
final ItemStack item2 = new ItemStack(item.getType(), item.getAmount(), getColor(team.getFColor()));
p.getInventory().setItem(slot, item2);
continue;
}
p.getInventory().setItem(slot, item);
}
} else {
final ItemStack[] items = PlayerStat.getPlayerStat(p).getHotbar();
for (int slot = 0; slot < 35; slot++) {
final 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)) {
final 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;
}
}