2015-10-26 83 views
-1

我有一个Java Array列表和循环的小问题。 所以,在比赛中有两名球员,但是显示红队是一名球员,蓝队是两名球员。Bukkit团队循环阵列/列表Java

谁会这么做?

Screenshot of results

这里的代码中开始使用Team类

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); 
} 

} 

我会感谢谁解决了这个问题:)

P.S.对不起,英文不好。

+0

太多的代码。和复制http://stackoverflow.com/questions/2710300/why-do-we-need-break-after-case-statements – Raedwald

回答

2

问题出在您的switch语句中。你缺少休息,所以当类型为RAUDONAplayer.getName()加入到了球队:

switch(type) { 
    case RAUDONA: 
     redTeam.add(player.getName()); 
     break; // add this 
    case MELYNA: 
     blueTeam.add(player.getName()); 
     break; // and this 
} 
+1

非常感谢:))) – Mantak

+0

我总是太慢我的回答: - ) –