Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.mbcx2.PlayCY.arenas;
- import java.io.File;
- import java.util.ArrayList;
- import me.confuser.barapi.BarAPI;
- import net.mbcx2.PlayCY.Config;
- import net.mbcx2.PlayCY.PlayCY;
- import net.mbcx2.PlayCY.enums.EnumArena;
- import net.mbcx2.PlayCY.enums.EnumArena.CountdownType;
- import net.mbcx2.PlayCY.players.PlayerManager;
- import net.mbcx2.PlayCY.utils.MessageUtil;
- import org.bukkit.Bukkit;
- import org.bukkit.ChatColor;
- import org.bukkit.GameMode;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.World;
- import org.bukkit.block.Block;
- import org.bukkit.configuration.file.YamlConfiguration;
- import org.bukkit.entity.Entity;
- import org.bukkit.entity.Player;
- import org.bukkit.plugin.Plugin;
- import com.sk89q.worldedit.CuboidClipboard;
- import com.sk89q.worldedit.EditSession;
- import com.sk89q.worldedit.MaxChangedBlocksException;
- import com.sk89q.worldedit.Vector;
- import com.sk89q.worldedit.bukkit.BukkitWorld;
- import com.sk89q.worldedit.schematic.SchematicFormat;
- /**
- * Main arena manager class.
- */
- public class ArenaManager {
- private static ArenaManager instance = new ArenaManager();
- private ArrayList<Arena> arenas = new ArrayList<Arena>();
- private ArenaManager() {
- }
- public static ArenaManager getInstance() {
- return instance;
- }
- public ArrayList<Arena> getArenaArray() {
- return arenas;
- }
- /**
- * Setup the arenas
- */
- public void setup() {
- try {
- MessageUtil messageUtil = MessageUtil.getInstance();
- int arenaID = 0;
- while (arenaID <= PlayCY.getInstance().globalloop) {
- arenaID++;
- if (Config.getInstance().getArenasConfig().contains("Arenas." + arenaID)) {
- messageUtil.info("Setting up arena " + arenaID + "!");
- arenas.add(new Arena(arenaID));
- if (Config.getInstance().getArenaConfig(arenaID).getBoolean("Lobby.ResetWorld.Enabled")) {
- messageUtil.info("Resetting arena " + arenaID + "!");
- this.reset(arenaID);
- messageUtil.info("Removing entities from arena " + arenaID + "!");
- World world = Bukkit.getWorld(Config.getInstance().getArenaConfig(arenaID).getString("Lobby.GameWorld"));
- for (Entity entity : world.getEntities()) {
- if (!(entity instanceof Player)) {
- entity.remove();
- }
- }
- }
- }
- }
- } catch (Exception ex) {
- }
- }
- /**
- * Resets an arena
- *
- * @param id ID of arena to reset
- */
- public void resetArena(int id) {
- if (getArena(id) != null) {
- for (Player player : Bukkit.getOnlinePlayers()) {
- if (this.getArena(player.getName()) != null) {
- this.kickPlayer(player.getName(), false, true, false);
- }
- }
- arenas.remove(getArena(id));
- arenas.add(new Arena(id));
- if (Config.getInstance().getArenaConfig(id).getBoolean("Lobby.ResetWorld.Enabled")) {
- this.reset(id);
- World world = Bukkit.getWorld(Config.getInstance().getArenaConfig(id).getString("Lobby.GameWorld"));
- for (Entity entity : world.getEntities()) {
- if (!(entity instanceof Player)) {
- entity.remove();
- }
- }
- }
- }
- }
- /**
- * Returns the object of the arena ID
- *
- * @param id ID of arena
- * @return The arena
- */
- public Arena getArena(int id) {
- for (Arena a : arenas) {
- if (a.getID() == id) {
- return a;
- }
- }
- return null;
- }
- /**
- * Returns the object of the arena of the player
- *
- * @param player Player
- * @return The arena
- */
- public Arena getArena(String player) {
- for (Arena a : arenas) {
- if (a.containsPlayer(player)) {
- return a;
- }
- }
- return null;
- }
- /**
- * Kicks a player from a game
- *
- * @param player Player to kick from game
- * @param sendMessage Send message to the player that he left successfully or if it failed to leave
- * @param teleportToSpawn Teleport the player to spawn location after kicking the player
- * @param reset Reset the arena if required
- */
- @SuppressWarnings("deprecation")
- public void kickPlayer(String player, boolean sendMessage, boolean teleportToSpawn, boolean reset) {
- Player player1 = Bukkit.getPlayer(player);
- int sign = 0;
- int arenaID = 0;
- while (arenaID <= PlayCY.getInstance().globalloop) {
- arenaID++;
- Arena arena = ArenaManager.getInstance().getArena(arenaID);
- if (Config.getInstance().getArenaConfig(arenaID) != null) {
- if (ArenaManager.getInstance().getArena(player) != null) {
- arena.removePlayer(player);
- Plugin plugin = PlayCY.getInstance().getServer().getPluginManager().getPlugin("BarAPI");
- if (plugin != null ) {
- BarAPI.removeBar(player1);
- }
- player1.setGameMode(GameMode.ADVENTURE);
- player1.setHealth(20.0);
- player1.setFoodLevel(20);
- player1.setExp(0);
- player1.getInventory().clear();
- player1.getInventory().setHelmet(null);
- player1.getInventory().setChestplate(null);
- player1.getInventory().setLeggings(null);
- player1.getInventory().setBoots(null);
- player1.updateInventory();
- if (arena.getPlayerCount() == 0) {
- arena.setCountdown(0, CountdownType.DEFAULT);
- }
- if (teleportToSpawn) {
- World tw = Bukkit.getWorld(Config.getInstance().getArenaConfig(arenaID).getString("Lobby.LeaveLocation.World"));
- double tx = (Config.getInstance().getArenaConfig(arenaID).getDouble("Lobby.LeaveLocation.X"));
- double ty = (Config.getInstance().getArenaConfig(arenaID).getDouble("Lobby.LeaveLocation.Y"));
- double tz = (Config.getInstance().getArenaConfig(arenaID).getDouble("Lobby.LeaveLocation.Z"));
- Location loc = new Location(tw, tx, ty, tz);
- player1.teleport(loc);
- }
- sign = arenaID;
- for (Player player2 : Bukkit.getOnlinePlayers()) {
- if (ArenaManager.getInstance().getArena(player2.getName()) != null) {
- if (ArenaManager.getInstance().getArena(player2.getName()).getID() == sign) {
- MessageUtil.getInstance().message(player2, "arena.left", player, true);
- }
- }
- }
- if (arena.getPlayerCount() == 0 && arena.getCountdown(CountdownType.DEFAULT) != -99 && reset) {
- ArenaManager.getInstance().resetArena(arena.getID());
- }
- if (Config.getInstance().getArenaConfig(arena.getID()).getBoolean("Lobby.Winner.Enabled")) {
- if (arena.getPlayerCount() == 1 && arena.getState() == EnumArena.GameState.IN_GAME) {
- for (Player player2 : Bukkit.getOnlinePlayers()) {
- if (arena.getPlayerHashMap().containsKey(player2.getName())) {
- PlayerManager.getInstance().getPlayer(player2).addMoney(Config.getInstance().getArenaConfig(arena.getID()).getDouble("Lobby.Winner.WinCoins"));
- ArenaManager.getInstance().kickPlayer(player2.getName(), false, true, false);
- Bukkit.broadcastMessage(MessageUtil.getInstance().getPrefix() + ChatColor.AQUA + player2.getName() + " has won on " + ChatColor.GOLD + Config.getInstance().getArenaConfig(arena.getID()).getString("Lobby.GameName") + ChatColor.AQUA + "!");
- Config.getInstance().getArenasConfig().set("Statistics.GamesWon", Config.getInstance().getArenasConfig().getInt("Statistics.GamesWon") + 1);
- }
- }
- ArenaManager.getInstance().resetArena(arena.getID());
- }
- }
- if (sendMessage) {
- MessageUtil.getInstance().message(player1, "arena.left", player1.getName(), true);
- }
- return;
- }
- }
- }
- if (sendMessage) {
- MessageUtil.getInstance().message(player1, "arena.younotingame", true);
- }
- }
- /**
- * Resets an arena with CoreProtect
- *
- * @param arena Arena to reset
- */
- public void reset(int arenaID) {
- final Arena arena = this.getArena(arenaID);
- Bukkit.getScheduler().runTaskAsynchronously(PlayCY.getInstance(), new Runnable() {
- @Override
- public void run() {
- Bukkit.getScheduler().scheduleSyncDelayedTask(PlayCY.getInstance(), new Runnable() {
- @Override
- public void run() {
- YamlConfiguration config = Config.getInstance().getArenaConfig(arena.getID());
- 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"));
- 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"));
- int minX = Math.min(loc1.getBlockX(), loc2.getBlockX());
- int minY = Math.min(loc1.getBlockY(), loc2.getBlockY());
- int minZ = Math.min(loc1.getBlockZ(), loc2.getBlockZ());
- int maxX = Math.max(loc1.getBlockX(), loc2.getBlockX());
- int maxY = Math.max(loc1.getBlockY(), loc2.getBlockY());
- int maxZ = Math.max(loc1.getBlockZ(), loc2.getBlockZ());
- for (int x = minX; x <= maxX; x++) {
- for (int y = minY; y <= maxY; y++) {
- for (int z = minZ; z <= maxZ; z++) {
- if (!loc1.getWorld().getChunkAt(x, z).isLoaded())
- loc1.getWorld().getChunkAt(x, z).load();
- Block block = loc1.getWorld().getBlockAt(x, y, z);
- if (block.getType() != Material.AIR) {
- block.setType(Material.AIR);
- }
- }
- }
- }
- File file = new File("PlayCY Settings/Schematics/" + Config.getInstance().getArenaConfig(arena.getID()).getString("Lobby.ResetWorld.File"));
- World world = Bukkit.getWorld(Config.getInstance().getArenaConfig(arena.getID()).getString("Lobby.GameWorld"));
- try {
- 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"));
- final BukkitWorld BWf = new BukkitWorld(world);
- final EditSession es = new EditSession(BWf, 9999999);
- final CuboidClipboard c1 = SchematicFormat.MCEDIT.load(file);
- try {
- c1.place(es, v, true);
- } catch (MaxChangedBlocksException e) {
- MessageUtil.getInstance().error("Schematic too big to load! (limit is " + e.getBlockLimit() + " blocks)");
- }
- } catch (Exception ex) {
- }
- }
- });
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement