i have a small problem with Java Array Lists and Looping. So, In game were two players, but shows that in red team is 1 player, and in blue team are 2 players.
Who bother to do this???
Here's code where starts to use Team class
EggWars.java
package godplay.vimikro.eggwars;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.Instrument;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Note;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;
import com.connorlinfoot.titleapi.TitleAPI;
import lt.ekgame.framework.Framework;
import lt.ekgame.framework.events.StandartEvents;
import lt.ekgame.framework.managers.MinigameManager;
import lt.nogalosa.database.GodPlayXP;
public class EggWars extends MinigameManager implements Listener{
/*
* TODO SĄRAŠAS
* kai viena komanda numiršta laimi kita komanda ! MID
* Padaryti, kad kiekvienas žaidėjas turėtų 3 gyvybes ! MID
* Padaryti, kad neduotų damage savai komandai ! MID
* Padaryti spalvotus NameTagus ! DIFFICULT
* Padaryti komandų spawn vietas ! EASY
*/
Plugin plugin;
boolean inCount = false;
int countdown = 30;
int team_won = 0;
StandartEvents settings;
String faze = "start";
public EggWars(Plugin plugin){
this.plugin = plugin;
Bukkit.getPluginManager().registerEvents(this, plugin);
settings = Framework.getGameSettings();
settings.allowBlockManipulation(false);
settings.allowDropItems(false);
settings.allowManipulateInventory(false);
settings.allowPVP(false);
settings.canPlayersTakeDamage(true);
settings.canPlayersTakeFallDamage(false);
settings.setUseFood(false);
settings.setForceRespawn(true);
settings.clearInventoryOnJoin(true);
settings.allowBreakBlock(false);
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
event.getPlayer().sendMessage(ChatColor.DARK_RED + "Sveiki atvykę į Minigame - EggWars");
event.getPlayer().sendMessage(ChatColor.GOLD + "Linkime gerai praleisti laiką!");
TitleAPI.sendTitle(event.getPlayer(), 2,5, 2, ChatColor.RED + "EggWars", ChatColor.YELLOW + "Sveiki, " + event.getPlayer().getName());
//COUNTDOWN
if (Bukkit.getOnlinePlayers().size() >= 2 && !inCount) {
inCount = true;
Bukkit.broadcastMessage(ChatColor.GOLD + "Žaidime surinkta pakankamai žaidėjų! Pradedam skaičiavimą");
new BukkitRunnable(){
public void run(){
for(Player pl : Bukkit.getOnlinePlayers()){
pl.setLevel(countdown);
}
if(countdown <= 10 && faze.equals("start")) {
Bukkit.broadcastMessage("" + ChatColor.RED + "IKI STARTO LIKO " + countdown + " SEK.");
for(Player pl : Bukkit.getOnlinePlayers()){
Location location = pl.getLocation();
pl.playSound(location,Sound.ITEM_PICKUP,1, 1);
location.getWorld().playEffect(location, Effect.MOBSPAWNER_FLAMES, 2004);
pl.playNote(location, Instrument.PIANO, new Note(1));
}
}
if(countdown == 0 && faze.equals("start")){
countdown = 60;
faze = "game";
settings.allowPVP(true);
Team.clearTeams();
for(Player pl : Bukkit.getOnlinePlayers()) {
int i = 1;
if(i < Bukkit.getOnlinePlayers().size()) {
if(Team.getBlueTeam().size() > Team.getRedTeam().size()) {
Team.addToTeam(TeamType.RAUDONA, pl);
Bukkit.broadcastMessage("RAUDONA " + pl.getName());
} else {
Team.addToTeam(TeamType.MELYNA, pl);
Bukkit.broadcastMessage("MĖLYNA " + pl.getName());
}
}
i++;
}
Location location = new Location(Bukkit.getOnlinePlayers().iterator().next().getWorld(), -35, 64, -33);
for(Player pl : Bukkit.getOnlinePlayers()){
pl.teleport(location);
pl.getInventory().addItem(new ItemStack(Material.EGG, 16));
pl.getInventory().addItem(new ItemStack(Material.IRON_SWORD, 1));
Location loc = pl.getLocation();
pl.playSound(loc,Sound.EXPLODE,1, 1);
loc.getWorld().playEffect(loc, Effect.FIREWORKS_SPARK, 2004);
}
TitleAPI.sendTitle(event.getPlayer(), 2,5, 2, ChatColor.RED + "Pradedame žaidimą!", ChatColor.YELLOW + "Jūs turite 3 gyvybes");
}
if(countdown <= 10 && faze.equals("game")) {
for(Player pl : Bukkit.getOnlinePlayers()){
Location location = pl.getLocation();
pl.playSound(location,Sound.ITEM_PICKUP,1, 1);
location.getWorld().playEffect(location, Effect.MOBSPAWNER_FLAMES, 2004);
pl.playNote(location, Instrument.PIANO, new Note(1));
}
}
if(countdown == 0 && faze.equals("game")){
countdown = 20;
faze = "done";
for(Player pl : Bukkit.getOnlinePlayers()){
Location loc = pl.getLocation();
pl.playSound(loc,Sound.EXPLODE,1, 1);
loc.getWorld().playEffect(loc, Effect.FIREWORKS_SPARK, 2004);
}
settings.allowPVP(false);
if (team_won == 1) {
TitleAPI.sendTitle(event.getPlayer(), 2,5, 2, ChatColor.RED + "Žaidimas baigėsi!", ChatColor.YELLOW + "Laimėjo RAUDONA komanda");
Bukkit.broadcastMessage(ChatColor.GREEN + "Žaidimas baigtas. Laimėjo RAUDONA komanda! Jiems atitenka po 10 XP");
} else if (team_won == 2) {
TitleAPI.sendTitle(event.getPlayer(), 2,5, 2, ChatColor.BLUE + "Žaidimas baigėsi!", ChatColor.YELLOW + "Laimėjo MĖLYNA komanda");
Bukkit.broadcastMessage(ChatColor.GREEN + "Žaidimas baigtas. Laimėjo MĖLYNA komanda! Jiems atitenka po 10 XP");
} else if (Team.getRedTeam().size() == Team.getBlueTeam().size()) {
TitleAPI.sendTitle(event.getPlayer(), 2,5, 2, ChatColor.GREEN + "Žaidimas baigėsi!", ChatColor.YELLOW + "LYGIOSIOS");
Bukkit.broadcastMessage(ChatColor.GREEN + "Žaidimas baigtas. Lygiosios! Visi gaunate po 5 XP");
} else if (Team.getRedTeam().size() > Team.getBlueTeam().size()) {
TitleAPI.sendTitle(event.getPlayer(), 2,5, 2, ChatColor.RED + "Žaidimas baigėsi!", ChatColor.YELLOW + "Laimėjo RAUDONA komanda");
Bukkit.broadcastMessage(ChatColor.GREEN + "Žaidimas baigtas. Laimėjo RAUDONA komanda! Jiems atitenka po 10 XP");
} else if (Team.getRedTeam().size() < Team.getBlueTeam().size()) {
TitleAPI.sendTitle(event.getPlayer(), 2,5, 2, ChatColor.BLUE + "Žaidimas baigėsi!", ChatColor.YELLOW + "Laimėjo MĖLYNA komanda");
Bukkit.broadcastMessage(ChatColor.GREEN + "Žaidimas baigtas. Laimėjo MĖLYNA komanda! Jiems atitenka po 10 XP");
}
}
if(countdown <= 5 && faze.equals("done")) {
Bukkit.broadcastMessage("" + ChatColor.RED + "IKI PERKROVIMO LIKO " + countdown + " SEK.");
for(Player pl : Bukkit.getOnlinePlayers()){
Location location = pl.getLocation();
pl.playSound(location,Sound.ITEM_PICKUP,1, 1);
location.getWorld().playEffect(location, Effect.MOBSPAWNER_FLAMES, 2004);
pl.playNote(location, Instrument.PIANO, new Note(1));
}
}
if(countdown == 0 && faze.equals("done")) {
Bukkit.broadcastMessage("" + ChatColor.RED + "Serveris perkraunamas");
Bukkit.shutdown();
}
countdown--;
}
}.runTaskTimer(plugin, 20, 20);
}
}
@EventHandler
public void onEntityDeath(PlayerRespawnEvent event){
Location location = new Location(event.getPlayer().getWorld(), -13, 64, -32);
event.setRespawnLocation(location);
}
@EventHandler
public void onEntityDeath(PlayerDeathEvent event) {
if(faze.equals("game")){
event.setDeathMessage(ChatColor.RED + event.getEntity().getKiller().getName() + " sudegė " + event.getEntity().getName() + "!");
GodPlayXP.addXP(event.getEntity().getKiller().getName(), 5);
if(Team.removeFromTeam(event.getEntity()))
Bukkit.broadcastMessage("Išėjo pratrint");
else
Bukkit.broadcastMessage("Nepaėjo varkė");
Bukkit.broadcastMessage(ChatColor.GRAY + "Liko " + Team.getRedTeam().size() + " RAUDONŲ, " + Team.getBlueTeam().size() + " MĖLYNŲ!");
}
if(faze.equals("game")) {
if(Team.getRedTeam().size() == 0) {
countdown = 0;
team_won = 1;
} else if(Team.getBlueTeam().size() == 0) {
countdown = 0;
team_won = 2;
}
}
}
@EventHandler
public void onCreatureSpawn(CreatureSpawnEvent event)
{
if (event.getSpawnReason() == SpawnReason.EGG)
{
event.setCancelled(true);
}
}
}
Team.java
package godplay.vimikro.eggwars;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
public class Team {
private static List<String> redTeam = new ArrayList<String>();
private static List<String> blueTeam = new ArrayList<String>();
public static void addToTeam(TeamType type, Player player) {
if (isInTeam(player)) {
player.sendMessage(ChatColor.RED + "Jūs jau esate komandoje!");
return;
}
switch(type) {
case RAUDONA:
redTeam.add(player.getName());
case MELYNA:
blueTeam.add(player.getName());
}
player.sendMessage(ChatColor.GREEN + "Jūs buvote pridėtas(-a) į " + type.toString() + " komandą!");
}
public static boolean removeFromTeam(Player player) {
if(!isInTeam(player))
return false;
redTeam.remove(player.getName());
blueTeam.remove(player.getName());
return true;
}
public static boolean isInTeam(Player player) {
return redTeam.contains(player.getName()) || blueTeam.contains(player.getName());
}
public static void clearTeams() {
redTeam.clear();
blueTeam.clear();
}
public static List<String> getRedTeam() {
return redTeam;
}
public static List<String> getBlueTeam() {
return blueTeam;
}
public static List<String> getAllPlayersInTeams() {
List<String> combinedTeams = new ArrayList<String>();
combinedTeams.addAll(redTeam);
combinedTeams.addAll(blueTeam);
return combinedTeams;
}
public static TeamType getTeamType(Player player) {
if(!isInTeam(player))
return null;
return (redTeam.contains(player.getName()) ? TeamType.RAUDONA : TeamType.MELYNA);
}
}
I will appreciate who solves this problem :)
P.S. Sorry for bad English.