package com.comze_instancelabs.mobescape;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.economy.EconomyResponse;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Firework;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitTask;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import org.bukkit.util.Vector;
import org.bukkit.util.io.BukkitObjectInputStream;
import org.bukkit.util.io.BukkitObjectOutputStream;
import com.comze_instancelabs.mobescape.V1_6.V1_6Dragon;
import com.comze_instancelabs.mobescape.V1_6.V1_6Wither;
import com.comze_instancelabs.mobescape.V1_7.V1_7Dragon;
import com.comze_instancelabs.mobescape.V1_7.V1_7Wither;
import com.comze_instancelabs.mobescape.V1_7._10.V1_7_10Dragon;
import com.comze_instancelabs.mobescape.V1_7._10.V1_7_10Wither;
import com.comze_instancelabs.mobescape.V1_7._5.V1_7_5Dragon;
import com.comze_instancelabs.mobescape.V1_7._5.V1_7_5Wither;
import com.comze_instancelabs.mobescape.V1_7._8.V1_7_8Dragon;
import com.comze_instancelabs.mobescape.V1_7._8.V1_7_8Wither;
public class Main extends JavaPlugin implements Listener {
/*
*
* This is based off the ColorMatch arena system
*/
// TODO: CODE CLEANUP (MEDragon, MEWither, V1_*Dragon, V1_*Wither have much duplicate code)
public static Economy econ = null;
/**
* arena -> whether ingame or not
*/
public static HashMap<String, Boolean> ingame = new HashMap<String, Boolean>();
/**
* arena -> task
*/
public static HashMap<String, BukkitTask> tasks = new HashMap<String, BukkitTask>();
/**
* player -> arena
*/
public static HashMap<Player, String> arenap = new HashMap<Player, String>();
public static HashMap<String, String> arenap_ = new HashMap<String, String>();
/**
* player -> inventory
*/
public static HashMap<Player, ItemStack[]> pinv = new HashMap<Player, ItemStack[]>();
/**
* player -> whether lost or not
*/
public static HashMap<Player, String> lost = new HashMap<Player, String>();
/**
* player -> kit
*/
public static HashMap<Player, String> pkit = new HashMap<Player, String>();
/**
* arena -> countdown finished or not
*/
public static HashMap<String, Boolean> astarted = new HashMap<String, Boolean>();
/**
* player -> kit
*/
public static HashMap<Player, Boolean> pkit_use = new HashMap<Player, Boolean>();
/**
* player -> place
*/
public static HashMap<Player, Integer> pplace = new HashMap<Player, Integer>();
/**
* Player -> seen fall message or not
*/
public static HashMap<String, Boolean> pseenfall = new HashMap<String, Boolean>();
int default_max_players = 4;
int default_min_players = 3;
boolean economy = true;
int reward = 30;
int itemid = 264;
int itemamount = 1;
boolean command_reward = false;
String cmd = "";
public boolean start_announcement = false;
public boolean join_announcement = false;
public boolean winner_announcement = false;
public String dragon_name = "Ender Dragon";
public double mob_speed = 1.0;
public static boolean mode1_6 = false;
public static boolean mode1_7_5 = false;
public static boolean mode1_7_8 = false;
public static boolean mode1_7_10 = false;
public int destroy_radius = 10;
public boolean last_man_standing = true;
public boolean spawn_winnerfirework = true;
public boolean spawn_falling_blocks = true;
public boolean die_behind_mob = false;
public boolean give_jumper_as_default_kit = true;
public int kit_delay_in_seconds = 7;
public boolean remove_scoreboard = false;
public boolean give_kit_tool_at_join = true;
public int kit_tool_id = 399;
public int start_countdown = 5;
public String saved_arena = "";
public String saved_lobby = "";
public String saved_mainlobby = "";
public String not_in_arena = "";
public String reloaded = "";
public String arena_ingame = "";
public String arena_invalid = "";
public String arena_invalid_sign = "";
public String you_fell = "";
public String arena_invalid_component = "";
public String you_won = "";
public String starting_in = "";
public String starting_in2 = "";
public String arena_full = "";
public String removed_arena = "";
public String winner_an = "";
public String noperm = "";
public String nopermkit = "";
public String saved_finish = "";
public String saved_spawn = "";
public String noperm_arena = "";
public String kit_delay_message = "";
public String your_place = "";
public String sign_top = "";
public String sign_second_join = "";
public String sign_second_ingame = "";
public String sign_second_restarting = "";
// announcements
public String starting = "";
public String started = "";
public String join_announcement_ = "";
public String type = "dragon";
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
String version = Bukkit.getServer().getClass().getPackage().getName().substring(Bukkit.getServer().getClass().getPackage().getName().lastIndexOf(".") + 1);
if (version.contains("1_6_R3")) {
mode1_6 = true;
getLogger().info("Turned on 1.6.4 mode.");
} else if (version.contains("1_7_R1")) {
// default
getLogger().info("Turned on 1.7.2 mode.");
} else if (version.contains("1_7_R2")) {
mode1_7_5 = true;
getLogger().info("Turned on 1.7.5 mode.");
} else if (version.contains("1_7_R3")) {
mode1_7_8 = true;
getLogger().info("Turned on 1.7.8 mode.");
} else if (version.contains("1_7_R4")) {
mode1_7_10 = true;
getLogger().info("Turned on 1.7.10 mode.");
}
registerEntities();
getConfig().options().header("I recommend you to set auto_updating to true for possible future bugfixes. If use_economy is set to false, the winner will get the item reward.");
getConfig().addDefault("config.auto_updating", true);
getConfig().addDefault("config.start_countdown", 5);
getConfig().addDefault("config.lobby_countdown", 5);
getConfig().addDefault("config.default_max_players", 4);
getConfig().addDefault("config.default_min_players", 3);
getConfig().addDefault("config.use_economy_reward", true);
getConfig().addDefault("config.money_reward_per_game", 30);
getConfig().addDefault("config.itemid", 264); // diamond
getConfig().addDefault("config.itemamount", 1);
getConfig().addDefault("config.use_command_reward", false);
getConfig().addDefault("config.command_reward", "pex user <player> group set DragonPro;msg <player> Nice, dude.");
getConfig().addDefault("config.join_announcement", false);
getConfig().addDefault("config.start_announcement", false);
getConfig().addDefault("config.winner_announcement", false);
getConfig().addDefault("config.mob_speed", 1.0D);
getConfig().addDefault("config.mob_healthbar_name", "Ender Dragon");
getConfig().addDefault("config.destroy_radius", 10);
getConfig().addDefault("config.last_man_standing", true);
getConfig().addDefault("config.spawn_winnerfirework", true);
getConfig().addDefault("config.mob_type", "dragon");
getConfig().addDefault("config.game_on_join", false);
getConfig().addDefault("config.jumper_boost_factor", 1.2D);
getConfig().addDefault("config.die_behind_mob", false);
getConfig().addDefault("config.give_jumper_as_default_kit", true);
getConfig().addDefault("config.kit_delay_in_seconds", 7);
getConfig().addDefault("config.remove_scoreboard", false);
getConfig().addDefault("config.give_kit_tool_at_join", true);
getConfig().addDefault("config.kit_tool_id", 399);
getConfig().addDefault("config.sign_top_line", "&6MobEscape");
getConfig().addDefault("config.sign_second_line_join", "&a[Join]");
getConfig().addDefault("config.sign_second_line_ingame", "&c[Ingame]");
getConfig().addDefault("config.sign_second_line_restarting", "&6[Restarting]");
getConfig().addDefault("config.spawn_falling_blocks", true);
getConfig().addDefault("config.kits.jumper.description", "&eRightclick the iron axe to jump.");
getConfig().addDefault("config.kits.jumper.uses", 4);
getConfig().addDefault("config.kits.jumper.requires_money", false);
getConfig().addDefault("config.kits.jumper.requires_permission", false);
getConfig().addDefault("config.kits.jumper.money_amount", 100);
getConfig().addDefault("config.kits.jumper.permission_node", "dragonescape.kits.jumper");
getConfig().addDefault("config.kits.warper.description", "&eWarps you to a nearby player, good for when you're falling and almost dead.");
getConfig().addDefault("config.kits.warper.uses", 1);
getConfig().addDefault("config.kits.warper.requires_money", false);
getConfig().addDefault("config.kits.warper.requires_permission", false);
getConfig().addDefault("config.kits.warper.money_amount", 200);
getConfig().addDefault("config.kits.warper.permission_node", "dragonescape.kits.warper");
getConfig().addDefault("config.kits.tnt.description", "&eRightclick to place a tnt trap, which gives a player blindness for 5 seconds.");
getConfig().addDefault("config.kits.tnt.uses", 2);
getConfig().addDefault("config.kits.tnt.requires_money", false);
getConfig().addDefault("config.kits.tnt.requires_permission", false);
getConfig().addDefault("config.kits.tnt.money_amount", 300);
getConfig().addDefault("config.kits.tnt.permission_node", "dragonescape.kits.tnt");
getConfig().addDefault("strings.saved.arena", "&aSuccessfully saved arena.");
getConfig().addDefault("strings.saved.lobby", "&aSuccessfully saved lobby.");
getConfig().addDefault("strings.saved.finish", "&aSuccessfully saved finishline.");
getConfig().addDefault("strings.saved.spawn", "&aSuccessfully saved spawn.");
getConfig().addDefault("strings.removed_arena", "&cSuccessfully removed arena.");
getConfig().addDefault("strings.not_in_arena", "&cYou don't seem to be in an arena right now.");
getConfig().addDefault("strings.config_reloaded", "&6Successfully reloaded config.");
getConfig().addDefault("strings.arena_is_ingame", "&cThe arena appears to be ingame.");
getConfig().addDefault("strings.arena_invalid", "&cThe arena appears to be invalid.");
getConfig().addDefault("strings.arena_invalid_sign", "&cThe arena appears to be invalid, because a join sign is missing.");
getConfig().addDefault("strings.arena_invalid_component", "&2The arena appears to be invalid (missing components or misstyped arena)!");
getConfig().addDefault("strings.you_fell", "&3You fell! Type &6/etm leave &3to leave.");
getConfig().addDefault("strings.you_won", "&aYou won this round, awesome man! Here, enjoy your reward.");
getConfig().addDefault("strings.starting_in", "&aStarting in &6");
getConfig().addDefault("strings.starting_in2", "&a seconds.");
getConfig().addDefault("strings.arena_full", "&cThis arena is full!");
getConfig().addDefault("strings.starting_announcement", "&aStarting a new DragonEscape Game in &6");
getConfig().addDefault("strings.started_announcement", "&aA new DragonEscape Round has started!");
getConfig().addDefault("strings.winner_announcement", "&6<player> &awon the game on arena &6<arena>!");
getConfig().addDefault("strings.join_announcement", "&6<player> &ajoined the game (<count>)!");
getConfig().addDefault("strings.noperm", "&cYou don't have permission.");
getConfig().addDefault("strings.nopermkit", "&cYou don't have permission to use this kit.");
getConfig().addDefault("strings.noperm_arena", "&cYou don't have permission to join this arena.");
getConfig().addDefault("strings.kit_delay_message", "&cYou can use your kit after a delay of <delay> seconds!");
getConfig().addDefault("strings.your_place", "&eYou came in <place>!");
getConfig().options().copyDefaults(true);
if (getConfig().isSet("config.min_players")) {
getConfig().set("config.min_players", null);
}
this.saveConfig();
getConfigVars();
try {
Metrics metrics = new Metrics(this);
metrics.start();
} catch (IOException e) {
}
if (getConfig().getBoolean("config.auto_updating")) {
Updater updater = new Updater(this, 75590, this.getFile(), Updater.UpdateType.DEFAULT, false);
}
if (economy) {
if (!setupEconomy()) {
getLogger().severe(String.format("[%s] - No iConomy dependency found! Disabling Economy.", getDescription().getName()));
economy = false;
}
}
}
private boolean setupEconomy() {
if (getServer().getPluginManager().getPlugin("Vault") == null) {
return false;
}
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
if (rsp == null) {
return false;
}
econ = rsp.getProvider();
return econ != null;
}
public void getConfigVars() {
default_max_players = getConfig().getInt("config.default_max_players");
default_min_players = getConfig().getInt("config.default_min_players");
reward = getConfig().getInt("config.money_reward");
itemid = getConfig().getInt("config.itemid");
itemamount = getConfig().getInt("config.itemamount");
economy = getConfig().getBoolean("config.use_economy_reward");
command_reward = getConfig().getBoolean("config.use_command_reward");
cmd = getConfig().getString("config.command_reward");
start_countdown = getConfig().getInt("config.start_countdown");
start_announcement = getConfig().getBoolean("config.start_announcement");
winner_announcement = getConfig().getBoolean("config.winner_announcement");
join_announcement = getConfig().getBoolean("config.join_announcement");
mob_speed = getConfig().getDouble("config.mob_speed");
destroy_radius = getConfig().getInt("config.destroy_radius");
if (mob_speed < 0.05 || mob_speed > 10) {
mob_speed = 1.0;
}
dragon_name = getConfig().getString("config.mob_healthbar_name").replaceAll("&", "�");
last_man_standing = getConfig().getBoolean("config.last_man_standing");
spawn_winnerfirework = getConfig().getBoolean("config.spawn_winnerfirework");
type = getConfig().getString("config.mob_type");
if (!type.equalsIgnoreCase("dragon") && !type.equalsIgnoreCase("wither")) {
type = "dragon";
}
spawn_falling_blocks = getConfig().getBoolean("config.spawn_falling_blocks");
die_behind_mob = getConfig().getBoolean("config.die_behind_mob");
give_jumper_as_default_kit = getConfig().getBoolean("config.give_jumper_as_default_kit");
kit_delay_in_seconds = getConfig().getInt("config.kit_delay_in_seconds");
remove_scoreboard = getConfig().getBoolean("config.remove_scoreboard");
give_kit_tool_at_join = getConfig().getBoolean("config.give_kit_tool_at_join");
kit_tool_id = getConfig().getInt("config.kit_tool_id");
saved_arena = getConfig().getString("strings.saved.arena").replaceAll("&", "�");
removed_arena = getConfig().getString("strings.removed_arena").replaceAll("&", "�");
saved_lobby = getConfig().getString("strings.saved.lobby").replaceAll("&", "�");
saved_finish = getConfig().getString("strings.saved.finish").replaceAll("&", "�");
saved_spawn = getConfig().getString("strings.saved.spawn").replaceAll("&", "�");
saved_mainlobby = "" + ChatColor.GREEN + "Successfully saved main lobby";
not_in_arena = getConfig().getString("strings.not_in_arena").replaceAll("&", "�");
reloaded = getConfig().getString("strings.config_reloaded").replaceAll("&", "�");
arena_ingame = getConfig().getString("strings.arena_is_ingame").replaceAll("&", "�");
arena_invalid = getConfig().getString("strings.arena_invalid").replaceAll("&", "�");
arena_invalid_sign = getConfig().getString("strings.arena_invalid_sign").replaceAll("&", "�");
you_fell = getConfig().getString("strings.you_fell").replaceAll("&", "�");
arena_invalid_component = getConfig().getString("strings.arena_invalid_component").replace("&", "�");
you_won = getConfig().getString("strings.you_won").replaceAll("&", "�");
starting_in = getConfig().getString("strings.starting_in").replaceAll("&", "�");
starting_in2 = getConfig().getString("strings.starting_in2").replaceAll("&", "�");
arena_full = getConfig().getString("strings.arena_full").replaceAll("&", "�");
starting = getConfig().getString("strings.starting_announcement").replaceAll("&", "�");
started = getConfig().getString("strings.started_announcement").replaceAll("&", "�");
join_announcement_ = getConfig().getString("strings.join_announcement").replaceAll("&", "�");
removed_arena = getConfig().getString("strings.removed_arena").replaceAll("&", "�");
winner_an = getConfig().getString("strings.winner_announcement").replaceAll("&", "�");
noperm = getConfig().getString("strings.noperm").replaceAll("&", "�");
nopermkit = getConfig().getString("strings.nopermkit").replaceAll("&", "�");
noperm_arena = getConfig().getString("strings.noperm_arena").replaceAll("&", "�");
kit_delay_message = getConfig().getString("strings.kit_delay_message").replaceAll("&", "�");
your_place = getConfig().getString("strings.your_place").replaceAll("&", "�");
sign_top = getConfig().getString("config.sign_top_line").replaceAll("&", "�");
sign_second_join = getConfig().getString("config.sign_second_line_join").replaceAll("&", "�");
sign_second_ingame = getConfig().getString("config.sign_second_line_ingame").replaceAll("&", "�");
sign_second_restarting = getConfig().getString("config.sign_second_line_restarting").replaceAll("&", "�");
}
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("dragonescape") || cmd.getName().equalsIgnoreCase("escapethemob")) {
if (args.length > 0) {
String action = args[0];
if (action.equalsIgnoreCase("createarena")) {
// create arena
if (args.length > 1) {
if (sender.hasPermission("mobescape.setup")) {
String arenaname = args[1];
getConfig().set(arenaname + ".name", arenaname);
this.saveConfig();
sender.sendMessage(saved_arena);
} else {
sender.sendMessage(noperm);
}
} else {
sender.sendMessage("" + ChatColor.RED + "No arena submitted. Usage: /etm createarena [name]");
}
} else if (action.equalsIgnoreCase("removearena")) {
if (args.length > 1) {
if (sender.hasPermission("mobescape.setup")) {
String arenaname = args[1];
if (getConfig().isSet(arenaname)) {
getConfig().set(arenaname, null);
this.saveConfig();
File f = new File(this.getDataFolder() + "/" + arenaname);
if (f.exists()) {
f.delete();
}
sender.sendMessage(removed_arena);
}
} else {
sender.sendMessage(noperm);
}
} else {
sender.sendMessage("" + ChatColor.RED + "No arena submitted. Usage: /etm createarena [name]");
}
} else if (action.equalsIgnoreCase("savearena")) {
if (args.length > 1) {
if (!(sender instanceof Player)) {
return true;
}
Player p = (Player) sender;
if (isValidArena(args[1])) {
File f = new File(this.getDataFolder() + "/" + args[1]);
f.delete();
sender.sendMessage("" + ChatColor.GREEN + "Arena is now saving, " + ChatColor.GOLD + "this might take a while" + ChatColor.GREEN + ".");
saveArenaToFile(p.getName(), args[1]);
} else {
sender.sendMessage("" + ChatColor.RED + "The arena appears to be invalid (missing components)!");
}
} else {
sender.sendMessage("" + ChatColor.RED + "Usage: " + ChatColor.DARK_GREEN + "/etm savearena [name]");
}
} else if (action.equalsIgnoreCase("setbounds")) {
if (sender.hasPermission("mobescape.setup")) {
if (args.length > 2) {
String arena = args[1];
String count = args[2];
if (!count.equalsIgnoreCase("low") && !count.equalsIgnoreCase("high")) {
sender.sendMessage("" + ChatColor.RED + "Second parameter invalid. Usage: /etm setbounds [arena] [low/high]");
return true;
}
if (!getConfig().isSet(arena)) {
sender.sendMessage("" + ChatColor.RED + "Could not find this arena.");
return true;
}
if (!(sender instanceof Player)) {
return true;
}
Player p = (Player) sender;
getConfig().set(arena + ".boundary" + count + ".world", p.getWorld().getName());
getConfig().set(arena + ".boundary" + count + ".loc.x", p.getLocation().getBlockX());
if (count.equalsIgnoreCase("low")) {
getConfig().set(arena + ".boundary" + count + ".loc.y", p.getLocation().getBlockY() - 1);
} else {
getConfig().set(arena + ".boundary" + count + ".loc.y", p.getLocation().getBlockY());
}
getConfig().set(arena + ".boundary" + count + ".loc.z", p.getLocation().getBlockZ());
this.saveConfig();
sender.sendMessage("" + ChatColor.YELLOW + "Successfully saved " + count + " boundary!");
} else {
sender.sendMessage("" + ChatColor.RED + "Usage: /etm setbounds [arena] [count].");
}
} else {
sender.sendMessage(noperm);
}
} else if (action.equalsIgnoreCase("boundstool")) {
if (args.length > 1) {
if (sender.hasPermission("mobescape.setup")) {
Player p = (Player) sender;
String arenaname = args[1];
if (!getConfig().isSet(arenaname)) {
sender.sendMessage("" + ChatColor.RED + "Could not find this arena.");
return true;
}
Inventory inv = p.getInventory();
ItemStack is = new ItemStack(369, 1);
ItemMeta im = (ItemMeta) is.getItemMeta();
im.setDisplayName("" + ChatColor.GREEN + "Boundary tool for arena " + ChatColor.YELLOW + "" + arenaname);
is.setItemMeta(im);
inv.addItem(is);
sender.sendMessage("" + ChatColor.YELLOW + "Here's the boundary tool. Left click the lower left point and right click the higher right point.");
} else {
sender.sendMessage(noperm);
}
} else {
sender.sendMessage("" + ChatColor.RED + "Usage: /etm boundstool [arena].");
}
} else if (action.equalsIgnoreCase("setflypoint")) {
if (args.length > 1) {
if (sender.hasPermission("mobescape.setup")) {
Player p = (Player) sender;
String arenaname = args[1];
String count = Integer.toString(this.getCurrentFlyPoint(arenaname));
// overwrite functionality
if (args.length > 2) {
if (isNumeric(args[2])) {
if (Integer.parseInt(args[2]) <= getCurrentFlyPoint(arenaname)) {
count = args[2];
}
}
}
getConfig().set(arenaname + ".flypoint." + count + ".world", p.getWorld().getName());
getConfig().set(arenaname + ".flypoint." + count + ".x", p.getLocation().getBlockX());
getConfig().set(arenaname + ".flypoint." + count + ".y", p.getLocation().getBlockY());
getConfig().set(arenaname + ".flypoint." + count + ".z", p.getLocation().getBlockZ());
this.saveConfig();
sender.sendMessage(ChatColor.GREEN + "Saved Fly point " + count);
} else {
sender.sendMessage(noperm);
}
}
} else if (action.equalsIgnoreCase("removeflypoint")) {
if (args.length > 2) {
if (sender.hasPermission("mobescape.setup")) {
Player p = (Player) sender;
String arenaname = args[1];
if (!isNumeric(args[2])) {
sender.sendMessage(ChatColor.RED + "Usage: /etm removeflypoint [arena] [count]");
return true;
}
if (!getConfig().isSet(arenaname + ".flypoint")) {
sender.sendMessage(ChatColor.RED + "Could not find any flypoints for this arena.");
return true;
}
int rem_count = Integer.parseInt(args[2]);
if (rem_count < this.getCurrentFlyPoint(arenaname)) {
getConfig().set(arenaname + ".flypoint." + Integer.toString(rem_count), null);
this.saveConfig();
sender.sendMessage(ChatColor.RED + "Removed Fly point " + Integer.toString(rem_count));
}
} else {
sender.sendMessage(noperm);
}
}
} else if (action.equalsIgnoreCase("setlobby")) {
if (args.length > 1) {
if (sender.hasPermission("mobescape.setup")) {
Player p = (Player) sender;
String arenaname = args[1];
getConfig().set(arenaname + ".lobby.world", p.getWorld().getName());
getConfig().set(arenaname + ".lobby.loc.x", p.getLocation().getBlockX());
getConfig().set(arenaname + ".lobby.loc.y", p.getLocation().getBlockY());
getConfig().set(arenaname + ".lobby.loc.z", p.getLocation().getBlockZ());
this.saveConfig();
sender.sendMessage(saved_lobby);
} else {
sender.sendMessage(noperm);
}
}
} else if (action.equalsIgnoreCase("setfinish")) {
if (args.length > 1) {
if (sender.hasPermission("mobescape.setup")) {
Player p = (Player) sender;
String arenaname = args[1];
getConfig().set(arenaname + ".finish.world", p.getWorld().getName());
getConfig().set(arenaname + ".finish.loc.x", p.getLocation().getBlockX());
getConfig().set(arenaname + ".finish.loc.y", p.getLocation().getBlockY());
getConfig().set(arenaname + ".finish.loc.z", p.getLocation().getBlockZ());
this.saveConfig();
sender.sendMessage(saved_finish);
} else {
sender.sendMessage(noperm);
}
}
} else if (action.equalsIgnoreCase("setspawn")) {
if (args.length > 1) {
if (sender.hasPermission("mobescape.setup")) {
Player p = (Player) sender;
String arenaname = args[1];
String count = Integer.toString(this.getCurrentSpawnIndex(arenaname));
getConfig().set(arenaname + ".spawn." + count + ".world", p.getWorld().getName());
getConfig().set(arenaname + ".spawn." + count + ".loc.x", p.getLocation().getX());
getConfig().set(arenaname + ".spawn." + count + ".loc.y", p.getLocation().getY());
getConfig().set(arenaname + ".spawn." + count + ".loc.z", p.getLocation().getZ());
getConfig().set(arenaname + ".spawn." + count + ".loc.yaw", p.getLocation().getYaw());
getConfig().set(arenaname + ".spawn." + count + ".loc.pitch", p.getLocation().getPitch());
this.saveConfig();
sender.sendMessage(saved_spawn + " Count: " + count);
} else {
sender.sendMessage(noperm);
}
}
} else if (action.equalsIgnoreCase("setdragonspawn") || action.equalsIgnoreCase("setmobspawn")) {
if (args.length > 1) {
if (sender.hasPermission("mobescape.setup")) {
Player p = (Player) sender;
String arenaname = args[1];
getConfig().set(arenaname + ".dragonspawn.world", p.getWorld().getName());
getConfig().set(arenaname + ".dragonspawn.loc.x", p.getLocation().getBlockX());
getConfig().set(arenaname + ".dragonspawn.loc.y", p.getLocation().getBlockY());
getConfig().set(arenaname + ".dragonspawn.loc.z", p.getLocation().getBlockZ());
getConfig().set(arenaname + ".dragonspawn.loc.yaw", p.getLocation().getYaw());
getConfig().set(arenaname + ".dragonspawn.loc.pitch", p.getLocation().getPitch());
this.saveConfig();
sender.sendMessage(saved_spawn);
} else {
sender.sendMessage(noperm);
}
}
} else if (action.equalsIgnoreCase("setmainlobby")) {
if (sender.hasPermission("mobescape.setup")) {
Player p = (Player) sender;
getConfig().set("mainlobby.world", p.getWorld().getName());
getConfig().set("mainlobby.loc.x", p.getLocation().getBlockX());
getConfig().set("mainlobby.loc.y", p.getLocation().getBlockY());
getConfig().set("mainlobby.loc.z", p.getLocation().getBlockZ());
this.saveConfig();
sender.sendMessage(saved_mainlobby);
} else {
sender.sendMessage(noperm);
}
} else if (action.equalsIgnoreCase("leave")) {
Player p = (Player) sender;
if (arenap.containsKey(p)) {
leaveArena(p, true, false);
} else {
p.sendMessage(not_in_arena);
}
} else if (action.equalsIgnoreCase("setreward")) {
if (args.length > 3) {
if (sender.hasPermission("mobescape.setup")) {
String arena = args[1];
String type = args[2];
String amount = args[3];
if (!type.equalsIgnoreCase("command") && !isNumeric(amount)) {
sender.sendMessage(ChatColor.RED + "Amount has to be a number.");
return true;
}
if (type.equalsIgnoreCase("money")) {
setArenaDefaultRewards(arena);
setArenaReward(arena, "money_reward_per_game", Integer.parseInt(amount));
} else if (type.equalsIgnoreCase("itemid")) {
setArenaDefaultRewards(arena);
setArenaReward(arena, "item_reward_id", Integer.parseInt(amount));
} else if (type.equalsIgnoreCase("itemamount")) {
setArenaDefaultRewards(arena);
setArenaReward(arena, "item_reward_amount", Integer.parseInt(amount));
} else if (type.equalsIgnoreCase("command")) {
setArenaDefaultRewards(arena);
String newcmd = "";
for (int i = 0; i < args.length - 3; i++) {
newcmd += args[3 + i] + " ";
}
setArenaCommandReward(arena, newcmd);
} else {
sender.sendMessage(ChatColor.RED + "Usage: /etm setreward [arena] [type] [amount]. [type] can be 'money', 'itemid', 'itemamount' or 'command'.");
return true;
}
sender.sendMessage(ChatColor.GREEN + "Successfully saved arena reward for type " + type + " .");
}
} else {
sender.sendMessage(ChatColor.RED + "Usage: /etm setreward [arena] [type] [amount]. [type] can be 'money', 'itemid', 'itemamount' or 'command'.");
}
} else if (action.equalsIgnoreCase("endall")) {
if (sender.hasPermission("mobescape.end")) {
for (String arena : tasks.keySet()) {
try {
tasks.get(arena).cancel();
} catch (Exception e) {
}
}
ingame.clear();
Bukkit.getScheduler().cancelTasks(this);
} else {
sender.sendMessage(noperm);
}
} else if (action.equalsIgnoreCase("setmaxplayers")) {
if (sender.hasPermission("mobescape.setup")) {
if (args.length > 2) {
String arena = args[1];
String playercount = args[2];
if (!isNumeric(playercount)) {
playercount = Integer.toString(default_max_players);
sender.sendMessage("" + ChatColor.RED + "Playercount is invalid. Setting to default value.");
}
if (!getConfig().isSet(arena)) {
sender.sendMessage("" + ChatColor.RED + "Could not find this arena.");
return true;
}
this.setArenaMaxPlayers(arena, Integer.parseInt(playercount));
sender.sendMessage("" + ChatColor.YELLOW + "Successfully set!");
} else {
sender.sendMessage("" + ChatColor.RED + "Usage: /etm setmaxplayers [arena] [count].");
}
}
} else if (action.equalsIgnoreCase("setminplayers")) {
if (sender.hasPermission("mobescape.setup")) {
if (args.length > 2) {
String arena = args[1];
String playercount = args[2];
if (!isNumeric(playercount)) {
playercount = Integer.toString(default_min_players);
sender.sendMessage("" + ChatColor.RED + "Playercount is invalid. Setting to default value.");
}
if (!getConfig().isSet(arena)) {
sender.sendMessage("" + ChatColor.RED + "Could not find this arena.");
return true;
}
this.setArenaMinPlayers(arena, Integer.parseInt(playercount));
sender.sendMessage("" + ChatColor.YELLOW + "Successfully set!");
} else {
sender.sendMessage("" + ChatColor.RED + "Usage: /etm setminplayers [arena] [count].");
}
} else {
sender.sendMessage(noperm);
}
} else if (action.equalsIgnoreCase("setdifficulty")) {
if (sender.hasPermission("mobescape.setup")) {
if (args.length > 2) {
String arena = args[1];
String difficulty = args[2];
if (!isNumeric(difficulty)) {
difficulty = "1";
sender.sendMessage("" + ChatColor.RED + "Difficulty is invalid. Possible difficulties: 0, 1, 2.");
}
if (!getConfig().isSet(arena)) {
sender.sendMessage("" + ChatColor.RED + "Could not find this arena.");
return true;
}
sender.sendMessage("" + ChatColor.YELLOW + "Successfully set!");
} else {
sender.sendMessage("" + ChatColor.RED + "Usage: /etm setdifficulty [arena] [difficulty]. Difficulty can be 0, 1 or 2.");
}
}
} else if (action.equalsIgnoreCase("setmobtype")) {
if (sender.hasPermission("mobescape.setmobtype")) {
if (args.length > 1) {
String mobtype = args[1];
if (mobtype.equalsIgnoreCase("wither") || mobtype.equalsIgnoreCase("dragon")) {
type = mobtype;
getConfig().set("config.mob_type", mobtype);
this.saveConfig();
sender.sendMessage("" + ChatColor.YELLOW + "Successfully set!");
} else {
sender.sendMessage("" + ChatColor.RED + "Unknown mob. Possible ones: dragon, wither");
}
} else {
sender.sendMessage("" + ChatColor.RED + "Usage: /etm setmobtype [mobtype].");
}
}
} else if (action.equalsIgnoreCase("setarenavip")) {
if (sender.hasPermission("mobescape.setup")) {
if (args.length > 2) {
if (args[2].equalsIgnoreCase("true") || args[2].equalsIgnoreCase("false")) {
this.setArenaNeedsPerm(args[1], Boolean.parseBoolean(args[2]));
sender.sendMessage(ChatColor.GREEN + "Successfully set.");
} else {
sender.sendMessage(ChatColor.RED + "Usage: /etm setarenavip [arena] [true/false]");
}
} else {
sender.sendMessage(ChatColor.RED + "Usage: /etm setarenavip [arena] [true/false]");
}
}
} else if (action.equalsIgnoreCase("join")) {
if (args.length > 1) {
if (isValidArena(args[1])) {
Sign s = null;
try {
s = this.getSignFromArena(args[1]);
} catch (Exception e) {
getLogger().warning("No sign found for arena " + args[1] + ". May lead to errors.");
}
if (s != null) {
if (s.getLine(1).equalsIgnoreCase(sign_second_join.toLowerCase())) {
joinLobby((Player) sender, args[1]);
} else {
sender.sendMessage(arena_ingame);
}
} else {
sender.sendMessage(arena_invalid_sign);
}
} else {
sender.sendMessage(arena_invalid);
}
}
} else if (action.equalsIgnoreCase("kit")) {
if (args.length > 1) {
String kit = args[1];
if (!(sender instanceof Player)) {
return true;
}
Player p = (Player) sender;
if (!arenap.containsKey(p)) {
sender.sendMessage(not_in_arena);
return true;
}
if (kit.equalsIgnoreCase("jumper")) {
sender.sendMessage(getKitDescription("jumper"));
} else if (kit.equalsIgnoreCase("warper")) {
sender.sendMessage(getKitDescription("warper"));
} else if (kit.equalsIgnoreCase("tnt")) {
sender.sendMessage(getKitDescription("tnt"));
} else {
sender.sendMessage(ChatColor.RED + "Unknown Kit.");
return true;
}
if (this.kitPlayerHasPermission(args[1], p)) {
if (this.kitRequiresMoney(args[1])) {
if (this.kitTakeMoney(p, args[1])) {
pkit.put(p, args[1]);
}
} else {
pkit.put(p, args[1]);
}
} else {
sender.sendMessage(nopermkit);
}
}
} else if (action.equalsIgnoreCase("kitgui")) {
if (!(sender instanceof Player)) {
return true;
}
Player p = (Player) sender;
if (!arenap.containsKey(p)) {
sender.sendMessage(not_in_arena);
return true;
}
openGUI(this, p.getName());
} else if (action.equalsIgnoreCase("stop") || action.equalsIgnoreCase("end")) {
if (args.length > 1) {
if (sender.hasPermission("mobescape.stop")) {
final String arena = args[1];
if (!ingame.containsKey(arena)) {
sender.sendMessage(ChatColor.RED + "The arena appears to be not ingame.");
return true;
}
int count = 0;
for (Player p : arenap.keySet()) {
if (arenap.get(p).equalsIgnoreCase(arena)) {
count++;
}
}
if (count < 1) {
sender.sendMessage("" + ChatColor.RED + "Noone is in this arena.");
return true;
}
if (ingame.get(arena)) {
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
stop(h.get(arena), arena);
}
}, 10);
}
} else {
sender.sendMessage(noperm);
}
}
} else if (action.equalsIgnoreCase("start")) {
if (args.length > 1) {
if (sender.hasPermission("mobescape.start")) {
final String arena = args[1];
if (!ingame.containsKey(arena)) {
ingame.put(arena, false);
}
int count = 0;
for (Player p : arenap.keySet()) {
if (arenap.get(p).equalsIgnoreCase(arena)) {
count++;
}
}
if (count < 1) {
sender.sendMessage("" + ChatColor.RED + "Noone is in this arena.");
return true;
}
if (m.lobby_countdown_id.containsKey(arena)) {
sender.sendMessage(ChatColor.RED + "This arena is already starting.");
return true;
}
if (!ingame.get(arena)) {
ingame.put(arena, true);
for (Player p_ : arenap.keySet()) {
if (arenap.get(p_).equalsIgnoreCase(arena)) {
final Player p__ = p_;
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
p__.teleport(getSpawnForPlayer(p__, arena));
}
}, 5);
}
}
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
start(arena);
}
}, 10);
}
} else {
sender.sendMessage(noperm);
}
}
} else if (action.equalsIgnoreCase("reload")) {
if (sender.hasPermission("mobescape.reload")) {
this.reloadConfig();
getConfigVars();
sender.sendMessage(reloaded);
} else {
sender.sendMessage(noperm);
}
} else if (action.equalsIgnoreCase("list")) {
if (sender.hasPermission("mobescape.list")) {
sender.sendMessage("" + ChatColor.GOLD + "-= Arenas =-");
for (String arena : getConfig().getKeys(false)) {
if (!arena.equalsIgnoreCase("mainlobby") && !arena.equalsIgnoreCase("strings") && !arena.equalsIgnoreCase("config")) {
sender.sendMessage("" + ChatColor.DARK_GREEN + "" + arena);
}
}
} else {
sender.sendMessage(noperm);
}
} else {
sender.sendMessage("" + ChatColor.GOLD + "-= MobEscape " + ChatColor.DARK_GREEN + "help: " + ChatColor.GOLD + "=-");
sender.sendMessage("" + ChatColor.DARK_GREEN + "To " + ChatColor.GOLD + "setup the main lobby " + ChatColor.DARK_GREEN + ", type in " + ChatColor.RED + "/etm setmainlobby");
sender.sendMessage("" + ChatColor.DARK_GREEN + "To " + ChatColor.GOLD + "setup " + ChatColor.DARK_GREEN + "a new arena, type in the following commands:");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm createarena [name]");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm setlobby [name] " + ChatColor.GOLD + " - for the waiting lobby");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm setspawn [name] " + ChatColor.GOLD + " - players spawn here");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm setfinish [name] " + ChatColor.GOLD + " - the finish line");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm setflypoint [name] " + ChatColor.GOLD + " - set at least two flypoints for the dragon!");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm setbounds [name] " + ChatColor.GOLD + " - don't forget to set both high and low boundaries.");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm savearena [name] " + ChatColor.GOLD + " - save the arena");
sender.sendMessage("");
sender.sendMessage("" + ChatColor.DARK_GREEN + "You can join with " + ChatColor.RED + "/etm join [name] " + ChatColor.DARK_GREEN + "and leave with " + ChatColor.RED + "/etm leave" + ChatColor.DARK_GREEN + ".");
sender.sendMessage("" + ChatColor.DARK_GREEN + "You can force an arena to start with " + ChatColor.RED + "/etm start [name]" + ChatColor.DARK_GREEN + ".");
sender.sendMessage("" + ChatColor.DARK_GREEN + "You can select your kit with " + ChatColor.RED + "/etm kit " + ChatColor.DARK_GREEN + " or " + ChatColor.RED + "/etm kitgui");
}
} else {
sender.sendMessage("" + ChatColor.GOLD + "-= MobEscape " + ChatColor.DARK_GREEN + "help: " + ChatColor.GOLD + "=-");
sender.sendMessage("" + ChatColor.DARK_GREEN + "To " + ChatColor.GOLD + "setup the main lobby " + ChatColor.DARK_GREEN + ", type in " + ChatColor.RED + "/etm setmainlobby");
sender.sendMessage("" + ChatColor.DARK_GREEN + "To " + ChatColor.GOLD + "setup " + ChatColor.DARK_GREEN + "a new arena, type in the following commands:");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm createarena [name]");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm setlobby [name] " + ChatColor.GOLD + " - for the waiting lobby");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm setspawn [name] " + ChatColor.GOLD + " - players spawn here");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm setfinish [name] " + ChatColor.GOLD + " - the finish line");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm setflypoint [name] " + ChatColor.GOLD + " - set at least two flypoints for the dragon!");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm setbounds [name] " + ChatColor.GOLD + " - don't forget to set both high and low boundaries.");
sender.sendMessage("" + ChatColor.DARK_GREEN + "/etm savearena [name] " + ChatColor.GOLD + " - save the arena");
sender.sendMessage("");
sender.sendMessage("" + ChatColor.DARK_GREEN + "You can join with " + ChatColor.RED + "/etm join [name] " + ChatColor.DARK_GREEN + "and leave with " + ChatColor.RED + "/etm leave" + ChatColor.DARK_GREEN + ".");
sender.sendMessage("" + ChatColor.DARK_GREEN + "You can force an arena to start with " + ChatColor.RED + "/etm start [name]" + ChatColor.DARK_GREEN + ".");
}
return true;
}
return false;
}
private boolean registerEntities() {
if (mode1_6) {
return V1_6Dragon.registerEntities();
} else if (mode1_7_5) {
return V1_7_5Dragon.registerEntities();
} else if (mode1_7_8) {
return V1_7_8Dragon.registerEntities();
} else if (mode1_7_10) {
return V1_7_10Dragon.registerEntities();
}
return V1_7Dragon.registerEntities();
}
public ArrayList<String> left_players = new ArrayList<String>();
@EventHandler
public void onPlayerLeave(PlayerQuitEvent event) {
if (arenap.containsKey(event.getPlayer())) {
String arena = arenap.get(event.getPlayer());
getLogger().info(arena);
int count = 0;
for (Player p_ : arenap.keySet()) {
if (arenap.get(p_).equalsIgnoreCase(arena)) {
count++;
}
}
try {
Sign s = this.getSignFromArena(arena);
if (s != null) {
s.setLine(1, sign_second_join);
s.setLine(3, Integer.toString(count - 1) + "/" + Integer.toString(getArenaMaxPlayers(arena)));
s.update();
}
} catch (Exception e) {
getLogger().warning("You forgot to set a sign for arena " + arena + "! This might lead to errors.");
}
leaveArena(event.getPlayer(), true, true);
left_players.add(event.getPlayer().getName());
}
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
final Player p = event.getPlayer();
if (left_players.contains(event.getPlayer().getName())) {
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
p.teleport(getMainLobby());
p.setFlying(false);
}
}, 5);
left_players.remove(event.getPlayer().getName());
}
if (getConfig().getBoolean("config.game_on_join")) {
int c = 0;
final List<String> arenas = new ArrayList<String>();
for (String arena : getConfig().getKeys(false)) {
if (!arena.equalsIgnoreCase("mainlobby") && !arena.equalsIgnoreCase("strings") && !arena.equalsIgnoreCase("config")) {
c++;
arenas.add(arena);
}
}
if (c < 1) {
getLogger().severe("Couldn't find any arena even though game_on_join was turned on. Please setup an arena to fix this!");
return;
}
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
joinLobby(p, arenas.get(0));
}
}, 30L);
}
}
@EventHandler
public void onPlayerDropItem(PlayerDropItemEvent event) {
if (arenap_.containsKey(event.getPlayer().getName())) {
event.setCancelled(true);
}
}
@EventHandler
public void onHunger(FoodLevelChangeEvent event) {
if (event.getEntity() instanceof Player) {
Player p = (Player) event.getEntity();
if (arenap_.containsKey(p.getName())) {
event.setCancelled(true);
}
}
}
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
// if (arenap_.containsKey(event.getPlayer().getName())) {
if (arenap.containsKey(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
// if (arenap_.containsKey(event.getPlayer().getName())) {
if (arenap.containsKey(event.getPlayer())) {
event.setCancelled(true);
}
}
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
if (arenap.containsKey(event.getPlayer()) && !arenap_.containsKey(event.getPlayer().getName())) {
final String arena_ = arenap.get(event.getPlayer());
// getLogger().info(astarted.get(arena_).toString());
if (ingame.get(arena_)) {
if (getDragonSpawn(arena_) != null) {
final Player p = event.getPlayer();
final Location temp = getSpawn(arena_, pspawn.get(p));
if (p.getLocation().getBlockZ() > temp.getBlockZ() + 1 || p.getLocation().getBlockZ() < temp.getBlockZ() - 1 || p.getLocation().getBlockX() > temp.getBlockX() + 1 || p.getLocation().getBlockX() < temp.getBlockX() - 1) {
Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
public void run() {
p.teleport(temp);
}
}, 5);
}
}
}
}
if (arenap_.containsKey(event.getPlayer().getName())) {
if (lost.containsKey(event.getPlayer())) {
Location l = getSpawn(lost.get(event.getPlayer()), pspawn.get(event.getPlayer()));
final Location spectatorlobby = new Location(l.getWorld(), l.getBlockX(), l.getBlockY() + 30, l.getBlockZ());
if (event.getPlayer().getLocation().getBlockY() < spectatorlobby.getBlockY() || event.getPlayer().getLocation().getBlockY() > spectatorlobby.getBlockY()) {
final Player p = event.getPlayer();
final float b = p.getLocation().getYaw();
final float c = p.getLocation().getPitch();
final String arena = arenap.get(event.getPlayer());
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
try {
p.setAllowFlight(true);
p.setFlying(true);
p.teleport(new Location(p.getWorld(), p.getLocation().getBlockX(), spectatorlobby.getBlockY(), p.getLocation().getBlockZ(), b, c));
} catch (Exception e) {
e.printStackTrace();
}
}
}, 5);
if (!pseenfall.containsKey(p.getName())) {
pseenfall.put(p.getName(), false);
}
if (!pseenfall.get(p.getName())) {
p.sendMessage(you_fell);
pseenfall.put(p.getName(), true);
}
return;
}
}
final String arena_ = arenap_.get(event.getPlayer().getName());
if (event.getPlayer().getLocation().distance(getFinish(arena_)) < 3) {
if (ingame.get(arena_)) {
stop(h.get(arena_), arena_);
}
return;
}
if (event.getPlayer().getLocation().getBlockY() < getLowBoundary(arenap_.get(event.getPlayer().getName())).getBlockY() - 3) {
this.simulatePlayerFall(event.getPlayer());
return;
}
}
}
@EventHandler
public void onSignUse(PlayerInteractEvent event) {
if (event.hasBlock()) {
if (event.getClickedBlock().getType() == Material.SIGN_POST || event.getClickedBlock().getType() == Material.WALL_SIGN) {
final Sign s = (Sign) event.getClickedBlock().getState();
if (s.getLine(0).toLowerCase().contains(sign_top.toLowerCase())) {
if (s.getLine(1).equalsIgnoreCase(sign_second_join)) {
if (isValidArena(s.getLine(2))) {
joinLobby(event.getPlayer(), s.getLine(2));
} else {
event.getPlayer().sendMessage(arena_invalid);
}
}
}
}
if (event.hasItem()) {
if (event.getItem().getTypeId() == 369) {
if (event.getItem().hasItemMeta()) {
ItemMeta im = event.getItem().getItemMeta();
String itemname = im.getDisplayName();
String arenaname = itemname.split("" + ChatColor.YELLOW + "")[1];
if (getConfig().isSet(arenaname)) {
if (event.getPlayer().hasPermission("mobescape.setup")) {
try {
Block b = event.getClickedBlock();
Location l = b.getLocation();
if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
String count = "low";
getConfig().set(arenaname + ".boundary" + count + ".world", l.getWorld().getName());
getConfig().set(arenaname + ".boundary" + count + ".loc.x", l.getBlockX());
getConfig().set(arenaname + ".boundary" + count + ".loc.y", l.getBlockY() - 1);
getConfig().set(arenaname + ".boundary" + count + ".loc.z", l.getBlockZ());
this.saveConfig();
event.setCancelled(true);
event.getPlayer().sendMessage("" + ChatColor.YELLOW + "Successfully saved " + count + " boundary!");
} else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
String count = "high";
getConfig().set(arenaname + ".boundary" + count + ".world", l.getWorld().getName());
getConfig().set(arenaname + ".boundary" + count + ".loc.x", l.getBlockX());
getConfig().set(arenaname + ".boundary" + count + ".loc.y", l.getBlockY());
getConfig().set(arenaname + ".boundary" + count + ".loc.z", l.getBlockZ());
this.saveConfig();
event.setCancelled(true);
event.getPlayer().sendMessage("" + ChatColor.YELLOW + "Successfully saved " + count + " boundary!");
}
} catch (NullPointerException e) {
event.getPlayer().sendMessage("" + ChatColor.RED + "You must hit a block.");
}
} else {
event.getPlayer().sendMessage(noperm);
}
} else {
event.getPlayer().sendMessage("" + ChatColor.RED + "Could not find this arena.");
}
}
}
}
}
if (event.hasItem()) {
final Player p = event.getPlayer();
if (!arenap.containsKey(p)) {
return;
}
if (event.getItem().getTypeId() == kit_tool_id) {
m.openGUI(m, p.getName());
return;
}
if (!pkit_use.containsKey(p)) {
pkit_use.put(p, true);
}
if (!pkit_use.get(p)) {
p.sendMessage(kit_delay_message.replaceAll("<delay>", Integer.toString(kit_delay_in_seconds)));
return;
}
pkit_use.put(p, false);
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
pkit_use.put(p, true);
}
}, kit_delay_in_seconds * 20);
if (event.getItem().getTypeId() == 258) {
p.getInventory().removeItem(new ItemStack(Material.IRON_AXE, 1));
p.updateInventory();
Vector direction = p.getLocation().getDirection().multiply(getConfig().getDouble("config.jumper_boost_factor"));
direction.setY(direction.getY() + 1.5);
p.setVelocity(direction);
// p.setVelocity(p.getVelocity().multiply(2D));
} else if (event.getItem().getTypeId() == 368) {
p.getInventory().removeItem(new ItemStack(Material.ENDER_PEARL, 1));
p.updateInventory();
for (final Entity t : p.getNearbyEntities(40, 40, 40)) {
if (t instanceof Player) {
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
p.teleport(t);
}
}, 5L);
}
}
event.setCancelled(true);
} else if (event.getItem().getTypeId() == 46) {
p.getInventory().removeItem(new ItemStack(Material.TNT, 1));
p.updateInventory();
p.getLocation().getWorld().dropItemNaturally(p.getLocation().add(1, 3, 1), new ItemStack(Material.TNT));
}
}
}
@EventHandler
public void onPlayerPickup(PlayerPickupItemEvent event) {
if (arenap.containsKey(event.getPlayer())) {
if (event.getItem().getItemStack().getType() == Material.TNT) {
event.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 120, 1));
event.getItem().remove();
event.setCancelled(true);
}
}
}
@EventHandler
public void onSignChange(SignChangeEvent event) {
Player p = event.getPlayer();
if (event.getLine(0).toLowerCase().equalsIgnoreCase("dragonescape") || event.getLine(0).toLowerCase().equalsIgnoreCase("mobescape")) {
if (event.getPlayer().hasPermission("mobescape.sign") || event.getPlayer().isOp()) {
event.setLine(0, sign_top);
if (!event.getLine(2).equalsIgnoreCase("")) {
String arena = event.getLine(2);
if (isValidArena(arena)) {
getConfig().set(arena + ".sign.world", p.getWorld().getName());
getConfig().set(arena + ".sign.loc.x", event.getBlock().getLocation().getBlockX());
getConfig().set(arena + ".sign.loc.y", event.getBlock().getLocation().getBlockY());
getConfig().set(arena + ".sign.loc.z", event.getBlock().getLocation().getBlockZ());
this.saveConfig();
p.sendMessage("" + ChatColor.DARK_GREEN + "Successfully created arena sign.");
} else {
p.sendMessage(arena_invalid_component);
event.getBlock().breakNaturally();
}
event.setLine(1, sign_second_join);
event.setLine(2, arena);
event.setLine(3, "0/" + Integer.toString(getArenaMaxPlayers(arena)));
}
} else {
event.getPlayer().sendMessage(noperm);
}
}
}
@EventHandler
public void onPlayerCommandPreprocessEvent(PlayerCommandPreprocessEvent event) {
if (arenap.containsKey(event.getPlayer()) && !event.getPlayer().isOp()) {
if (!event.getMessage().startsWith("/etm") && !event.getMessage().startsWith("/de") && !event.getMessage().startsWith("/dragonescape")) {
event.getPlayer().sendMessage("" + ChatColor.RED + "Please use " + ChatColor.GOLD + "/etm leave " + ChatColor.RED + "to leave this minigame.");
event.setCancelled(true);
return;
}
}
}
@EventHandler
public void EntityChangeBlockEvent(org.bukkit.event.entity.EntityChangeBlockEvent event) {
if (event.getEntityType() == EntityType.FALLING_BLOCK) {
for (String arena : getConfig().getKeys(false)) {
if (!arena.equalsIgnoreCase("mainlobby") && !arena.equalsIgnoreCase("strings") && !arena.equalsIgnoreCase("config")) {
if (isValidArena(arena)) {
Cuboid c = new Cuboid(getLowBoundary(arena), getHighBoundary(arena));
if (c.containsLocWithoutY(event.getBlock().getLocation())) {
event.setCancelled(true);
}
}
}
}
}
}
@EventHandler
public void onEntityDamage(EntityDamageEvent event) {
if (event.getEntity() instanceof Player) {
Player p = (Player) event.getEntity();
if (arenap_.containsKey(p.getName())) {
if (event.getCause() == DamageCause.LAVA || event.getCause() == DamageCause.FIRE || event.getCause() == DamageCause.FIRE_TICK) {
p.damage(event.getDamage());
} else {
p.setHealth(20D);
event.setCancelled(true);
}
}
}
}
/*
* @EventHandler public void onPlayerRespawn(PlayerRespawnEvent event){ if(arenap_.containsKey(event.getPlayer().getName())){ final Player p =
* event.getPlayer(); Bukkit.getScheduler().runTaskLater(this, new Runnable(){ public void run(){ m.simulatePlayerFall(p); } }, 10L); } }
*/
@EventHandler
public void onPlayerDeath(PlayerDeathEvent event) {
if (arenap_.containsKey(event.getEntity().getName())) {
event.getEntity().setHealth(20D);
Player p = event.getEntity();
m.simulatePlayerFall(p);
}
}
public Sign getSignFromArena(String arena) {
Location b_ = new Location(getServer().getWorld(getConfig().getString(arena + ".sign.world")), getConfig().getInt(arena + ".sign.loc.x"), getConfig().getInt(arena + ".sign.loc.y"), getConfig().getInt(arena + ".sign.loc.z"));
BlockState bs = b_.getBlock().getState();
Sign s_ = null;
if (bs instanceof Sign) {
s_ = (Sign) bs;
} else {
}
return s_;
}
public Location getLobby(String arena) {
Location ret = null;
if (isValidArena(arena)) {
ret = new Location(Bukkit.getWorld(getConfig().getString(arena + ".lobby.world")), getConfig().getInt(arena + ".lobby.loc.x"), getConfig().getInt(arena + ".lobby.loc.y"), getConfig().getInt(arena + ".lobby.loc.z"));
}
return ret;
}
public Location getMainLobby() {
Location ret;
if (getConfig().isSet("mainlobby")) {
ret = new Location(Bukkit.getWorld(getConfig().getString("mainlobby.world")), getConfig().getInt("mainlobby.loc.x"), getConfig().getInt("mainlobby.loc.y"), getConfig().getInt("mainlobby.loc.z"));
} else {
ret = null;
getLogger().warning("A Mainlobby could not be found. This will lead to errors, please fix this with /etm setmainlobby.");
}
return ret;
}
public Location getSpawn(String arena, int count) {
Location ret = null;
if (isValidArena(arena)) {
String entry = ".spawn." + Integer.toString(count) + ".";
if (!getConfig().isSet(arena + entry)) {
entry = ".spawn.";
}
ret = new Location(Bukkit.getWorld(getConfig().getString(arena + entry + "world")), getConfig().getInt(arena + entry + "loc.x"), getConfig().getInt(arena + entry + "loc.y"), getConfig().getInt(arena + entry + "loc.z"), getConfig().getInt(arena + entry + "loc.yaw"), getConfig().getInt(arena + entry + "loc.pitch"));
}
return ret;
}
public HashMap<String, Integer> spawncount = new HashMap<String, Integer>();
public HashMap<Player, Integer> pspawn = new HashMap<Player, Integer>();
public Location getSpawn(String arena) {
return getSpawn(arena, 0);
}
public Location getSpawnForPlayer(Player p, String arena) {
if (!spawncount.containsKey(arena)) {
spawncount.put(arena, 0);
pspawn.put(p, 0);
spawncount.put(arena, spawncount.get(arena) + 1);
return getSpawn(arena, 0);
}
if (spawncount.get(arena) < this.getCurrentSpawnIndex(arena)) {
Location ret = getSpawn(arena, spawncount.get(arena));
pspawn.put(p, spawncount.get(arena));
spawncount.put(arena, spawncount.get(arena) + 1);
return ret;
} else {
spawncount.put(arena, 0);
}
pspawn.put(p, 0);
return getSpawn(arena, 0);
}
public Location getDragonSpawn(String arena) {
Location ret = null;
if (isValidArena(arena)) {
if (!getConfig().isSet(arena + ".dragonspawn")) {
return null;
}
ret = new Location(Bukkit.getWorld(getConfig().getString(arena + ".dragonspawn.world")), getConfig().getInt(arena + ".dragonspawn.loc.x"), getConfig().getInt(arena + ".dragonspawn.loc.y"), getConfig().getInt(arena + ".dragonspawn.loc.z"), getConfig().getInt(arena + ".dragonspawn.loc.yaw"), getConfig().getInt(arena + ".dragonspawn.loc.pitch"));
}
return ret;
}
public Location getFinish(String arena) {
Location ret = null;
if (isValidArena(arena)) {
ret = new Location(Bukkit.getWorld(getConfig().getString(arena + ".finish.world")), getConfig().getInt(arena + ".finish.loc.x"), getConfig().getInt(arena + ".finish.loc.y"), getConfig().getInt(arena + ".finish.loc.z"));
}
return ret;
}
public Location getLowBoundary(String arena) {
Location ret = null;
if (isValidArena(arena)) {
ret = new Location(Bukkit.getWorld(getConfig().getString(arena + ".boundarylow.world")), getConfig().getInt(arena + ".boundarylow.loc.x"), getConfig().getInt(arena + ".boundarylow.loc.y") + 2, getConfig().getInt(arena + ".boundarylow.loc.z"));
}
return ret;
}
public Location getHighBoundary(String arena) {
Location ret = null;
if (isValidArena(arena)) {
ret = new Location(Bukkit.getWorld(getConfig().getString(arena + ".boundaryhigh.world")), getConfig().getInt(arena + ".boundaryhigh.loc.x"), getConfig().getInt(arena + ".boundaryhigh.loc.y") + 2, getConfig().getInt(arena + ".boundaryhigh.loc.z"));
}
return ret;
}
public boolean isValidArena(String arena) {
if (getConfig().isSet(arena + ".spawn") && getConfig().isSet(arena + ".lobby") && getConfig().isSet(arena + ".boundarylow") && getConfig().isSet(arena + ".boundaryhigh")) {
return true;
}
return false;
}
public HashMap<Player, Boolean> winner = new HashMap<Player, Boolean>();
public void leaveArena(final Player p, boolean flag, boolean hmmthisbug) {
try {
p.getInventory().clear();
p.updateInventory();
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
if (p.isOnline()) {
try {
p.teleport(getMainLobby());
} catch (Exception e) {
getServer().getLogger().severe("Please send this error to the developers on bukkitdev!");
e.printStackTrace();
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mvtp e:" + getMainLobby().getWorld() + ":" + getMainLobby().getX() + "," + getMainLobby().getY() + "," + getMainLobby().getZ() + ":0:0");
}
if (spawn_winnerfirework) {
spawnFirework(p);
}
}
}
}, 8);
if (lost.containsKey(p)) {
lost.remove(p);
}
if (pseenfall.containsKey(p.getName())) {
pseenfall.remove(p.getName());
}
final String arena = arenap.get(p);
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
if (p.isOnline()) {
p.setAllowFlight(false);
p.setFlying(false);
removeScoreboard(arena, p);
if (p.isOnline()) {
p.getInventory().setContents(pinv.get(p));
p.updateInventory();
}
if (winner.containsKey(p)) {
m.getArenaReward(arena, p);
if (spawn_winnerfirework) {
spawnFirework(p);
}
}
}
}
}, 16);
if (flag) {
if (arenap.containsKey(p)) {
arenap.remove(p);
}
}
if (arenap_.containsKey(p.getName())) {
arenap_.remove(p.getName());
}
int count = 0;
for (Player p_ : arenap.keySet()) {
if (arenap.get(p_).equalsIgnoreCase(arena)) {
count++;
}
}
if (hmmthisbug && count > 0) {
getLogger().info("Sorry, I could not fix the game. Stopping now.");
stop(h.get(arena), arena);
}
if (count < 2) {
if (flag) {
stop(h.get(arena), arena);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void joinLobby(final Player p, final String arena) {
// very first check if arena needs perms and player has perm to join.
if (this.arenaNeedsPerm(arena)) {
if (!p.hasPermission("mobescape.joinarena." + arena)) {
p.sendMessage(noperm_arena);
return;
}
}
// check first if max players are reached.
int count_ = 0;
for (Player p_ : arenap.keySet()) {
if (arenap.get(p_).equalsIgnoreCase(arena)) {
count_++;
}
}
if (count_ > getArenaMaxPlayers(arena) - 1) {
p.sendMessage(arena_full);
return;
}
// continue
arenap.put(p, arena);
pinv.put(p, p.getInventory().getContents());
p.setGameMode(GameMode.SURVIVAL);
p.getInventory().clear();
p.updateInventory();
if (give_jumper_as_default_kit) {
pkit.put(p, "jumper");
}
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
p.teleport(getLobby(arena));
p.setFoodLevel(20);
if (m.give_kit_tool_at_join) {
p.getInventory().addItem(new ItemStack(Material.getMaterial(kit_tool_id)));
p.updateInventory();
}
}
}, 4);
int count = 0;
for (Player p_ : arenap.keySet()) {
if (arenap.get(p_).equalsIgnoreCase(arena)) {
count++;
}
}
for (Player p_ : arenap.keySet()) {
if (arenap.get(p_).equalsIgnoreCase(arena)) {
if (join_announcement) {
p_.sendMessage(join_announcement_.replace("<player>", p.getName()).replace("<count>", Integer.toString(count) + "/" + Integer.toString(getArenaMaxPlayers(arena))));
}
}
}
if (count > getArenaMinPlayers(arena) - 1) {
final int lobby_c = getConfig().getInt("config.lobby_countdown");
if (!m.lobby_countdown_id.containsKey(arena)) {
int t = Bukkit.getServer().getScheduler().runTaskTimerAsynchronously(m, new Runnable() {
public void run() {
if (!m.lobby_countdown_count.containsKey(arena)) {
m.lobby_countdown_count.put(arena, lobby_c);
}
int count = m.lobby_countdown_count.get(arena);
for (Player p : m.arenap.keySet()) {
if (m.arenap.get(p).equalsIgnoreCase(arena)) {
if (count == 120 || count == 60 || count == 30 || count == 15 || count < 11) {
p.sendMessage(ChatColor.GRAY + "Teleporting to arena in " + Integer.toString(count) + " seconds.");
}
}
}
count--;
m.lobby_countdown_count.put(arena, count);
if (count < 0) {
m.lobby_countdown_count.put(arena, lobby_c);
for (Player p_ : arenap.keySet()) {
final Player p__ = p_;
if (arenap.get(p_).equalsIgnoreCase(arena)) {
Bukkit.getScheduler().runTaskLater(m, new Runnable() {
public void run() {
p__.teleport(getSpawnForPlayer(p__, arena));
}
}, 7);
}
}
Bukkit.getScheduler().runTaskLater(m, new Runnable() {
public void run() {
if (!ingame.containsKey(arena)) {
ingame.put(arena, false);
}
if (!ingame.get(arena)) {
start(arena);
}
}
}, 10);
Bukkit.getServer().getScheduler().cancelTask(m.lobby_countdown_id.get(arena));
}
}
}, 5, 20).getTaskId();
m.lobby_countdown_id.put(arena, t);
}
}
if (!ingame.containsKey(arena)) {
ingame.put(arena, false);
}
if (ingame.get(arena)) {
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
p.teleport(getSpawnForPlayer(p, arena));
}
}, 7);
}
try {
Sign s = this.getSignFromArena(arena);
if (s != null) {
s.setLine(3, Integer.toString(count) + "/" + Integer.toString(getArenaMaxPlayers(arena)));
s.update();
}
} catch (Exception e) {
getLogger().warning("You forgot to set a sign for arena " + arena + "! This may lead to errors.");
}
}
final Main m = this;
static Random r = new Random();
final public HashMap<String, Integer> lobby_countdown_count = new HashMap<String, Integer>();
final public HashMap<String, Integer> lobby_countdown_id = new HashMap<String, Integer>();
final public HashMap<String, BukkitTask> h = new HashMap<String, BukkitTask>();
final public HashMap<String, Integer> countdown_count = new HashMap<String, Integer>();
final public HashMap<String, Integer> countdown_id = new HashMap<String, Integer>();
final public HashMap<String, Double> dragon_move_increment = new HashMap<String, Double>();
public BukkitTask start(final String arena) {
if (mode1_6) {
if (type.equalsIgnoreCase("dragon")) {
V1_6Dragon v = new V1_6Dragon();
return v.start(this, arena);
} else if (type.equalsIgnoreCase("wither")) {
V1_6Wither v = new V1_6Wither();
return v.start(this, arena);
} else {
V1_6Dragon v = new V1_6Dragon();
return v.start(this, arena);
}
} else if (mode1_7_5) {
if (type.equalsIgnoreCase("dragon")) {
V1_7_5Dragon v = new V1_7_5Dragon();
return v.start(this, arena);
} else if (type.equalsIgnoreCase("wither")) {
V1_7_5Wither v = new V1_7_5Wither();
return v.start(this, arena);
} else {
V1_7_5Dragon v = new V1_7_5Dragon();
return v.start(this, arena);
}
} else if (mode1_7_8) {
if (type.equalsIgnoreCase("dragon")) {
V1_7_8Dragon v = new V1_7_8Dragon();
return v.start(this, arena);
} else if (type.equalsIgnoreCase("wither")) {
V1_7_8Wither v = new V1_7_8Wither();
return v.start(this, arena);
} else {
V1_7_8Dragon v = new V1_7_8Dragon();
return v.start(this, arena);
}
} else if (mode1_7_10) {
if (type.equalsIgnoreCase("dragon")) {
V1_7_10Dragon v = new V1_7_10Dragon();
return v.start(this, arena);
} else if (type.equalsIgnoreCase("wither")) {
V1_7_10Wither v = new V1_7_10Wither();
return v.start(this, arena);
} else {
V1_7_10Dragon v = new V1_7_10Dragon();
return v.start(this, arena);
}
}
if (type.equalsIgnoreCase("dragon")) {
V1_7Dragon v_ = new V1_7Dragon();
return v_.start(this, arena);
} else if (type.equalsIgnoreCase("wither")) {
V1_7Wither v_ = new V1_7Wither();
return v_.start(this, arena);
} else {
V1_7Dragon v_ = new V1_7Dragon();
return v_.start(this, arena);
}
}
public void reset(final String arena) {
Runnable r = new Runnable() {
public void run() {
loadArenaFromFileSYNC(arena);
}
};
new Thread(r).start();
}
public void stop(BukkitTask t, final String arena) {
if (mode1_6) {
if (type.equalsIgnoreCase("dragon")) {
V1_6Dragon v = new V1_6Dragon();
v.stop(this, t, arena);
} else if (type.equalsIgnoreCase("wither")) {
V1_6Wither v = new V1_6Wither();
v.stop(this, t, arena);
} else {
V1_6Dragon v = new V1_6Dragon();
v.stop(this, t, arena);
}
} else if (mode1_7_5) {
if (type.equalsIgnoreCase("dragon")) {
V1_7_5Dragon v = new V1_7_5Dragon();
v.stop(this, t, arena);
} else if (type.equalsIgnoreCase("wither")) {
V1_7_5Wither v = new V1_7_5Wither();
v.stop(this, t, arena);
} else {
V1_7_5Dragon v = new V1_7_5Dragon();
v.stop(this, t, arena);
}
} else if (mode1_7_8) {
if (type.equalsIgnoreCase("dragon")) {
V1_7_8Dragon v = new V1_7_8Dragon();
v.stop(this, t, arena);
} else if (type.equalsIgnoreCase("wither")) {
V1_7_8Wither v = new V1_7_8Wither();
v.stop(this, t, arena);
} else {
V1_7_8Dragon v = new V1_7_8Dragon();
v.stop(this, t, arena);
}
} else if (mode1_7_10) {
if (type.equalsIgnoreCase("dragon")) {
V1_7_10Dragon v = new V1_7_10Dragon();
v.stop(this, t, arena);
} else if (type.equalsIgnoreCase("wither")) {
V1_7_10Wither v = new V1_7_10Wither();
v.stop(this, t, arena);
} else {
V1_7_10Dragon v = new V1_7_10Dragon();
v.stop(this, t, arena);
}
} else {
if (type.equalsIgnoreCase("dragon")) {
V1_7Dragon v = new V1_7Dragon();
v.stop(this, t, arena);
} else if (type.equalsIgnoreCase("wither")) {
V1_7Wither v = new V1_7Wither();
v.stop(this, t, arena);
} else {
V1_7Dragon v = new V1_7Dragon();
v.stop(this, t, arena);
}
}
if (m.lobby_countdown_id.containsKey(arena)) {
try {
Bukkit.getServer().getScheduler().cancelTask(m.lobby_countdown_id.get(arena));
} catch (Exception e) {
}
m.lobby_countdown_id.remove(arena);
}
if (spawncount.containsKey(arena)) {
spawncount.remove(arena);
}
}
public void clean() {
for (Player p : arenap.keySet()) {
if (!p.isOnline()) {
leaveArena(p, false, false);
}
}
}
public void determineWinners(String arena) {
for (Player p : arenap.keySet()) {
if (arenap.get(p).equalsIgnoreCase(arena)) {
if (!lost.containsKey(p)) {
// this player is a winner
p.sendMessage(you_won);
if (winner_announcement) {
getServer().broadcastMessage(winner_an.replaceAll("<player>", p.getName()).replaceAll("<arena>", arena));
}
winner.put(p, true);
} else {
lost.remove(p);
}
}
}
}
public int getArenaMaxPlayers(String arena) {
if (!getConfig().isSet(arena + ".max_players")) {
setArenaMaxPlayers(arena, default_max_players);
}
return getConfig().getInt(arena + ".max_players");
}
public void setArenaMaxPlayers(String arena, int players) {
getConfig().set(arena + ".max_players", players);
this.saveConfig();
}
public int getArenaMinPlayers(String arena) {
if (!getConfig().isSet(arena + ".min_players")) {
setArenaMinPlayers(arena, default_min_players);
}
return getConfig().getInt(arena + ".min_players");
}
public void setArenaMinPlayers(String arena, int players) {
getConfig().set(arena + ".min_players", players);
this.saveConfig();
}
public boolean isNumeric(String s) {
return s.matches("[-+]?\\d*\\.?\\d+");
}
public void saveArenaToFile(String player, String arena) {
File f = new File(this.getDataFolder() + "/" + arena);
Cuboid c = new Cuboid(getLowBoundary(arena), getHighBoundary(arena));
Location start = c.getLowLoc();
Location end = c.getHighLoc();
int width = end.getBlockX() - start.getBlockX();
int length = end.getBlockZ() - start.getBlockZ();
int height = end.getBlockY() - start.getBlockY();
getLogger().info("BOUNDS: " + Integer.toString(width) + " " + Integer.toString(height) + " " + Integer.toString(length));
getLogger().info("BLOCKS TO SAVE: " + Integer.toString(width * height * length));
FileOutputStream fos;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(f);
oos = new BukkitObjectOutputStream(fos);
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i <= width; i++) {
for (int j = 0; j <= height; j++) {
for (int k = 0; k <= length; k++) {
Block change = c.getWorld().getBlockAt(start.getBlockX() + i, start.getBlockY() + j, start.getBlockZ() + k);
// if(change.getType() != Material.AIR){
ArenaBlock bl = new ArenaBlock(change);
try {
oos.writeObject(bl);
} catch (IOException e) {
e.printStackTrace();
}
// }
}
}
}
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
Bukkit.getPlayerExact(player).sendMessage("" + ChatColor.GREEN + "Successfully saved arena to file.");
}
public void saveArenaToFile(String arena) {
File f = new File(this.getDataFolder() + "/" + arena);
Cuboid c = new Cuboid(getLowBoundary(arena), getHighBoundary(arena));
Location start = c.getLowLoc();
Location end = c.getHighLoc();
int width = end.getBlockX() - start.getBlockX();
int length = end.getBlockZ() - start.getBlockZ();
int height = end.getBlockY() - start.getBlockY();
getLogger().info("BOUNDS: " + Integer.toString(width) + " " + Integer.toString(height) + " " + Integer.toString(length));
getLogger().info("BLOCKS TO SAVE: " + Integer.toString(width * height * length));
FileOutputStream fos;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(f);
oos = new BukkitObjectOutputStream(fos);
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i <= width; i++) {
for (int j = 0; j <= height; j++) {
for (int k = 0; k <= length; k++) {
Block change = c.getWorld().getBlockAt(start.getBlockX() + i, start.getBlockY() + j, start.getBlockZ() + k);
// if(change.getType() != Material.AIR){
ArenaBlock bl = new ArenaBlock(change);
try {
oos.writeObject(bl);
} catch (IOException e) {
e.printStackTrace();
}
// }
}
}
}
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
getLogger().info("saved");
}
public void loadArenaFromFileASYNC(String arena) {
File f = new File(this.getDataFolder() + "/" + arena);
FileInputStream fis = null;
BukkitObjectInputStream ois = null;
try {
fis = new FileInputStream(f);
ois = new BukkitObjectInputStream(fis);
} catch (IOException e) {
e.printStackTrace();
}
try {
while (true) {
Object b = null;
try {
b = ois.readObject();
} catch (EOFException e) {
getLogger().info("Finished restoring map for " + arena + ".");
}
if (b != null) {
ArenaBlock ablock = (ArenaBlock) b;
World w = ablock.getBlock().getWorld();
if (!w.getBlockAt(ablock.getBlock().getLocation()).getType().toString().equalsIgnoreCase(ablock.getMaterial().toString())) {
ablock.getBlock().getWorld().getBlockAt(ablock.getBlock().getLocation()).setType(ablock.getMaterial());
}
} else {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void loadArenaFromFileSYNC(final String arena) {
int failcount = 0;
final ArrayList<ArenaBlock> failedblocks = new ArrayList<ArenaBlock>();
File f = new File(this.getDataFolder() + "/" + arena);
FileInputStream fis = null;
BukkitObjectInputStream ois = null;
try {
fis = new FileInputStream(f);
ois = new BukkitObjectInputStream(fis);
} catch (IOException e) {
e.printStackTrace();
}
try {
while (true) {
Object b = null;
try {
b = ois.readObject();
} catch (EOFException e) {
getLogger().info("Finished restoring map for " + arena + ".");
}
if (b != null) {
ArenaBlock ablock = (ArenaBlock) b;
try {
Block b_ = ablock.getBlock().getWorld().getBlockAt(ablock.getBlock().getLocation());
if (!b_.getType().toString().equalsIgnoreCase(ablock.getMaterial().toString())) {
b_.setType(ablock.getMaterial());
b_.setData(ablock.getData());
// .setTypeIdAndData(ablock.getMaterial().getId(), ablock.getData(), false);
}
} catch (IllegalStateException e) {
failcount += 1;
failedblocks.add(ablock);
}
} else {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
// getLogger().info("Failed to update " + Integer.toString(failcount) + " blocks due to spigots async exception.");
getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
public void run() {
// restore spigot blocks!
// getLogger().info("Trying to restore blocks affected by spigot exception..");
for (ArenaBlock ablock : failedblocks) {
getServer().getWorld(ablock.world).getBlockAt(new Location(getServer().getWorld(ablock.world), ablock.x, ablock.y, ablock.z)).setType(Material.WOOL);
getServer().getWorld(ablock.world).getBlockAt(new Location(getServer().getWorld(ablock.world), ablock.x, ablock.y, ablock.z)).getTypeId();
getServer().getWorld(ablock.world).getBlockAt(new Location(getServer().getWorld(ablock.world), ablock.x, ablock.y, ablock.z)).setType(ablock.getMaterial());
}
getLogger().info("Successfully finished!");
Sign s = getSignFromArena(arena);
if (s != null) {
s.setLine(1, sign_second_join);
s.setLine(3, "0/" + Integer.toString(getArenaMaxPlayers(arena)));
s.update();
}
}
}, 40L);
return;
}
public String getDirectiontest(Float yaw) {
yaw = yaw / 90;
yaw = (float) Math.round(yaw);
if (yaw == -4 || yaw == 0 || yaw == 4) {
return "SOUTH";
}
if (yaw == -1 || yaw == 3) {
return "EAST";
}
if (yaw == -2 || yaw == 2) {
return "NORTH";
}
if (yaw == -3 || yaw == 1) {
return "WEST";
}
return "";
}
public ArrayList<Vector> getDragonWayPoints(String arena) {
ArrayList<Vector> ret = new ArrayList<Vector>();
if (!getConfig().isSet(arena + ".flypoint")) {
return null;
} else {
Set<String> f = getConfig().getConfigurationSection(arena + ".flypoint").getKeys(false);
for (String key : f) {
ret.add(new Vector(getConfig().getDouble(arena + ".flypoint." + key + ".x"), getConfig().getDouble(arena + ".flypoint." + key + ".y"), getConfig().getDouble(arena + ".flypoint." + key + ".z")));
}
return ret;
}
}
public ArrayList<Location> getSpawns(String arena) {
ArrayList<Location> ret = new ArrayList<Location>();
if (!getConfig().isSet(arena + ".spawn.")) {
return null;
} else {
int count = 0;
Set<String> f = getConfig().getConfigurationSection(arena + ".spawn").getKeys(false);
for (String key : f) {
if (!key.equalsIgnoreCase("world") && !key.equalsIgnoreCase("loc")) {
ret.add(getSpawn(arena, count));
count++;
}
}
return ret;
}
}
public int getCurrentSpawnIndex(String arena) {
if (!getConfig().isSet(arena + ".spawn.")) {
return 0;
} else {
int count = 0;
Set<String> f = getConfig().getConfigurationSection(arena + ".spawn").getKeys(false);
for (String key : f) {
if (!key.equalsIgnoreCase("world") && !key.equalsIgnoreCase("loc")) {
count++;
}
}
return count;
}
}
public int getCurrentFlyPoint(String arena) {
if (!getConfig().isSet(arena + ".flypoint")) {
return 0;
} else {
int count = 0;
Set<String> f = getConfig().getConfigurationSection(arena + ".flypoint").getKeys(false);
for (String key : f) {
count++;
}
return count;
}
}
public static final void playBlockBreakParticles(final Location loc, final Material m) {
playBlockBreakParticles(loc, m, Bukkit.getOnlinePlayers());
}
public static final void playBlockBreakParticles(final Location loc, final Material m, final Player... players) {
if (mode1_6) {
(new V1_6Dragon()).playBlockBreakParticles(loc, m, players);
} else if (mode1_7_5) {
(new V1_7_5Dragon()).playBlockBreakParticles(loc, m, players);
} else if (mode1_7_8) {
(new V1_7_8Dragon()).playBlockBreakParticles(loc, m, players);
} else if (mode1_7_10) {
(new V1_7_10Dragon()).playBlockBreakParticles(loc, m, players);
}
(new V1_7Dragon()).playBlockBreakParticles(loc, m, players);
}
Scoreboard board;
Objective objective;
public HashMap<String, Integer> currentscore = new HashMap<String, Integer>();
public void updateScoreboard(String arena) {
if (remove_scoreboard) {
return;
}
for (Player pl : arenap.keySet()) {
if (!arenap.get(pl).equalsIgnoreCase(arena)) {
return;
}
Player p = pl;
if (board == null) {
board = Bukkit.getScoreboardManager().getNewScoreboard();
}
if (objective == null) {
objective = board.registerNewObjective("test", "dummy");
}
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
objective.setDisplayName("[" + arenap.get(p) + "]");
for (Player pl_ : arenap.keySet()) {
Player p_ = pl_;
if (!lost.containsKey(pl_)) {
int score = -(int) p_.getLocation().distance(getFinish(arenap.get(p)));
if (currentscore.containsKey(pl_.getName())) {
int oldscore = currentscore.get(pl_.getName());
if (score > oldscore) {
currentscore.put(pl_.getName(), score);
} else {
score = oldscore;
}
} else {
currentscore.put(pl_.getName(), score);
}
try {
if (p_.getName().length() < 15) {
objective.getScore(Bukkit.getOfflinePlayer("�a" + p_.getName())).setScore(score);
} else {
objective.getScore(Bukkit.getOfflinePlayer("�a" + p_.getName().substring(0, p_.getName().length() - 3))).setScore(score);
}
} catch (Exception e) {
}
} else if (lost.containsKey(pl_)) {
if (currentscore.containsKey(pl_.getName())) {
int score = currentscore.get(pl_.getName());
try {
if (p_.getName().length() < 15) {
board.resetScores(Bukkit.getOfflinePlayer("�a" + p_.getName()));
objective.getScore(Bukkit.getOfflinePlayer("�c" + p_.getName())).setScore(score);
} else {
board.resetScores(Bukkit.getOfflinePlayer("�a" + p_.getName().substring(0, p_.getName().length() - 3)));
objective.getScore(Bukkit.getOfflinePlayer("�c" + p_.getName().substring(0, p_.getName().length() - 3))).setScore(score);
}
} catch (Exception e) {
}
}
}
}
p.setScoreboard(board);
}
}
public void removeScoreboard(String arena, Player p) {
try {
ScoreboardManager manager = Bukkit.getScoreboardManager();
Scoreboard sc = manager.getNewScoreboard();
try {
if (p.getName().length() < 15) {
board.resetScores(Bukkit.getOfflinePlayer("�c" + p.getName()));
board.resetScores(Bukkit.getOfflinePlayer("�a" + p.getName()));
} else {
board.resetScores(Bukkit.getOfflinePlayer("�c" + p.getName().substring(0, p.getName().length() - 3)));
board.resetScores(Bukkit.getOfflinePlayer("�a" + p.getName().substring(0, p.getName().length() - 3)));
}
} catch (Exception e) {
}
sc.clearSlot(DisplaySlot.SIDEBAR);
p.setScoreboard(sc);
} catch (Exception e) {
e.printStackTrace();
}
}
public void spawnFirework(Player p) {
Firework fw = (Firework) p.getWorld().spawnEntity(p.getLocation(), EntityType.FIREWORK);
FireworkMeta fwm = fw.getFireworkMeta();
FireworkEffect effect = FireworkEffect.builder().flicker(r.nextBoolean()).withColor(Color.AQUA).withFade(Color.ORANGE).with(Type.STAR).trail(r.nextBoolean()).build();
fwm.addEffect(effect);
int rp = r.nextInt(2) + 1;
fwm.setPower(rp);
fw.setFireworkMeta(fwm);
}
public static Entity[] getNearbyEntities(Location l, int radius) {
int chunkRadius = radius < 16 ? 1 : (radius - (radius % 16)) / 16;
HashSet<Entity> radiusEntities = new HashSet<Entity>();
for (int chX = 0 - chunkRadius; chX <= chunkRadius; chX++) {
for (int chZ = 0 - chunkRadius; chZ <= chunkRadius; chZ++) {
int x = (int) l.getX(), y = (int) l.getY(), z = (int) l.getZ();
for (Entity e : new Location(l.getWorld(), x + (chX * 16), y, z + (chZ * 16)).getChunk().getEntities()) {
if (e.getLocation().distance(l) <= radius && e.getLocation().getBlock() != l.getBlock())
radiusEntities.add(e);
}
}
}
return radiusEntities.toArray(new Entity[radiusEntities.size()]);
}
public String getKitDescription(String kit) {
return getConfig().getString("config.kits." + kit + ".description").replaceAll("&", "�");
}
public int getKitUses(String kit) {
return getConfig().getInt("config.kits." + kit + ".uses");
}
public boolean kitRequiresMoney(String kit) {
return getConfig().getBoolean("config.kits." + kit + ".requires_money");
}
public boolean kitTakeMoney(Player p, String kit) {
if (econ.getBalance(p.getName()) >= getConfig().getInt("config.kits." + kit + ".money_amount")) {
EconomyResponse r = econ.withdrawPlayer(p.getName(), getConfig().getInt("config.kits." + kit + ".money_amount"));
if (!r.transactionSuccess()) {
p.sendMessage(String.format("An error occured: %s", r.errorMessage));
}
return true;
} else {
p.sendMessage("�4You don't have enough money!");
return false;
}
}
public boolean kitPlayerHasPermission(String kit, Player p) {
if (!getConfig().getBoolean("config.kits." + kit + ".requires_permission")) {
return true;
} else {
if (p.hasPermission(getConfig().getString("config.kits." + kit + ".permission_node"))) {
return true;
} else {
return false;
}
}
}
public void simulatePlayerFall(Player p) {
lost.put(p, arenap.get(p));
final Player p__ = p;
final String arena = arenap.get(p);
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
try {
Location l = getSpawn(arena);
p__.teleport(new Location(l.getWorld(), l.getBlockX(), l.getBlockY() + 30, l.getBlockZ()));
p__.setAllowFlight(true);
p__.setFlying(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}, 5);
int count = 0;
for (Player p_ : arenap.keySet()) {
if (arenap.get(p_).equalsIgnoreCase(arena)) {
if (!lost.containsKey(p_)) {
count++;
}
}
}
pplace.put(p, count + 1);
/*
* String place = Integer.toString(count + 1) + "th"; if(count == 0){ place = "1st"; }else if(count == 1){ place = "2nd"; }else if(count ==
* 2){ place = "3rd"; } p.sendMessage(your_place.replaceAll("<place>", place));
*/
if (last_man_standing) {
if (count < 2) {
stop(h.get(arena), arena);
}
} else {
if (count < 1) {
stop(h.get(arena), arena);
}
}
}
public boolean arenaNeedsPerm(String arena) {
if (!(getConfig().isSet(arena + ".needs_perm"))) {
setArenaNeedsPerm(arena, false);
return false;
}
return getConfig().getBoolean(arena + ".needs_perm");
}
public void setArenaNeedsPerm(String arena, boolean val) {
getConfig().set(arena + ".needs_perm", val);
this.saveConfig();
}
public void openGUI(final Main m, String p) {
IconMenu iconm = new IconMenu("Shop", 18, new IconMenu.OptionClickEventHandler() {
@Override
public void onOptionClick(IconMenu.OptionClickEvent event) {
String d = event.getName();
Player p = event.getPlayer();
String kit = d.toLowerCase();
if (kit.equalsIgnoreCase("jumper")) {
p.sendMessage(getKitDescription("jumper"));
} else if (kit.equalsIgnoreCase("warper")) {
p.sendMessage(getKitDescription("warper"));
} else if (kit.equalsIgnoreCase("tnt")) {
p.sendMessage(getKitDescription("tnt"));
} else {
p.sendMessage(ChatColor.RED + "Unknown Kit.");
event.setWillClose(true);
return;
}
if (kitPlayerHasPermission(kit, p)) {
if (kitRequiresMoney(kit)) {
if (kitTakeMoney(p, kit)) {
pkit.put(p, kit);
}
} else {
pkit.put(p, kit);
}
} else {
p.sendMessage(nopermkit);
}
event.setWillClose(true);
}
}, m).setOption(3, new ItemStack(Material.IRON_AXE), "Jumper", getKitDescription("jumper")).setOption(4, new ItemStack(Material.TNT), "Tnt", getKitDescription("tnt")).setOption(5, new ItemStack(Material.ENDER_PEARL), "Warper", getKitDescription("warper"));
iconm.open(Bukkit.getPlayerExact(p));
}
public void getArenaReward(String arena, Player p) {
if (!getConfig().isSet(arena + ".reward.use")) {
getConfig().set(arena + ".reward.use", false);
this.saveConfig();
}
if (!getConfig().getBoolean(arena + ".reward.use")) {
if (economy) {
EconomyResponse r = econ.depositPlayer(p.getName(), getConfig().getDouble("config.money_reward_per_game"));
if (!r.transactionSuccess()) {
getServer().getPlayer(p.getName()).sendMessage(String.format("An error occured: %s", r.errorMessage));
}
} else {
p.getInventory().addItem(new ItemStack(Material.getMaterial(itemid), itemamount));
p.updateInventory();
}
// command reward
if (command_reward) {
String[] t = cmd.replaceAll("<player>", p.getName()).split(";");
// System.out.println(t);
for (String t_ : t) {
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), t_);
}
}
return;
}
if (economy) {
EconomyResponse r = econ.depositPlayer(p.getName(), getConfig().getDouble(arena + ".reward.money_reward_per_game"));
if (!r.transactionSuccess()) {
getServer().getPlayer(p.getName()).sendMessage(String.format("An error occured: %s", r.errorMessage));
}
} else {
p.getInventory().addItem(new ItemStack(Material.getMaterial(getConfig().getInt(arena + ".reward.item_reward_id")), getConfig().getInt(arena + ".reward.item_reward_amount")));
p.updateInventory();
}
// command reward
if (command_reward) {
String cmd = getConfig().getString(arena + ".reward.commandreward");
String[] t = cmd.replaceAll("<player>", p.getName()).split(";");
System.out.println(t);
for (String t_ : t) {
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), t_);
}
}
}
public void setArenaReward(String arena, String component, Integer amount) {
getConfig().set(arena + ".reward." + component, amount);
this.saveConfig();
}
public void setArenaCommandReward(String arena, String cmd) {
getConfig().set(arena + ".reward.commandreward", cmd);
this.saveConfig();
}
public void setArenaDefaultRewards(String arena) {
if (!getConfig().isSet(arena + ".reward.use")) {
getConfig().set(arena + ".reward.use", true);
this.saveConfig();
}
if (getConfig().getBoolean(arena + ".reward.use")) {
return;
}
setArenaReward(arena, "money_reward_per_game", (int) getConfig().getDouble("config.money_reward_per_game"));
setArenaReward(arena, "item_reward_id", itemid);
setArenaReward(arena, "item_reward_amount", itemamount);
setArenaCommandReward(arena, cmd);
getConfig().set(arena + ".reward.use", true);
this.saveConfig();
}
}