Package org.mcsg.survivalgames

Source Code of org.mcsg.survivalgames.GameManager

package org.mcsg.survivalgames;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import org.mcsg.survivalgames.Game.GameMode;
import org.mcsg.survivalgames.MessageManager.PrefixType;
import org.mcsg.survivalgames.api.PlayerLeaveArenaEvent;
import org.mcsg.survivalgames.stats.StatsManager;
import org.mcsg.survivalgames.util.Kit;

import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.bukkit.selections.Selection;

public class GameManager {

  static GameManager instance = new GameManager();
  private ArrayList < Game > games = new ArrayList < Game > ();
  private SurvivalGames p;
  public static HashMap < Integer, HashSet < Block >> openedChest = new HashMap < Integer, HashSet < Block >> ();
  private ArrayList<Kit>kits = new ArrayList<Kit>();
  private HashSet<Player>kitsel = new HashSet<Player>();
  MessageManager msgmgr = MessageManager.getInstance();

  private GameManager() {

  }

  public static GameManager getInstance() {
    return instance;
  }

  public void setup(SurvivalGames plugin) {
    p = plugin;
    LoadGames();
    LoadKits();
    for (Game g: getGames()) {
      openedChest.put(g.getID(), new HashSet < Block > ());
    }
  }

  public Plugin getPlugin() {
    return p;
  }

  public void reloadGames() {
    LoadGames();
  }


  public void LoadKits(){
    Set<String> kits1 = SettingsManager.getInstance().getKits().getConfigurationSection("kits").getKeys(false);
    for(String s:kits1){
      kits.add(new Kit(s));
    }
  }

  public void LoadGames() {
    FileConfiguration c = SettingsManager.getInstance().getSystemConfig();
    games.clear();
    int no = c.getInt("sg-system.arenano", 0);
    int loaded = 0;
    int a = 1;
    while (loaded < no) {
      if (c.isSet("sg-system.arenas." + a + ".x1")) {
        //c.set("sg-system.arenas."+a+".enabled",c.getBoolean("sg-system.arena."+a+".enabled", true));
        if (c.getBoolean("sg-system.arenas." + a + ".enabled")) {
          //SurvivalGames.$(c.getString("sg-system.arenas."+a+".enabled"));
          //c.set("sg-system.arenas."+a+".vip",c.getBoolean("sg-system.arenas."+a+".vip", false));
          SurvivalGames.$("Loading Arena: " + a);
          loaded++;
          games.add(new Game(a));
          StatsManager.getInstance().addArena(a);
        }
      }
      a++;
     
    }
    LobbyManager.getInstance().clearAllSigns();
   
  }

  public int getBlockGameId(Location v) {
    for (Game g: games) {
      if (g.isBlockInArena(v)) {
        return g.getID();
      }
    }
    return -1;
  }

  public int getPlayerGameId(Player p) {
    for (Game g: games) {
      if (g.isPlayerActive(p)) {
        return g.getID();
      }
    }
    return -1;
  }

  public int getPlayerSpectateId(Player p) {
    for (Game g: games) {
      if (g.isSpectator(p)) {
        return g.getID();
      }
    }
    return -1;
  }

  public boolean isPlayerActive(Player player) {
    for (Game g: games) {
      if (g.isPlayerActive(player)) {
        return true;
      }
    }
    return false;
  }

  public boolean isPlayerInactive(Player player) {
    for (Game g: games) {
      if (g.isPlayerActive(player)) {
        return true;
      }
    }
    return false;
  }

  public boolean isSpectator(Player player) {
    for (Game g: games) {
      if (g.isSpectator(player)) {
        return true;
      }
    }
    return false;
  }

  public void removeFromOtherQueues(Player p, int id) {
    for (Game g: getGames()) {
      if (g.isInQueue(p) && g.getID() != id) {
        g.removeFromQueue(p);
        msgmgr.sendMessage(PrefixType.INFO, "Removed from the queue in arena " + g.getID(), p);
      }
    }
  }

  public boolean isInKitMenu(Player p){
    return kitsel.contains(p);
  }

  public void leaveKitMenu(Player p){
    kitsel.remove(p);
  }

  public void openKitMenu(Player p){
    kitsel.add(p);
  }

  @SuppressWarnings("deprecation")
  public void selectKit(Player p, int i) {
    p.getInventory().clear();
    ArrayList<Kit>kits = getKits(p);
    if(i <= kits.size()){
      Kit k = getKits(p).get(i);
      if(k!=null){
        p.getInventory().setContents(k.getContents().toArray(new ItemStack[0]));
      }
    }
    p.updateInventory();

  }

  public int getGameCount() {
    return games.size();
  }

  public Game getGame(int a) {
    //int t = gamemap.get(a);
    for (Game g: games) {
      if (g.getID() == a) {
        return g;
      }
    }
    return null;
  }

  public void removePlayer(Player p, boolean b) {
    getGame(getPlayerGameId(p)).removePlayer(p, b);
  }

  public void removeSpectator(Player p) {
    getGame(getPlayerSpectateId(p)).removeSpectator(p);
  }

  public void disableGame(int id) {
    getGame(id).disable();
  }

  public void enableGame(int id) {
    getGame(id).enable();
  }

  public ArrayList < Game > getGames() {
    return games;
  }

  public GameMode getGameMode(int a) {
    for (Game g: games) {
      if (g.getID() == a) {
        return g.getMode();
      }
    }
    return null;
  }

  public ArrayList<Kit> getKits(Player p){
    ArrayList<Kit>k = new ArrayList<Kit>();
    for(Kit kit: kits){
      if(kit.canUse(p)){
        k.add(kit);
      }
    }
    return k;
  }

  //TODO: Actually make this countdown correctly
  public void startGame(int a) {
    getGame(a).countdown(10);
  }

  public void addPlayer(Player p, int g) {
    Game game = getGame(g);
    if (game == null) {
      MessageManager.getInstance().sendFMessage(PrefixType.ERROR, "error.input",p, "message-No game by this ID exist!");
      return;
    }
    getGame(g).addPlayer(p);
  }

  public void autoAddPlayer(Player pl) {
    ArrayList < Game > qg = new ArrayList < Game > (5);
    for (Game g: games) {
      if (g.getMode() == Game.GameMode.WAITING) qg.add(g);
    }
    //TODO: fancy auto balance algorithm
    if (qg.size() == 0) {
      pl.sendMessage(ChatColor.RED + "No games to join");
      msgmgr.sendMessage(PrefixType.WARNING, "No games to join!", pl);
      return;
    }
    qg.get(0).addPlayer(pl);
  }

  public WorldEditPlugin getWorldEdit() {
    return p.getWorldEdit();
  }

  public void createArenaFromSelection(Player pl) {
    FileConfiguration c = SettingsManager.getInstance().getSystemConfig();
    //SettingsManager s = SettingsManager.getInstance();

    WorldEditPlugin we = p.getWorldEdit();
    Selection sel = we.getSelection(pl);
    if (sel == null) {
      msgmgr.sendMessage(PrefixType.WARNING, "You must make a WorldEdit Selection first!", pl);
      return;
    }
    Location max = sel.getMaximumPoint();
    Location min = sel.getMinimumPoint();

    /* if(max.getWorld()!=SettingsManager.getGameWorld() || min.getWorld()!=SettingsManager.getGameWorld()){
            pl.sendMessage(ChatColor.RED+"Wrong World!");
            return;
        }*/

    int no = c.getInt("sg-system.arenano") + 1;
    c.set("sg-system.arenano", no);
    if (games.size() == 0) {
      no = 1;
    } else no = games.get(games.size() - 1).getID() + 1;
    SettingsManager.getInstance().getSpawns().set(("spawns." + no), null);
    c.set("sg-system.arenas." + no + ".world", max.getWorld().getName());
    c.set("sg-system.arenas." + no + ".x1", max.getBlockX());
    c.set("sg-system.arenas." + no + ".y1", max.getBlockY());
    c.set("sg-system.arenas." + no + ".z1", max.getBlockZ());
    c.set("sg-system.arenas." + no + ".x2", min.getBlockX());
    c.set("sg-system.arenas." + no + ".y2", min.getBlockY());
    c.set("sg-system.arenas." + no + ".z2", min.getBlockZ());
    c.set("sg-system.arenas." + no + ".enabled", true);

    SettingsManager.getInstance().saveSystemConfig();
    hotAddArena(no);
    pl.sendMessage(ChatColor.GREEN + "Arena ID " + no + " Succesfully added");

  }

  private void hotAddArena(int no) {
    Game game = new Game(no);
    games.add(game);
    StatsManager.getInstance().addArena(no);
    //SurvivalGames.$("game added "+ games.size()+" "+SettingsManager.getInstance().getSystemConfig().getInt("gs-system.arenano"));
  }

  public void hotRemoveArena(int no) {
    for (Game g: games.toArray(new Game[0])) {
      if (g.getID() == no) {
        games.remove(getGame(no));
      }
    }
  }

  public void gameEndCallBack(int id) {
    getGame(id).setRBStatus("clearing chest");
    openedChest.put(id, new HashSet < Block > ());
  }

  public String getStringList(int gid){
    Game g = getGame(gid);
    StringBuilder sb = new StringBuilder();
    Player[][]players = g.getPlayers();

    sb.append(ChatColor.GREEN+"<---------------------[ Alive: "+players[0].length+" ]--------------------->\n"+ChatColor.GREEN+" ");
    for(Player p: players[0]){
      sb.append(p.getName()+",");
    }
    sb.append("\n\n");
    sb.append(ChatColor.RED+  "<---------------------[ Dead: "+players[1].length+" ]---------------------->\n"+ChatColor.GREEN+" ");
    for(Player p: players[1]){
      sb.append(p.getName()+",");
    }
    sb.append("\n\n");

    return sb.toString();
  }


}
TOP

Related Classes of org.mcsg.survivalgames.GameManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.