Lochinbekov

tower defence.class

Jul 25th, 2025
49
0
Never
8
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 118.15 KB | None | 0 0
  1. /* Decompiler 5531ms, total 6646ms, lines 2520 */
  2. package me.wazup.towerdefense;
  3.  
  4. import com.google.common.collect.Lists;
  5. import com.google.common.io.ByteArrayDataOutput;
  6. import com.google.common.io.ByteStreams;
  7. import java.io.File;
  8. import java.io.IOException;
  9. import java.io.InputStreamReader;
  10. import java.lang.reflect.InvocationTargetException;
  11. import java.lang.reflect.Method;
  12. import java.sql.SQLException;
  13. import java.text.SimpleDateFormat;
  14. import java.util.ArrayList;
  15. import java.util.Arrays;
  16. import java.util.Collection;
  17. import java.util.Collections;
  18. import java.util.Date;
  19. import java.util.HashMap;
  20. import java.util.Iterator;
  21. import java.util.LinkedHashMap;
  22. import java.util.LinkedList;
  23. import java.util.List;
  24. import java.util.Random;
  25. import java.util.Map.Entry;
  26. import me.wazup.towerdefense.Enums.AchievementType;
  27. import me.wazup.towerdefense.Enums.ArenaState;
  28. import me.wazup.towerdefense.Enums.SPECIAL_CHARACTER;
  29. import me.wazup.towerdefense.Tower.ActiveTower;
  30. import me.wazup.towerdefense.TowerDefense.1;
  31. import me.wazup.towerdefense.TowerDefense.10;
  32. import me.wazup.towerdefense.TowerDefense.11;
  33. import me.wazup.towerdefense.TowerDefense.12;
  34. import me.wazup.towerdefense.TowerDefense.13;
  35. import me.wazup.towerdefense.TowerDefense.14;
  36. import me.wazup.towerdefense.TowerDefense.15;
  37. import me.wazup.towerdefense.TowerDefense.16;
  38. import me.wazup.towerdefense.TowerDefense.17;
  39. import me.wazup.towerdefense.TowerDefense.2;
  40. import me.wazup.towerdefense.TowerDefense.3;
  41. import me.wazup.towerdefense.TowerDefense.4;
  42. import me.wazup.towerdefense.TowerDefense.5;
  43. import me.wazup.towerdefense.TowerDefense.6;
  44. import me.wazup.towerdefense.TowerDefense.7;
  45. import me.wazup.towerdefense.TowerDefense.8;
  46. import me.wazup.towerdefense.TowerDefense.9;
  47. import net.milkbowl.vault.economy.Economy;
  48. import org.bukkit.Bukkit;
  49. import org.bukkit.ChatColor;
  50. import org.bukkit.Color;
  51. import org.bukkit.FireworkEffect;
  52. import org.bukkit.GameMode;
  53. import org.bukkit.Location;
  54. import org.bukkit.Material;
  55. import org.bukkit.SkullType;
  56. import org.bukkit.Sound;
  57. import org.bukkit.World;
  58. import org.bukkit.WorldCreator;
  59. import org.bukkit.FireworkEffect.Type;
  60. import org.bukkit.World.Environment;
  61. import org.bukkit.block.Block;
  62. import org.bukkit.block.BlockState;
  63. import org.bukkit.block.Sign;
  64. import org.bukkit.block.Skull;
  65. import org.bukkit.command.Command;
  66. import org.bukkit.command.CommandSender;
  67. import org.bukkit.command.ConsoleCommandSender;
  68. import org.bukkit.configuration.file.FileConfiguration;
  69. import org.bukkit.configuration.file.YamlConfiguration;
  70. import org.bukkit.enchantments.Enchantment;
  71. import org.bukkit.entity.Firework;
  72. import org.bukkit.entity.LivingEntity;
  73. import org.bukkit.entity.Player;
  74. import org.bukkit.inventory.Inventory;
  75. import org.bukkit.inventory.InventoryHolder;
  76. import org.bukkit.inventory.ItemStack;
  77. import org.bukkit.inventory.meta.FireworkMeta;
  78. import org.bukkit.inventory.meta.SkullMeta;
  79. import org.bukkit.plugin.java.JavaPlugin;
  80. import org.bukkit.potion.PotionEffect;
  81. import org.bukkit.potion.PotionEffectType;
  82. import org.bukkit.scheduler.BukkitTask;
  83.  
  84. public class TowerDefense extends JavaPlugin {
  85. TowerDefense plugin;
  86. public static TowerDefenseAPI api;
  87. Random r = new Random();
  88. ChatColor[] colors;
  89. ArrayList<String> players;
  90. ArrayList<String> lobbyPlayers;
  91. ArrayList<Party> parties;
  92. LinkedHashMap<String, Tower> towers;
  93. LinkedHashMap<String, Enemy> enemies;
  94. LinkedHashMap<String, Enemy> bosses;
  95. LinkedHashMap<String, ClassData> classes;
  96. HashMap<String, PlayerData> playerData;
  97. HashMap<String, Location[]> selectionMode;
  98. HashMap<String, String> buildingAreaMode;
  99. HashMap<String, Object> playersSelectedObject;
  100. HashMap<String, Integer> towerSpeeds;
  101. HashMap<String, Double> enemySpeeds;
  102. HashMap<Location, Integer> joinSigns;
  103. HashMap<Location, Integer> topSigns;
  104. HashMap<String, Arena> arenas;
  105. ItemStack wand_itemstack;
  106. ItemStack towerbuildarea_itemstack;
  107. ItemStack pane_itemstack;
  108. ItemStack save_itemstack;
  109. ItemStack plus_itemstack;
  110. ItemStack minus_itemstack;
  111. ItemStack win_itemstack;
  112. ItemStack lose_itemstack;
  113. ItemStack prestige_itemstack;
  114. ItemStack quit_itemstack;
  115. ItemStack play_itemstack;
  116. ItemStack profile_itemstack;
  117. ItemStack guide_itemstack;
  118. ItemStack party_itemstack;
  119. ItemStack teleporter_itemstack;
  120. ItemStack difficulty_itemstack;
  121. ItemStack classes_itemstack;
  122. ItemStack enemyjoin_itemstack;
  123. ItemStack summoner_itemstack;
  124. ItemStack autojoin_itemstack;
  125. ItemStack back_itemstack;
  126. ItemStack next_itemstack;
  127. ItemStack previous_itemstack;
  128. ItemStack stats_itemstack;
  129. ItemStack achievements_itemstack;
  130. ItemStack create_itemstack;
  131. ItemStack join_itemstack;
  132. ItemStack leave_itemstack;
  133. ItemStack invite_itemstack;
  134. Inventory profileInventory;
  135. Inventory partyMenu;
  136. Inventory quitInventory;
  137. Inventory spectatorMenu;
  138. Inventory classesInventory;
  139. Inventory prestigeInventory;
  140. SmartInventory arenaSelector;
  141. SmartInventory partySelector;
  142. SmartInventory playerInviter;
  143. SmartInventory enemyGuide;
  144. int[] smartSlots;
  145. PotionEffect slownessEffect;
  146. PotionEffect resistanceEffect;
  147. PotionEffect blindnessEffect;
  148. Location lobbyLocation;
  149. BukkitTask savingTask;
  150. BukkitTask leaderboard_updater;
  151. long leaderboard_updater_time;
  152. BukkitTask scoreboardTitleAnimationTask;
  153. Sound CLICK;
  154. Sound FIREWORK_TWINKLE;
  155. Sound FIREWORK_BLAST;
  156. Sound LAVA_POP;
  157. Sound LEVEL_UP;
  158. Sound ANVIL_LAND;
  159. Sound ITEM_PICKUP;
  160. Sound NOTE_PLING;
  161. Sound PISTON_EXTEND;
  162. Sound BLAZE_DEATH;
  163. FilesManager filesManager;
  164. Config config;
  165. MySQL mysql;
  166. RanksManager ranksManager;
  167. AchievementsManager achievementsManager;
  168. Broadcaster broadcaster;
  169. Customization customization;
  170. HologramsManager hologramsManager;
  171. Economy vault;
  172. EnemyController enemyController;
  173. TowerController towerController;
  174. Method sendBlockChange;
  175. Method setCollidable;
  176. static Method setDamageMethod;
  177. GameMode spectatorMode;
  178. List<BlockState> rollback;
  179. String healthString;
  180. boolean availableUpdate;
  181.  
  182. public TowerDefense() {
  183. this.colors = new ChatColor[]{ChatColor.DARK_AQUA, ChatColor.GOLD, ChatColor.GRAY, ChatColor.BLUE, ChatColor.GREEN, ChatColor.AQUA, ChatColor.RED, ChatColor.LIGHT_PURPLE, ChatColor.YELLOW};
  184. this.players = new ArrayList();
  185. this.lobbyPlayers = new ArrayList();
  186. this.towers = new LinkedHashMap();
  187. this.enemies = new LinkedHashMap();
  188. this.bosses = new LinkedHashMap();
  189. this.classes = new LinkedHashMap();
  190. this.playerData = new HashMap();
  191. this.selectionMode = new HashMap();
  192. this.buildingAreaMode = new HashMap();
  193. this.playersSelectedObject = new HashMap();
  194. this.towerSpeeds = new HashMap();
  195. this.enemySpeeds = new HashMap();
  196. this.smartSlots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43};
  197. this.slownessEffect = new PotionEffect(PotionEffectType.SLOW, 9999999, 999999);
  198. this.resistanceEffect = new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 100, 10);
  199. this.blindnessEffect = new PotionEffect(PotionEffectType.BLINDNESS, 60, 999999);
  200. this.leaderboard_updater_time = 0L;
  201. this.rollback = new ArrayList();
  202. }
  203.  
  204. public void onEnable() {
  205. this.plugin = this;
  206. api = new TowerDefenseAPI(this);
  207. Bukkit.getPluginManager().registerEvents(new TowerDefenseListener(this), this);
  208. this.broadcaster = new Broadcaster(this);
  209. this.enemyController = new EnemyController(this);
  210. this.towerController = new TowerController(this);
  211. this.loadReflectionMethods();
  212. this.loadSounds();
  213. this.loadTowerSpeeds();
  214. this.loadEnemySpeeds();
  215. this.loadNonCustomizableItems();
  216. this.mainSetup();
  217. Iterator var2 = this.getOnlinePlayers().iterator();
  218.  
  219. while(var2.hasNext()) {
  220. Player var1 = (Player)var2.next();
  221. this.playerData.put(var1.getName(), new PlayerData(this, var1));
  222. }
  223.  
  224. if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
  225. Bukkit.getConsoleSender().sendMessage(this.customization.prefix + "Found PlaceholderAPI, Hooked: " + (new PlaceholderAPIHooks(this)).register());
  226. }
  227.  
  228. if (Bukkit.getPluginManager().isPluginEnabled("MVdWPlaceholderAPI")) {
  229. new MVdWPlacholderHook(this);
  230. Bukkit.getConsoleSender().sendMessage(this.customization.prefix + "Found MVdWPlaceholderAPI, Hooked: true");
  231. }
  232.  
  233. this.healthString = "";
  234.  
  235. for(int var3 = 0; var3 < 10; ++var3) {
  236. this.healthString = this.healthString + SPECIAL_CHARACTER.RECTANGLE.toString();
  237. }
  238.  
  239. ConsoleCommandSender var4 = Bukkit.getConsoleSender();
  240. var4.sendMessage(ChatColor.RED + "=============================================");
  241. var4.sendMessage(this.customization.prefix + ChatColor.GREEN + "Plugin has been enabled (v" + this.getDescription().getVersion() + ")");
  242. var4.sendMessage(ChatColor.RED + "=============================================");
  243. }
  244.  
  245. public void onDisable() {
  246. ArrayList var1 = new ArrayList();
  247. Iterator var3 = this.arenas.values().iterator();
  248.  
  249. Iterator var5;
  250. while(var3.hasNext()) {
  251. Arena var2 = (Arena)var3.next();
  252. var1.addAll(var2.getSpectators());
  253. var5 = var2.towers.iterator();
  254.  
  255. while(var5.hasNext()) {
  256. ActiveTower var4 = (ActiveTower)var5.next();
  257. var4.erase(this.plugin);
  258. }
  259. }
  260.  
  261. var3 = this.getPlayers(this.players).iterator();
  262.  
  263. Player var6;
  264. while(var3.hasNext()) {
  265. var6 = (Player)var3.next();
  266. ((PlayerData)this.playerData.get(var6.getName())).restoreData(var6);
  267. var6.sendMessage((String)this.customization.messages.get("Player-Leave"));
  268. var5 = var1.iterator();
  269.  
  270. while(var5.hasNext()) {
  271. Player var7 = (Player)var5.next();
  272. var6.showPlayer(var7);
  273. }
  274. }
  275.  
  276. var3 = this.getPlayers(this.playerData.keySet()).iterator();
  277.  
  278. while(var3.hasNext()) {
  279. var6 = (Player)var3.next();
  280. ((PlayerData)this.playerData.get(var6.getName())).save(var6);
  281. }
  282.  
  283. this.enemyController.unregisterAll();
  284. if (this.hologramsManager != null && this.hologramsManager.leaderboardHologram != null) {
  285. this.hologramsManager.leaderboardHologram.delete();
  286. }
  287.  
  288. var3 = this.getPlayers(this.selectionMode.keySet()).iterator();
  289.  
  290. while(var3.hasNext()) {
  291. var6 = (Player)var3.next();
  292. var6.getInventory().removeItem(new ItemStack[]{this.wand_itemstack});
  293. }
  294.  
  295. var3 = this.getPlayers(this.buildingAreaMode.keySet()).iterator();
  296.  
  297. while(var3.hasNext()) {
  298. var6 = (Player)var3.next();
  299. var6.getInventory().removeItem(new ItemStack[]{this.towerbuildarea_itemstack});
  300. }
  301.  
  302. Bukkit.getConsoleSender().sendMessage(this.customization.prefix + "Plugin has been disabled!");
  303. }
  304.  
  305. public boolean onCommand(CommandSender var1, Command var2, String var3, String[] var4) {
  306. if (var3.equalsIgnoreCase("towerdefense") || var3.equalsIgnoreCase("td")) {
  307. if (var1 instanceof Player) {
  308. ((Player)var1).playSound(((Player)var1).getLocation(), this.CLICK, 1.0F, 1.0F);
  309. }
  310.  
  311. if (var4.length == 0) {
  312. ChatColor var23 = this.colors[this.r.nextInt(this.colors.length)];
  313. var1.sendMessage("" + var23 + ChatColor.STRIKETHROUGH + "-------------" + ChatColor.YELLOW + " TowerDefense " + ChatColor.GRAY + "[" + this.getDescription().getVersion() + "] " + var23 + ChatColor.STRIKETHROUGH + "-------------");
  314. var1.sendMessage(var23 + " - " + ChatColor.YELLOW + "/TowerDefense | td " + var23 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Shows a list of commands");
  315. if (!this.config.bungee_mode_enabled) {
  316. var1.sendMessage(var23 + " - " + ChatColor.YELLOW + "/td Join " + var23 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Puts you in the game lobby");
  317. }
  318.  
  319. var1.sendMessage(var23 + " - " + ChatColor.YELLOW + "/td Leave " + var23 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Removes you from the game");
  320. var1.sendMessage(var23 + " - " + ChatColor.YELLOW + "/td Autojoin " + var23 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Puts you in the best available arena!");
  321. var1.sendMessage(var23 + " - " + ChatColor.YELLOW + "/td List " + var23 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Shows a list of arenas and other information!");
  322. var1.sendMessage(var23 + " - " + ChatColor.YELLOW + "/td " + (var1.hasPermission("towerdefense.admin") ? ChatColor.GREEN : ChatColor.RED) + "Admin " + var23 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Shows a list of admin commands");
  323. var1.sendMessage("" + var23 + ChatColor.STRIKETHROUGH + "--------------------------------------------");
  324. return true;
  325. }
  326.  
  327. String var5 = var4[0].toLowerCase();
  328. ChatColor var24;
  329. if (var5.equals("admin")) {
  330. if (!this.checkSender(var1, false, "towerdefense.admin")) {
  331. return true;
  332. }
  333.  
  334. var24 = this.colors[this.r.nextInt(this.colors.length)];
  335. var1.sendMessage("" + var24 + ChatColor.STRIKETHROUGH + "------------" + ChatColor.YELLOW + " TowerDefense " + ChatColor.RED + "Admin " + var24 + ChatColor.STRIKETHROUGH + "------------");
  336. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Setlobby " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Sets the lobby location!");
  337. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Setspawn " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Sets the players spawn!");
  338. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Create/Delete " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Creates/Deletes an arena!");
  339. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Addpath/Deletepath " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Adds/Deletes an enemy path!");
  340. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Showpath " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Shows enemies path!");
  341. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Buildingarea " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Gives a tool to specify tower areas");
  342. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Towers " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Shows a list of tower management commands");
  343. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Start/Stop " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Forces an arena to start/stop");
  344. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Coins " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Modifies a player coins!");
  345. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Cheat " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Gives you 999999 arena coins!");
  346. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Holograms " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Manages holographic features");
  347. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Reset " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Resets a player stats");
  348. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Edit " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Allows arena modifications");
  349. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Editmode " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Allows the user to modify surroundings in bungeemode");
  350. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td Reload " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Reloads the plugin");
  351. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td WorldManager " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Shows a list of World management commands");
  352. var1.sendMessage("" + var24 + ChatColor.STRIKETHROUGH + "-------------------------------------------");
  353. return true;
  354. }
  355.  
  356. Player var26;
  357. if (var5.equals("join") && !this.config.bungee_mode_enabled) {
  358. if (!this.checkSender(var1, true, "")) {
  359. return true;
  360. }
  361.  
  362. var26 = (Player)var1;
  363. if (this.lobbyLocation == null) {
  364. var26.sendMessage((String)this.customization.messages.get("Lobby-Not-Set"));
  365. return true;
  366. }
  367.  
  368. if (this.players.contains(var26.getName())) {
  369. var26.sendMessage((String)this.customization.messages.get("Already-In-Game"));
  370. return true;
  371. }
  372.  
  373. this.join(var26);
  374. return true;
  375. }
  376.  
  377. if (var5.equals("leave")) {
  378. if (!this.checkSender(var1, true, "")) {
  379. return true;
  380. }
  381.  
  382. var26 = (Player)var1;
  383. if (!this.players.contains(var26.getName())) {
  384. var26.sendMessage((String)this.customization.messages.get("Not-In-Game"));
  385. return true;
  386. }
  387.  
  388. this.leave(var26, false);
  389. return true;
  390. }
  391.  
  392. PlayerData var42;
  393. if (var5.equals("autojoin")) {
  394. if (!this.checkSender(var1, true, "")) {
  395. return true;
  396. }
  397.  
  398. var26 = (Player)var1;
  399. var42 = (PlayerData)this.plugin.playerData.get(var26.getName());
  400. if (var42.hasCooldown(var26, "AUTOJOIN_COMMAND", 3)) {
  401. return true;
  402. }
  403.  
  404. if (this.lobbyPlayers.contains(var26.getName()) && var42.arena == null) {
  405. this.autojoin(var26, var4.length > 1 ? var4[1].toUpperCase() : "");
  406. return true;
  407. }
  408.  
  409. var26.sendMessage((String)this.customization.messages.get("Not-In-Lobby"));
  410. return true;
  411. }
  412.  
  413. String var31;
  414. File var40;
  415. Arena var68;
  416. YamlConfiguration var74;
  417. if (var5.equals("setlobby")) {
  418. if (!this.checkSender(var1, true, "towerdefense.setlobby")) {
  419. return true;
  420. }
  421.  
  422. var26 = (Player)var1;
  423. if (var4.length == 2) {
  424. var31 = var4[1].toLowerCase();
  425. if (!this.arenas.containsKey(var31)) {
  426. var1.sendMessage(this.customization.prefix + "Couldn't find an arena with that name!");
  427. return true;
  428. }
  429.  
  430. var68 = (Arena)this.arenas.get(var31);
  431. var40 = new File(this.plugin.getDataFolder() + "/arenas/" + var68.name, "locations.dat");
  432. var74 = YamlConfiguration.loadConfiguration(var40);
  433. var74.set("Lobby", this.getStringFromLocation(var26.getLocation(), true));
  434.  
  435. try {
  436. var74.save(var40);
  437. } catch (IOException var16) {
  438. var16.printStackTrace();
  439. }
  440.  
  441. var68.lobbyLocation = var26.getLocation();
  442. var26.sendMessage(this.customization.prefix + "Lobby has been " + ChatColor.GREEN + "successfully" + ChatColor.GOLD + " set at " + this.getReadableLocationString(var26.getLocation(), true) + ChatColor.GOLD + " for the arena " + ChatColor.AQUA + var68.name);
  443. } else {
  444. this.lobbyLocation = var26.getLocation();
  445. this.getConfig().set("Lobby", this.getStringFromLocation(var26.getLocation(), true));
  446. this.saveConfig();
  447. var26.sendMessage(this.customization.prefix + "Lobby has been " + ChatColor.GREEN + "successfully" + ChatColor.GOLD + " set at " + this.getReadableLocationString(var26.getLocation(), true));
  448. }
  449.  
  450. return true;
  451. }
  452.  
  453. File var30;
  454. if (var5.equals("create")) {
  455. if (!this.checkSender(var1, true, "towerdefense.create")) {
  456. return true;
  457. }
  458.  
  459. var26 = (Player)var1;
  460. if (var4.length >= 4 && this.checkNumbers(var4[2], var4[3]) && Integer.valueOf(var4[2]) >= 1) {
  461. var31 = var4[1];
  462. if (this.arenas.containsKey(var31.toLowerCase())) {
  463. var26.sendMessage(this.customization.prefix + "There is already an arena with that name!");
  464. return true;
  465. }
  466.  
  467. var26.sendMessage(this.customization.prefix + "Creating the arena " + ChatColor.AQUA + var31 + ChatColor.GOLD + "!");
  468. var30 = new File(this.getDataFolder() + "/arenas/" + var31, "settings.yml");
  469. YamlConfiguration var79 = YamlConfiguration.loadConfiguration(var30);
  470. var79.set("world", var26.getWorld().getName());
  471. var79.set("min-players", Integer.valueOf(var4[2]));
  472. var79.set("max-players", Integer.valueOf(var4[3]));
  473.  
  474. try {
  475. var79.save(var30);
  476. } catch (IOException var17) {
  477. var17.printStackTrace();
  478. }
  479.  
  480. new Arena(this, var31);
  481. this.updateArenasInventory();
  482. var26.sendMessage(this.plugin.customization.prefix + "Arena " + ChatColor.AQUA + var31 + ChatColor.GOLD + " has been " + ChatColor.GREEN + "successfully" + ChatColor.GOLD + " created!");
  483. return true;
  484. }
  485.  
  486. this.sendCommandUsage(var1, "Create", "<Name> <minPlayers> <maxPlayers>");
  487. return true;
  488. }
  489.  
  490. String var6;
  491. Arena var48;
  492. if (var5.equals("delete")) {
  493. if (!this.checkSender(var1, false, "towerdefense.delete")) {
  494. return true;
  495. }
  496.  
  497. if (var4.length == 1) {
  498. this.sendCommandUsage(var1, "Delete", "<Name>");
  499. return true;
  500. }
  501.  
  502. var6 = var4[1].toLowerCase();
  503. if (!this.arenas.containsKey(var6)) {
  504. var1.sendMessage(this.customization.prefix + "Couldn't find an arena with that name!");
  505. return true;
  506. }
  507.  
  508. var48 = (Arena)this.arenas.get(var6);
  509. var48.stop();
  510. var30 = new File(this.getDataFolder() + "/arenas/", var48.name);
  511. this.filesManager.deleteFile(var30);
  512. this.arenas.remove(var6);
  513. this.updateArenasInventory();
  514. var1.sendMessage(this.customization.prefix + "Arena has been deleted!");
  515. return true;
  516. }
  517.  
  518. if (var5.equals("list")) {
  519. if (var1 instanceof Player && ((PlayerData)this.playerData.get(var1.getName())).hasCooldown((Player)var1, "LIST_COMMAND", 3)) {
  520. return true;
  521. }
  522.  
  523. var24 = this.colors[this.r.nextInt(this.colors.length)];
  524. var1.sendMessage("" + var24 + ChatColor.STRIKETHROUGH + "------------------" + ChatColor.YELLOW + " List " + var24 + ChatColor.STRIKETHROUGH + "------------------");
  525. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "Total Players: " + ChatColor.GREEN + this.players.size());
  526. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "Lobby Players: " + ChatColor.GREEN + this.lobbyPlayers.size());
  527. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "Next leaderboard update: " + (this.leaderboard_updater == null ? ChatColor.RED + "Task is off" : ChatColor.GREEN + String.valueOf((this.leaderboard_updater_time - System.currentTimeMillis()) / 1000L) + ChatColor.AQUA + "s " + ChatColor.LIGHT_PURPLE + "(" + (this.leaderboard_updater_time - System.currentTimeMillis()) / 60000L + "m)"));
  528. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "Bukkit: " + ChatColor.GREEN + Bukkit.getBukkitVersion());
  529. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "Scoreboard: " + ChatColor.GREEN + this.config.lobbyScoreboardEnabled);
  530. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "Loaded arenas: " + ChatColor.GREEN + this.arenas.size());
  531. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "Active arenas: " + ChatColor.GREEN + this.enemyController.getActiveArenas().size());
  532. Iterator var78 = this.arenas.values().iterator();
  533.  
  534. while(var78.hasNext()) {
  535. var48 = (Arena)var78.next();
  536. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + var48.name + var24 + " | Players: " + ChatColor.GOLD + var48.players.size() + var24 + " | Viewers: " + ChatColor.AQUA + var48.spectators.size() + var24 + " | State: " + var48.state + var24 + " | Tower Centers: " + ChatColor.GREEN + var48.towerCenters.size());
  537. }
  538.  
  539. var1.sendMessage("" + var24 + ChatColor.STRIKETHROUGH + "----------------------------------------");
  540. return true;
  541. }
  542.  
  543. if (var5.equals("setspawn")) {
  544. if (!this.checkSender(var1, true, "towerdefense.setspawn")) {
  545. return true;
  546. }
  547.  
  548. var26 = (Player)var1;
  549. if (var4.length == 1) {
  550. this.sendCommandUsage(var1, "Setspawn", "<Arena>");
  551. return true;
  552. }
  553.  
  554. var31 = var4[1].toLowerCase();
  555. if (!this.arenas.containsKey(var31)) {
  556. var1.sendMessage(this.customization.prefix + "Couldn't find an arena with that name!");
  557. return true;
  558. }
  559.  
  560. var68 = (Arena)this.arenas.get(var31);
  561. if (!var68.worldName.equals(var26.getWorld().getName())) {
  562. var26.sendMessage(this.customization.prefix + "Players spawn must be in the arena world! World: " + ChatColor.RED + "(" + var68.worldName + ")");
  563. return true;
  564. }
  565.  
  566. var40 = new File(this.plugin.getDataFolder() + "/arenas/" + var68.name, "locations.dat");
  567. var74 = YamlConfiguration.loadConfiguration(var40);
  568. var74.set("Players-Spawn", this.getStringFromLocation(var26.getLocation(), true));
  569.  
  570. try {
  571. var74.save(var40);
  572. } catch (IOException var18) {
  573. var18.printStackTrace();
  574. }
  575.  
  576. var68.spawnLocation = var26.getLocation();
  577. var26.sendMessage(this.customization.prefix + "Players spawn has been " + ChatColor.GREEN + "successfully" + ChatColor.GOLD + " set at " + this.getReadableLocationString(var26.getLocation(), true) + ChatColor.GOLD + " for the arena " + ChatColor.AQUA + var68.name);
  578. return true;
  579. }
  580.  
  581. int var53;
  582. if (var5.equals("addpath")) {
  583. if (!this.checkSender(var1, true, "towerdefense.addpath")) {
  584. return true;
  585. }
  586.  
  587. var26 = (Player)var1;
  588. if (var4.length == 1) {
  589. this.sendCommandUsage(var1, "Addpath", "<Arena>");
  590. return true;
  591. }
  592.  
  593. var31 = var4[1].toLowerCase();
  594. if (!this.arenas.containsKey(var31)) {
  595. var26.sendMessage(this.customization.prefix + "Couldn't find an arena with that name!");
  596. return true;
  597. }
  598.  
  599. var68 = (Arena)this.arenas.get(var31);
  600. if (!var68.worldName.equals(var26.getWorld().getName())) {
  601. var26.sendMessage(this.customization.prefix + "Path must be in the arena world! World: " + ChatColor.RED + "(" + var68.worldName + ")");
  602. return true;
  603. }
  604.  
  605. if (!var68.state.AVAILABLE() && !var68.state.equals(ArenaState.DISABLED)) {
  606. var26.sendMessage(this.customization.prefix + "You can not add a path right now!");
  607. return true;
  608. }
  609.  
  610. var40 = new File(this.plugin.getDataFolder() + "/arenas/" + var68.name, "locations.dat");
  611. var74 = YamlConfiguration.loadConfiguration(var40);
  612. String var73 = this.getStringFromLocation(var26.getLocation(), true);
  613. var53 = var68.zombiesSpawnLocation != null ? 2 : 1;
  614. if (var53 == 2) {
  615. if (var68.zombiesPath == null) {
  616. var68.zombiesPath = new Location[1];
  617. var68.zombiesPath[0] = var26.getLocation();
  618. } else {
  619. var53 += var68.zombiesPath.length;
  620. Location[] var76 = new Location[var53 - 1];
  621.  
  622. for(int var75 = 0; var75 < var68.zombiesPath.length; ++var75) {
  623. var76[var75] = var68.zombiesPath[var75];
  624. }
  625.  
  626. var76[var53 - 2] = var26.getLocation();
  627. var68.zombiesPath = var76;
  628. }
  629.  
  630. var26.sendMessage(this.customization.prefix + "Zombies path " + ChatColor.AQUA + var53 + ChatColor.GOLD + " has been " + ChatColor.GREEN + "successfully" + ChatColor.GOLD + " set at " + this.getReadableLocationString(var26.getLocation(), true) + ChatColor.GOLD + " for the arena " + ChatColor.AQUA + var68.name);
  631. } else {
  632. var68.zombiesSpawnLocation = this.getLocationFromString(var73);
  633. var26.sendMessage(this.customization.prefix + "Zombies spawn has been " + ChatColor.GREEN + "successfully" + ChatColor.GOLD + " set at " + this.getReadableLocationString(var26.getLocation(), true) + ChatColor.GOLD + " for the arena " + ChatColor.AQUA + var68.name);
  634. }
  635.  
  636. var74.set("Zombies-Path." + var53, var73);
  637.  
  638. try {
  639. var74.save(var40);
  640. } catch (IOException var19) {
  641. var19.printStackTrace();
  642. }
  643.  
  644. return true;
  645. }
  646.  
  647. int var47;
  648. if (var5.equals("deletepath")) {
  649. if (!this.checkSender(var1, true, "towerdefense.deletepath")) {
  650. return true;
  651. }
  652.  
  653. var26 = (Player)var1;
  654. if (var4.length == 1) {
  655. this.sendCommandUsage(var1, "Deletepath", "<Arena>");
  656. return true;
  657. }
  658.  
  659. var31 = var4[1].toLowerCase();
  660. if (!this.arenas.containsKey(var31)) {
  661. var26.sendMessage(this.customization.prefix + "Couldn't find an arena with that name!");
  662. return true;
  663. }
  664.  
  665. var68 = (Arena)this.arenas.get(var31);
  666. if (!var68.state.AVAILABLE() && !var68.state.equals(ArenaState.DISABLED)) {
  667. var26.sendMessage(this.customization.prefix + "You can not delete a path right now!");
  668. return true;
  669. }
  670.  
  671. if (var68.zombiesSpawnLocation == null) {
  672. var26.sendMessage(this.customization.prefix + "The arena does not have any paths!");
  673. return true;
  674. }
  675.  
  676. var40 = new File(this.plugin.getDataFolder() + "/arenas/" + var68.name, "locations.dat");
  677. var74 = YamlConfiguration.loadConfiguration(var40);
  678. var47 = var68.zombiesPath != null ? var68.zombiesPath.length + 1 : 1;
  679. if (var47 > 1) {
  680. if (var47 == 2) {
  681. var68.zombiesPath = null;
  682. } else {
  683. Location[] var59 = new Location[var68.zombiesPath.length - 1];
  684.  
  685. for(int var70 = 0; var70 < var68.zombiesPath.length - 1; ++var70) {
  686. var59[var70] = var68.zombiesPath[var70];
  687. }
  688.  
  689. var68.zombiesPath = var59;
  690. }
  691.  
  692. var26.sendMessage(this.customization.prefix + "Zombies path " + ChatColor.AQUA + var47 + ChatColor.GOLD + " has been " + ChatColor.GREEN + "successfully" + ChatColor.GOLD + " remove for the arena " + ChatColor.AQUA + var68.name);
  693. } else {
  694. var68.zombiesSpawnLocation = null;
  695. var26.sendMessage(this.customization.prefix + "Zombies spawn has been " + ChatColor.GREEN + "successfully" + ChatColor.GOLD + " remove for the arena " + ChatColor.AQUA + var68.name);
  696. }
  697.  
  698. var74.set("Zombies-Path." + var47, (Object)null);
  699.  
  700. try {
  701. var74.save(var40);
  702. } catch (IOException var20) {
  703. var20.printStackTrace();
  704. }
  705.  
  706. return true;
  707. }
  708.  
  709. int var10;
  710. if (var5.equals("showpath")) {
  711. if (!this.checkSender(var1, true, "towerdefense.showpath")) {
  712. return true;
  713. }
  714.  
  715. var26 = (Player)var1;
  716. if (var4.length == 1) {
  717. this.sendCommandUsage(var1, "Addpath", "<Arena>");
  718. return true;
  719. }
  720.  
  721. var31 = var4[1].toLowerCase();
  722. if (!this.arenas.containsKey(var31)) {
  723. var26.sendMessage(this.customization.prefix + "Couldn't find an arena with that name!");
  724. return true;
  725. }
  726.  
  727. var68 = (Arena)this.arenas.get(var31);
  728. if (var68.zombiesSpawnLocation != null && var68.zombiesPath != null) {
  729. HashMap var77 = new HashMap();
  730. var77.put(var68.zombiesSpawnLocation, var68.zombiesSpawnLocation.getBlock().getType());
  731. this.sendBlockChange(var26, var68.zombiesSpawnLocation, Material.MOB_SPAWNER);
  732.  
  733. for(var10 = 0; var10 < var68.zombiesPath.length - 1; ++var10) {
  734. Location var66 = var68.zombiesPath[var10];
  735. var77.put(var66, var66.getBlock().getType());
  736. this.sendBlockChange(var26, var66, Material.GOLD_BLOCK);
  737. }
  738.  
  739. Location var69 = var68.zombiesPath[var68.zombiesPath.length - 1];
  740. var77.put(var69, var69.getBlock().getType());
  741. this.sendBlockChange(var26, var69, Material.EMERALD_BLOCK);
  742. (new 1(this, var77, var26)).runTaskLater(this, 100L);
  743. return true;
  744. }
  745.  
  746. var26.sendMessage(this.customization.prefix + "Arena path is not setup yet!");
  747. return true;
  748. }
  749.  
  750. ChatColor var27;
  751. String var34;
  752. int var37;
  753. File var41;
  754. if (var5.equals("towers")) {
  755. if (!this.checkSender(var1, true, "towerdefense.towers")) {
  756. return true;
  757. } else {
  758. var26 = (Player)var1;
  759. if (var4.length == 1) {
  760. var27 = this.colors[this.r.nextInt(this.colors.length)];
  761. var1.sendMessage("" + var27 + ChatColor.STRIKETHROUGH + "------------" + ChatColor.YELLOW + " TowerDefense " + ChatColor.RED + "Tower Manager " + var27 + ChatColor.STRIKETHROUGH + "------------");
  762. var1.sendMessage(var27 + " - " + ChatColor.YELLOW + "/td towers Create <Tower> " + var27 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Creates a new tower");
  763. var1.sendMessage(var27 + " - " + ChatColor.YELLOW + "/td towers Delete <Tower> " + var27 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Deletes an existing tower");
  764. var1.sendMessage(var27 + " - " + ChatColor.YELLOW + "/td towers Build <Tower> " + var27 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Attempts to build the tower");
  765. var1.sendMessage(var27 + " - " + ChatColor.YELLOW + "/td towers Wand " + var27 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Gives the towers selection wand");
  766. var1.sendMessage(var27 + " - " + ChatColor.YELLOW + "/td towers List " + var27 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Lists the loaded towers");
  767. var1.sendMessage("" + var27 + ChatColor.STRIKETHROUGH + "---------------------------------------------------");
  768. return true;
  769. } else {
  770. var31 = var4[1].toLowerCase();
  771. if (var31.equals("create")) {
  772. if (var4.length < 8 || !this.checkNumbers(var4[3], var4[4], var4[5], var4[6]) || !this.towerSpeeds.containsKey(var4[7].toLowerCase()) && !var4[7].equalsIgnoreCase("normal")) {
  773. var34 = "NORMAL";
  774.  
  775. for(var37 = 0; var37 < this.towerSpeeds.size(); ++var37) {
  776. var34 = var34 + ", " + ((String)this.towerSpeeds.keySet().toArray()[var37]).toUpperCase();
  777. }
  778.  
  779. this.sendCommandUsage(var1, "Towers Create", "<Name> <Cost> <Damage> <Range> <Required-Player-Rank> <Attack-Speed>", "<Attack-Speed> can be " + var34);
  780. return true;
  781. } else {
  782. var34 = var4[2].toLowerCase();
  783. if (this.towers.containsKey(var34)) {
  784. var26.sendMessage(this.customization.prefix + "There is already a tower with that name!");
  785. return true;
  786. } else if (this.selectionMode.containsKey(var26.getName()) && ((Location[])this.selectionMode.get(var26.getName()))[0] != null && ((Location[])this.selectionMode.get(var26.getName()))[1] != null) {
  787. Cuboid var71 = new Cuboid(((Location[])this.selectionMode.get(var26.getName()))[0], ((Location[])this.selectionMode.get(var26.getName()))[1]);
  788. if (!var71.isSquare()) {
  789. var26.sendMessage(this.customization.prefix + "The selection must be a cube!");
  790. return true;
  791. } else if (var71.getWidth() <= this.config.towersMaxWidth && var71.getWidth() % 2 != 0) {
  792. if (var71.getHeight() > this.plugin.config.towersMaxHeight) {
  793. var26.sendMessage(this.customization.prefix + "The tower height can not be higher than " + this.config.towersMaxHeight + " (current height: " + var71.getHeight() + ")");
  794. return true;
  795. } else {
  796. ItemStack var62 = var26.getItemInHand();
  797. if (var62 != null && !var62.getType().equals(Material.AIR)) {
  798. ArrayList var64 = new ArrayList();
  799. Iterator var58 = var71.iterator();
  800.  
  801. while(var58.hasNext()) {
  802. String var65 = var58.toString();
  803. Block var14 = (Block)var58.next();
  804. if (var14.getType() != Material.AIR) {
  805. var64.add(var65 + ":" + var14.getTypeId() + ":" + var14.getData());
  806. }
  807. }
  808.  
  809. File var67 = new File(this.plugin.getDataFolder(), "towers.yml");
  810. YamlConfiguration var72 = YamlConfiguration.loadConfiguration(var67);
  811. var72.set("Towers." + var4[2] + ".Cost", Integer.valueOf(var4[3]));
  812. var72.set("Towers." + var4[2] + ".Damage", Integer.valueOf(var4[4]));
  813. var72.set("Towers." + var4[2] + ".Attack-Speed", var4[7]);
  814. var72.set("Towers." + var4[2] + ".Range", Integer.valueOf(var4[5]));
  815. var72.set("Towers." + var4[2] + ".Required-Player-Rank", Integer.valueOf(var4[6]));
  816. var72.set("Towers." + var4[2] + ".Item", var62.getType().name());
  817. var72.set("Towers." + var4[2] + ".Lore", Arrays.asList("&b&m----------", "&eCost: &6" + var4[3], "&eDamage: &6" + var4[4], "&eSpeed: &6" + var4[7], "&eRange: &6" + var4[5], "&b&m----------", " ", "&dDescription:", "&bThis tower has no description!", " "));
  818. var72.set("Towers." + var4[2] + ".Abilities", Arrays.asList());
  819. var72.set("Towers." + var4[2] + ".Upgrades.Damage", Arrays.asList());
  820. var72.set("Towers." + var4[2] + ".Upgrades.Range", Arrays.asList());
  821. var72.set("Towers." + var4[2] + ".Blocks", var64.toString());
  822. this.towers.put(var34, new Tower(this, var72, var4[2]));
  823.  
  824. try {
  825. var72.save(var67);
  826. } catch (IOException var21) {
  827. var21.printStackTrace();
  828. }
  829.  
  830. var26.sendMessage(this.customization.prefix + "You have created the tower " + ChatColor.GREEN + ChatColor.BOLD + var4[2] + ChatColor.GOLD + "! You should change the default generated lore for the tower in towers.yml!");
  831. return true;
  832. } else {
  833. var26.sendMessage(this.customization.prefix + "You must hold an item in your hand! The item will be the tower item");
  834. return true;
  835. }
  836. }
  837. } else {
  838. var26.sendMessage(this.customization.prefix + "The tower width/length must be an odd number and can not be higher than " + this.config.towersMaxWidth + " (current width: " + var71.getWidth() + ")");
  839. return true;
  840. }
  841. } else {
  842. var26.sendMessage(this.customization.prefix + "You haven't selected the 2 corners yet!");
  843. return true;
  844. }
  845. }
  846. } else {
  847. Tower var61;
  848. if (var31.equals("delete")) {
  849. if (var4.length == 2) {
  850. this.sendCommandUsage(var1, "Towers Delete", "<Name>");
  851. return true;
  852. } else {
  853. var34 = var4[2].toLowerCase();
  854. if (!this.towers.containsKey(var34)) {
  855. var26.sendMessage(this.customization.prefix + "Could not find a tower with that name!");
  856. return true;
  857. } else {
  858. var61 = (Tower)this.towers.get(var34);
  859. var41 = new File(this.plugin.getDataFolder(), "towers.yml");
  860. YamlConfiguration var60 = YamlConfiguration.loadConfiguration(var41);
  861. var60.set("Towers." + var61.name, (Object)null);
  862.  
  863. try {
  864. var60.save(var41);
  865. } catch (IOException var22) {
  866. var22.printStackTrace();
  867. }
  868.  
  869. this.towers.remove(var34);
  870. var26.sendMessage(this.customization.prefix + "You have removed the tower " + ChatColor.RED + ChatColor.BOLD + var4[2]);
  871. return true;
  872. }
  873. }
  874. } else if (var31.equals("build")) {
  875. if (var4.length == 2) {
  876. this.sendCommandUsage(var1, "Towers Build", "<Tower>");
  877. return true;
  878. } else {
  879. var34 = var4[2].toLowerCase();
  880. if (!this.towers.containsKey(var34)) {
  881. var26.sendMessage(this.customization.prefix + "Couldn't find a tower with that name!");
  882. return true;
  883. } else {
  884. var61 = (Tower)this.towers.get(var34);
  885. ActiveTower var54 = var61.build((Arena)null, (PlayerData)null, var26.getLocation().getBlock().getLocation().add(0.0D, -1.0D, 0.0D));
  886. byte var56 = 10;
  887. var26.teleport(var26.getLocation().add(0.0D, (double)(this.config.towersMaxHeight + 1), 0.0D));
  888. var26.sendMessage(this.customization.prefix + "Tower has been built! it will last for " + ChatColor.AQUA + var56 + ChatColor.GOLD + " seconds!");
  889. var26.playSound(var26.getLocation(), this.NOTE_PLING, 1.0F, 1.0F);
  890. (new 2(this, var54, var26)).runTaskLater(this, (long)(var56 * 20));
  891. return true;
  892. }
  893. }
  894. } else if (!var31.equals("list")) {
  895. if (var31.equals("wand")) {
  896. if (!this.selectionMode.containsKey(var26.getName())) {
  897. var26.getInventory().addItem(new ItemStack[]{this.wand_itemstack});
  898. this.selectionMode.put(var26.getName(), new Location[2]);
  899. var26.sendMessage(this.customization.prefix + "You have entered the selection mode!");
  900. } else {
  901. var26.getInventory().removeItem(new ItemStack[]{this.wand_itemstack});
  902. this.selectionMode.remove(var26.getName());
  903. var26.sendMessage(this.customization.prefix + "You have left the selection mode!");
  904. }
  905.  
  906. return true;
  907. } else {
  908. var26.sendMessage(this.customization.prefix + "Unknown command! use /td Towers for a list of commands");
  909. return true;
  910. }
  911. } else {
  912. ChatColor var51 = this.colors[this.r.nextInt(this.colors.length)];
  913. var26.sendMessage("" + var51 + ChatColor.STRIKETHROUGH + "-------------" + ChatColor.YELLOW + " TowerDefense " + ChatColor.RED + "Towers " + var51 + ChatColor.STRIKETHROUGH + "-------------");
  914. var26.sendMessage(this.customization.prefix + "Loaded towers: " + ChatColor.LIGHT_PURPLE + this.towers.size());
  915. Iterator var52 = this.towers.values().iterator();
  916.  
  917. while(var52.hasNext()) {
  918. var61 = (Tower)var52.next();
  919. var26.sendMessage(ChatColor.AQUA + "- " + ChatColor.LIGHT_PURPLE + var61.name + ChatColor.DARK_AQUA + " -> " + ChatColor.RED + "Damage: " + ChatColor.AQUA + var61.damage + ", " + ChatColor.YELLOW + "Attack speed: " + ChatColor.AQUA + var61.attackSpeedTitle + ", " + ChatColor.GREEN + "Range: " + ChatColor.AQUA + Math.sqrt((double)var61.range) + ", " + ChatColor.GOLD + "Cost/Sell-Value: " + ChatColor.AQUA + var61.cost + "/" + var61.sellValue + ", " + ChatColor.DARK_GREEN + "Required player rank: " + ChatColor.AQUA + var61.requiredPlayerRank);
  920. }
  921.  
  922. var26.sendMessage("" + var51 + ChatColor.STRIKETHROUGH + "----------------------------------------------");
  923. return true;
  924. }
  925. }
  926. }
  927. }
  928. }
  929.  
  930. if (var5.equals("buildingarea")) {
  931. if (!this.checkSender(var1, true, "towerdefense.buildingarea")) {
  932. return true;
  933. }
  934.  
  935. var26 = (Player)var1;
  936. if (this.buildingAreaMode.containsKey(var26.getName())) {
  937. var26.getInventory().removeItem(new ItemStack[]{this.towerbuildarea_itemstack});
  938. this.buildingAreaMode.remove(var26.getName());
  939. var26.sendMessage(this.customization.prefix + "You have left the building area selector mode!");
  940. return true;
  941. }
  942.  
  943. if (var4.length == 1) {
  944. this.sendCommandUsage(var1, "Buildingarea", "<Arena>");
  945. return true;
  946. }
  947.  
  948. var31 = var4[1].toLowerCase();
  949. if (!this.arenas.containsKey(var31)) {
  950. var26.sendMessage(this.customization.prefix + "Couldn't find an arena with that name!");
  951. return true;
  952. }
  953.  
  954. this.buildingAreaMode.put(var26.getName(), var31);
  955. var26.getInventory().addItem(new ItemStack[]{this.towerbuildarea_itemstack});
  956. var26.sendMessage(this.customization.prefix + "You have entered the building area selector mode! you should left click blocks that you want to become the CENTER of a tower!");
  957. return true;
  958. }
  959.  
  960. if (var5.equals("start")) {
  961. if (!this.checkSender(var1, false, "towerdefense.start")) {
  962. return true;
  963. }
  964.  
  965. if (var4.length == 1) {
  966. if (!(var1 instanceof Player) || ((PlayerData)this.playerData.get(var1.getName())).arena == null) {
  967. this.sendCommandUsage(var1, "Start", "<Arena>");
  968. return true;
  969. }
  970.  
  971. var6 = ((PlayerData)this.playerData.get(var1.getName())).arena.name.toLowerCase();
  972. } else {
  973. var6 = var4[1].toLowerCase();
  974. }
  975.  
  976. if (!this.arenas.containsKey(var6)) {
  977. var1.sendMessage(this.customization.prefix + "Couldn't find an arena with that name!");
  978. return true;
  979. }
  980.  
  981. var48 = (Arena)this.arenas.get(var6);
  982. if (!var48.state.AVAILABLE()) {
  983. var1.sendMessage(this.customization.prefix + "You may not start the arena in its current state!");
  984. return true;
  985. }
  986.  
  987. if (var48.players.isEmpty()) {
  988. var1.sendMessage(this.customization.prefix + "The arena does not contain any player!");
  989. return true;
  990. }
  991.  
  992. if (var48.lobbyLocation == null) {
  993. var1.sendMessage((String)this.plugin.customization.messages.get("Lobby-Not-Set"));
  994. return true;
  995. }
  996.  
  997. if (var48.spawnLocation == null) {
  998. var1.sendMessage((String)this.plugin.customization.messages.get("Spawn-Not-Set"));
  999. return true;
  1000. }
  1001.  
  1002. if (var48.zombiesPath == null) {
  1003. var1.sendMessage((String)this.plugin.customization.messages.get("Zombies-Path-Not-Set"));
  1004. return true;
  1005. }
  1006.  
  1007. var48.start();
  1008. var1.sendMessage(this.customization.prefix + "You have forced the arena " + ChatColor.YELLOW + var48.name + ChatColor.GOLD + " to start!");
  1009. return true;
  1010. }
  1011.  
  1012. if (var5.equals("stop")) {
  1013. if (!this.checkSender(var1, false, "towerdefense.stop")) {
  1014. return true;
  1015. }
  1016.  
  1017. if (var4.length == 1) {
  1018. if (!(var1 instanceof Player) || ((PlayerData)this.playerData.get(var1.getName())).arena == null) {
  1019. this.sendCommandUsage(var1, "Start", "<Arena>");
  1020. return true;
  1021. }
  1022.  
  1023. var6 = ((PlayerData)this.playerData.get(var1.getName())).arena.name.toLowerCase();
  1024. } else {
  1025. var6 = var4[1].toLowerCase();
  1026. }
  1027.  
  1028. if (!this.arenas.containsKey(var6)) {
  1029. var1.sendMessage(this.customization.prefix + "Couldn't find an arena with that name!");
  1030. return true;
  1031. }
  1032.  
  1033. var48 = (Arena)this.arenas.get(var6);
  1034. if (!var48.state.equals(ArenaState.INGAME) && !var48.state.equals(ArenaState.ENDING)) {
  1035. var1.sendMessage(this.customization.prefix + "You may not stop the arena in its current state!");
  1036. return true;
  1037. }
  1038.  
  1039. var48.stop();
  1040. var1.sendMessage(this.customization.prefix + "You have forced the arena " + ChatColor.YELLOW + var48.name + ChatColor.GOLD + " to stop!");
  1041. return true;
  1042. }
  1043.  
  1044. if (var5.equals("d")) {
  1045. var1.sendMessage(this.customization.prefix + "Enemy Controller Running: " + this.enemyController.isRunning());
  1046. var1.sendMessage(this.customization.prefix + "Tower Controller Running: " + this.towerController.isRunning());
  1047. Iterator var46 = this.arenas.values().iterator();
  1048.  
  1049. while(var46.hasNext()) {
  1050. Arena var33 = (Arena)var46.next();
  1051. var1.sendMessage(this.customization.prefix + "Arena: " + var33.name + " | Towers: " + var33.towers.size() + (this.enemyController.getActiveArenas().contains(var33) ? " | Has living enemies: " + var33.hasLivingEnemies() : " | Arena not controller"));
  1052. }
  1053.  
  1054. return true;
  1055. }
  1056.  
  1057. Player var28;
  1058. if (var5.equals("coins")) {
  1059. if (!this.checkSender(var1, false, "towerdefense.coins")) {
  1060. return true;
  1061. }
  1062.  
  1063. if (var4.length >= 4 && ((var6 = var4[1].toLowerCase()).equals("add") || var6.equals("remove") || var6.equals("set")) && this.checkNumbers(var4[3])) {
  1064. var28 = Bukkit.getPlayer(var4[2]);
  1065. int var49 = Integer.valueOf(var4[3]);
  1066. if (var28 == null) {
  1067. var1.sendMessage(this.customization.prefix + "Couldn't find that players online, looking up the database...");
  1068. (new 3(this, var6, var4, var49, var1)).runTaskAsynchronously(this.plugin);
  1069. return true;
  1070. }
  1071.  
  1072. PlayerData var57 = (PlayerData)this.playerData.get(var28.getName());
  1073. var10 = var57.getCoins(var28);
  1074. if (var6.equals("add")) {
  1075. var57.addCoins(var28, var49);
  1076. } else if (var6.equals("remove")) {
  1077. var57.removeCoins(var28, var49);
  1078. } else if (var6.equals("set")) {
  1079. var57.setCoins(var28, var49);
  1080. }
  1081.  
  1082. if (var10 != var57.getCoins(var28)) {
  1083. var1.sendMessage(this.customization.prefix + "You have " + ChatColor.GREEN + "successfully" + ChatColor.GOLD + " changed " + ChatColor.AQUA + var28.getName() + "'s" + ChatColor.GOLD + " coins!");
  1084. var28.sendMessage((String)this.customization.messages.get("Coins-Update") + (var57.getCoins(var28) - var10 > 0 ? ChatColor.GREEN + " (+" + (var57.getCoins(var28) - var10) + ")!" : ChatColor.RED + " (" + (var57.getCoins(var28) - var10) + ")!"));
  1085. if (var57.customScoreboard != null) {
  1086. var57.customScoreboard.updatePlaceholder(var28, (Arena)null, this, "coins", var57.getCoins(var28));
  1087. }
  1088.  
  1089. var57.save = true;
  1090. } else {
  1091. var1.sendMessage(this.customization.prefix + "User coins haven't changed!");
  1092. }
  1093.  
  1094. return true;
  1095. }
  1096.  
  1097. this.sendCommandUsage(var1, "Coins", "<Action> <Player> <Amount>", "Action can only be one of the following", "Add, Remove, Set");
  1098. return true;
  1099. }
  1100.  
  1101. if (var5.equals("cheat")) {
  1102. if (!this.checkSender(var1, true, "towerdefense.cheat")) {
  1103. return true;
  1104. }
  1105.  
  1106. var26 = (Player)var1;
  1107. var42 = (PlayerData)this.playerData.get(var26.getName());
  1108. if (var42.arena != null && !var42.arena.state.AVAILABLE() && var42.arena.players.containsKey(var26.getName())) {
  1109. if (var42.arena.enemyPlayers.containsKey(var26.getName())) {
  1110. var42.arena.enemyCoins = 999999;
  1111. } else {
  1112. var42.arena.players.put(var26.getName(), 999999.0D);
  1113. }
  1114.  
  1115. var26.sendMessage(this.customization.prefix + "Cheat activated!");
  1116. return true;
  1117. }
  1118.  
  1119. var26.sendMessage(this.customization.prefix + "You are not in an active arena to call this command!");
  1120. return true;
  1121. }
  1122.  
  1123. Player var8;
  1124. if (var5.equals("holograms")) {
  1125. if (!this.checkSender(var1, true, "towerdefense.holograms")) {
  1126. return true;
  1127. }
  1128.  
  1129. if (var4.length >= 3 && ((var6 = var4[1].toLowerCase()).equals("set") || var6.equals("remove")) && ((var31 = var4[2].toLowerCase()).equals("stats") || var31.equals("leaderboard"))) {
  1130. if (this.hologramsManager == null) {
  1131. var1.sendMessage(this.customization.prefix + "HolographicDisplays doesn't seem to be loaded!");
  1132. return true;
  1133. }
  1134.  
  1135. var8 = (Player)var1;
  1136. if (var6.equals("set")) {
  1137. Location var55 = var8.getLocation();
  1138. if (var31.equals("stats")) {
  1139. var55.add(0.0D, 4.0D, 0.0D);
  1140. this.hologramsManager.setStats(var55);
  1141. this.getConfig().set("Holographic-Stats", this.getStringFromLocation(var55, false));
  1142. var8.sendMessage(this.customization.prefix + "You have set the holographic stats location!");
  1143. } else {
  1144. var55.add(0.0D, 3.0D, 0.0D);
  1145. this.hologramsManager.setLeaderboard(var55, true);
  1146. this.getConfig().set("Holographic-Leaderboard", this.getStringFromLocation(var55, false));
  1147. var8.sendMessage(this.customization.prefix + "You have set the holographic leaderboard location!");
  1148. }
  1149. } else if (var31.equals("stats")) {
  1150. this.hologramsManager.setStats((Location)null);
  1151. this.getConfig().set("Holographic-Stats", (Object)null);
  1152. var8.sendMessage(this.customization.prefix + "You have removed the holographic stats location!");
  1153. } else {
  1154. this.hologramsManager.setLeaderboard((Location)null, false);
  1155. this.getConfig().set("Holographic-Leaderboard", (Object)null);
  1156. var8.sendMessage(this.customization.prefix + "You have removed the holographic leaderboard location!");
  1157. }
  1158.  
  1159. this.saveConfig();
  1160. return true;
  1161. }
  1162.  
  1163. this.sendCommandUsage(var1, "Holograms", "Set/Remove Stats/Leaderboard");
  1164. return true;
  1165. }
  1166.  
  1167. if (var5.equals("reset")) {
  1168. if (!this.checkSender(var1, false, "towerdefense.reset")) {
  1169. return true;
  1170. }
  1171.  
  1172. if (var4.length == 1) {
  1173. this.sendCommandUsage(var1, "Reset", "<Player>");
  1174. return true;
  1175. }
  1176.  
  1177. var26 = Bukkit.getPlayer(var4[1]);
  1178. long var38 = System.currentTimeMillis();
  1179. var1.sendMessage(this.customization.prefix + "Looking up the database...");
  1180. (new 4(this, var4, var26, var1, var38)).runTaskAsynchronously(this);
  1181. return true;
  1182. }
  1183.  
  1184. if (var5.equals("edit")) {
  1185. if (!this.checkSender(var1, true, "towerdefense.edit")) {
  1186. return true;
  1187. }
  1188.  
  1189. if (var4.length == 1) {
  1190. this.sendCommandUsage(var1, "Edit", "<Name>");
  1191. return true;
  1192. }
  1193.  
  1194. var26 = (Player)var1;
  1195. var31 = var4[1].toLowerCase();
  1196. if (!this.arenas.containsKey(var31)) {
  1197. var26.sendMessage(this.customization.prefix + "Couldn't find an arena with that name!");
  1198. return true;
  1199. }
  1200.  
  1201. var26.openInventory(((Arena)this.arenas.get(var31)).editor);
  1202. return true;
  1203. }
  1204.  
  1205. if (var5.equals("editmode")) {
  1206. if (!this.checkSender(var1, true, "towerdefense.editmode")) {
  1207. return true;
  1208. }
  1209.  
  1210. var26 = (Player)var1;
  1211. if (!this.config.bungee_mode_enabled) {
  1212. var26.sendMessage(this.customization.prefix + "You must be in BungeeMode to use this command!");
  1213. return true;
  1214. }
  1215.  
  1216. if (this.players.contains(var26.getName())) {
  1217. var26.sendMessage(this.customization.prefix + "You have " + ChatColor.GREEN + "enabled" + ChatColor.GOLD + " the editing mode!");
  1218. var31 = this.config.bungee_mode_hub;
  1219. this.config.bungee_mode_hub = String.valueOf(this.r.nextInt());
  1220. this.leave(var26, true);
  1221. this.config.bungee_mode_hub = var31;
  1222. } else if (this.plugin.lobbyLocation != null) {
  1223. var26.sendMessage(this.customization.prefix + "You have " + ChatColor.RED + "disabled" + ChatColor.GOLD + " the editing mode!");
  1224. this.join(var26);
  1225. } else {
  1226. var26.sendMessage((String)this.plugin.customization.messages.get("Lobby-Not-Set"));
  1227. }
  1228.  
  1229. return true;
  1230. }
  1231.  
  1232. Iterator var9;
  1233. long var35;
  1234. if (var5.equals("reload")) {
  1235. if (!this.checkSender(var1, false, "towerdefense.reload")) {
  1236. return true;
  1237. }
  1238.  
  1239. var1.sendMessage(this.customization.prefix + "Attempting to reload the plugin!");
  1240. long var25 = System.currentTimeMillis();
  1241. var9 = this.getPlayers(this.players).iterator();
  1242.  
  1243. while(var9.hasNext()) {
  1244. var8 = (Player)var9.next();
  1245. this.leave(var8, true);
  1246. var8.sendMessage((String)this.customization.messages.get("Reload-Kick"));
  1247. }
  1248.  
  1249. this.mainSetup();
  1250. var35 = System.currentTimeMillis();
  1251. var1.sendMessage(this.customization.prefix + "The plugin has been " + ChatColor.GREEN + "successfully" + ChatColor.GOLD + " reloaded! took " + ChatColor.LIGHT_PURPLE + (var35 - var25) + "ms!");
  1252. return true;
  1253. }
  1254.  
  1255. if (var5.equals("worldmanager") || var5.equals("wm")) {
  1256. if (!this.checkSender(var1, false, "towerdefense.worldmanager")) {
  1257. return true;
  1258. }
  1259.  
  1260. if (var4.length == 1) {
  1261. var24 = this.colors[this.r.nextInt(this.colors.length)];
  1262. var1.sendMessage("" + var24 + ChatColor.STRIKETHROUGH + "------------" + ChatColor.YELLOW + " TowerDefense " + ChatColor.RED + "WorldManager " + var24 + ChatColor.STRIKETHROUGH + "------------");
  1263. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td WorldManager | wm Create <World> " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Creates a new world");
  1264. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td wm Delete <World> " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Deletes an existing world");
  1265. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td wm Import <World> " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Imports a new world!");
  1266. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td wm Backup <World> " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Creates a backup of a world");
  1267. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td wm Restore <World> " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Restores a world from the backup file");
  1268. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td wm Tp <World> " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Teleports you to a world");
  1269. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td wm Setspawn <World> " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Sets the spawn of a world");
  1270. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td wm Backupall " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Creates a backup of all loaded worlds");
  1271. var1.sendMessage(var24 + " - " + ChatColor.YELLOW + "/td wm List " + var24 + SPECIAL_CHARACTER.ARROW + ChatColor.GREEN + " Lists loaded worlds!");
  1272. var1.sendMessage("" + var24 + ChatColor.STRIKETHROUGH + "------------------------------------------------");
  1273. return true;
  1274. }
  1275.  
  1276. var6 = var4[1].toLowerCase();
  1277. List var29;
  1278. long var43;
  1279. if (var6.equals("create")) {
  1280. var29 = Arrays.asList("normal", "nether", "the_end", "empty");
  1281. if (var4.length >= 4 && var29.contains(var4[3].toLowerCase())) {
  1282. var34 = var4[2];
  1283. String var50 = var4[3].toLowerCase();
  1284. if (Bukkit.getWorld(var34) != null) {
  1285. var1.sendMessage(this.customization.prefix + "There is a world with that name!");
  1286. return true;
  1287. }
  1288.  
  1289. String[] var63;
  1290. var53 = (var63 = Bukkit.getWorldContainer().list()).length;
  1291.  
  1292. for(var47 = 0; var47 < var53; ++var47) {
  1293. String var44 = var63[var47];
  1294. if (var44.equalsIgnoreCase(var34)) {
  1295. var1.sendMessage(this.customization.prefix + "Seems like there is an unloaded world with that name! try using /td WorldManager Import <Name>");
  1296. return true;
  1297. }
  1298. }
  1299.  
  1300. var1.sendMessage(this.customization.prefix + "Creating a new world!");
  1301. var43 = System.currentTimeMillis();
  1302. if (var50.equals("empty")) {
  1303. Bukkit.createWorld((new WorldCreator(var34)).generator(new 5(this)));
  1304. } else {
  1305. Bukkit.createWorld((new WorldCreator(var34)).environment(Environment.valueOf(var50.toUpperCase())));
  1306. }
  1307.  
  1308. var1.sendMessage(this.customization.prefix + "World has been created! took " + ChatColor.LIGHT_PURPLE + (System.currentTimeMillis() - var43) + "ms" + ChatColor.GOLD + " to complete the process! use " + ChatColor.GREEN + "/td WorldManager Tp " + var34 + ChatColor.GOLD + " if you would like to be teleported to that world!");
  1309. return true;
  1310. }
  1311.  
  1312. this.sendCommandUsage(var1, "WorldManager Create", "<Name> <Type>", "Type can be normal, nether, the_end, empty");
  1313. return true;
  1314. }
  1315.  
  1316. World var32;
  1317. if (var6.equals("delete")) {
  1318. if (var4.length == 2) {
  1319. this.sendCommandUsage(var1, "WorldManager Delete", "<Name>");
  1320. return true;
  1321. }
  1322.  
  1323. var31 = var4[2].toLowerCase();
  1324. var32 = Bukkit.getWorld(var31);
  1325. var40 = null;
  1326. if (var32 != null) {
  1327. if (!var32.getPlayers().isEmpty()) {
  1328. var1.sendMessage(this.customization.prefix + "The world contains players. so the world can't be deleted!");
  1329. Iterator var45 = var32.getPlayers().iterator();
  1330.  
  1331. while(var45.hasNext()) {
  1332. Player var39 = (Player)var45.next();
  1333. var1.sendMessage(this.customization.prefix + "- " + var39.getName());
  1334. }
  1335.  
  1336. return true;
  1337. }
  1338.  
  1339. var40 = var32.getWorldFolder();
  1340. Bukkit.unloadWorld(var32, false);
  1341. } else {
  1342. var1.sendMessage(this.customization.prefix + "The world you looking for seems to be unloaded, looking up folders...");
  1343. File[] var13;
  1344. var53 = (var13 = Bukkit.getWorldContainer().listFiles()).length;
  1345.  
  1346. for(var47 = 0; var47 < var53; ++var47) {
  1347. var41 = var13[var47];
  1348. if (var41.getName().equalsIgnoreCase(var4[2])) {
  1349. var40 = var41;
  1350. break;
  1351. }
  1352. }
  1353. }
  1354.  
  1355. if (var40 != null) {
  1356. var43 = System.currentTimeMillis();
  1357. this.filesManager.deleteFile(var40);
  1358. var1.sendMessage(this.customization.prefix + "World has been deleted! took " + ChatColor.LIGHT_PURPLE + (System.currentTimeMillis() - var43) + "ms!");
  1359. } else {
  1360. var1.sendMessage(this.customization.prefix + "Couldn't find a world with that name!");
  1361. }
  1362.  
  1363. return true;
  1364. }
  1365.  
  1366. if (var6.equals("import")) {
  1367. if (var4.length == 2) {
  1368. this.sendCommandUsage(var1, "WorldManager Import", "<Name>");
  1369. return true;
  1370. }
  1371.  
  1372. var31 = var4[2];
  1373. if (Bukkit.getWorld(var31) != null) {
  1374. var1.sendMessage(this.customization.prefix + "There is a loaded world with that name!");
  1375. return true;
  1376. }
  1377.  
  1378. String[] var11;
  1379. var10 = (var11 = Bukkit.getWorldContainer().list()).length;
  1380.  
  1381. for(var37 = 0; var37 < var10; ++var37) {
  1382. var34 = var11[var37];
  1383. if (var31.equalsIgnoreCase(var34)) {
  1384. var1.sendMessage(this.customization.prefix + "Importing the world...");
  1385. long var12 = System.currentTimeMillis();
  1386. if (this.config.emptyChunkGenerator) {
  1387. Bukkit.createWorld((new WorldCreator(var34)).generator(new 6(this)));
  1388. } else {
  1389. Bukkit.createWorld(new WorldCreator(var34));
  1390. }
  1391.  
  1392. var1.sendMessage(this.customization.prefix + "World has been imported! check your logs! took " + ChatColor.LIGHT_PURPLE + (System.currentTimeMillis() - var12) + "ms!");
  1393. return true;
  1394. }
  1395. }
  1396.  
  1397. var1.sendMessage(this.customization.prefix + "Couldn't find any world with that name!");
  1398. return true;
  1399. }
  1400.  
  1401. if (!var6.equals("backup") && !var6.equals("restore")) {
  1402. if (var6.equals("backupall")) {
  1403. if (!this.checkSender(var1, false, "towerdefense.worldmanager")) {
  1404. return true;
  1405. }
  1406.  
  1407. var29 = Bukkit.getWorlds();
  1408. var1.sendMessage(this.customization.prefix + ChatColor.GREEN + "Creating a backup of all loaded worlds " + ChatColor.GOLD + "(" + var29.size() + ")" + ChatColor.GREEN + "!");
  1409. var35 = System.currentTimeMillis();
  1410. (new 9(this, var29, var1, var35)).runTaskTimerAsynchronously(this, 0L, 20L);
  1411. return true;
  1412. }
  1413.  
  1414. if (var6.equals("tp")) {
  1415. if (!this.checkSender(var1, true, "towerdefense.worldmanager")) {
  1416. return true;
  1417. }
  1418.  
  1419. if (var4.length == 2) {
  1420. this.sendCommandUsage(var1, "WorldManager Tp", "<Name>");
  1421. return true;
  1422. }
  1423.  
  1424. var28 = (Player)var1;
  1425. var34 = var4[2];
  1426. if (Bukkit.getWorld(var34) == null) {
  1427. var28.sendMessage(this.customization.prefix + "Couldn't find a world with that name!");
  1428. return true;
  1429. }
  1430.  
  1431. var28.teleport(Bukkit.getWorld(var34).getSpawnLocation());
  1432. var28.sendMessage(this.customization.prefix + "You have been teleported to " + ChatColor.GREEN + var34 + ChatColor.GOLD + "!");
  1433. return true;
  1434. }
  1435.  
  1436. if (var6.equals("setspawn")) {
  1437. if (!this.checkSender(var1, true, "towerdefense.worldmanager")) {
  1438. return true;
  1439. }
  1440.  
  1441. if (var4.length == 2) {
  1442. this.sendCommandUsage(var1, "WorldManager Setspawn", "<Name>");
  1443. return true;
  1444. }
  1445.  
  1446. var28 = (Player)var1;
  1447. var34 = var4[2];
  1448. World var36 = Bukkit.getWorld(var34);
  1449. if (var36 == null) {
  1450. var28.sendMessage(this.customization.prefix + "Couldn't find a world with that name!");
  1451. return true;
  1452. }
  1453.  
  1454. if (!var36.getName().equals(var28.getWorld().getName())) {
  1455. var28.sendMessage(this.customization.prefix + "You are not in that world to set its spawn!");
  1456. return true;
  1457. }
  1458.  
  1459. var36.setSpawnLocation(var28.getLocation().getBlockX(), var28.getLocation().getBlockY() + 1, var28.getLocation().getBlockZ());
  1460. var28.sendMessage(this.customization.prefix + "You have set the world spawn location!");
  1461. return true;
  1462. }
  1463.  
  1464. if (!var6.equals("list")) {
  1465. var1.sendMessage(this.customization.prefix + "Unknown command! use /td WorldManager for a list of commands");
  1466. return true;
  1467. }
  1468.  
  1469. var27 = this.colors[this.r.nextInt(this.colors.length)];
  1470. var1.sendMessage("" + var27 + ChatColor.STRIKETHROUGH + "------------" + ChatColor.YELLOW + " TowerDefense " + ChatColor.RED + "WorldManager " + var27 + ChatColor.STRIKETHROUGH + "------------");
  1471. var1.sendMessage(this.customization.prefix + "Loaded worlds: " + ChatColor.LIGHT_PURPLE + Bukkit.getWorlds().size());
  1472. var9 = Bukkit.getWorlds().iterator();
  1473.  
  1474. while(var9.hasNext()) {
  1475. var32 = (World)var9.next();
  1476. var1.sendMessage(ChatColor.AQUA + "- " + ChatColor.LIGHT_PURPLE + var32.getName() + ChatColor.DARK_AQUA + " -> " + ChatColor.RED + "Environment: " + ChatColor.AQUA + var32.getEnvironment().name() + ", " + ChatColor.YELLOW + "Difficulty: " + ChatColor.AQUA + var32.getDifficulty().name() + ", " + ChatColor.GREEN + "PVP: " + ChatColor.AQUA + var32.getPVP() + ", " + ChatColor.DARK_AQUA + "Players: " + ChatColor.AQUA + var32.getPlayers().size());
  1477. }
  1478.  
  1479. var1.sendMessage("" + var27 + ChatColor.STRIKETHROUGH + "--------------------------------------------");
  1480. return true;
  1481. }
  1482.  
  1483. if (var4.length == 2) {
  1484. this.sendCommandUsage(var1, "WorldManager " + var6.substring(0, 1).toUpperCase() + var6.substring(1, var6.length()), "<Name>");
  1485. return true;
  1486. }
  1487.  
  1488. World var7 = Bukkit.getWorld(var4[2]);
  1489. if (var7 == null) {
  1490. var1.sendMessage(this.customization.prefix + "Couldn't find a loaded world with that name!");
  1491. return true;
  1492. }
  1493.  
  1494. if (var6.equals("backup")) {
  1495. (new 7(this, var1, var7)).runTaskAsynchronously(this);
  1496. return true;
  1497. }
  1498.  
  1499. if (!var6.equals("restore")) {
  1500. return true;
  1501. }
  1502.  
  1503. if (var7.getPlayers().isEmpty()) {
  1504. var30 = new File(this.getDataFolder() + "/backup", var7.getName());
  1505. if (!var30.exists()) {
  1506. var1.sendMessage(this.customization.prefix + "Couldn't find a backup for that world!");
  1507. return true;
  1508. }
  1509.  
  1510. (new 8(this, var1, var7, var30)).runTaskAsynchronously(this);
  1511. return true;
  1512. }
  1513.  
  1514. var1.sendMessage(this.customization.prefix + "The world contains players. so the world can't be restored!");
  1515. var9 = var7.getPlayers().iterator();
  1516.  
  1517. while(var9.hasNext()) {
  1518. var8 = (Player)var9.next();
  1519. var1.sendMessage(this.customization.prefix + "- " + var8.getName());
  1520. }
  1521.  
  1522. return true;
  1523. }
  1524.  
  1525. var1.sendMessage((String)this.customization.messages.get("Unknown-Command"));
  1526. }
  1527.  
  1528. return false;
  1529. }
  1530.  
  1531. private boolean checkSender(CommandSender var1, boolean var2, String var3) {
  1532. if (var2 && !(var1 instanceof Player)) {
  1533. var1.sendMessage(this.customization.prefix + "You must be a player to use this command");
  1534. return false;
  1535. } else if (!var3.isEmpty() && !var1.hasPermission(var3)) {
  1536. var1.sendMessage((String)this.customization.messages.get("No-Permission"));
  1537. return false;
  1538. } else {
  1539. return true;
  1540. }
  1541. }
  1542.  
  1543. private void sendCommandUsage(CommandSender var1, String var2, String var3, String... var4) {
  1544. var1.sendMessage(this.customization.prefix + "Usage: /td " + ChatColor.GREEN + var2 + ChatColor.GOLD + " " + var3);
  1545. String[] var8 = var4;
  1546. int var7 = var4.length;
  1547.  
  1548. for(int var6 = 0; var6 < var7; ++var6) {
  1549. String var5 = var8[var6];
  1550. var1.sendMessage(this.customization.prefix + ChatColor.AQUA + "- " + ChatColor.GOLD + var5);
  1551. }
  1552.  
  1553. }
  1554.  
  1555. protected List<Player> getPlayers(Collection<String> var1) {
  1556. ArrayList var2 = new ArrayList();
  1557. Iterator var4 = var1.iterator();
  1558.  
  1559. while(var4.hasNext()) {
  1560. String var3 = (String)var4.next();
  1561. if (Bukkit.getPlayer(var3) != null) {
  1562. var2.add(Bukkit.getPlayer(var3));
  1563. }
  1564. }
  1565.  
  1566. return var2;
  1567. }
  1568.  
  1569. protected String getStringFromLocation(Location var1, boolean var2) {
  1570. return var1.getWorld().getName() + ", " + ((double)var1.getBlockX() + (var2 ? 0.5D : 0.0D)) + ", " + var1.getBlockY() + ", " + ((double)var1.getBlockZ() + (var2 ? 0.5D : 0.0D)) + ", " + var1.getYaw() + ", " + var1.getPitch();
  1571. }
  1572.  
  1573. protected Location getLocationFromString(String var1) {
  1574. String[] var2 = var1.split(", ");
  1575. World var3 = Bukkit.getWorld(var2[0]);
  1576. double var4 = Double.valueOf(var2[1]);
  1577. double var6 = Double.valueOf(var2[2]);
  1578. double var8 = Double.valueOf(var2[3]);
  1579. float var10 = Float.valueOf(var2[4]);
  1580. float var11 = Float.valueOf(var2[5]);
  1581. return new Location(var3, var4, var6, var8, var10, var11);
  1582. }
  1583.  
  1584. protected String getReadableLocationString(Location var1, boolean var2) {
  1585. return "" + ChatColor.GREEN + ((double)var1.getBlockX() + (var2 ? 0.5D : 0.0D)) + ChatColor.GOLD + ", " + ChatColor.GREEN + var1.getBlockY() + ChatColor.GOLD + ", " + ChatColor.GREEN + ((double)var1.getBlockZ() + (var2 ? 0.5D : 0.0D));
  1586. }
  1587.  
  1588. protected boolean checkNumbers(String... var1) {
  1589. try {
  1590. String[] var5 = var1;
  1591. int var4 = var1.length;
  1592.  
  1593. for(int var3 = 0; var3 < var4; ++var3) {
  1594. String var2 = var5[var3];
  1595. Integer.parseInt(var2);
  1596. }
  1597.  
  1598. return true;
  1599. } catch (NumberFormatException var6) {
  1600. return false;
  1601. }
  1602. }
  1603.  
  1604. protected void cageInventory(Inventory var1, boolean var2) {
  1605. int var3;
  1606. if (var2) {
  1607. for(var3 = 0; var3 < var1.getSize(); ++var3) {
  1608. var1.setItem(var3, this.pane_itemstack);
  1609. }
  1610.  
  1611. } else {
  1612. for(var3 = 0; var3 < 9; ++var3) {
  1613. var1.setItem(var3, this.pane_itemstack);
  1614. }
  1615.  
  1616. for(var3 = var1.getSize() - 9; var3 < var1.getSize(); ++var3) {
  1617. var1.setItem(var3, this.pane_itemstack);
  1618. }
  1619.  
  1620. var3 = var1.getSize() / 9 - 2;
  1621. if (var3 >= 1) {
  1622. int var4;
  1623. for(var4 = 9; var4 < 9 * var3 + 1; var4 += 9) {
  1624. var1.setItem(var4, this.pane_itemstack);
  1625. }
  1626.  
  1627. for(var4 = 17; var4 < 9 * (var3 + 1); var4 += 9) {
  1628. var1.setItem(var4, this.pane_itemstack);
  1629. }
  1630.  
  1631. }
  1632. }
  1633. }
  1634.  
  1635. protected int getInventorySize(int var1) {
  1636. return var1 < 10 ? 9 : (var1 < 19 ? 18 : (var1 < 28 ? 27 : (var1 < 37 ? 36 : (var1 < 46 ? 45 : 54))));
  1637. }
  1638.  
  1639. protected boolean compareItem(ItemStack var1, ItemStack var2) {
  1640. return var1 != null && var2 != null && var1.getType().equals(var2.getType()) && var1.getItemMeta().equals(var2.getItemMeta());
  1641. }
  1642.  
  1643. protected void fireWorkEffect(Player var1, boolean var2) {
  1644. if (this.config.fireworksEnabled) {
  1645. Firework var3 = (Firework)var1.getWorld().spawn(var1.getLocation().add(0.0D, 1.0D, 0.0D), Firework.class);
  1646. FireworkMeta var4 = var3.getFireworkMeta();
  1647. FireworkEffect var5 = FireworkEffect.builder().flicker(this.r.nextBoolean()).withColor(Color.fromBGR(this.r.nextInt(256), this.r.nextInt(256), this.r.nextInt(256))).withFade(Color.fromBGR(this.r.nextInt(256), this.r.nextInt(256), this.r.nextInt(256))).with(Type.values()[this.r.nextInt(Type.values().length)]).trail(this.r.nextBoolean()).build();
  1648. var4.addEffect(var5);
  1649. var3.setFireworkMeta(var4);
  1650. if (var2) {
  1651. Bukkit.getScheduler().scheduleSyncDelayedTask(this, new 10(this, var3), 2L);
  1652. }
  1653.  
  1654. }
  1655. }
  1656.  
  1657. protected ItemStack getSkull(String var1, String var2) {
  1658. ItemStack var3 = new ItemStack(Material.SKULL_ITEM, 1, (short)SkullType.PLAYER.ordinal());
  1659. SkullMeta var4 = (SkullMeta)var3.getItemMeta();
  1660. if (this.config.loadSkinsOnSkulls) {
  1661. var4.setOwner(var1);
  1662. }
  1663.  
  1664. var4.setDisplayName(var2);
  1665. var3.setItemMeta(var4);
  1666. return var3;
  1667. }
  1668.  
  1669. protected void join(Player var1) {
  1670. this.players.add(var1.getName());
  1671. this.lobbyPlayers.add(var1.getName());
  1672. PlayerData var2 = (PlayerData)this.playerData.get(var1.getName());
  1673. var2.saveData(var1);
  1674. var1.teleport(this.lobbyLocation);
  1675. var2.clearPlayer(var1);
  1676. if (this.setCollidable != null) {
  1677. try {
  1678. this.setCollidable.invoke(var1, false);
  1679. } catch (IllegalArgumentException | InvocationTargetException | IllegalAccessException var5) {
  1680. var5.printStackTrace();
  1681. }
  1682. }
  1683.  
  1684. this.updateJoinSigns();
  1685. if (this.config.scoreboardTitleAnimationEnabled && this.scoreboardTitleAnimationTask == null) {
  1686. this.scoreboardTitleAnimationTask = (new 11(this)).runTaskTimer(this, (long)this.config.scoreboardTitleAnimationInterval, (long)this.config.scoreboardTitleAnimationInterval);
  1687. }
  1688.  
  1689. if (this.isOneGamePerServer()) {
  1690. (new 12(this, var1)).runTaskLater(this.plugin, 10L);
  1691. } else {
  1692. var1.sendMessage((String)this.customization.messages.get("Player-Join"));
  1693. }
  1694.  
  1695. ItemStack var3 = this.getSkull(var1.getName(), ChatColor.AQUA + var1.getName());
  1696.  
  1697. int var4;
  1698. for(var4 = 0; var4 < this.playerInviter.getSize(); ++var4) {
  1699. if (this.playerInviter.addItem(var4, var3)) {
  1700. return;
  1701. }
  1702. }
  1703.  
  1704. var4 = this.playerInviter.addInventory(ChatColor.RED + "List #" + (this.playerInviter.getSize() + 1));
  1705. this.playerInviter.setItem(var4, 49, this.back_itemstack);
  1706. this.playerInviter.addItem(var4, var3);
  1707. }
  1708.  
  1709. protected void leave(Player var1, boolean var2) {
  1710. String var3 = var1.getName();
  1711. PlayerData var4 = (PlayerData)this.playerData.get(var3);
  1712. if (this.isOneGamePerServer()) {
  1713. var2 = true;
  1714. }
  1715.  
  1716. if (this.playersSelectedObject.containsKey(var1.getName())) {
  1717. this.playersSelectedObject.remove(var1.getName());
  1718. }
  1719.  
  1720. if (var4.arena != null) {
  1721. var4.arena.leave(var1);
  1722. if (!var2) {
  1723. return;
  1724. }
  1725. }
  1726.  
  1727. this.players.remove(var3);
  1728. this.lobbyPlayers.remove(var3);
  1729. if (this.setCollidable != null) {
  1730. try {
  1731. this.setCollidable.invoke(var1, true);
  1732. } catch (IllegalArgumentException | InvocationTargetException | IllegalAccessException var11) {
  1733. var11.printStackTrace();
  1734. }
  1735. }
  1736.  
  1737. var4.restoreData(var1);
  1738. if (var4.party != null) {
  1739. var4.party.leave(var1);
  1740. }
  1741.  
  1742. var1.sendMessage((String)this.customization.messages.get("Player-Leave"));
  1743. this.updateJoinSigns();
  1744. if (this.config.bungee_mode_enabled) {
  1745. ByteArrayDataOutput var5 = ByteStreams.newDataOutput();
  1746. var5.writeUTF("Connect");
  1747. var5.writeUTF(this.config.bungee_mode_hub);
  1748. var1.sendPluginMessage(this, "BungeeCord", var5.toByteArray());
  1749. }
  1750.  
  1751. if (this.config.scoreboardTitleAnimationEnabled && this.scoreboardTitleAnimationTask != null && this.players.isEmpty()) {
  1752. this.scoreboardTitleAnimationTask.cancel();
  1753. this.scoreboardTitleAnimationTask = null;
  1754. }
  1755.  
  1756. for(int var12 = 0; var12 < this.playerInviter.getSize(); ++var12) {
  1757. int[] var9;
  1758. int var8 = (var9 = this.smartSlots).length;
  1759.  
  1760. for(int var7 = 0; var7 < var8; ++var7) {
  1761. int var6 = var9[var7];
  1762. ItemStack var10 = this.playerInviter.getItem(var12, var6);
  1763. if (var10 != null && ChatColor.stripColor(var10.getItemMeta().getDisplayName()).equals(var3)) {
  1764. this.playerInviter.removeItem(var12, var6);
  1765. return;
  1766. }
  1767. }
  1768. }
  1769.  
  1770. }
  1771.  
  1772. protected void autojoin(Player var1, String var2) {
  1773. PlayerData var3 = (PlayerData)this.plugin.playerData.get(var1.getName());
  1774. int var4 = 1;
  1775. if (var3.party != null) {
  1776. var4 = var3.party.players.size();
  1777. if (!var3.party.leaderName.equals(var1.getName())) {
  1778. var1.sendMessage((String)this.customization.messages.get("Party-Must-Be-Leader"));
  1779. return;
  1780. }
  1781.  
  1782. Iterator var6 = var3.party.players.iterator();
  1783.  
  1784. while(var6.hasNext()) {
  1785. String var5 = (String)var6.next();
  1786. if (!this.plugin.lobbyPlayers.contains(var5)) {
  1787. var1.sendMessage(((String)this.customization.messages.get("Party-Player-Not-Available")).replace("%member%", var5));
  1788. return;
  1789. }
  1790. }
  1791. }
  1792.  
  1793. ArrayList var9 = new ArrayList();
  1794. Iterator var7 = this.arenas.values().iterator();
  1795.  
  1796. while(true) {
  1797. Arena var10;
  1798. do {
  1799. do {
  1800. do {
  1801. do {
  1802. do {
  1803. if (!var7.hasNext()) {
  1804. if (var9.isEmpty()) {
  1805. var1.sendMessage((String)this.customization.messages.get("No-Available-Arena"));
  1806. return;
  1807. }
  1808.  
  1809. var10 = (Arena)var9.get(0);
  1810. Iterator var8 = var9.iterator();
  1811.  
  1812. while(var8.hasNext()) {
  1813. Arena var11 = (Arena)var8.next();
  1814. if (var11.players.size() > var10.players.size()) {
  1815. var10 = var11;
  1816. }
  1817. }
  1818.  
  1819. var10.join(var1);
  1820. return;
  1821. }
  1822.  
  1823. var10 = (Arena)var7.next();
  1824. } while(!var10.enabled);
  1825. } while(!var10.state.AVAILABLE());
  1826. } while(var10.players.size() + var4 > var10.maxPlayers);
  1827. } while(var2.equals("SINGLEPLAYER") && var10.maxPlayers != 1);
  1828. } while(var2.equals("MULTIPLAYER") && var10.maxPlayers < 2);
  1829.  
  1830. var9.add(var10);
  1831. }
  1832. }
  1833.  
  1834. protected void updateJoinSigns() {
  1835. Iterator var2 = this.joinSigns.keySet().iterator();
  1836.  
  1837. while(var2.hasNext()) {
  1838. Location var1 = (Location)var2.next();
  1839. if (var1.getBlock().getState() instanceof Sign) {
  1840. Sign var3 = (Sign)var1.getBlock().getState();
  1841. var3.setLine(3, String.valueOf(this.players.size()));
  1842. var3.update(true);
  1843. }
  1844. }
  1845.  
  1846. }
  1847.  
  1848. protected void delayedSetup() {
  1849. Bukkit.getScheduler().scheduleSyncDelayedTask(this, new 13(this), (long)this.getConfig().getInt("Load-Delay-Ticks"));
  1850. }
  1851.  
  1852. protected void mainSetup() {
  1853. this.filesManager = new FilesManager(this);
  1854. FileConfiguration var1 = this.filesManager.getConfig("customization.yml");
  1855. this.customization = new Customization(var1);
  1856. this.config = new Config(this);
  1857. this.ranksManager = new RanksManager(this);
  1858. this.quit_itemstack = this.getItemStack(var1.getString("Items.Quit"), false, true);
  1859. this.prestige_itemstack = this.getItemStack(var1.getString("Items.Prestige"), false, true);
  1860. this.win_itemstack = this.getItemStack(var1.getString("Items.Win"), false, true);
  1861. this.lose_itemstack = this.getItemStack(var1.getString("Items.Lose"), false, true);
  1862. this.play_itemstack = this.getItemStack(var1.getString("Items.Play"), false, true);
  1863. this.profile_itemstack = this.getItemStack(var1.getString("Items.Profile"), false, true);
  1864. this.enemyjoin_itemstack = this.getItemStack(var1.getString("Items.Enemy-Join"), false, true);
  1865. this.summoner_itemstack = this.getItemStack(var1.getString("Items.Summoner"), false, true);
  1866. this.guide_itemstack = this.getItemStack(var1.getString("Items.Enemy-Guide"), false, true);
  1867. this.party_itemstack = this.getItemStack(var1.getString("Items.Party"), false, true);
  1868. this.teleporter_itemstack = this.getItemStack(var1.getString("Items.Teleporter"), false, true);
  1869. this.autojoin_itemstack = this.getItemStack(var1.getString("Items.Autojoin"), false, true);
  1870. this.back_itemstack = this.getItemStack(var1.getString("Items.Back"), false, true);
  1871. this.difficulty_itemstack = this.getItemStack(var1.getString("Items.Difficulty"), false, true);
  1872. this.classes_itemstack = this.getItemStack(var1.getString("Items.Classes"), false, true);
  1873. this.stats_itemstack = this.getItemStack(var1.getString("Items.Stats"), false, true);
  1874. this.achievements_itemstack = this.getItemStack(var1.getString("Items.Achievements"), false, true);
  1875. this.next_itemstack = this.getItemStack(var1.getString("Items.Next"), false, true);
  1876. this.previous_itemstack = this.getItemStack(var1.getString("Items.Previous"), false, true);
  1877. this.create_itemstack = this.getItemStack(var1.getString("Items.Create"), false, true);
  1878. this.join_itemstack = this.getItemStack(var1.getString("Items.Join"), false, true);
  1879. this.invite_itemstack = this.getItemStack(var1.getString("Items.Invite"), false, true);
  1880. this.leave_itemstack = this.getItemStack(var1.getString("Items.Leave"), false, true);
  1881. this.loadTowers();
  1882. this.loadEnemies();
  1883. this.loadClasses();
  1884. this.arenaSelector = new SmartInventory(this.plugin, (String)this.customization.inventories.get("Arenas-Selector"));
  1885. this.arenaSelector.addInventory(ChatColor.RED + "List #1");
  1886. this.arenaSelector.setItem(0, 49, this.autojoin_itemstack);
  1887. this.delayedSetup();
  1888. this.createDefaultAchievements();
  1889. this.achievementsManager = new AchievementsManager(this);
  1890. this.broadcaster.loadMessages(this.filesManager.getConfig("broadcaster.yml"));
  1891. this.partyMenu = Bukkit.createInventory((InventoryHolder)null, 9, ChatColor.RED + "Select your option!");
  1892. this.cageInventory(this.partyMenu, true);
  1893. this.partyMenu.setItem(2, this.create_itemstack);
  1894. this.partyMenu.setItem(6, this.join_itemstack);
  1895. this.parties = new ArrayList();
  1896.  
  1897. PlayerData var2;
  1898. for(Iterator var3 = this.playerData.values().iterator(); var3.hasNext(); var2.party = null) {
  1899. var2 = (PlayerData)var3.next();
  1900. }
  1901.  
  1902. this.partySelector = new SmartInventory(this, (String)this.customization.inventories.get("Parties"));
  1903. this.partySelector.addInventory(ChatColor.RED + "List #1");
  1904. this.partySelector.setItem(0, 49, this.back_itemstack);
  1905. this.playerInviter = new SmartInventory(this, (String)this.customization.inventories.get("Player-Inviter"));
  1906. this.profileInventory = Bukkit.createInventory((InventoryHolder)null, 9, (String)this.customization.inventories.get("Profile"));
  1907. this.cageInventory(this.profileInventory, true);
  1908. this.profileInventory.setItem(2, this.stats_itemstack);
  1909. this.profileInventory.setItem(6, this.achievements_itemstack);
  1910. this.prestigeInventory = Bukkit.createInventory((InventoryHolder)null, 9, (String)this.customization.inventories.get("Prestige"));
  1911.  
  1912. for(int var5 = 0; var5 < this.prestigeInventory.getSize(); ++var5) {
  1913. this.prestigeInventory.setItem(var5, new ItemStack(Material.FIREWORK));
  1914. }
  1915.  
  1916. this.prestigeInventory.setItem(4, this.prestige_itemstack);
  1917. this.quitInventory = Bukkit.createInventory((InventoryHolder)null, 9, (String)this.customization.inventories.get("Quit-Inventory"));
  1918. this.cageInventory(this.quitInventory, true);
  1919. this.quitInventory.setItem(2, this.getItemStack(var1.getString("Items.Confirm"), false, true));
  1920. this.quitInventory.setItem(6, this.getItemStack(var1.getString("Items.Cancel"), false, true));
  1921. this.spectatorMenu = Bukkit.createInventory((InventoryHolder)null, 9, (String)this.customization.inventories.get("Spectator-Menu"));
  1922. if (this.config.hotbarItems.containsKey("Arena-Selector")) {
  1923. this.spectatorMenu.setItem((Integer)this.config.hotbarItems.get("Arena-Selector") - 1, this.play_itemstack);
  1924. }
  1925.  
  1926. if (this.config.hotbarItems.containsKey("Teleporter")) {
  1927. this.spectatorMenu.setItem((Integer)this.config.hotbarItems.get("Teleporter") - 1, this.teleporter_itemstack);
  1928. }
  1929.  
  1930. if (this.config.hotbarItems.containsKey("Profile")) {
  1931. this.spectatorMenu.setItem((Integer)this.config.hotbarItems.get("Profile") - 1, this.profile_itemstack);
  1932. }
  1933.  
  1934. if (this.config.hotbarItems.containsKey("Enemy-Guide")) {
  1935. this.spectatorMenu.setItem((Integer)this.config.hotbarItems.get("Enemy-Guide") - 1, this.guide_itemstack);
  1936. }
  1937.  
  1938. if (this.config.hotbarItems.containsKey("Quit")) {
  1939. this.spectatorMenu.setItem((Integer)this.config.hotbarItems.get("Quit") - 1, this.quit_itemstack);
  1940. }
  1941.  
  1942. this.vault = null;
  1943. if (this.getConfig().getBoolean("use-Vault") && Bukkit.getPluginManager().getPlugin("Vault") != null && Bukkit.getServicesManager().getRegistration(Economy.class) != null) {
  1944. this.vault = (Economy)Bukkit.getServicesManager().getRegistration(Economy.class).getProvider();
  1945. Bukkit.getConsoleSender().sendMessage(this.customization.prefix + "The plugin will be using vault economy instead of coins..");
  1946. }
  1947.  
  1948. if (this.config.bungee_mode_enabled && !Bukkit.getMessenger().isOutgoingChannelRegistered(this, "BungeeCord")) {
  1949. Bukkit.getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
  1950. }
  1951.  
  1952. try {
  1953. if (this.mysql != null) {
  1954. this.mysql.close();
  1955. this.mysql = null;
  1956. }
  1957.  
  1958. if (this.config.mysql_enabled) {
  1959. Bukkit.getConsoleSender().sendMessage(this.customization.prefix + "Attempting to connect to the database and creating a table if it doesn't exist!");
  1960. long var6 = System.currentTimeMillis();
  1961. this.mysql = new MySQL(this, this.getConfig().getString("MySQL.table"), this.getConfig().getString("MySQL.host"), this.getConfig().getString("MySQL.port"), this.getConfig().getString("MySQL.database"), this.getConfig().getString("MySQL.username"), this.getConfig().getString("MySQL.password"));
  1962. this.mysql.setupTable();
  1963. Bukkit.getConsoleSender().sendMessage(this.customization.prefix + "Connection has been successfully established! it took " + (System.currentTimeMillis() - var6) + "ms to complete!");
  1964. }
  1965. } catch (SQLException var4) {
  1966. var4.printStackTrace();
  1967. }
  1968.  
  1969. if (this.savingTask != null) {
  1970. this.savingTask.cancel();
  1971. }
  1972.  
  1973. if (this.getConfig().getBoolean("Saving-Task.Enabled")) {
  1974. this.savingTask = (new 14(this)).runTaskTimer(this, (long)(this.getConfig().getInt("Saving-Task.Save-Every-Minutes") * 1200), (long)(this.getConfig().getInt("Saving-Task.Save-Every-Minutes") * 1200));
  1975. } else {
  1976. this.savingTask = null;
  1977. }
  1978.  
  1979. this.availableUpdate = false;
  1980. this.checkUpdates((Player)null);
  1981. }
  1982.  
  1983. protected void checkUpdates(Player var1) {
  1984. if (this.getConfig().getBoolean("Check-For-Updates")) {
  1985. (new 15(this, var1)).runTaskAsynchronously(this);
  1986. }
  1987.  
  1988. }
  1989.  
  1990. public void loadTowers() {
  1991. this.towers.clear();
  1992. File var1 = new File(this.plugin.getDataFolder(), "towers.yml");
  1993. YamlConfiguration var2 = YamlConfiguration.loadConfiguration(var1);
  1994. if (var2.getConfigurationSection("Towers") == null || var2.getConfigurationSection("Towers").getKeys(false).isEmpty()) {
  1995. var2.setDefaults(YamlConfiguration.loadConfiguration(new InputStreamReader(this.plugin.getResource("towers.yml"))));
  1996. var2.options().copyDefaults(true);
  1997.  
  1998. try {
  1999. var2.save(var1);
  2000. } catch (IOException var5) {
  2001. var5.printStackTrace();
  2002. }
  2003.  
  2004. Bukkit.getConsoleSender().sendMessage(this.customization.prefix + "Generated default towers.yml file!");
  2005. }
  2006.  
  2007. Iterator var4 = var2.getConfigurationSection("Towers").getKeys(false).iterator();
  2008.  
  2009. while(var4.hasNext()) {
  2010. String var3 = (String)var4.next();
  2011. this.towers.put(var3.toLowerCase(), new Tower(this, var2, var3));
  2012. }
  2013.  
  2014. }
  2015.  
  2016. public void loadClasses() {
  2017. this.classes.clear();
  2018. File var1 = new File(this.plugin.getDataFolder(), "classes.yml");
  2019. YamlConfiguration var2 = YamlConfiguration.loadConfiguration(var1);
  2020. if (var2.getConfigurationSection("Classes") == null || var2.getConfigurationSection("Classes").getKeys(false).isEmpty()) {
  2021. var2.setDefaults(YamlConfiguration.loadConfiguration(new InputStreamReader(this.plugin.getResource("classes.yml"))));
  2022. var2.options().copyDefaults(true);
  2023.  
  2024. try {
  2025. var2.save(var1);
  2026. } catch (IOException var5) {
  2027. var5.printStackTrace();
  2028. }
  2029.  
  2030. Bukkit.getConsoleSender().sendMessage(this.customization.prefix + "Generated default classes.yml file!");
  2031. }
  2032.  
  2033. Iterator var4 = var2.getConfigurationSection("Classes").getKeys(false).iterator();
  2034.  
  2035. while(var4.hasNext()) {
  2036. String var3 = (String)var4.next();
  2037. if (var2.getBoolean("Classes." + var3 + ".Enabled")) {
  2038. this.classes.put(var3.toLowerCase(), new ClassData(this, var2, var3));
  2039. }
  2040. }
  2041.  
  2042. this.classesInventory = Bukkit.createInventory((InventoryHolder)null, this.getInventorySize(this.classes.size() + 9), (String)this.customization.inventories.get("Classes"));
  2043. this.cageInventory(this.classesInventory, true);
  2044. this.classesInventory.setItem(this.classesInventory.getSize() - 5, this.back_itemstack);
  2045.  
  2046. for(int var6 = 0; var6 < this.classes.size(); ++var6) {
  2047. this.classesInventory.setItem(var6, ((ClassData)this.classes.values().toArray()[var6]).logo);
  2048. }
  2049.  
  2050. }
  2051.  
  2052. public void loadEnemies() {
  2053. this.enemies.clear();
  2054. File var1 = new File(this.plugin.getDataFolder(), "enemies.yml");
  2055. YamlConfiguration var2 = YamlConfiguration.loadConfiguration(var1);
  2056. if (var2.getConfigurationSection("Enemies") == null || var2.getConfigurationSection("Enemies").getKeys(false).isEmpty()) {
  2057. var2.setDefaults(YamlConfiguration.loadConfiguration(new InputStreamReader(this.plugin.getResource("enemies.yml"))));
  2058. var2.options().copyDefaults(true);
  2059.  
  2060. try {
  2061. var2.save(var1);
  2062. Bukkit.getConsoleSender().sendMessage(this.customization.prefix + "Generated default enemies.yml file!");
  2063. } catch (IOException var11) {
  2064. Bukkit.getConsoleSender().sendMessage(this.customization.prefix + "Could not generate default enemies.yml file!");
  2065. var11.printStackTrace();
  2066. }
  2067. }
  2068.  
  2069. Iterator var4 = var2.getConfigurationSection("Enemies").getKeys(false).iterator();
  2070.  
  2071. String var3;
  2072. while(var4.hasNext()) {
  2073. var3 = (String)var4.next();
  2074. this.enemies.put(var3.toLowerCase(), new Enemy(this, var2, var3, false));
  2075. }
  2076.  
  2077. if (var2.getConfigurationSection("Bosses") != null && !var2.getConfigurationSection("Bosses").getKeys(false).isEmpty()) {
  2078. var4 = var2.getConfigurationSection("Bosses").getKeys(false).iterator();
  2079.  
  2080. while(var4.hasNext()) {
  2081. var3 = (String)var4.next();
  2082. this.bosses.put(var3.toLowerCase(), new Enemy(this, var2, var3, true));
  2083. }
  2084. }
  2085.  
  2086. this.enemyGuide = new SmartInventory(this, (String)this.customization.inventories.get("Enemy-Guide"));
  2087. ArrayList var12 = new ArrayList(this.enemies.values());
  2088. var12.addAll(this.bosses.values());
  2089. var4 = var12.iterator();
  2090.  
  2091. for(int var5 = 0; (double)var5 < Math.ceil(Double.valueOf((double)var12.size()) / (double)this.smartSlots.length); ++var5) {
  2092. if (var5 >= this.enemyGuide.getSize()) {
  2093. this.enemyGuide.addInventory(ChatColor.RED + "List #" + (var5 + 1));
  2094. }
  2095.  
  2096. int[] var9;
  2097. int var8 = (var9 = this.smartSlots).length;
  2098.  
  2099. for(int var7 = 0; var7 < var8; ++var7) {
  2100. int var6 = var9[var7];
  2101. if (!var4.hasNext()) {
  2102. break;
  2103. }
  2104.  
  2105. Enemy var10 = (Enemy)var4.next();
  2106. this.enemyGuide.setItem(var5, var6, var10.item);
  2107. }
  2108. }
  2109.  
  2110. }
  2111.  
  2112. protected void updateArenasInventory() {
  2113. for(int var1 = 0; var1 < this.arenaSelector.getSize(); ++var1) {
  2114. this.arenaSelector.clear(var1);
  2115. }
  2116.  
  2117. HashMap var10 = new HashMap();
  2118. Iterator var3 = this.arenas.values().iterator();
  2119.  
  2120. while(var3.hasNext()) {
  2121. Arena var2 = (Arena)var3.next();
  2122. var10.put(var2, var2.maxPlayers);
  2123. }
  2124.  
  2125. LinkedList var11 = new LinkedList(var10.entrySet());
  2126. Collections.sort(var11, new 16(this));
  2127. var3 = var11.iterator();
  2128.  
  2129. for(int var4 = 0; (double)var4 < Math.ceil(Double.valueOf((double)this.arenas.size()) / (double)this.smartSlots.length); ++var4) {
  2130. if (var4 >= this.arenaSelector.getSize()) {
  2131. this.arenaSelector.addInventory(ChatColor.RED + "List #" + (var4 + 1));
  2132. this.arenaSelector.setItem(var4, 49, this.autojoin_itemstack);
  2133. }
  2134.  
  2135. int[] var8;
  2136. int var7 = (var8 = this.smartSlots).length;
  2137.  
  2138. for(int var6 = 0; var6 < var7; ++var6) {
  2139. int var5 = var8[var6];
  2140. if (!var3.hasNext()) {
  2141. break;
  2142. }
  2143.  
  2144. Arena var9 = (Arena)((Entry)var3.next()).getKey();
  2145. var9.id = var4;
  2146. var9.slot = var5;
  2147. var9.updateItem();
  2148. }
  2149. }
  2150.  
  2151. }
  2152.  
  2153. protected void updatePartiesInventory() {
  2154. int var1;
  2155. for(var1 = 0; var1 < this.partySelector.getSize(); ++var1) {
  2156. this.partySelector.clear(var1);
  2157. }
  2158.  
  2159. var1 = 0;
  2160.  
  2161. for(int var2 = 0; (double)var2 < Math.ceil(Double.valueOf((double)this.parties.size()) / (double)this.smartSlots.length); ++var2) {
  2162. if (var2 >= this.partySelector.getSize()) {
  2163. this.partySelector.addInventory(ChatColor.RED + "List #" + (var2 + 1));
  2164. this.partySelector.setItem(var2, 49, this.back_itemstack);
  2165. }
  2166.  
  2167. int[] var6;
  2168. int var5 = (var6 = this.smartSlots).length;
  2169.  
  2170. for(int var4 = 0; var4 < var5; ++var4) {
  2171. int var3 = var6[var4];
  2172. if (var1 >= this.parties.size()) {
  2173. break;
  2174. }
  2175.  
  2176. Party var7 = (Party)this.parties.get(var1);
  2177. var7.id = var2;
  2178. var7.slot = var3;
  2179. var7.updateItem();
  2180. ++var1;
  2181. }
  2182. }
  2183.  
  2184. }
  2185.  
  2186. protected void createDefaultAchievements() {
  2187. FileConfiguration var1 = this.filesManager.getConfig("achievements.yml");
  2188. AchievementType[] var5;
  2189. int var4 = (var5 = AchievementType.values()).length;
  2190.  
  2191. for(int var3 = 0; var3 < var4; ++var3) {
  2192. AchievementType var2 = var5[var3];
  2193. if (!var1.contains("Achievements." + var2.name().toLowerCase())) {
  2194. int[] var9;
  2195. int var8 = (var9 = var2.levels).length;
  2196.  
  2197. for(int var7 = 0; var7 < var8; ++var7) {
  2198. int var6 = var9[var7];
  2199. String var10 = "Achievements." + var2.name().toLowerCase() + "." + var6 + ".";
  2200. var1.set(var10 + "description", var2.defaultDescription.replace("%x%", String.valueOf(var6)));
  2201. var1.set(var10 + "prize-description", "Earn " + (int)(var2.prizeMultiplier * (double)var6) + " coins!");
  2202. var1.set(var10 + "executed-command", "td coins add %player% " + (int)(var2.prizeMultiplier * (double)var6));
  2203. }
  2204. }
  2205. }
  2206.  
  2207. this.filesManager.saveConfig("achievements.yml");
  2208. }
  2209.  
  2210. protected void startLeaderboardUpdater() {
  2211. if (this.leaderboard_updater != null) {
  2212. this.plugin.leaderboard_updater.cancel();
  2213. }
  2214.  
  2215. this.leaderboard_updater = (new 17(this)).runTaskTimer(this, 0L, (long)(this.getConfig().getInt("Update-Leaderboard-Every-Minutes") * 1200));
  2216. }
  2217.  
  2218. private void updateSkull(Sign var1, String var2) {
  2219. Location[] var3 = new Location[]{var1.getLocation().add(0.0D, 1.0D, 0.0D), var1.getLocation().clone().add(1.0D, 1.0D, 0.0D), var1.getLocation().clone().add(-1.0D, 1.0D, 0.0D), var1.getLocation().clone().add(0.0D, 1.0D, 1.0D), var1.getLocation().clone().add(0.0D, 1.0D, -1.0D)};
  2220. Location[] var7 = var3;
  2221. int var6 = var3.length;
  2222.  
  2223. for(int var5 = 0; var5 < var6; ++var5) {
  2224. Location var4 = var7[var5];
  2225. if (var4.getBlock().getState() instanceof Skull) {
  2226. Skull var8 = (Skull)var4.getBlock().getState();
  2227.  
  2228. try {
  2229. var8.setOwner(var2);
  2230. var8.update();
  2231. } catch (Exception var10) {
  2232. }
  2233. break;
  2234. }
  2235. }
  2236.  
  2237. }
  2238.  
  2239. protected ItemStack getItemStack(String var1, boolean var2, boolean var3) {
  2240. String[] var4 = var1.split(" : ");
  2241. String var5 = var4[0].contains(":") ? var4[0].split(":")[0].toUpperCase() : var4[0].toUpperCase();
  2242. ItemStackBuilder var6 = new ItemStackBuilder(Material.getMaterial(var5));
  2243. if (var2) {
  2244. var6.setAmount(Integer.valueOf(var4[1]));
  2245. }
  2246.  
  2247. if (var4[0].contains(":")) {
  2248. var6.setDurability(Integer.valueOf(var4[0].split(":")[1]));
  2249. }
  2250.  
  2251. if (var3) {
  2252. for(int var7 = var2 ? 2 : 1; var7 < var4.length; ++var7) {
  2253. String var8 = var4[var7].split(":")[0].toLowerCase();
  2254. if (var8.equals("name")) {
  2255. var6.setName(ChatColor.translateAlternateColorCodes('&', var4[var7].split(":")[1]));
  2256. } else if (var8.equals("lore")) {
  2257. var6.addLore(new String[]{ChatColor.translateAlternateColorCodes('&', var4[var7].split(":")[1])});
  2258. } else if (var8.equals("enchant")) {
  2259. var6.addEnchantment(Enchantment.getByName(var4[var7].split(":")[1].toUpperCase()), Integer.valueOf(var4[var7].split(":")[2]));
  2260. } else if (var8.equalsIgnoreCase("dye")) {
  2261. var6.setColor(this.getColor(var4[var7].split(":")[1]));
  2262. }
  2263. }
  2264. }
  2265.  
  2266. return var6.build();
  2267. }
  2268.  
  2269. public boolean isOneGamePerServer() {
  2270. return this.config.bungee_mode_enabled && this.arenas != null && this.arenas.size() == 1;
  2271. }
  2272.  
  2273. protected List<Player> getOnlinePlayers() {
  2274. ArrayList var1 = Lists.newArrayList();
  2275. Iterator var3 = Bukkit.getWorlds().iterator();
  2276.  
  2277. while(var3.hasNext()) {
  2278. World var2 = (World)var3.next();
  2279. var1.addAll(var2.getPlayers());
  2280. }
  2281.  
  2282. return Collections.unmodifiableList(var1);
  2283. }
  2284.  
  2285. private void loadReflectionMethods() {
  2286. try {
  2287. this.spectatorMode = GameMode.valueOf("SPECTATOR");
  2288. } catch (Exception var5) {
  2289. }
  2290.  
  2291. Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "[" + ChatColor.AQUA + "TowerDefense" + ChatColor.GOLD + "] The plugin is using the new spectator system: " + (this.spectatorMode != null ? ChatColor.GREEN + "Yes" : ChatColor.RED + "No"));
  2292.  
  2293. try {
  2294. setDamageMethod = Class.forName("org.bukkit.inventory.meta.Damageable").getMethod("setDamage", Integer.TYPE);
  2295. } catch (Exception var4) {
  2296. }
  2297.  
  2298. Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "[" + ChatColor.AQUA + "TowerDefense" + ChatColor.GOLD + "] The plugin is using the new durability system: " + (setDamageMethod != null ? ChatColor.GREEN + "Yes" : ChatColor.RED + "No"));
  2299.  
  2300. try {
  2301. this.sendBlockChange = Player.class.getMethod("sendBlockChange", Location.class, Class.forName("org.bukkit.block.data.BlockData"));
  2302. } catch (Exception var3) {
  2303. }
  2304.  
  2305. try {
  2306. this.setCollidable = LivingEntity.class.getMethod("setCollidable", Boolean.TYPE);
  2307. } catch (Exception var2) {
  2308. }
  2309.  
  2310. Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "[" + ChatColor.AQUA + "TowerDefense" + ChatColor.GOLD + "] Entity collision disabled: " + (this.setCollidable != null ? ChatColor.GREEN + "Yes" : ChatColor.RED + "No"));
  2311. }
  2312.  
  2313. public void sendBlockChange(Player var1, Location var2, Material var3) {
  2314. if (this.sendBlockChange != null) {
  2315. try {
  2316. this.sendBlockChange.invoke(var1, var2, Material.class.getMethod("createBlockData").invoke(var3));
  2317. } catch (Exception var5) {
  2318. var5.printStackTrace();
  2319. }
  2320. } else {
  2321. var1.sendBlockChange(var2, var3, (byte)0);
  2322. }
  2323.  
  2324. }
  2325.  
  2326. private void loadNonCustomizableItems() {
  2327. this.wand_itemstack = (new ItemStackBuilder(Material.BLAZE_ROD)).setName(ChatColor.AQUA + "TowerDefense" + ChatColor.LIGHT_PURPLE + " Wand").addLore(new String[]{ChatColor.YELLOW + "--------------------------", ChatColor.GREEN + "Left click to select the first corner", ChatColor.GREEN + "Right click to select the second corner", ChatColor.YELLOW + "--------------------------"}).build();
  2328. this.towerbuildarea_itemstack = (new ItemStackBuilder(Material.CHEST)).setName(ChatColor.AQUA + "TowerDefense" + ChatColor.LIGHT_PURPLE + " Tower Build Area").addLore(new String[]{ChatColor.YELLOW + "--------------------------", ChatColor.GREEN + "Left click to add a tower building area", ChatColor.GREEN + "Right click to remove tower building area", ChatColor.YELLOW + "--------------------------"}).build();
  2329. this.pane_itemstack = (new ItemStackBuilder(Material.STAINED_GLASS_PANE)).setName(ChatColor.DARK_GRAY + " ").setDurability(7).build();
  2330. this.save_itemstack = (new ItemStackBuilder(Material.DIAMOND)).setName(ChatColor.AQUA + "Save & Apply").build();
  2331. this.plus_itemstack = (new ItemStackBuilder(Material.STAINED_GLASS_PANE)).setName(ChatColor.GREEN + "+").setDurability(5).build();
  2332. this.minus_itemstack = (new ItemStackBuilder(Material.STAINED_GLASS_PANE)).setName(ChatColor.RED + "-").setDurability(14).build();
  2333. }
  2334.  
  2335. private void loadSounds() {
  2336. try {
  2337. this.CLICK = Sound.valueOf("CLICK");
  2338. this.NOTE_PLING = Sound.valueOf("NOTE_PLING");
  2339. this.FIREWORK_TWINKLE = Sound.valueOf("FIREWORK_TWINKLE");
  2340. this.FIREWORK_BLAST = Sound.valueOf("FIREWORK_BLAST");
  2341. this.LAVA_POP = Sound.valueOf("LAVA_POP");
  2342. this.LEVEL_UP = Sound.valueOf("LEVEL_UP");
  2343. this.ANVIL_LAND = Sound.valueOf("ANVIL_LAND");
  2344. this.ITEM_PICKUP = Sound.valueOf("ITEM_PICKUP");
  2345. this.PISTON_EXTEND = Sound.valueOf("PISTON_EXTEND");
  2346. this.BLAZE_DEATH = Sound.valueOf("BLAZE_DEATH");
  2347. } catch (IllegalArgumentException var4) {
  2348. try {
  2349. this.CLICK = Sound.valueOf("UI_BUTTON_CLICK");
  2350. this.NOTE_PLING = Sound.valueOf("BLOCK_NOTE_PLING");
  2351. this.LAVA_POP = Sound.valueOf("BLOCK_LAVA_POP");
  2352. this.LEVEL_UP = Sound.valueOf("ENTITY_PLAYER_LEVELUP");
  2353. this.FIREWORK_TWINKLE = Sound.valueOf("ENTITY_FIREWORK_TWINKLE");
  2354. this.FIREWORK_BLAST = Sound.valueOf("ENTITY_FIREWORK_BLAST");
  2355. this.ANVIL_LAND = Sound.valueOf("BLOCK_ANVIL_LAND");
  2356. this.ITEM_PICKUP = Sound.valueOf("ENTITY_ITEM_PICKUP");
  2357. this.PISTON_EXTEND = Sound.valueOf("BLOCK_PISTON_EXTEND");
  2358. this.BLAZE_DEATH = Sound.valueOf("ENTITY_BLAZE_DEATH");
  2359. } catch (IllegalArgumentException var3) {
  2360. this.CLICK = Sound.valueOf("UI_BUTTON_CLICK");
  2361. this.NOTE_PLING = Sound.valueOf("BLOCK_NOTE_BLOCK_PLING");
  2362. this.LAVA_POP = Sound.valueOf("BLOCK_LAVA_POP");
  2363. this.LEVEL_UP = Sound.valueOf("ENTITY_PLAYER_LEVELUP");
  2364. this.FIREWORK_TWINKLE = Sound.valueOf("ENTITY_FIREWORK_ROCKET_TWINKLE");
  2365. this.FIREWORK_BLAST = Sound.valueOf("ENTITY_FIREWORK_ROCKET_BLAST");
  2366. this.ANVIL_LAND = Sound.valueOf("BLOCK_ANVIL_LAND");
  2367. this.ITEM_PICKUP = Sound.valueOf("ENTITY_ITEM_PICKUP");
  2368. this.PISTON_EXTEND = Sound.valueOf("BLOCK_PISTON_EXTEND");
  2369. this.BLAZE_DEATH = Sound.valueOf("ENTITY_BLAZE_DEATH");
  2370. }
  2371. }
  2372.  
  2373. }
  2374.  
  2375. public void loadTowerSpeeds() {
  2376. this.towerSpeeds.put("highest", -40);
  2377. this.towerSpeeds.put("very-high", -30);
  2378. this.towerSpeeds.put("high", -20);
  2379. this.towerSpeeds.put("normal-high", -10);
  2380. this.towerSpeeds.put("normal-low", 10);
  2381. this.towerSpeeds.put("low", 20);
  2382. this.towerSpeeds.put("very-low", 30);
  2383. this.towerSpeeds.put("slowest", 40);
  2384. }
  2385.  
  2386. public void loadEnemySpeeds() {
  2387. this.enemySpeeds.put("highest", 0.28D);
  2388. this.enemySpeeds.put("very-high", 0.21D);
  2389. this.enemySpeeds.put("high", 0.14D);
  2390. this.enemySpeeds.put("normal-high", 0.07D);
  2391. this.enemySpeeds.put("normal-low", -0.05D);
  2392. this.enemySpeeds.put("low", -0.1D);
  2393. this.enemySpeeds.put("very-low", -0.15D);
  2394. this.enemySpeeds.put("slowest", -0.2D);
  2395. }
  2396.  
  2397. public String getDate() {
  2398. return ChatColor.GRAY + (new SimpleDateFormat("dd/MM/yyyy")).format(new Date());
  2399. }
  2400.  
  2401. public double getModifier(Player var1) {
  2402. double var2 = 1.0D;
  2403. Iterator var5 = this.plugin.config.modifiers.keySet().iterator();
  2404.  
  2405. while(var5.hasNext()) {
  2406. String var4 = (String)var5.next();
  2407. if (var1.hasPermission(var4) && (Double)this.plugin.config.modifiers.get(var4) > var2) {
  2408. var2 = (Double)this.plugin.config.modifiers.get(var4);
  2409. }
  2410. }
  2411.  
  2412. return var2;
  2413. }
  2414.  
  2415. public String getPlaceholderValue(Player var1, PlayerData var2, String var3) {
  2416. if (var3.equals("kills")) {
  2417. return String.valueOf(var2.kills);
  2418. } else if (var3.equals("enemies_spawned")) {
  2419. return String.valueOf(var2.enemies_spawned);
  2420. } else if (var3.equals("coins")) {
  2421. return String.valueOf(var2.getCoins(var1));
  2422. } else if (var3.equals("wins")) {
  2423. return String.valueOf(var2.wins);
  2424. } else if (var3.equals("games_played")) {
  2425. return String.valueOf(var2.games_played);
  2426. } else if (var3.equals("highest_wave_survived")) {
  2427. return String.valueOf(var2.highest_wave_survived);
  2428. } else if (var3.equals("player_exp")) {
  2429. return String.valueOf(var2.player_exp);
  2430. } else if (var3.equals("player_next_rank_exp")) {
  2431. return String.valueOf(this.ranksManager.getNextRankExp(var2));
  2432. } else if (var3.equals("player_rank")) {
  2433. return String.valueOf(var2.player_rank);
  2434. } else if (var3.equals("player_prestige")) {
  2435. return String.valueOf(var2.player_prestige);
  2436. } else if (var3.equals("towers_built")) {
  2437. return String.valueOf(var2.towers_built);
  2438. } else if (var3.equals("tower_upgrades")) {
  2439. return String.valueOf(var2.tower_upgrades);
  2440. } else {
  2441. return var3.equals("towers_sold") ? String.valueOf(var2.towers_sold) : null;
  2442. }
  2443. }
  2444.  
  2445. public String getPlaceholderValue(Arena var1, String var2) {
  2446. if (var2.equals("arena_players")) {
  2447. return String.valueOf(var1.players.size());
  2448. } else if (var2.equals("arena_max_players")) {
  2449. return String.valueOf(var1.maxPlayers);
  2450. } else if (var2.equals("arena_viewers")) {
  2451. return String.valueOf(var1.spectators.size());
  2452. } else if (var2.equals("arena_name")) {
  2453. return String.valueOf(var1.name);
  2454. } else if (var2.equals("arena_mode")) {
  2455. return String.valueOf(var1.getMode());
  2456. } else if (var2.equals("arena_wave")) {
  2457. return String.valueOf(var1.currentWave);
  2458. } else if (var2.equals("arena_difficulty")) {
  2459. return String.valueOf(var1.difficulty);
  2460. } else if (var2.equals("arena_final_wave")) {
  2461. return String.valueOf(var1.difficulty.finalWave < 0 ? SPECIAL_CHARACTER.INFINITY.toString() : "" + var1.difficulty.finalWave);
  2462. } else if (var2.equals("arena_health")) {
  2463. return String.valueOf(var1.currentHealth);
  2464. } else if (var2.equals("arena_max_health")) {
  2465. return String.valueOf(var1.difficulty.playerHealth);
  2466. } else {
  2467. return var2.equals("date") ? this.getDate() : null;
  2468. }
  2469. }
  2470.  
  2471. public Color getColor(String var1) {
  2472. if (var1.equalsIgnoreCase("AQUA")) {
  2473. return Color.AQUA;
  2474. } else if (var1.equalsIgnoreCase("BLUE")) {
  2475. return Color.BLUE;
  2476. } else if (var1.equalsIgnoreCase("FUCHSIA")) {
  2477. return Color.FUCHSIA;
  2478. } else if (var1.equalsIgnoreCase("GRAY")) {
  2479. return Color.GRAY;
  2480. } else if (var1.equalsIgnoreCase("GREEN")) {
  2481. return Color.GREEN;
  2482. } else if (var1.equalsIgnoreCase("LIME")) {
  2483. return Color.LIME;
  2484. } else if (var1.equalsIgnoreCase("MAROON")) {
  2485. return Color.MAROON;
  2486. } else if (var1.equalsIgnoreCase("NAVY")) {
  2487. return Color.NAVY;
  2488. } else if (var1.equalsIgnoreCase("OLIVE")) {
  2489. return Color.OLIVE;
  2490. } else if (var1.equalsIgnoreCase("ORANGE")) {
  2491. return Color.ORANGE;
  2492. } else if (var1.equalsIgnoreCase("PURPLE")) {
  2493. return Color.PURPLE;
  2494. } else if (var1.equalsIgnoreCase("RED")) {
  2495. return Color.RED;
  2496. } else if (var1.equalsIgnoreCase("SILVER")) {
  2497. return Color.SILVER;
  2498. } else if (var1.equalsIgnoreCase("TEAL")) {
  2499. return Color.TEAL;
  2500. } else if (var1.equalsIgnoreCase("WHITE")) {
  2501. return Color.WHITE;
  2502. } else {
  2503. return var1.equalsIgnoreCase("YELLOW") ? Color.YELLOW : Color.BLACK;
  2504. }
  2505. }
  2506.  
  2507. public String getHealthString(double var1, double var3) {
  2508. if (var1 == var3) {
  2509. return ChatColor.GREEN + this.healthString;
  2510. } else {
  2511. int var5 = (int)(var1 / var3 * 10.0D);
  2512. return var5 < 1 ? ChatColor.GRAY + this.healthString : ChatColor.GREEN + this.healthString.substring(0, var5) + ChatColor.GRAY + this.healthString.substring(var5, this.healthString.length());
  2513. }
  2514. }
  2515.  
  2516. // $FF: synthetic method
  2517. static void access$0(TowerDefense var0, Sign var1, String var2) {
  2518. var0.updateSkull(var1, var2);
  2519. }
  2520. }
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • Huwaluz
    2 days
    # CSS 0.44 KB | 0 0
    1. Changelly Exploit Documentation Link:
    2.  
    3. https://docs.google.com/document/d/1Cz5fHkwyaApTWwqfgBBtpvConU8Lo_qJ9xtn7RazWpk/edit?usp=sharing
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment