-1

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???

Screenshot of results

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.

Mantak
  • 27
  • 4
  • Too much code. And a duplicate of http://stackoverflow.com/questions/2710300/why-do-we-need-break-after-case-statements – Raedwald Jan 24 '16 at 16:53

1 Answers1

2

The problem is in your switch statement. You are missing a break, so when type is RAUDONA, player.getName() is added to both teams :

switch(type) {
    case RAUDONA:
        redTeam.add(player.getName());
        break; // add this
    case MELYNA:
        blueTeam.add(player.getName());
        break; // and this
}
Eran
  • 387,369
  • 54
  • 702
  • 768