Advertisement
tehchuanyeow

Untitled

Jul 23rd, 2014
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.14 KB | None | 0 0
  1. package net.mbcx2.PlayCY.arenas;
  2.  
  3. import java.io.File;
  4. import java.util.ArrayList;
  5. import me.confuser.barapi.BarAPI;
  6. import net.mbcx2.PlayCY.Config;
  7. import net.mbcx2.PlayCY.PlayCY;
  8. import net.mbcx2.PlayCY.enums.EnumArena;
  9. import net.mbcx2.PlayCY.enums.EnumArena.CountdownType;
  10. import net.mbcx2.PlayCY.players.PlayerManager;
  11. import net.mbcx2.PlayCY.utils.MessageUtil;
  12. import org.bukkit.Bukkit;
  13. import org.bukkit.ChatColor;
  14. import org.bukkit.GameMode;
  15. import org.bukkit.Location;
  16. import org.bukkit.Material;
  17. import org.bukkit.World;
  18. import org.bukkit.block.Block;
  19. import org.bukkit.configuration.file.YamlConfiguration;
  20. import org.bukkit.entity.Entity;
  21. import org.bukkit.entity.Player;
  22. import org.bukkit.plugin.Plugin;
  23. import com.sk89q.worldedit.CuboidClipboard;
  24. import com.sk89q.worldedit.EditSession;
  25. import com.sk89q.worldedit.MaxChangedBlocksException;
  26. import com.sk89q.worldedit.Vector;
  27. import com.sk89q.worldedit.bukkit.BukkitWorld;
  28. import com.sk89q.worldedit.schematic.SchematicFormat;
  29.  
  30. /**
  31. * Main arena manager class.
  32. */
  33. public class ArenaManager {
  34. private static ArenaManager instance = new ArenaManager();
  35. private ArrayList<Arena> arenas = new ArrayList<Arena>();
  36.  
  37. private ArenaManager() {
  38. }
  39.  
  40. public static ArenaManager getInstance() {
  41. return instance;
  42. }
  43.  
  44. public ArrayList<Arena> getArenaArray() {
  45. return arenas;
  46. }
  47.  
  48. /**
  49. * Setup the arenas
  50. */
  51. public void setup() {
  52. try {
  53. MessageUtil messageUtil = MessageUtil.getInstance();
  54. int arenaID = 0;
  55. while (arenaID <= PlayCY.getInstance().globalloop) {
  56. arenaID++;
  57. if (Config.getInstance().getArenasConfig().contains("Arenas." + arenaID)) {
  58. messageUtil.info("Setting up arena " + arenaID + "!");
  59. arenas.add(new Arena(arenaID));
  60. if (Config.getInstance().getArenaConfig(arenaID).getBoolean("Lobby.ResetWorld.Enabled")) {
  61. messageUtil.info("Resetting arena " + arenaID + "!");
  62. this.reset(arenaID);
  63. messageUtil.info("Removing entities from arena " + arenaID + "!");
  64. World world = Bukkit.getWorld(Config.getInstance().getArenaConfig(arenaID).getString("Lobby.GameWorld"));
  65. for (Entity entity : world.getEntities()) {
  66. if (!(entity instanceof Player)) {
  67. entity.remove();
  68. }
  69. }
  70. }
  71. }
  72. }
  73. } catch (Exception ex) {
  74. }
  75. }
  76.  
  77. /**
  78. * Resets an arena
  79. *
  80. * @param id ID of arena to reset
  81. */
  82. public void resetArena(int id) {
  83. if (getArena(id) != null) {
  84. for (Player player : Bukkit.getOnlinePlayers()) {
  85. if (this.getArena(player.getName()) != null) {
  86. this.kickPlayer(player.getName(), false, true, false);
  87. }
  88. }
  89. arenas.remove(getArena(id));
  90. arenas.add(new Arena(id));
  91. if (Config.getInstance().getArenaConfig(id).getBoolean("Lobby.ResetWorld.Enabled")) {
  92. this.reset(id);
  93. World world = Bukkit.getWorld(Config.getInstance().getArenaConfig(id).getString("Lobby.GameWorld"));
  94. for (Entity entity : world.getEntities()) {
  95. if (!(entity instanceof Player)) {
  96. entity.remove();
  97. }
  98. }
  99. }
  100. }
  101. }
  102.  
  103. /**
  104. * Returns the object of the arena ID
  105. *
  106. * @param id ID of arena
  107. * @return The arena
  108. */
  109. public Arena getArena(int id) {
  110. for (Arena a : arenas) {
  111. if (a.getID() == id) {
  112. return a;
  113. }
  114. }
  115. return null;
  116. }
  117.  
  118. /**
  119. * Returns the object of the arena of the player
  120. *
  121. * @param player Player
  122. * @return The arena
  123. */
  124. public Arena getArena(String player) {
  125. for (Arena a : arenas) {
  126. if (a.containsPlayer(player)) {
  127. return a;
  128. }
  129. }
  130. return null;
  131. }
  132.  
  133. /**
  134. * Kicks a player from a game
  135. *
  136. * @param player Player to kick from game
  137. * @param sendMessage Send message to the player that he left successfully or if it failed to leave
  138. * @param teleportToSpawn Teleport the player to spawn location after kicking the player
  139. * @param reset Reset the arena if required
  140. */
  141. @SuppressWarnings("deprecation")
  142. public void kickPlayer(String player, boolean sendMessage, boolean teleportToSpawn, boolean reset) {
  143. Player player1 = Bukkit.getPlayer(player);
  144. int sign = 0;
  145. int arenaID = 0;
  146. while (arenaID <= PlayCY.getInstance().globalloop) {
  147. arenaID++;
  148. Arena arena = ArenaManager.getInstance().getArena(arenaID);
  149. if (Config.getInstance().getArenaConfig(arenaID) != null) {
  150. if (ArenaManager.getInstance().getArena(player) != null) {
  151. arena.removePlayer(player);
  152. Plugin plugin = PlayCY.getInstance().getServer().getPluginManager().getPlugin("BarAPI");
  153. if (plugin != null ) {
  154. BarAPI.removeBar(player1);
  155. }
  156.  
  157. player1.setGameMode(GameMode.ADVENTURE);
  158. player1.setHealth(20.0);
  159. player1.setFoodLevel(20);
  160. player1.setExp(0);
  161. player1.getInventory().clear();
  162. player1.getInventory().setHelmet(null);
  163. player1.getInventory().setChestplate(null);
  164. player1.getInventory().setLeggings(null);
  165. player1.getInventory().setBoots(null);
  166. player1.updateInventory();
  167. if (arena.getPlayerCount() == 0) {
  168. arena.setCountdown(0, CountdownType.DEFAULT);
  169. }
  170. if (teleportToSpawn) {
  171. World tw = Bukkit.getWorld(Config.getInstance().getArenaConfig(arenaID).getString("Lobby.LeaveLocation.World"));
  172. double tx = (Config.getInstance().getArenaConfig(arenaID).getDouble("Lobby.LeaveLocation.X"));
  173. double ty = (Config.getInstance().getArenaConfig(arenaID).getDouble("Lobby.LeaveLocation.Y"));
  174. double tz = (Config.getInstance().getArenaConfig(arenaID).getDouble("Lobby.LeaveLocation.Z"));
  175. Location loc = new Location(tw, tx, ty, tz);
  176. player1.teleport(loc);
  177. }
  178. sign = arenaID;
  179. for (Player player2 : Bukkit.getOnlinePlayers()) {
  180. if (ArenaManager.getInstance().getArena(player2.getName()) != null) {
  181. if (ArenaManager.getInstance().getArena(player2.getName()).getID() == sign) {
  182. MessageUtil.getInstance().message(player2, "arena.left", player, true);
  183. }
  184. }
  185. }
  186. if (arena.getPlayerCount() == 0 && arena.getCountdown(CountdownType.DEFAULT) != -99 && reset) {
  187. ArenaManager.getInstance().resetArena(arena.getID());
  188. }
  189. if (Config.getInstance().getArenaConfig(arena.getID()).getBoolean("Lobby.Winner.Enabled")) {
  190. if (arena.getPlayerCount() == 1 && arena.getState() == EnumArena.GameState.IN_GAME) {
  191. for (Player player2 : Bukkit.getOnlinePlayers()) {
  192. if (arena.getPlayerHashMap().containsKey(player2.getName())) {
  193. PlayerManager.getInstance().getPlayer(player2).addMoney(Config.getInstance().getArenaConfig(arena.getID()).getDouble("Lobby.Winner.WinCoins"));
  194. ArenaManager.getInstance().kickPlayer(player2.getName(), false, true, false);
  195. Bukkit.broadcastMessage(MessageUtil.getInstance().getPrefix() + ChatColor.AQUA + player2.getName() + " has won on " + ChatColor.GOLD + Config.getInstance().getArenaConfig(arena.getID()).getString("Lobby.GameName") + ChatColor.AQUA + "!");
  196. Config.getInstance().getArenasConfig().set("Statistics.GamesWon", Config.getInstance().getArenasConfig().getInt("Statistics.GamesWon") + 1);
  197. }
  198. }
  199. ArenaManager.getInstance().resetArena(arena.getID());
  200. }
  201. }
  202. if (sendMessage) {
  203. MessageUtil.getInstance().message(player1, "arena.left", player1.getName(), true);
  204. }
  205. return;
  206. }
  207. }
  208. }
  209. if (sendMessage) {
  210. MessageUtil.getInstance().message(player1, "arena.younotingame", true);
  211. }
  212. }
  213.  
  214. /**
  215. * Resets an arena with CoreProtect
  216. *
  217. * @param arena Arena to reset
  218. */
  219. public void reset(int arenaID) {
  220. final Arena arena = this.getArena(arenaID);
  221. Bukkit.getScheduler().runTaskAsynchronously(PlayCY.getInstance(), new Runnable() {
  222. @Override
  223. public void run() {
  224. Bukkit.getScheduler().scheduleSyncDelayedTask(PlayCY.getInstance(), new Runnable() {
  225. @Override
  226. public void run() {
  227. YamlConfiguration config = Config.getInstance().getArenaConfig(arena.getID());
  228. Location loc1 = new Location(Bukkit.getWorld(config.getString("Lobby.GameWorld")), config.getDouble("Lobby.ResetWorld.Point1.X"), config.getDouble("Lobby.ResetWorld.Point1.Y"), config.getDouble("Lobby.ResetWorld.Point1.Z"));
  229. Location loc2 = new Location(Bukkit.getWorld(config.getString("Lobby.GameWorld")), config.getDouble("Lobby.ResetWorld.Point2.X"), config.getDouble("Lobby.ResetWorld.Point2.Y"), config.getDouble("Lobby.ResetWorld.Point2.Z"));
  230. int minX = Math.min(loc1.getBlockX(), loc2.getBlockX());
  231. int minY = Math.min(loc1.getBlockY(), loc2.getBlockY());
  232. int minZ = Math.min(loc1.getBlockZ(), loc2.getBlockZ());
  233. int maxX = Math.max(loc1.getBlockX(), loc2.getBlockX());
  234. int maxY = Math.max(loc1.getBlockY(), loc2.getBlockY());
  235. int maxZ = Math.max(loc1.getBlockZ(), loc2.getBlockZ());
  236. for (int x = minX; x <= maxX; x++) {
  237. for (int y = minY; y <= maxY; y++) {
  238. for (int z = minZ; z <= maxZ; z++) {
  239. if (!loc1.getWorld().getChunkAt(x, z).isLoaded())
  240. loc1.getWorld().getChunkAt(x, z).load();
  241. Block block = loc1.getWorld().getBlockAt(x, y, z);
  242. if (block.getType() != Material.AIR) {
  243. block.setType(Material.AIR);
  244. }
  245. }
  246. }
  247. }
  248. File file = new File("PlayCY Settings/Schematics/" + Config.getInstance().getArenaConfig(arena.getID()).getString("Lobby.ResetWorld.File"));
  249. World world = Bukkit.getWorld(Config.getInstance().getArenaConfig(arena.getID()).getString("Lobby.GameWorld"));
  250. try {
  251. final Vector v = new Vector(Config.getInstance().getArenaConfig(arena.getID()).getInt("Lobby.ResetWorld.X"), Config.getInstance().getArenaConfig(arena.getID()).getInt("Lobby.ResetWorld.Y"), Config.getInstance().getArenaConfig(arena.getID()).getInt("Lobby.ResetWorld.Z"));
  252. final BukkitWorld BWf = new BukkitWorld(world);
  253. final EditSession es = new EditSession(BWf, 9999999);
  254. final CuboidClipboard c1 = SchematicFormat.MCEDIT.load(file);
  255. try {
  256. c1.place(es, v, true);
  257. } catch (MaxChangedBlocksException e) {
  258. MessageUtil.getInstance().error("Schematic too big to load! (limit is " + e.getBlockLimit() + " blocks)");
  259. }
  260. } catch (Exception ex) {
  261. }
  262. }
  263. });
  264. }
  265. });
  266. }
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement