package net.shockverse.survivalgames.commands;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import net.shockverse.survivalgames.*;
import net.shockverse.survivalgames.GameManager.SGGameState;
import net.shockverse.survivalgames.api.SGAPI;
import net.shockverse.survivalgames.core.Language.LangKey;
import net.shockverse.survivalgames.core.*;
import net.shockverse.survivalgames.data.ArenaData;
import net.shockverse.survivalgames.extras.*;
import org.bukkit.*;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
* @description Handles a command.
*
* @author Duker02, LegitModern, Tagette
*/
public class SGCmd implements CommandExecutor {
private SurvivalGames plugin;
private Debug debug;
private CommandSender cSender;
public SGCmd(SurvivalGames instance) {
plugin = instance;
debug = plugin.getDebug();
}
// Generic commands for the plugin.
private boolean defaultCommand(String label, String[] args) {
boolean isDefault = false;
if (is(args[0], "debug")) {
if (Constants.debugAllowed) {
isDefault = true;
if (isPlayer()) {
if (Perms.hasAll(getPlayer()) || Perms.has(getPlayer(), "survivalgames.admin.debug", getPlayer().isOp())
|| plugin.getDescription().getAuthors().contains(getName())) {
if (!debug.inDebugMode()) {
Logger.info("Debug mode initiated.");
sendMessage(colorizeText(plugin.name, ChatColor.GREEN) + " has begun debugging.");
}
// Toggles debug mode for player.
if (!debug.isDebugging(getPlayer())) {
debug.startDebugging(getPlayer());
sendMessage("You have entered debug mode for " + colorizeText(plugin.name, ChatColor.GREEN) + ".");
} else if (args.length == 1) {
debug.stopDebugging(getPlayer());
sendMessage("You have exited debug mode for " + colorizeText(plugin.name, ChatColor.GREEN) + ".");
if (!debug.inDebugMode()) {
Logger.info("Debug mode terminated.");
}
}
if (args.length == 2) {
DebugDetailLevel debugLevel = DebugDetailLevel.NORMAL;
try {
debugLevel = DebugDetailLevel.valueOf(args[1].toUpperCase());
} catch (Exception e) {
int index = 1;
try {
index = Integer.parseInt(args[1]);
} catch (Exception fe) {
index = 1;
}
if (index >= 0 && index < DebugDetailLevel.values().length) {
debugLevel = DebugDetailLevel.values()[index];
}
}
if (debugLevel != null) {
debug.setDetailLevel(getPlayer(), debugLevel);
sendMessage("You have set your debug detail to " + debugLevel.toString() + ".");
}
}
}
} else {
if (!debug.inDebugMode()) {
Logger.info("Debug mode initiated.");
debug.startDebugging();
} else if (args.length == 1) {
Logger.info("Debug mode terminated.");
debug.stopDebugging("You have exited debug mode for " + colorizeText(plugin.name, ChatColor.GREEN) + ".");
}
if (args.length == 2) {
DebugDetailLevel debugLevel = DebugDetailLevel.NORMAL;
try {
debugLevel = DebugDetailLevel.valueOf(args[1].toUpperCase());
} catch (Exception e) {
int index = 1;
try {
index = Integer.parseInt(args[1]);
} catch (Exception fe) {
index = 1;
}
if (index >= 0 && index < DebugDetailLevel.values().length) {
debugLevel = DebugDetailLevel.values()[index];
}
}
if (debugLevel != null) {
debug.setDetailLevel(debugLevel);
Logger.info("Debug detail: " + debugLevel.name());
}
}
}
}
} else if (is(args[0], "reload")) {
isDefault = true;
if (isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.reload", getPlayer().isOp())) {
plugin.onDisable();
plugin.onEnable();
sendMessage(colorizeText(plugin.name, ChatColor.GREEN) + " version " + colorizeText(plugin.version, ChatColor.GREEN) + " has been reloaded.");
}
} else {
plugin.onDisable();
plugin.onEnable();
Logger.info(plugin.name + " version " + plugin.version + " has been reloaded.");
}
} else if (is(args[0], "config")) { // /sg config [set|remove|get] [path/file] [shortcut] [newValue]
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.config", getPlayer().isOp())) {
if(args.length > 1) {
String action = args[1];
if(is(action, "set") && args.length == 5) {
isDefault = true;
String pathFile = args[2];
String shortcut = args[3];
String newValue = args[4];
PropertyFile file = PropertyFile.getFile(pathFile);
if(file != null) {
PropertyEntry entry = file.getProperty(shortcut);
if(entry != null) {
entry.setValue(newValue);
Language.setVar("file", pathFile);
Language.setVar("key", shortcut);
Language.setVar("value", newValue);
file.saveProperties();
sendLanguage(LangKey.configSet);
} else {
Language.setVar("file", pathFile);
Language.setVar("key", shortcut);
Language.setVar("value", newValue);
sendLanguage(LangKey.configNotKey);
}
} else {
Language.setVar("file", pathFile);
sendLanguage(LangKey.configNotFile);
}
} else if(is(action, "remove") && args.length == 4) {
isDefault = true;
String pathFile = args[2];
String shortcut = args[3];
PropertyFile file = PropertyFile.getFile(pathFile);
if(file != null) {
PropertyEntry entry = file.getProperty(shortcut);
if(entry != null) {
PropertyList parent = (PropertyList) entry.getParent();
parent.removeProperty(entry.getKey());
Language.setVar("file", pathFile);
Language.setVar("key", shortcut);
file.saveProperties();
sendLanguage(LangKey.configRemoved);
} else {
Language.setVar("file", pathFile);
Language.setVar("key", shortcut);
sendLanguage(LangKey.configNotKey);
}
} else {
Language.setVar("file", pathFile);
sendLanguage(LangKey.configNotFile);
}
} else if(is(action, "get") && args.length >= 3 && args.length <= 4) {
isDefault = true;
String pathFile = args[2];
String shortcut = args.length == 4 ? args[3] : null;
PropertyFile file = PropertyFile.getFile(pathFile);
if(file != null) {
PropertyEntry entry = file.getProperty(shortcut);
if(entry != null) {
String configs = "";
if(entry instanceof PropertyList) {
for(PropertyEntry listEntry : ((PropertyList) entry).getProperties()) {
Language.setVar("key", listEntry.getKey());
Language.setVar("value", (listEntry instanceof PropertyList ? "(List)" : listEntry.getValue()));
Language.setVar("comment", listEntry.getComment());
configs += Language.getLanguage(LangKey.configGet) + "\n";
}
if(configs.length() > 0)
configs.substring(0, configs.length() - 1);
} else {
Language.setVar("key", entry.getKey());
Language.setVar("value", entry.getValue());
Language.setVar("comment", "# " + entry.getComment());
configs += Language.getLanguage(LangKey.configGet);
}
if(Tools.isNullEmptyWhite(configs))
configs = "No config.";
Language.setVar("file", pathFile);
Language.setVar("configs", configs);
sendLanguage(LangKey.configGetList);
} else {
Language.setVar("file", pathFile);
Language.setVar("key", shortcut);
sendLanguage(LangKey.configNotKey);
}
} else {
Language.setVar("file", pathFile);
sendLanguage(LangKey.configNotFile);
}
}
}
}
} else if (is(args[0], "help") || is(args[0], "?")) {
isDefault = true;
int page = 1;
if(args.length > 1 && Tools.isInt(args[1])) {
page = Integer.parseInt(args[1]);
}
for (String help : Help.getReadableHelp(getPlayer(), page).split("\n")) {
sendMessage(help);
}
}
return isDefault;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
// Assigning cSender is required if you plan to use the built
// in commands such as sendMessage(), sendLog() or getName().
cSender = sender;
boolean handled = false;
// This is when the user types only the command label.
// For example '/template'.
if (args == null || args.length == 0) {
handled = true;
// Will send message only if the sender is a player.
sendMessage("You are using " + colorizeText(plugin.name, ChatColor.GREEN)
+ " version " + colorizeText(plugin.version, ChatColor.GREEN) + " by " + plugin.getDescription().getAuthors() + ".");
} // This checks and runs the default commands. If the command is not a
// default command then it continues to your commands.
// There are 3 default commands: debug, reload and help.
else if (!defaultCommand(label, args)) {
GameManager gameMan = plugin.getGameManager();
ArenaManager arenaMan = plugin.getArenaManager();
// Put your commands in here
// help, reload, debug are already used.
if (is(label, "sg") || is(label, "survivalgames")
|| is(label, "hg") || is(label, "hungergames")) {
if (is(args[0], "start")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.start", getPlayer().isOp())) {
if (args.length == 1) {
sendMessage(SGAPI.startGame().message);
} else if (Tools.isInt(args[1])) {
int arenaNumber = Integer.parseInt(args[1]);
if (arenaNumber > 0 && arenaNumber <= arenaMan.arenaOrder.size()) {
sendMessage(SGAPI.startGame(arenaMan.arenaOrder.get(arenaNumber - 1)).message);
} else {
Language.setVar("min", 1 + "");
Language.setVar("max", arenaMan.arenaOrder.size() + "");
sendLanguage(LangKey.outOfRange);
}
} else {
Language.setVar("min", 1 + "");
Language.setVar("max", arenaMan.arenaOrder.size() + "");
sendLanguage(LangKey.outOfRange);
}
} else {
// No permission
}
} else if (is(args[0], "startnow")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.start", getPlayer().isOp())) {
if (args.length == 1) {
sendMessage(SGAPI.startGame(0).message);
} else if (Tools.isInt(args[1])) {
int arenaNumber = Integer.parseInt(args[1]);
if (arenaNumber > 0 && arenaNumber <= arenaMan.arenaOrder.size()) {
sendMessage(SGAPI.startGame(arenaMan.arenaOrder.get(arenaNumber - 1), 0).message);
} else {
Language.setVar("min", 1 + "");
Language.setVar("max", arenaMan.arenaOrder.size() + "");
sendLanguage(LangKey.outOfRange);
}
} else {
Language.setVar("min", 1 + "");
Language.setVar("max", arenaMan.arenaOrder.size() + "");
sendLanguage(LangKey.outOfRange);
}
} else {
// No permission
}
} else if (is(args[0], "stop")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.stop", getPlayer().isOp())) {
if (gameMan.getState() != SGGameState.LOBBY) {
gameMan.cancelTasks();
gameMan.endGame();
sendLanguage(LangKey.adminGameStopped);
} else {
sendLanguage(LangKey.adminGameNotStarted);
}
} else {
// No permission
}
} else if (is(args[0], "deathmatch") || is(args[0], "dm")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.deathmatch", getPlayer().isOp())) {
sendMessage(SGAPI.startDeathmatch().message);
} else {
// No permission
}
} else if (is(args[0], "refillchests") || is(args[0], "refill")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.refill", getPlayer().isOp())) {
arenaMan.refillContainers();
sendLanguage(LangKey.adminRefillChests);
} else {
// No permission
}
} else if (is(args[0], "join") || is(args[0], "add")
|| is(args[0], "revive") || is(args[0], "heal")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.add", getPlayer().isOp())) {
if(args.length == 1) {
if(isPlayer()) {
sendMessage(SGAPI.addPlayerToGame(getPlayer()).message);
} else {
sendLanguage(LangKey.notPlayer);
}
} else {
List<Player> matched = plugin.getServer().matchPlayer(args[1]);
if (matched.size() > 0) {
Player target = matched.get(0);
sendMessage(SGAPI.addPlayerToGame(target).message);
} else {
Language.setVar("notFound", args[1]);
sendLanguage(LangKey.playerNotFound);
}
}
}
} else if (is(args[0], "leave") || is(args[0], "spectate")
|| is(args[0], "spec") || is(args[0], "exit")
|| is(args[0], "remove")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.add", getPlayer().isOp())) {
if(args.length == 1) {
if(isPlayer()) {
sendMessage(SGAPI.removePlayerFromGame(getPlayer()).message);
} else {
sendLanguage(LangKey.notPlayer);
}
} else {
List<Player> matched = plugin.getServer().matchPlayer(args[1]);
if (matched.size() > 0) {
Player target = matched.get(0);
sendMessage(SGAPI.removePlayerFromGame(target).message);
} else {
Language.setVar("notFound", args[1]);
sendLanguage(LangKey.playerNotFound);
}
}
}
}
else if (is(args[0], "inv") || is(args[0], "inventory") || is(args[0], "view")) {
handled = true;
if (isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.basic.inventory", getPlayer().isOp())) {
if (gameMan.getState() != SGGameState.LOBBY) {
List<Player> matched = plugin.getServer().matchPlayer(args[1]);
if (matched.size() > 0) {
Player target = matched.get(0);
if (gameMan.isTribute(target)) {
getPlayer().openInventory(target.getInventory());
Language.setTarget(target);
sendLanguage(LangKey.adminViewInv);
} else if (gameMan.isSpectator(target)) {
Language.setTarget(target);
sendLanguage(LangKey.noSpecInv);
}
} else {
Language.setVar("notFound", args[1]);
sendLanguage(LangKey.playerNotFound);
}
} else {
sendLanguage(LangKey.noLobbyInv);
}
} else {
// No permission
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "enable")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.enable", getPlayer().isOp())) {
String wName = Tools.join(1, args, " ");
ArenaData aData = arenaMan.get(wName);
if(aData != null) {
if(!aData.enabled) {
arenaMan.enableArena(wName, true);
} else {
Language.setVar("arena", wName);
sendLanguage(LangKey.arenaAlreadyEnabled);
}
} else {
Language.setVar("worldname", wName);
sendLanguage(LangKey.arenaNotFound);
}
} else {
sendLanguage(LangKey.noPermission);
}
} else if (is(args[0], "disable")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.disable", getPlayer().isOp())) {
String wName = Tools.join(1, args, " ");
ArenaData aData = arenaMan.get(wName);
if(aData != null) {
if(aData.enabled) {
arenaMan.disableArena(wName, true);
gameMan.updateScoreBoards();
} else {
Language.setVar("arena", wName);
sendLanguage(LangKey.arenaAlreadyDisabled);
}
} else {
Language.setVar("worldname", wName);
sendLanguage(LangKey.arenaNotFound);
}
} else {
sendLanguage(LangKey.noPermission);
}
} else if (is(args[0], "addarena") || is(args[0], "newarena")
|| is(args[0], "createarena")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.addarena", getPlayer().isOp())) {
if(args.length > 1) {
String wName = Tools.join(1, args, " ");
ArenaData aData = arenaMan.get(wName);
if(aData == null) {
Language.setVar("worldname", wName);
sendLanguage(LangKey.arenaAdding);
if(arenaMan.addArena(wName)) {
aData = arenaMan.get(wName);
Language.setVar("worldname", aData.worldName);
Language.setVar("arenaname", aData.name);
Language.setVar("spawns", aData.spawns.size() + "");
Language.setVar("dmspawns", aData.dmSpawns.size() + "");
Language.setVar("containers", aData.containers.size() + "");
Language.setVar("placelist", aData.placeWhitelist.size() + "");
Language.setVar("breaklist", aData.breakWhitelist.size() + "");
sendLanguage(LangKey.arenaAdded);
if(aData.enabled) {
arenaMan.arenaOrder.add(aData.worldName);
if(arenaMan.getNextArena() == null)
arenaMan.setNextArena(aData);
} else
sendLanguage(LangKey.arenaNoSpawns);
} else {
Language.setVar("worldname", wName);
sendLanguage(LangKey.arenaNotAdded);
}
} else {
Language.setVar("worldname", wName);
sendLanguage(LangKey.arenaAlreadyExists);
}
} else {
handled = false;
}
} else {
sendLanguage(LangKey.noPermission);
}
} else if (is(args[0], "removearena") || is(args[0], "delarena")
|| is(args[0], "destroyarena")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.removearena", getPlayer().isOp())) {
if(args.length > 1) {
String wName = Tools.join(1, args, " ");
ArenaData aData = arenaMan.get(wName);
if(aData != null && arenaMan.removeArena(wName)) {
arenaMan.arenaOrder.remove(wName);
if(arenaMan.getNextArena() == null && !arenaMan.arenaOrder.isEmpty())
arenaMan.setNextArena(arenaMan.arenaOrder.get(0));
Language.setVar("worldname", wName);
sendLanguage(LangKey.arenaRemoved);
} else {
Language.setVar("worldname", wName);
sendLanguage(LangKey.arenaNotFound);
}
} else {
handled = false;
}
} else {
sendLanguage(LangKey.noPermission);
}
} else if (is(args[0], "spawns") || is(args[0], "listspawns") || is(args[0], "showspawns")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.setspawn", getPlayer().isOp())
|| Perms.has(getPlayer(), "survivalgames.admin.tpspawn", getPlayer().isOp())) {
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.get(world.getName());
Language.setVar("arenaname", aData.name);
Language.setVar("worldname", aData.worldName);
String spawnsStr = "";
for(int spawnNumber : aData.spawns.keySet()) {
Language.setVar("number", spawnNumber + "");
Language.setVar("location", Tools.toString(aData.spawns.get(spawnNumber), false));
spawnsStr += Language.getLanguage(LangKey.adminSpawnListItem) + "\n";
}
if(Tools.isNullEmptyWhite(spawnsStr)) {
spawnsStr = Language.getLanguage(LangKey.adminNoSpawns);
} else {
spawnsStr = spawnsStr.substring(0, spawnsStr.length() - 1);
}
Language.setVar("spawns", spawnsStr);
sendLanguage(LangKey.adminSpawnList);
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "tpspawn") || is(args[0], "gotospawn") || is(args[0], "tospawn")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.tpspawn", getPlayer().isOp())) {
if(Tools.isInt(args[1])) {
int spawnNumber = Integer.parseInt(args[1]);
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.get(world.getName());
if(arenaMan.isEditing(getName(), aData.worldName)){
if(aData.spawns.containsKey(spawnNumber)) {
Location loc = aData.spawns.get(spawnNumber);
getPlayer().teleport(loc);
Language.setVar("number", spawnNumber + "");
Language.setVar("location", loc.toString());
sendLanguage(LangKey.adminTpSpawn);
} else {
Language.setVar("number", spawnNumber + "");
sendLanguage(LangKey.adminNotSpawn);
}
} else {
Language.setVar("worldname", world.getName());
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "setspawn") || is(args[0], "addspawn")
|| is(args[0], "newspawn")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.setspawn", getPlayer().isOp())) {
if(Tools.isInt(args[1]) || is(args[1], "next")) {
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.get(world.getName());
int spawnNumber = 0;
if(is(args[1], "next")) {
for(int spawnKey : aData.spawns.keySet()) {
if(spawnKey > spawnNumber)
spawnNumber = spawnKey;
}
spawnNumber++;
} else {
spawnNumber = Integer.parseInt(args[1]);
}
if(arenaMan.isEditor(getName())){
Location pLoc = getPlayer().getLocation();
arenaMan.setSpawn(aData.worldName, spawnNumber, Tools.round(pLoc, 2));
Language.setVar("number", spawnNumber + "");
Language.setVar("location", Tools.toString(Tools.round(pLoc, 2), false));
sendLanguage(LangKey.adminSpawnSet);
} else {
Language.setVar("worldname", world.getName());
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "removespawn") || is(args[0], "delspawn")
|| is(args[0], "deletespawn") || is(args[0], "clearspawn")
|| is(args[0], "rmspawn")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.setspawn", getPlayer().isOp())) {
if(Tools.isInt(args[1])) {
int spawnNumber = Integer.parseInt(args[1]);
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.get(world.getName());
if(arenaMan.isEditor(getName())){
arenaMan.removeSpawn(aData.worldName, spawnNumber);
Language.setVar("number", spawnNumber + "");
sendLanguage(LangKey.adminSpawnRemove);
} else {
Language.setVar("worldname", world.getName());
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "setspecspawn") || is(args[0], "addspecspawn")
|| is(args[0], "newspecspawn")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.setspawn", getPlayer().isOp())) {
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.get(world.getName());
if(arenaMan.isEditor(getName())){
Location pLoc = getPlayer().getLocation();
arenaMan.setSpectatorSpawn(aData.worldName, Tools.round(pLoc, 2));
Language.setVar("location", Tools.toString(Tools.round(pLoc, 2), false));
sendLanguage(LangKey.adminSpecSpawnSet);
} else {
Language.setVar("worldname", world.getName());
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "dmspawns") || is(args[0], "listdmspawns") || is(args[0], "showdmspawns")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.setspawn", getPlayer().isOp())
|| Perms.has(getPlayer(), "survivalgames.admin.tpspawn", getPlayer().isOp())) {
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.get(world.getName());
Language.setVar("arenaname", aData.name);
Language.setVar("worldname", aData.worldName);
String spawnsStr = "";
for(int spawnNumber : aData.dmSpawns.keySet()) {
Language.setVar("number", spawnNumber + "");
Language.setVar("location", Tools.toString(aData.dmSpawns.get(spawnNumber), false));
spawnsStr += Language.getLanguage(LangKey.adminDMSpawnListItem) + "\n";
}
if(Tools.isNullEmptyWhite(spawnsStr)) {
spawnsStr = Language.getLanguage(LangKey.adminNoDMSpawns);
} else {
spawnsStr = spawnsStr.substring(0, spawnsStr.length() - 1);
}
Language.setVar("spawns", spawnsStr);
sendLanguage(LangKey.adminDMSpawnList);
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "tpdmspawn") || is(args[0], "gotodmspawn") || is(args[0], "todmspawn")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.tpspawn", getPlayer().isOp())) {
if(Tools.isInt(args[1])) {
int spawnNumber = Integer.parseInt(args[1]);
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.get(world.getName());
if(arenaMan.isEditing(getName(), aData.worldName)){
if(aData.dmSpawns.containsKey(spawnNumber)) {
Location loc = aData.dmSpawns.get(spawnNumber);
getPlayer().teleport(loc);
Language.setVar("number", spawnNumber + "");
Language.setVar("location", loc.toString());
sendLanguage(LangKey.adminTpDMSpawn);
} else {
Language.setVar("number", spawnNumber + "");
sendLanguage(LangKey.adminNotDMSpawn);
}
} else {
Language.setVar("worldname", world.getName());
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "setdmspawn") || is(args[0], "adddmspawn")
|| is(args[0], "newdmspawn")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.setspawn", getPlayer().isOp())) {
if(Tools.isInt(args[1]) || is(args[1], "next")) {
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.get(world.getName());
int spawnNumber = 0;
if(is(args[1], "next")) {
for(int spawnKey : aData.dmSpawns.keySet()) {
if(spawnKey > spawnNumber)
spawnNumber = spawnKey;
}
spawnNumber++;
} else {
spawnNumber = Integer.parseInt(args[1]);
}
if(arenaMan.isEditor(getName())){
Location pLoc = getPlayer().getLocation();
arenaMan.setDMSpawn(aData.worldName, spawnNumber, Tools.round(pLoc, 2));
Language.setVar("number", spawnNumber + "");
Language.setVar("location", Tools.toString(Tools.round(pLoc, 2), false));
sendLanguage(LangKey.adminDMSpawnSet);
} else {
Language.setVar("worldname", world.getName());
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "removedmspawn") || is(args[0], "deldmspawn")
|| is(args[0], "deletedmspawn") || is(args[0], "cleardmspawn")
|| is(args[0], "rmdmspawn")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.setspawn", getPlayer().isOp())) {
if(Tools.isInt(args[1])) {
int spawnNumber = Integer.parseInt(args[1]);
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.get(world.getName());
if(arenaMan.isEditor(getName())){
arenaMan.removeDMSpawn(aData.worldName, spawnNumber);
Language.setVar("number", spawnNumber + "");
sendLanguage(LangKey.adminDMSpawnRemove);
} else {
Language.setVar("worldname", world.getName());
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "setdmspecspawn") || is(args[0], "adddmspecspawn")
|| is(args[0], "newdmspecspawn")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.setspawn", getPlayer().isOp())) {
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.get(world.getName());
if(arenaMan.isEditor(getName())){
Location pLoc = getPlayer().getLocation();
arenaMan.setDMSpectatorSpawn(aData.worldName, Tools.round(pLoc, 2));
Language.setVar("location", Tools.toString(Tools.round(pLoc, 2), false));
sendLanguage(LangKey.adminDMSpecSpawnSet);
} else {
Language.setVar("worldname", world.getName());
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "setdmcenter") || is(args[0], "adddmcenter")
|| is(args[0], "newdmcenter")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.setspawn", getPlayer().isOp())) {
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.get(world.getName());
if(arenaMan.isEditor(getName())){
Location pLoc = getPlayer().getLocation();
arenaMan.setDMCenter(aData.worldName, Tools.round(pLoc, 2));
Language.setVar("location", Tools.toString(Tools.round(pLoc, 2), false));
sendLanguage(LangKey.adminDMCenterSet);
} else {
Language.setVar("worldname", world.getName());
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "setlobbyspawn")) {
handled = true;
if(isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.setspawn", getPlayer().isOp())) {
World world = getPlayer().getWorld();
ArenaData aData = arenaMan.getLobby();
if(arenaMan.isEditing(getName(), aData.worldName)) {
Location pLoc = getPlayer().getLocation();
arenaMan.setLobbySpawn(Tools.round(pLoc, 2));
Language.setVar("location", Tools.toString(Tools.round(pLoc, 2), false));
sendLanguage(LangKey.adminLobbySpawnSet);
} else {
Language.setVar("worldname", world.getName());
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "edit") || is(args[0], "modify")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.admin.edit", getPlayer().isOp())) {
if(args.length == 1) {
String arenas = Language.getLanguage(LangKey.noLoadedArenas);
if(arenaMan.size() > 0) {
arenas = "";
for(String arena : arenaMan.keySet()) {
ArenaData aData = arenaMan.get(arena);
Language.setVar("arenaname", aData.name);
Language.setVar("worldname", arena);
Language.setVar("enabled", aData.enabled ? "enabled" : "disabled");
arenas += Language.getLanguage(LangKey.adminEditListItem) + "\n";
}
if(arenas.length() > 0)
arenas = arenas.substring(0, arenas.length() - 1);
}
Language.setVar("arenas", arenas);
sendLanguage(LangKey.adminEditList);
} else {
if(isPlayer()) {
String wName = Tools.join(1, args, " ");
ArenaData aData = arenaMan.get(wName);
if(aData != null) {
if(!arenaMan.isEditor(getName())) {
arenaMan.startEditting(getName(), aData.worldName);
Language.setVar("worldname", aData.worldName);
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminEditBegun);
arenaMan.disableArena(wName, true);
World world = Bukkit.getWorld(wName);
world.setTime(0);
world.setStorm(false);
world.setThundering(false);
if(getPlayer().getWorld() != world)
getPlayer().teleport(aData.spectatorSpawn);
getPlayer().setGameMode(GameMode.CREATIVE);
} else {
Language.setVar("worldname", aData.worldName);
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminAlreadyEditing);
}
} else {
Language.setVar("worldname", wName);
sendLanguage(LangKey.arenaNotFound);
}
} else {
sendLanguage(LangKey.notPlayer);
}
}
} else {
sendLanguage(LangKey.noPermission);
}
} else if (is(args[0], "save") || is(args[0], "keep")
|| is(args[0], "done") || is(args[0], "finish")) {
handled = true;
if (isPlayer()) {
if(Perms.has(getPlayer(), "survivalgames.admin.edit", getPlayer().isOp())) {
if(args.length == 1) {
ArenaData aData = arenaMan.get(getPlayer().getWorld().getName());
// Check if the player is editting this map.
if(arenaMan.isEditing(getName(), aData.worldName)) {
Language.setVar("worldname", aData.worldName);
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminSaving);
// Stop editting for this player.
arenaMan.finishEditting(getName());
} else {
Language.setVar("worldname", aData.worldName);
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "cancel") || is(args[0], "discard")) {
handled = true;
if (isPlayer()) {
if(Perms.has(getPlayer(), "survivalgames.admin.edit", getPlayer().isOp())) {
if(args.length == 1) {
ArenaData aData = arenaMan.get(getPlayer().getWorld().getName());
// Check if the player is editting this map.
if(arenaMan.isEditing(getName(), aData.worldName)) {
Language.setVar("worldname", aData.worldName);
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminCancelling);
// Stop editting for this player.
arenaMan.finishEditting(getName());
} else {
Language.setVar("worldname", aData.worldName);
Language.setVar("arenaname", aData.name);
sendLanguage(LangKey.adminNotEditing);
}
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "world") || is(args[0], "worlds")
|| is(args[0], "tpworld") || is(args[0], "changeworld")
|| is(args[0], "switchworld")) {
handled = true;
if (isPlayer()) {
if (Perms.has(getPlayer(), "survivalgames.admin.tpworld", getPlayer().isOp())) {
if(args.length == 1) {
String arenas = Language.getLanguage(LangKey.noLoadedArenas);
if(arenaMan.size() > 0) {
arenas = "";
for(String arena : arenaMan.keySet()) {
ArenaData aData = arenaMan.get(arena);
Language.setVar("arenaname", aData.name);
Language.setVar("worldname", arena);
Language.setVar("enabled", aData.enabled ? "enabled" : "disabled");
arenas += Language.getLanguage(LangKey.adminEditListItem) + "\n";
}
if(arenas.length() > 0)
arenas = arenas.substring(0, arenas.length() - 1);
}
Language.setVar("arenas", arenas);
sendLanguage(LangKey.adminEditList);
} else if(args.length == 2) {
if(isPlayer()) {
String wName = Tools.join(1, args, " ");
ArenaData aData = arenaMan.get(wName);
if(aData != null) {
if(aData.spectatorSpawn != null)
getPlayer().teleport(aData.spectatorSpawn);
else
getPlayer().teleport(plugin.getServer().getWorld(wName).getSpawnLocation());
} else {
Language.setVar("worldname", wName);
sendLanguage(LangKey.arenaNotFound);
}
} else {
sendLanguage(LangKey.notPlayer);
}
}
} else {
sendLanguage(LangKey.noPermission);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else if (is(args[0], "time") || is(args[0], "timeleft")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.basic.timeleft", true)) {
if (gameMan.getState() == SGGameState.LOBBY) {
Language.setVar("time", ((int)((gameMan.nextGame - System.currentTimeMillis()) / 1000)) + "");
sendLanguage(LangKey.timeLeftLobby);
} else if (gameMan.getState() == SGGameState.STARTING) {
Language.setVar("time", ((int)((gameMan.nextGameStart - System.currentTimeMillis()) / 1000)) + "");
sendLanguage(LangKey.timeLeftStarting);
} else if (gameMan.getState() == SGGameState.GAME) {
Language.setVar("time", ((int)((gameMan.nextDeathmatch - System.currentTimeMillis()) / 1000)) + "");
sendLanguage(LangKey.timeLeftGame);
} else if (gameMan.getState() == SGGameState.PRE_DEATHMATCH) {
Language.setVar("time", ((int)((gameMan.nextDeathmatch - System.currentTimeMillis()) / 1000)) + "");
sendLanguage(LangKey.timeLeftPreDM);
} else if (gameMan.getState() == SGGameState.DEATHMATCH) {
Language.setVar("time", ((int)((gameMan.nextEndGame - System.currentTimeMillis()) / 1000)) + "");
sendLanguage(LangKey.timeLeftDm);
}
} else {
sendLanguage(LangKey.noPermission);
}
} else if (is(args[0], "list")) {
handled = true;
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.basic.list", true)) {
String tributes = "";
for (String tributeName : gameMan.getTributeNames()) {
Player tribute = plugin.getServer().getPlayer(tributeName);
if(tribute != null)
tributeName = tribute.getDisplayName();
tributes += tributeName + ChatColor.WHITE + ", ";
}
if(!Tools.isNullEmptyWhite(tributes))
tributes = tributes.substring(0, tributes.length() - 2);
String specs = "";
for (String specName : gameMan.getSpectatorNames()) {
Player spec = plugin.getServer().getPlayer(specName);
if(spec != null)
specName = spec.getDisplayName();
specs += specName + ChatColor.WHITE + ", ";
}
if(!Tools.isNullEmptyWhite(specs))
specs = specs.substring(0, specs.length() - 2);
if (gameMan.getState() != SGGameState.LOBBY) {
Language.setVar("tributes", tributes);
Language.setVar("amount", gameMan.getTributeNames().size() + "");
sendLanguage(LangKey.listTributes);
Language.setVar("spectators", specs);
Language.setVar("amount", gameMan.getSpectatorNames().size() + "");
sendLanguage(LangKey.listSpectators);
} else {
Language.setVar("waiting", tributes);
Language.setVar("amount", gameMan.getTributeNames().size() + "");
sendLanguage(LangKey.listWaiting);
}
} else {
sendLanguage(LangKey.noPermission);
}
} else if (is(args[0], "stats")) {
handled = true;
if (args.length == 1 && isPlayer()) {
PlayerStats pStats = plugin.getStatManager().getPlayer(getName());
Language.setTarget(getPlayer());
Language.setVar("kills", pStats.getKills() + "");
Language.setVar("killstreak", pStats.getKillStreak() + "");
Language.setVar("bestkillstreak", pStats.getBestKillStreak() + "");
Language.setVar("deaths", pStats.getDeaths() + "");
Language.setVar("deathstreak", pStats.getDeathStreak() + "");
Language.setVar("worstdeathstreak", pStats.getWorstDeathStreak() + "");
Language.setVar("wins", pStats.getWins() + "");
Language.setVar("winstreak", pStats.getWinStreak() + "");
Language.setVar("bestwinstreak", pStats.getBestWinStreak() + "");
Language.setVar("ties", pStats.getTies() + "");
Language.setVar("losses", pStats.getLosses() + "");
Language.setVar("losestreak", pStats.getLoseStreak() + "");
Language.setVar("worstlosestreak", pStats.getWorstLoseStreak() + "");
Language.setVar("gamesplayed", pStats.getGamesPlayed() + "");
Language.setVar("points", pStats.getPoints() + "");
Language.setVar("secondsplayed", ((int)(pStats.getTimePlayed() / 1000)) + "");
Language.setVar("timeplayed", Tools.getTime(pStats.getTimePlayed()));
Language.setVar("fulltimeplayed", Tools.getFullTime(pStats.getTimePlayed()));
Language.setVar("secslastplayed", "Now");
Language.setVar("lastplayed", "Now");
Language.setVar("fulllastplayed", "Now");
Language.setVar("animalskilled", pStats.getAnimalsKilled() + "");
Language.setVar("mobskilled", pStats.getMobsKilled() + "");
Language.setVar("looted", pStats.getContainersLooted() + "");
sendLanguage(LangKey.playerStats);
} else {
String tName = args[1];
if(plugin.getStatManager().getPlayer(tName) != null) {
PlayerStats pStats = plugin.getStatManager().getPlayer(tName);
Player target = plugin.getServer().getPlayer(tName);
if(target != null)
Language.setTarget(target);
else {
Language.setVar("tdisplay", tName);
Language.setVar("target", tName);
}
Language.setVar("kills", pStats.getKills() + "");
Language.setVar("killstreak", pStats.getKillStreak() + "");
Language.setVar("bestkillstreak", pStats.getKillStreak() + "");
Language.setVar("deaths", pStats.getDeaths() + "");
Language.setVar("deathstreak", pStats.getDeathStreak() + "");
Language.setVar("worstdeathstreak", pStats.getWorstDeathStreak() + "");
Language.setVar("wins", pStats.getWins() + "");
Language.setVar("winstreak", pStats.getWinStreak() + "");
Language.setVar("bestwinstreak", pStats.getBestWinStreak() + "");
Language.setVar("ties", pStats.getTies() + "");
Language.setVar("losses", pStats.getLosses() + "");
Language.setVar("losestreak", pStats.getLoseStreak() + "");
Language.setVar("worstlosestreak", pStats.getWorstLoseStreak() + "");
Language.setVar("gamesplayed", pStats.getGamesPlayed() + "");
Language.setVar("points", pStats.getPoints() + "");
Language.setVar("secondsplayed", ((int)(pStats.getTimePlayed() / 1000)) + "");
Language.setVar("timeplayed", Tools.getTime(pStats.getTimePlayed()));
Language.setVar("fulltimeplayed", Tools.getFullTime(pStats.getTimePlayed()));
Language.setVar("secslastplayed", (target == null ? ((int) ((System.currentTimeMillis() - pStats.getLastPlayed()) / 1000)) + "" : "Now"));
Language.setVar("lastplayed", (target == null ? Tools.getTime(System.currentTimeMillis() - pStats.getLastPlayed()) : "Now"));
Language.setVar("fulllastplayed", (target == null ? Tools.getFullTime(System.currentTimeMillis() - pStats.getLastPlayed()) : "Now"));
Language.setVar("animalskilled", pStats.getAnimalsKilled() + "");
Language.setVar("mobskilled", pStats.getMobsKilled() + "");
Language.setVar("looted", pStats.getContainersLooted() + "");
sendLanguage(LangKey.playerStats);
} else {
Language.setVar("notfound", tName);
sendLanguage(LangKey.playerNotFound);
}
}
} else if (is(args[0], "vote")) {
handled = true;
VoteManager voteMan = arenaMan.getVoteManager();
if (!isPlayer() || Perms.has(getPlayer(), "survivalgames.basic.vote", true)) {
// In the lobby?
if (gameMan.getState() == SGGameState.LOBBY) {
if(arenaMan.arenaOrder.size() > 0) {
if (args.length == 1) {
String arenaVotes = Language.getLanguage(LangKey.noLoadedArenas);
arenaVotes = "";
for (int i = 0; i < arenaMan.arenaOrder.size(); i++) {
int votes = voteMan.get(arenaMan.arenaOrder.get(i)) != null
? voteMan.totalVotes(arenaMan.arenaOrder.get(i)) : 0;
Language.setVar("arenanum", (i + 1) + "");
Language.setVar("arenaname", arenaMan.get(arenaMan.arenaOrder.get(i)).name);
Language.setVar("arenavotes", votes + "");
arenaVotes += Language.getLanguage(LangKey.arenaVotes) + "\n";
}
if (arenaVotes.length() > 0)
arenaVotes = arenaVotes.substring(0, arenaVotes.length() - 1);
Language.setVar("arenavotes", arenaVotes);
Language.setVar("nextarena", arenaMan.getNextArena().name);
sendLanguage(LangKey.voteInfo);
} else if (isPlayer()) {
if(!gameMan.isAdmin(getPlayer())) {
boolean isInt = true;
int arena = 0;
// Parse the string to an integer.
try {
arena = Integer.parseInt(args[1]);
} catch (NumberFormatException nfe) {
isInt = false; // Could not parse. Was not
// integer.
}
// Check whether a correct arena number was entered.
if (isInt && arena > 0
&& arena <= arenaMan.arenaOrder.size()) {
// Only allow arenas that were not just played.
if (arenaMan.getLastArena() == null
|| !arenaMan.arenaOrder.get(arena - 1).equals(arenaMan.getLastArena().worldName)
|| arenaMan.arenaOrder.size() == 1) {
// Check if the player has already voted for this arena.
if (!voteMan.hasVotedFor(arenaMan.arenaOrder.get(arena - 1), getName())) {
// Remove the players vote from other arenas.
// If not then add the player to the arena votes.
int worth = 1;
for(int i = 10; i >= 1; i--) {
if(Perms.has(getPlayer(), "survivalgames.basic.vote." + i, false)) {
worth = i;
break;
}
}
voteMan.vote(arenaMan.arenaOrder.get(arena - 1), getName(), worth);
// Switch the world to the most voted one.
arenaMan.setNextArena(arenaMan.get(voteMan.getMostVoted()).worldName);
// Broadcast message to all players in the lobby world.
Language.setTarget(getPlayer());
Language.setVar("arenanum", arena + "");
Language.setVar("arena", arenaMan.get(arenaMan.arenaOrder.get(arena - 1)).name);
Language.broadcastAndBlockLanguage(LangKey.votedForArena, 10 * 1000, true);
} else {
Language.setVar("arena", arenaMan.get(arenaMan.arenaOrder.get(arena - 1)).name);
sendLanguage(LangKey.alreadyVoted);
}
} else {
Language.setVar("arena", arenaMan.get(arenaMan.arenaOrder.get(arena - 1)).name);
sendLanguage(LangKey.arenaJustPlayed);
}
} else {
Language.setVar("min", 1 + "");
Language.setVar("max", arenaMan.arenaOrder.size() + "");
sendLanguage(LangKey.outOfRange);
}
} else {
sendLanguage(LangKey.adminJoinFirst);
}
} else {
sendLanguage(LangKey.notPlayer);
}
} else {
sendLanguage(LangKey.noLoadedArenas);
}
} else {
sendLanguage(LangKey.voteInLobby);
}
} else {
sendLanguage(LangKey.noPermission);
}
} else if (is(args[0], "top") || is(args[0], "leaderboard")
|| is(args[0], "leaderboards")) {
handled = true;
if(!isPlayer() || Perms.has(getPlayer(), "survivalgames.basic.top", getPlayer().isOp())) {
int page = 1;
if(args.length == 2 && Tools.isInt(args[1])) {
page = Integer.parseInt(args[1]);
}
String query = "SELECT player, points, wins, kills FROM players ORDER BY points DESC, wins DESC, kills DESC";
DataManager dbm = DataAccess.getManager();
String topRanks = "No ranks yet.";
int cPage = 0;
int count = 0;
try {
ResultSet rs = dbm.query(query);
while(rs.next()) {
if(count % 5 == 0){
cPage++;
if(cPage > page) {
cPage = page;
break;
} else
topRanks = "";
}
String name = rs.getString("player");
int points = rs.getInt("points");
int wins = rs.getInt("wins");
int kills = rs.getInt("kills");
Language.setVar("rank", (count + 1) + "");
Language.setVar("target", name);
Language.setVar("points", points + "");
Language.setVar("wins", wins + "");
Language.setVar("kills", kills + "");
topRanks += Language.getLanguage(LangKey.topItem) + "\n";
count++;
}
} catch(SQLException se) {
Logger.error("Top rank: " + se.getMessage());
se.printStackTrace();
}
if(count > 0)
topRanks = topRanks.substring(0, topRanks.length() - 1);
Language.setVar("page", cPage + "");
Language.setVar("topranks", topRanks);
sendLanguage(LangKey.topList);
} else {
sendLanguage(LangKey.noPermission);
}
} else if (is(args[0], "bounty") || is(args[0], "setbounty")
|| is(args[0], "givebounty") || is(args[0], "addbounty")) {
handled = true;
if(!isPlayer() || Perms.has(getPlayer(), "survivalgames.basic.bounty", getPlayer().isOp())) {
if(args.length == 3) {
String targetName = args[1];
Player target = plugin.getServer().getPlayer(targetName);
if(target != null) {
if(Tools.isInt(args[2])) {
int bounty = Integer.parseInt(args[2]);
StatManager statMan = plugin.getStatManager();
PlayerStats pStats = statMan.getPlayer(getName());
PlayerStats tStats = statMan.getPlayer(target.getName());
if(!isPlayer() || gameMan.isTribute(getPlayer()) || gameMan.isSpectator(getPlayer())) {
if(gameMan.isTribute(target)) {
if(bounty > 0) {
if(bounty <= pStats.getPoints()) {
statMan.setBounty(target.getName(), statMan.getBounty(target.getName()) + bounty);
pStats.setPoints(pStats.getPoints() - bounty, true);
Language.setVar("amount", bounty + "");
Language.setVar("bounty", statMan.getBounty(target.getName()) + "");
Language.setTarget(target);
Language.broadcastLanguage(LangKey.bountySet);
} else {
// Cannot afford.
Language.setVar("points", pStats.getPoints() + "");
Language.setVar("bounty", bounty + "");
Language.setTarget(target);
sendLanguage(LangKey.bountyCantAfford);
}
} else {
Language.setVar("min", "0");
Language.setVar("max", pStats.getPoints() + "");
sendLanguage(LangKey.outOfRange);
}
} else {
Language.setTarget(target);
sendLanguage(LangKey.notTribute);
}
} else {
sendLanguage(LangKey.youNotIngame);
}
} else {
Language.setVar("number", args[2]);
sendLanguage(LangKey.notNumber);
}
} else {
sendLanguage(LangKey.playerNotFound);
}
}
} else {
sendLanguage(LangKey.noPermission);
}
}
if (!handled) {
handled = true;
if (isPlayer()) {
Language.setVar("command", "/" + label + " " + Tools.join(args, " "));
} else {
Language.setVar("command", label + " " + Tools.join(args, " "));
}
if (isPlayer()) {
debug.everything(getName() + " tried entering an incorrect command: /" + label + " " + Tools.join(args, " "));
}
sendLanguage(LangKey.unknownCommand);
}
}
} else {
handled = true;
}
return handled;
}
// Simplifies and shortens the if statements for commands.
private boolean is(String entered, String label) {
return entered.equalsIgnoreCase(label);
}
// Checks if the current user is actually a player.
private boolean isPlayer() {
return cSender != null && cSender instanceof Player;
}
// Checks if the current user is actually a player and sends a message to that player.
private boolean sendMessage(String message) {
boolean sent = false;
if (isPlayer() && sendMessage(getPlayer(), message)) {
sent = true;
} else {
if (message != null && !message.equals("")) {
Logger.info(message);
sent = true;
}
}
return sent;
}
// Sends a message to a player.
private boolean sendMessage(Player player, String message) {
boolean sent = false;
if (message != null && !message.equals("")) {
player.sendMessage(message);
sent = true;
}
return sent;
}
// Checks if the current user is actually a player and sends a language to that player.
private boolean sendLanguage(LangKey key) {
boolean sent = false;
if (isPlayer() && sendLanguage(getPlayer(), key)) {
sent = true;
} else {
String message = Language.getLanguage(key);
if (message != null && !message.equals("")) {
if(message.contains("\n")) {
for(String split : message.split("\\n")) {
Logger.info(split);
}
} else {
Logger.info(message);
}
sent = true;
}
}
return sent;
}
// Sends a language to a player.
private boolean sendLanguage(Player player, LangKey key) {
boolean sent = false;
Language.setUser(player);
String message = Language.getLanguage(key, false);
if (message != null && !message.equals("")) {
Language.sendLanguage(player, key);
sent = true;
}
return sent;
}
// Checks if the current user is actually a player and returns the name of that player.
private String getName() {
String name = "Console";
if (isPlayer()) {
name = getPlayer().getName();
}
return name;
}
// Checks if the current user is actually a player and returns the name of that player.
private String getDisplayName() {
String name = "Console";
if (isPlayer()) {
name = getPlayer().getDisplayName();
}
return name;
}
// Gets the player if the current user is actually a player.
private Player getPlayer() {
Player player = null;
if (isPlayer()) {
player = (Player) cSender;
} else {
debug.normal("Tried to get player from console.");
}
return player;
}
private String colorizeText(String text, ChatColor color) {
return color + text + ChatColor.WHITE;
}
}