package me.maker56.survivalgames.commands.arguments;
import java.util.List;
import me.maker56.survivalgames.SurvivalGames;
import me.maker56.survivalgames.arena.Arena;
import me.maker56.survivalgames.chat.Helper;
import me.maker56.survivalgames.commands.messages.MessageHandler;
import me.maker56.survivalgames.commands.permission.Permission;
import me.maker56.survivalgames.commands.permission.PermissionHandler;
import me.maker56.survivalgames.game.Game;
import me.maker56.survivalgames.game.GameState;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class LobbyArgument {
private CommandSender sender;
private String[] args;
public LobbyArgument(CommandSender sender, String[] args) {
this.sender = sender;
this.args = args;
}
public boolean execute() {
if(!(sender instanceof Player)) {
sender.sendMessage("�cThe lobby argument can only execute as a Player!");
return true;
}
Player p = (Player)sender;
if(!PermissionHandler.hasPermission(p, Permission.GAME) && !PermissionHandler.hasPermission(p, Permission.LOBBY)) {
p.sendMessage(MessageHandler.getMessage("no-permission"));
return true;
}
if(args.length == 1) {
Helper.showLobbyHelpsite(p);
} else {
if(args[1].equalsIgnoreCase("delete")) {
if(args.length == 2) {
p.sendMessage(MessageHandler.getMessage("game-must-enter").replace("%0%", "/sg lobby create <NAME>"));
return true;
}
if(SurvivalGames.gameManager.getGame(args[2]) != null) {
p.sendMessage(MessageHandler.getMessage("prefix") + "�cYou must unload the lobby first! /sg lobby unload " + args[2]);
return true;
}
if(!SurvivalGames.database.contains("Games." + args[2])) {
p.sendMessage(MessageHandler.getMessage("prefix") + "�cLobby " + args[2] + " does not exist!");
return true;
}
SurvivalGames.database.set("Games." + args[2], null);
SurvivalGames.saveDataBase();
p.sendMessage(MessageHandler.getMessage("prefix") + "You've removed lobby " + args[2] + " successfully!");
return true;
} else if(args[1].equalsIgnoreCase("create")) {
if(args.length == 2) {
p.sendMessage(MessageHandler.getMessage("game-must-enter").replace("%0%", "/sg lobby create <NAME>"));
return true;
}
SurvivalGames.gameManager.createGame(p, args[2]);
return true;
} else if(args[1].equalsIgnoreCase("setspawn")) {
if(args.length == 2) {
p.sendMessage(MessageHandler.getMessage("game-must-enter").replace("%0%", "/sg lobby setspawn <NAME>"));
return true;
}
SurvivalGames.gameManager.setSpawn(p, args[2]);
return true;
} else if(args[1].equalsIgnoreCase("unload")) {
if(args.length == 2) {
p.sendMessage(MessageHandler.getMessage("game-must-enter").replace("%0%", "/sg lobby unload <NAME>"));
return true;
}
Game game = SurvivalGames.gameManager.getGame(args[2]);
if(game == null) {
p.sendMessage(MessageHandler.getMessage("game-not-loaded").replace("%0%", args[2]));
return true;
}
game.sendMessage(MessageHandler.getMessage("prefix") + "�c�lYour lobby was stopped by an admin!");
if(game.getState() == GameState.INGAME || game.getState() == GameState.DEATHMATCH) {
p.sendMessage(MessageHandler.getMessage("prefix") + "�cIt my can be that the blocks of arena " + game.getCurrentArena().getName() + " aren't reseted yet. It will reset while loading lobby.");
}
SurvivalGames.gameManager.unload(game);
p.sendMessage(MessageHandler.getMessage("game-success-unloaded").replace("%0%", args[2]));
SurvivalGames.signManager.updateSigns();
return true;
} else if(args[1].equalsIgnoreCase("load")) {
if(args.length == 2) {
p.sendMessage(MessageHandler.getMessage("game-must-enter").replace("%0%", "/sg lobby unload <NAME>"));
return true;
}
Game game = SurvivalGames.gameManager.getGame(args[2]);
if(game != null) {
p.sendMessage(MessageHandler.getMessage("game-already-loaded").replace("%0%", args[2]));
return true;
}
boolean success = SurvivalGames.gameManager.load(args[2]);
if(!success) {
p.sendMessage(MessageHandler.getMessage("game-load-error").replace("%0%", args[2]).replace("%1%", "See console for informations! It may can be that a few arenas have to be reset. When this happens, the game will automatically load after all arenas were reset."));
} else {
p.sendMessage(MessageHandler.getMessage("game-success-loaded").replace("%0%", args[2]));
SurvivalGames.signManager.updateSigns();
}
return true;
} else if(args[1].equalsIgnoreCase("reload")) {
if(args.length == 2) {
p.sendMessage(MessageHandler.getMessage("game-must-enter").replace("%0%", "/sg lobby unload <NAME>"));
return true;
}
p.performCommand("sg lobby unload " + args[2]);
p.performCommand("sg lobby load " + args[2]);
return true;
} else if(args[1].equalsIgnoreCase("list")) {
if(args.length == 2) {
p.sendMessage(MessageHandler.getMessage("game-must-enter").replace("%0%", "/sg lobby list <NAME>"));
return true;
}
Game game = SurvivalGames.gameManager.getGame(args[2]);
if(game == null) {
p.sendMessage(MessageHandler.getMessage("game-not-loaded").replace("%0%", args[2]));
return true;
}
List<Arena> arenas = game.getArenas();
p.sendMessage(MessageHandler.getMessage("prefix") + "Arenas in lobby " + game.getName() + "�8: �7(�b" + arenas.size() + "�7)");
for(Arena a : arenas) {
p.sendMessage("�7- �6" + a.getName());
}
return true;
}
p.sendMessage(MessageHandler.getMessage("prefix") + "�cCommand not found! Type /sg lobby for help!");
return true;
}
return true;
}
}