Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 32.73 KB | None | 0 0
  1. package cz.mot.anni;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.HashSet;
  6. import java.util.List;
  7. import java.util.Set;
  8. import java.util.logging.Level;
  9. import org.apache.commons.lang.WordUtils;
  10. import org.bukkit.Bukkit;
  11. import org.bukkit.ChatColor;
  12. import org.bukkit.DyeColor;
  13. import org.bukkit.GameMode;
  14. import org.bukkit.Location;
  15. import org.bukkit.Material;
  16. import org.bukkit.OfflinePlayer;
  17. import org.bukkit.Sound;
  18. import org.bukkit.World;
  19. import org.bukkit.command.CommandSender;
  20. import org.bukkit.configuration.Configuration;
  21. import org.bukkit.configuration.ConfigurationSection;
  22. import org.bukkit.configuration.file.FileConfiguration;
  23. import org.bukkit.entity.Player;
  24. import org.bukkit.inventory.EnchantingInventory;
  25. import org.bukkit.inventory.ItemStack;
  26. import org.bukkit.inventory.PlayerInventory;
  27. import org.bukkit.inventory.meta.ItemMeta;
  28. import org.bukkit.plugin.PluginManager;
  29. import org.bukkit.plugin.java.JavaPlugin;
  30. import org.bukkit.potion.PotionEffect;
  31. import org.bukkit.scoreboard.Score;
  32. import org.bukkit.scoreboard.Team;
  33.  
  34. import cz.mot.anni.api.ActionAPI;
  35. import cz.mot.anni.api.TitleAPI;
  36. import cz.mot.anni.chat.ChatListener;
  37. import cz.mot.anni.chat.ChatUtil;
  38. import cz.mot.anni.cmds.AnniCommand;
  39. import cz.mot.anni.cmds.ClassCommand;
  40. import cz.mot.anni.cmds.DistanceCommand;
  41. import cz.mot.anni.cmds.MapCommand;
  42. import cz.mot.anni.cmds.StatsCommand;
  43. import cz.mot.anni.cmds.TeamCommand;
  44. import cz.mot.anni.cmds.TeamShortcutCommand;
  45. import cz.mot.anni.cmds.VoteCommand;
  46. import cz.mot.anni.events.AutoLapisEvent;
  47. import cz.mot.anni.events.GameStartEvent;
  48. import cz.mot.anni.events.IconMenu;
  49. import cz.mot.anni.events.PhaseChangeEvent;
  50. import cz.mot.anni.listeners.BossListener;
  51. import cz.mot.anni.listeners.ClassAbilityListener;
  52. import cz.mot.anni.listeners.CraftingListener;
  53. import cz.mot.anni.listeners.EnderBrewingStandListener;
  54. import cz.mot.anni.listeners.EnderChestListener;
  55. import cz.mot.anni.listeners.EnderFurnaceListener;
  56. import cz.mot.anni.listeners.PlayerListener;
  57. import cz.mot.anni.listeners.ResourceListener;
  58. import cz.mot.anni.listeners.SoulboundListener;
  59. import cz.mot.anni.listeners.WandListener;
  60. import cz.mot.anni.listeners.WorldListener;
  61. import cz.mot.anni.manager.BossManager;
  62. import cz.mot.anni.manager.ConfigManager;
  63. import cz.mot.anni.manager.DatabaseManager;
  64. import cz.mot.anni.manager.MapManager;
  65. import cz.mot.anni.manager.PhaseManager;
  66. import cz.mot.anni.manager.RestartHandler;
  67. import cz.mot.anni.manager.ScoreboardManager;
  68. import cz.mot.anni.manager.SignManager;
  69. import cz.mot.anni.manager.VotingManager;
  70. import cz.mot.anni.maps.MapLoader;
  71. import cz.mot.anni.object.Boss;
  72. import cz.mot.anni.object.GameTeam;
  73. import cz.mot.anni.object.Kit;
  74. import cz.mot.anni.object.PlayerMeta;
  75. import cz.mot.anni.object.Shop;
  76. import cz.mot.anni.stats.StatType;
  77. import cz.mot.anni.stats.StatsManager;
  78.  
  79.  
  80. public final class Main extends JavaPlugin {
  81. private ConfigManager configManager;
  82. public VotingManager voting;
  83. private MapManager maps;
  84. private PhaseManager timer;
  85. private ResourceListener resources;
  86. private EnderFurnaceListener enderFurnaces;
  87. private EnderBrewingStandListener enderBrewingStands;
  88. private EnderChestListener enderChests;
  89. private StatsManager stats;
  90. private SignManager sign;
  91. private ScoreboardManager sb;
  92. private DatabaseManager db;
  93. private BossManager boss;
  94.  
  95. public static HashMap<String, String> messages = new HashMap<>();
  96. public ArrayList<EnchantingInventory> inventories;
  97.  
  98. public boolean useMysql = false;
  99. public boolean updateAvailable = false;
  100. public boolean motd = true;
  101. public String newVersion;
  102. public static Main anni;
  103. private HashMap<Player, String> portal;
  104.  
  105. public int build = 1;
  106. public int lastJoinPhase = 2;
  107. public int respawn = 10;
  108.  
  109. public boolean runCommand = false;
  110. public List<String> commands = new ArrayList<>();
  111.  
  112. public String mysqlName = "annihilation";
  113.  
  114. public static Main getInstance() {
  115. return anni;
  116. }
  117.  
  118. @Override
  119. public void onEnable() {
  120. Bukkit.getConsoleSender().sendMessage("§f-------------------------------------");
  121. Bukkit.getConsoleSender().sendMessage("");
  122. Bukkit.getConsoleSender().sendMessage("§cAnnihilation §8» §aEnabling..");
  123. Bukkit.getConsoleSender().sendMessage("");
  124. Bukkit.getConsoleSender().sendMessage(" §c2%");
  125. Bukkit.getConsoleSender().sendMessage(" §c4%");
  126. Bukkit.getConsoleSender().sendMessage(" §c5%");
  127. Bukkit.getConsoleSender().sendMessage(" §c8%");
  128. Bukkit.getConsoleSender().sendMessage(" §c9%");
  129. Bukkit.getConsoleSender().sendMessage(" §c10%");
  130. Bukkit.getConsoleSender().sendMessage(" §c11%");
  131. Bukkit.getConsoleSender().sendMessage(" §c12%");
  132. Bukkit.getConsoleSender().sendMessage(" §c13%");
  133. Bukkit.getConsoleSender().sendMessage(" §c15%");
  134. Bukkit.getConsoleSender().sendMessage(" §c16%");
  135. Bukkit.getConsoleSender().sendMessage(" §c17%");
  136. Bukkit.getConsoleSender().sendMessage(" §c18%");
  137. Bukkit.getConsoleSender().sendMessage(" §c20%");
  138. Bukkit.getConsoleSender().sendMessage(" §c22%");
  139. Bukkit.getConsoleSender().sendMessage(" §c28%");
  140. Bukkit.getConsoleSender().sendMessage(" §c30%");
  141. Bukkit.getConsoleSender().sendMessage(" §c31%");
  142. Bukkit.getConsoleSender().sendMessage(" §c32%");
  143. Bukkit.getConsoleSender().sendMessage(" §c33%");
  144. Bukkit.getConsoleSender().sendMessage(" §c34%");
  145. Bukkit.getConsoleSender().sendMessage(" §c35%");
  146. Bukkit.getConsoleSender().sendMessage(" §c36%");
  147. Bukkit.getConsoleSender().sendMessage(" §c36%");
  148. Bukkit.getConsoleSender().sendMessage(" §c36%");
  149. Bukkit.getConsoleSender().sendMessage(" §c38%");
  150. Bukkit.getConsoleSender().sendMessage(" §c39%");
  151. Bukkit.getConsoleSender().sendMessage(" §c40%");
  152. Bukkit.getConsoleSender().sendMessage(" §c42%");
  153. Bukkit.getConsoleSender().sendMessage(" §c46%");
  154. Bukkit.getConsoleSender().sendMessage(" §c50%");
  155. Bukkit.getConsoleSender().sendMessage(" §c55%");
  156. Bukkit.getConsoleSender().sendMessage(" §c58%");
  157. Bukkit.getConsoleSender().sendMessage(" §c59%");
  158. Bukkit.getConsoleSender().sendMessage(" §c62%");
  159. Bukkit.getConsoleSender().sendMessage(" §c62%");
  160. Bukkit.getConsoleSender().sendMessage(" §c63%");
  161. Bukkit.getConsoleSender().sendMessage(" §c64%");
  162. Bukkit.getConsoleSender().sendMessage(" §c70%");
  163. Bukkit.getConsoleSender().sendMessage(" §c77%");
  164. Bukkit.getConsoleSender().sendMessage(" §c86%");
  165. Bukkit.getConsoleSender().sendMessage(" §c87%");
  166. Bukkit.getConsoleSender().sendMessage(" §c88%");
  167. Bukkit.getConsoleSender().sendMessage(" §c89%");
  168. Bukkit.getConsoleSender().sendMessage(" §c90%");
  169. Bukkit.getConsoleSender().sendMessage(" §c91%");
  170. Bukkit.getConsoleSender().sendMessage(" §c92%");
  171. Bukkit.getConsoleSender().sendMessage(" §c93%");
  172. Bukkit.getConsoleSender().sendMessage(" §c94%");
  173. Bukkit.getConsoleSender().sendMessage(" §c95%");
  174. Bukkit.getConsoleSender().sendMessage(" §c96%");
  175. Bukkit.getConsoleSender().sendMessage(" §c97%");
  176. Bukkit.getConsoleSender().sendMessage(" §c98%");
  177. Bukkit.getConsoleSender().sendMessage(" §c99%");
  178. Bukkit.getConsoleSender().sendMessage(" §c99%");
  179. Bukkit.getConsoleSender().sendMessage(" §c99%");
  180. Bukkit.getConsoleSender().sendMessage(" §c99%");
  181. Bukkit.getConsoleSender().sendMessage(" §c99%");
  182. Bukkit.getConsoleSender().sendMessage(" §c99%");
  183. Bukkit.getConsoleSender().sendMessage(" §c100%");
  184. Bukkit.getConsoleSender().sendMessage(" §f");
  185. Bukkit.getConsoleSender().sendMessage(" §f");
  186. Bukkit.getConsoleSender().sendMessage(" §f");
  187. Bukkit.getConsoleSender().sendMessage(" §f");
  188. Bukkit.getConsoleSender().sendMessage(" §f");
  189. Bukkit.getConsoleSender().sendMessage(" §aDONE!... ✔");
  190. Bukkit.getConsoleSender().sendMessage(" §f");
  191. Bukkit.getConsoleSender().sendMessage("§f-------------------------------------"); {
  192.  
  193. }
  194.  
  195.  
  196. anni = this;
  197. configManager = new ConfigManager(this);
  198. configManager.loadConfigFiles("config.yml", "maps.yml", "shops.yml", "stats.yml", "messages.yml");
  199.  
  200. inventories = new ArrayList<EnchantingInventory>();
  201.  
  202. MapLoader mapLoader = new MapLoader(getLogger(), getDataFolder());
  203.  
  204. runCommand = getConfig().contains("commandsToRunAtEndGame");
  205.  
  206. if (runCommand) {
  207. commands = getConfig().getStringList("commandsToRunAtEndGame");
  208. } else commands = null;
  209.  
  210. maps = new MapManager(this, mapLoader,
  211. configManager.getConfig("maps.yml"));
  212.  
  213. Configuration shops = configManager.getConfig("shops.yml");
  214. new Shop(this, "Weapon", shops);
  215. new Shop(this, "Brewing", shops);
  216. stats = new StatsManager(this, configManager);
  217. resources = new ResourceListener(this);
  218. enderFurnaces = new EnderFurnaceListener(this);
  219. enderBrewingStands = new EnderBrewingStandListener(this);
  220. enderChests = new EnderChestListener();
  221. sign = new SignManager(this);
  222. Configuration config = configManager.getConfig("config.yml");
  223. portal = new HashMap<Player, String>();
  224. timer = new PhaseManager(this, config.getInt("start-delay"),
  225. config.getInt("phase-period"));
  226. voting = new VotingManager(this);
  227. sb = new ScoreboardManager();
  228. boss = new BossManager(this);
  229.  
  230. PluginManager pm = getServer().getPluginManager();
  231.  
  232. sign.loadSigns();
  233.  
  234. String sbb = this.getConfig().getString("LobbySB").replace("&", "§");
  235. sb.resetScoreboard(sbb);
  236.  
  237. build = this.getConfig().getInt("build", 5);
  238. lastJoinPhase = this.getConfig().getInt("lastJoinPhase", 2);
  239. respawn = this.getConfig().getInt("bossRespawnDelay", 10);
  240.  
  241. pm.registerEvents(resources, this);
  242. pm.registerEvents(enderFurnaces, this);
  243. pm.registerEvents(new EnderFurnaceListener(this), this);
  244. pm.registerEvents(enderBrewingStands, this);
  245. pm.registerEvents(enderChests, this);
  246. pm.registerEvents(new ChatListener(this), this);
  247. pm.registerEvents(new PlayerListener(this), this);
  248. pm.registerEvents(new WorldListener(), this);
  249. pm.registerEvents(new SoulboundListener(), this);
  250. pm.registerEvents(new WandListener(this), this);
  251. pm.registerEvents(new CraftingListener(), this);
  252. pm.registerEvents(new ClassAbilityListener(this), this);
  253. pm.registerEvents(new BossListener(this), this);
  254. pm.registerEvents(new AutoLapisEvent(this), this);
  255.  
  256. getCommand("annihilation").setExecutor(new AnniCommand(this));
  257. getCommand("class").setExecutor(new ClassCommand(this));
  258. getCommand("stats").setExecutor(new StatsCommand(stats, null));
  259. getCommand("team").setExecutor(new TeamCommand(this));
  260. getCommand("vote").setExecutor(new VoteCommand(voting));
  261. getCommand("red").setExecutor(new TeamShortcutCommand());
  262. getCommand("green").setExecutor(new TeamShortcutCommand());
  263. getCommand("yellow").setExecutor(new TeamShortcutCommand());
  264. getCommand("blue").setExecutor(new TeamShortcutCommand());
  265. getCommand("distance").setExecutor(new DistanceCommand(this));
  266. getCommand("map").setExecutor(new MapCommand(this, mapLoader));
  267.  
  268. if (config.getString("stats").equalsIgnoreCase("sql"))
  269. useMysql = true;
  270.  
  271. motd = config.getBoolean("enableMotd", true);
  272.  
  273. if (useMysql) {
  274. String host = config.getString("MySQL.host");
  275. Integer port = config.getInt("MySQL.port");
  276. String name = config.getString("MySQL.name");
  277. String user = config.getString("MySQL.user");
  278. String pass = config.getString("MySQL.pass");
  279. db = new DatabaseManager(host, port, name, user, pass, this);
  280.  
  281. db.query("CREATE TABLE IF NOT EXISTS `" + mysqlName + "` ( `username` varchar(16) NOT NULL, "
  282. + "`kills` int(16) NOT NULL, `deaths` int(16) NOT NULL, `wins` int(16) NOT NULL, "
  283. + "`losses` int(16) NOT NULL, `nexus_damage` int(16) NOT NULL, "
  284. + "UNIQUE KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;");
  285. } else
  286. db = new DatabaseManager(this);
  287.  
  288. if (getServer().getPluginManager().isPluginEnabled("Vault")) {
  289. VaultHooks.vault = true;
  290. if (!VaultHooks.instance().setupPermissions()) {
  291. VaultHooks.vault = false;
  292. getLogger().warning("Unable to load Vault: No permission plugin found.");
  293. } else {
  294. if (!VaultHooks.instance().setupChat()) {
  295. VaultHooks.vault = false;
  296. getLogger().warning("Unable to load Vault: No chat plugin found.");
  297. } else {
  298. getLogger().info("Vault hook initalized!");
  299. }
  300. }
  301. } else {
  302. getLogger().warning("Vault not found! Permissions features disabled.");
  303. }
  304.  
  305. reset();
  306.  
  307. ChatUtil.setRoman(getConfig().getBoolean("roman", false));
  308. }
  309.  
  310. public boolean startTimer() {
  311. if (timer.isRunning())
  312. return false;
  313.  
  314. timer.start();
  315.  
  316. return true;
  317. }
  318.  
  319. public void onDisable() {
  320. for (EnchantingInventory ei : inventories) {
  321. ei.setItem(1, null);
  322. }
  323. inventories = null;
  324. }
  325. public void loadMap(final String map) {
  326. FileConfiguration config = configManager.getConfig("maps.yml");
  327. ConfigurationSection section = config.getConfigurationSection(map);
  328.  
  329. World w = getServer().getWorld(map);
  330.  
  331. for (GameTeam team : GameTeam.teams()) {
  332. String name = team.name().toLowerCase();
  333. if (section.contains("spawns." + name)) {
  334. for (String s : section.getStringList("spawns." + name))
  335. team.addSpawn(Util.parseLocation(getServer().getWorld(map), s));
  336. }
  337. int nexushp = this.getConfig().getInt("nexus.hp");
  338.  
  339. if (section.contains("nexuses." + name)) {
  340. Location loc = Util.parseLocation(w,section.getString("nexuses." + name));
  341. team.loadNexus(loc, nexushp);
  342. }
  343. if (section.contains("furnaces." + name)) {
  344. Location loc = Util.parseLocation(w, section.getString("furnaces." + name));
  345. enderFurnaces.setFurnaceLocation(team, loc);
  346. loc.getBlock().setType(Material.BURNING_FURNACE);
  347. }
  348. if (section.contains("brewingstands." + name)) {
  349. Location loc = Util.parseLocation(w, section.getString("brewingstands." + name));
  350. enderBrewingStands.setBrewingStandLocation(team, loc);
  351. loc.getBlock().setType(Material.BREWING_STAND);
  352. }
  353. if (section.contains("enderchests." + name)) {
  354. Location loc = Util.parseLocation(w, section.getString("enderchests." + name));
  355. enderChests.setEnderChestLocation(team, loc);
  356. loc.getBlock().setType(Material.ENDER_CHEST);
  357. }
  358. }
  359.  
  360. if (section.contains("bosses")) {
  361. HashMap<String, Boss> bosses = new HashMap<String, Boss>();
  362. ConfigurationSection sec = section.getConfigurationSection("bosses");
  363. for (String boss : sec.getKeys(false)) {
  364. bosses.put(
  365. boss,
  366. new Boss(boss, sec.getInt(boss + ".hearts") * 2, sec.getString(boss + ".name"), Util.parseLocation( w, sec.getString(boss + ".spawn")), Util
  367. .parseLocation(w, sec.getString(boss + ".chest"))));
  368. }
  369. boss.loadBosses(bosses);
  370. }
  371.  
  372. if (section.contains("diamonds")) {
  373. Set<Location> diamonds = new HashSet<>();
  374. for (String s : section.getStringList("diamonds"))
  375. diamonds.add(Util.parseLocation(w, s));
  376. resources.loadDiamonds(diamonds);
  377. }
  378. }
  379. public HashMap<Player, String> getPortalPlayers() {
  380. return portal;
  381. }
  382. @SuppressWarnings("deprecation")
  383. public void startGame() {
  384. for (Player p : Bukkit.getOnlinePlayers()) {
  385. for (Player pp : Bukkit.getOnlinePlayers()) {
  386. p.showPlayer(pp);
  387. pp.showPlayer(p);
  388. }
  389. }
  390.  
  391. Bukkit.getPluginManager().callEvent(
  392. new GameStartEvent(maps.getCurrentMap()));
  393. sb.scores.clear();
  394.  
  395. String sbn = this.getConfig().getString("sb.name").replace("&", "§");
  396.  
  397. for (OfflinePlayer score : sb.sb.getPlayers()) sb.sb.resetScores(score);
  398. sb.obj.setDisplayName(sbn);
  399.  
  400. for (GameTeam t : GameTeam.teams()) {
  401. sb.scores.put(t.name(), sb.obj.getScore(Bukkit.getOfflinePlayer(WordUtils.capitalize(t.name().toLowerCase() + " Nexus"))));
  402. sb.scores.get(t.name()).setScore(t.getNexus().getHealth());
  403.  
  404. Team sbt = sb.sb.registerNewTeam(t.name() + "SB");
  405. sbt.addPlayer(Bukkit.getOfflinePlayer(WordUtils.capitalize(WordUtils.capitalize(t.name().toLowerCase() + " Nexus"))));
  406. sbt.setPrefix(t.color().toString());
  407.  
  408. String sbm = this.getConfig().getString("sb.map").replace("&", "§").replace("%MAP%", WordUtils.capitalize(voting.getWinner()));
  409. String sbs = this.getConfig().getString("sb.server").replace("&", "§");
  410.  
  411. Score spacer = sb.obj.getScore("§c");
  412. spacer.setScore(-1);
  413.  
  414. Score spacer2 = sb.obj.getScore(sbm);
  415. spacer2.setScore(-2);
  416.  
  417. Score spacer5 = sb.obj.getScore("§e");
  418. spacer5.setScore(-3);
  419.  
  420. Score spacer6 = sb.obj.getScore(sbs);
  421. spacer6.setScore(-4);
  422. }
  423.  
  424. sb.obj.setDisplayName(sbn);
  425.  
  426. for (Player p : getServer().getOnlinePlayers())
  427. if (PlayerMeta.getMeta(p).getTeam() != GameTeam.NONE)
  428. Util.sendPlayerToGame(p, this);
  429.  
  430. sb.update();
  431.  
  432. getServer().getScheduler().runTaskTimer(this, new Runnable() {
  433. @Override
  434. public void run() {
  435. for (Player p : getServer().getOnlinePlayers()) {
  436. if (PlayerMeta.getMeta(p).getKit() == Kit.SCOUT) {
  437. PlayerMeta.getMeta(p).getKit().addScoutParticles(p);
  438. }
  439. }
  440. }
  441. }, 0L, 1200L);
  442.  
  443. getServer().getScheduler().runTaskTimer(this, new Runnable() {
  444. @Override
  445. public void run() {
  446. for (GameTeam t : GameTeam.values()) {
  447. if (t != GameTeam.NONE && t.getNexus().isAlive()) {
  448. Location nexus = t.getNexus().getLocation().clone();
  449. nexus.add(0.5, 0, 0.5);
  450. Util.ParticleEffect.PORTAL.getName();
  451. Util.ParticleEffect.ENCHANTMENT_TABLE.getName();
  452. }
  453. }
  454. }
  455. }, 100L, 5L);
  456. }
  457.  
  458. public void advancePhase() {
  459. ChatUtil.phaseMessage(timer.getPhase());
  460.  
  461. if (timer.getPhase() == 2)
  462. boss.spawnBosses();
  463.  
  464.  
  465. if (timer.getPhase() == 3)
  466. resources.spawnDiamonds();
  467.  
  468. Bukkit.getPluginManager().callEvent(
  469. new PhaseChangeEvent(timer.getPhase()));
  470.  
  471. getSignHandler().updateSigns(GameTeam.RED);
  472. getSignHandler().updateSigns(GameTeam.BLUE);
  473. getSignHandler().updateSigns(GameTeam.GREEN);
  474. getSignHandler().updateSigns(GameTeam.YELLOW);
  475. }
  476.  
  477. public void onSecond() {
  478. long time = timer.getTime();
  479. String prefix = this.getConfig().getString("prefix").replace("&", "§");
  480. if (time == -5L) {
  481.  
  482. String winner = voting.getWinner();
  483. voting.end();
  484. getServer().broadcastMessage(configManager.getConfig("messages.yml").getString("voting.ended").replace("&", "§"));
  485. maps.selectMap(winner);
  486. String msgT = this.getConfig().getString("MapTitle").replace("&", "§").replace("%MAP%", WordUtils.capitalize(winner));
  487. String msgST = this.getConfig().getString("MapSubTitle").replace("&", "§").replace("%MAP%", WordUtils.capitalize(winner));
  488. getServer().broadcastMessage(" §3Map §a" + WordUtils.capitalize(winner) + " §3was voted!");
  489. loadMap(winner);
  490.  
  491. for (Player p : Bukkit.getOnlinePlayers()) {
  492. if (Main.getInstance().getConfig().getBoolean("EnableMapTitle") == true) {
  493. TitleAPI.sendTitle(p, 20, 50, 20, msgT, msgST);
  494. }
  495. p.playSound(p.getLocation(), Sound.ANVIL_USE, 1, 1);
  496. }
  497. }
  498.  
  499. if (time > -5L) {
  500. if (this.getPhase() == 0) {
  501. for (Player p : Bukkit.getOnlinePlayers()) {
  502. p.playSound(p.getLocation(), Sound.LEVEL_UP, 1, 2F);
  503.  
  504. }
  505. }
  506. }
  507.  
  508. if (time == 0L)
  509. startGame();
  510. }
  511.  
  512. public int getPhase() {
  513. return timer.getPhase();
  514. }
  515.  
  516. public MapManager getMapManager() {
  517. return maps;
  518. }
  519.  
  520. public StatsManager getStatsManager() {
  521. return stats;
  522. }
  523.  
  524. public DatabaseManager getDatabaseHandler() {
  525. return db;
  526. }
  527.  
  528. public ConfigManager getConfigManager() {
  529. return configManager;
  530. }
  531.  
  532. public int getPhaseDelay() {
  533. return configManager.getConfig("config.yml").getInt("phase-period");
  534. }
  535.  
  536. public void log(String m, Level l) {
  537. getLogger().log(l, m);
  538. }
  539.  
  540. public VotingManager getVotingManager() {
  541. return voting;
  542. }
  543.  
  544. public ScoreboardManager getScoreboardHandler() {
  545. return sb;
  546. }
  547.  
  548. public void endGame(GameTeam winner) {
  549. if (winner == null)
  550. return;
  551.  
  552. ChatUtil.winMessage(winner);
  553. timer.stop();
  554.  
  555. for (Player p : getServer().getOnlinePlayers()) {
  556. if (PlayerMeta.getMeta(p).getTeam() == winner)
  557. stats.incrementStat(StatType.WINS, p);
  558. }
  559.  
  560. long restartDelay = configManager.getConfig("config.yml").getLong("restart-delay");
  561. RestartHandler rs = new RestartHandler(this, restartDelay);
  562. rs.start(timer.getTime(), winner.getColor(winner));
  563. }
  564.  
  565. public void reset() {
  566. String sbb = this.getConfig().getString("LobbySB").replace("&", "§");
  567. sb.resetScoreboard(sbb);
  568. maps.reset();
  569. timer.reset();
  570. PlayerMeta.reset();
  571. for (Player p : getServer().getOnlinePlayers()) {
  572. PlayerMeta.getMeta(p).setTeam(GameTeam.NONE);
  573. p.teleport(maps.getLobbySpawnPoint());
  574. ActionAPI.sendPlayerAnnouncement(p, this.getConfig().getString("ActionWelcome").replace("&", "§"));
  575. p.setMaxHealth(20D);
  576. p.setHealth(20D);
  577. p.setFoodLevel(20);
  578. p.setSaturation(20F);
  579.  
  580. //Class item
  581.  
  582. int id = this.getConfig().getInt("ItemClassID");
  583. @SuppressWarnings("deprecation")
  584. ItemStack selector = new ItemStack(Material.getMaterial(id));
  585. ItemMeta itemMeta = selector.getItemMeta();
  586. String item = this.getConfig().getString("JoinItemClassName").replace("&", "§");
  587. itemMeta.setDisplayName(item);
  588. Util.giveTeamSelector(p);
  589. selector.setItemMeta(itemMeta);
  590. int slot = this.getConfig().getInt("JoinItemClassSlot");
  591. p.getInventory().setItem(slot-1, selector);
  592.  
  593. p.updateInventory();
  594. }
  595.  
  596. voting.start();
  597. sb.update();
  598.  
  599. for (Player p : Bukkit.getOnlinePlayers()) {
  600. for (Player pp : Bukkit.getOnlinePlayers()) {
  601. p.showPlayer(pp);
  602. pp.showPlayer(p);
  603. }
  604. }
  605.  
  606. Bukkit.getScheduler().runTaskLater(this, new Runnable() {
  607. @Override
  608. public void run() {
  609. for (Player p : getServer().getOnlinePlayers()) {
  610. PlayerInventory inv = p.getInventory();
  611. inv.setHelmet(null);
  612. inv.setChestplate(null);
  613. inv.setLeggings(null);
  614. inv.setBoots(null);
  615.  
  616. p.getInventory().clear();
  617.  
  618. for (PotionEffect effect : p.getActivePotionEffects()) p.removePotionEffect(effect.getType());
  619.  
  620. p.setLevel(0);
  621. p.setExp(0);
  622. p.setSaturation(20F);
  623.  
  624. Main plugin = Main.getInstance();
  625. int id = plugin.getConfig().getInt("ItemClassID");
  626. @SuppressWarnings("deprecation")
  627. ItemStack selector = new ItemStack(Material.getMaterial(id));
  628. ItemMeta itemMeta = selector.getItemMeta();
  629. String item = plugin.getConfig().getString("JoinItemClassName").replace("&", "§");
  630. itemMeta.setDisplayName(item);
  631. Util.giveTeamSelector(p);
  632. selector.setItemMeta(itemMeta);
  633. int slot = plugin.getConfig().getInt("JoinItemClassSlot");
  634. p.getInventory().setItem(slot-1, selector);
  635.  
  636. p.updateInventory();
  637. }
  638.  
  639. for (GameTeam t : GameTeam.values())
  640. if (t != GameTeam.NONE)
  641. sign.updateSigns(t);
  642.  
  643. checkStarting();
  644. }
  645. }, 2L);
  646. }
  647.  
  648. public void checkWin() {
  649. int alive = 0;
  650. GameTeam aliveTeam = null;
  651. for (GameTeam t : GameTeam.teams()) {
  652. if (t.getNexus().isAlive()) {
  653. alive++;
  654. aliveTeam = t;
  655. }
  656. }
  657. if (alive == 1) {
  658. endGame(aliveTeam);
  659. }
  660. }
  661.  
  662. public SignManager getSignHandler() {
  663. return sign;
  664. }
  665.  
  666. public void setSignHandler(SignManager sign) {
  667. this.sign = sign;
  668. }
  669.  
  670. public void checkStarting() {
  671. if (!timer.isRunning()) {
  672. if (Bukkit.getOnlinePlayers().size() >= getConfig().getInt("requiredToStart"))
  673. timer.start();
  674. }
  675. }
  676.  
  677. public BossManager getBossManager() {
  678. return boss;
  679. }
  680.  
  681. public PhaseManager getPhaseManager() {
  682. return timer;
  683. }
  684.  
  685. public void listTeams(CommandSender sender) {
  686. sender.sendMessage("§8&m============[§a §a§lTeams §8]§8§m============§8");
  687. for (GameTeam t : GameTeam.teams()) {
  688. int size = 0;
  689.  
  690. for (Player p : Bukkit.getOnlinePlayers()) {
  691. PlayerMeta meta = PlayerMeta.getMeta(p);
  692. if (meta.getTeam() == t)
  693. size++;
  694. }
  695.  
  696. if (size != 1) {
  697. sender.sendMessage(t.coloredName() + " §7- " + size + " §6palyers");
  698. } else {
  699. sender.sendMessage(t.coloredName() + " §7- " + size + " §6player");
  700. }
  701. }
  702. sender.sendMessage("§8§m==================================");
  703. }
  704.  
  705. @SuppressWarnings("deprecation")
  706. public void joinTeam(Player player, String team) {
  707. String prefix = this.getConfig().getString("prefix").replace("&", "§");
  708. PlayerMeta meta = PlayerMeta.getMeta(player);
  709. if (meta.getTeam() != GameTeam.NONE && !player.hasPermission("anni.bypass.teamlimitor")) {
  710. player.sendMessage(configManager.getConfig("messages.yml").getString("team.cantchange").replace("&", "§"));
  711. return;
  712. }
  713.  
  714. GameTeam target;
  715. try {
  716. target = GameTeam.valueOf(team.toUpperCase());
  717. } catch (IllegalArgumentException e) {
  718. player.sendMessage(ChatColor.RED + configManager.getConfig("messages.yml").getString("team.unknown").replace("&", "§"));
  719. listTeams(player);
  720. return;
  721. }
  722.  
  723. if (Util.isTeamTooBig(target)
  724. && !player.hasPermission("anni.bypass.teamlimit")) {
  725. player.sendMessage(prefix + configManager.getConfig("messages.yml").getString("team.full").replace("&", "§"));
  726. return;
  727. }
  728.  
  729. if (target.getNexus() != null) {
  730. if (target.getNexus().getHealth() == 0 && getPhase() > 1) {
  731. player.sendMessage(configManager.getConfig("messages.yml").getString("team.destroynex").replace("&", "§"));
  732. return;
  733. }
  734. }
  735.  
  736. if (getPhase() > lastJoinPhase && !player.hasPermission("anni.bypass.phaselimiter")) {
  737. player.setGameMode(GameMode.SPECTATOR);
  738. return;
  739. }
  740.  
  741. String msg = this.getConfig().getString("JoinTitleTeam").replace("&", "§").replace("%TEAM%", target.coloredName());
  742. String msg1 = this.getConfig().getString("JoinSubTitleTeam").replace("&", "§").replace("%TEAM%", target.coloredName());
  743.  
  744. if (Main.getInstance().getConfig().getBoolean("EnableJoinTeamTitle") == true) {
  745. TitleAPI.sendTitle(player, 20, 50, 20, msg, msg1);
  746. }
  747. meta.setTeam(target);
  748.  
  749. getScoreboardHandler().teams.get(team.toUpperCase()).addPlayer(player);
  750.  
  751. if (getPhase() > 0) {
  752. Util.sendPlayerToGame(player, this);
  753. }
  754.  
  755. getSignHandler().updateSigns(GameTeam.RED);
  756. getSignHandler().updateSigns(GameTeam.BLUE);
  757. getSignHandler().updateSigns(GameTeam.GREEN);
  758. getSignHandler().updateSigns(GameTeam.YELLOW);
  759. }
  760.  
  761. public void Team(final Player p) {
  762. @SuppressWarnings("deprecation")
  763. IconMenu menu = new IconMenu("§8• §fSelect Team!", 27, new IconMenu.OptionClickEventHandler() {
  764. @Override
  765. public void onOptionClick(IconMenu.OptionClickEvent event) {
  766.  
  767. String yellow = anni.getConfig().getString("YellowName").replace("&", "§");
  768. String red = anni.getConfig().getString("RedName").replace("&", "§");
  769. String green = anni.getConfig().getString("GreenName").replace("&", "§");
  770. String blue = anni.getConfig().getString("BlueName").replace("&", "§");
  771.  
  772. String d = event.getName();
  773. Player p = event.getPlayer();
  774. event.setWillClose(true);
  775. anni.joinTeam(p, ChatColor.stripColor(d.toLowerCase()));
  776. if (d == yellow) {
  777. anni.joinTeam(p, ChatColor.stripColor("§eYellow".toLowerCase()));
  778. }
  779. if (d == red) {
  780. anni.joinTeam(p, ChatColor.stripColor("§cRed".toLowerCase()));
  781. }
  782. if (d == green) {
  783. anni.joinTeam(p, ChatColor.stripColor("§aGreen".toLowerCase()));
  784. }
  785. if (d == blue) {
  786. anni.joinTeam(p, ChatColor.stripColor("§9Blue".toLowerCase()));
  787. }
  788.  
  789. }
  790. }, this).setOption(anni.getConfig().getInt("YellowSlot") -1, new ItemStack(Material.STAINED_GLASS, GameTeam.YELLOW.getPlayers().size(), DyeColor.YELLOW.getData()), anni.getConfig().getString("YellowName").replace("&", "§"), anni.getConfig().getString("YellowLore").replace("&", "§").replaceAll("%YELLOW%", String.valueOf(GameTeam.YELLOW.getPlayers().size())).replace("%ARROW%", "»"))
  791. .setOption(anni.getConfig().getInt("RedSlot") -1, new ItemStack(Material.STAINED_GLASS, GameTeam.RED.getPlayers().size(), DyeColor.RED.getData()), anni.getConfig().getString("RedName").replace("&", "§"), anni.getConfig().getString("RedLore").replace("&", "§").replaceAll("%RED%", String.valueOf(GameTeam.RED.getPlayers().size())).replace("%ARROW%", "»"))
  792. .setOption(anni.getConfig().getInt("GreenSlot") -1, new ItemStack(Material.STAINED_GLASS, GameTeam.GREEN.getPlayers().size(), DyeColor.GREEN.getData()), anni.getConfig().getString("GreenName").replace("&", "§"), anni.getConfig().getString("GreenLore").replace("&", "§").replaceAll("%GREEN%", String.valueOf(GameTeam.GREEN.getPlayers().size())).replace("%ARROW%", "»"))
  793. .setOption(anni.getConfig().getInt("BlueSlot") -1, new ItemStack(Material.STAINED_GLASS, GameTeam.BLUE.getPlayers().size(), DyeColor.BLUE.getData()), anni.getConfig().getString("BlueName").replace("&", "§"), anni.getConfig().getString("BlueLore").replace("&", "§").replaceAll("%BLUE%", String.valueOf(GameTeam.BLUE.getPlayers().size())).replace("%ARROW%", "»"));
  794.  
  795. menu.open(p);
  796. }
  797. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement