|
@@ -19,7 +19,9 @@ import org.bukkit.block.Block;
|
|
|
import org.bukkit.block.Chest;
|
|
|
import org.bukkit.block.Sign;
|
|
|
import org.bukkit.command.Command;
|
|
|
+import org.bukkit.command.CommandExecutor;
|
|
|
import org.bukkit.command.CommandSender;
|
|
|
+import org.bukkit.command.TabCompleter;
|
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
|
|
import org.bukkit.configuration.serialization.ConfigurationSerialization;
|
|
@@ -41,7 +43,6 @@ public class Main extends JavaPlugin{
|
|
|
|
|
|
public List<AbbaGame> ongoingGames = new ArrayList<AbbaGame>();
|
|
|
|
|
|
- public final String[] abbaSubCommands = new String[]{"calc", "close", "config", "create", "info", "join", "leave", "list", "open", "reload", "remove", "start"};
|
|
|
|
|
|
public static Main plugin;
|
|
|
|
|
@@ -53,6 +54,14 @@ public class Main extends JavaPlugin{
|
|
|
|
|
|
@Override
|
|
|
public void onEnable(){
|
|
|
+ AbbaCommand abbaCmd = new AbbaCommand();
|
|
|
+ this.getCommand("abba").setExecutor((CommandExecutor) abbaCmd);
|
|
|
+ this.getCommand("abba").setTabCompleter((TabCompleter) abbaCmd);
|
|
|
+ AbbaAdminCommand abbaAdminCmd = new AbbaAdminCommand(this);
|
|
|
+ this.getCommand("abbaadmin").setExecutor((CommandExecutor) abbaAdminCmd);
|
|
|
+ this.getCommand("abbaadmin").setTabCompleter((TabCompleter) abbaAdminCmd);
|
|
|
+
|
|
|
+
|
|
|
evtListener.initialize(this);
|
|
|
AbbaGame.initialize(this);
|
|
|
ConfigurationSerialization.registerClass(AbbaGame.class);
|
|
@@ -110,493 +119,5 @@ public class Main extends JavaPlugin{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args){
|
|
|
- if(cmdLabel.equalsIgnoreCase("abba")){
|
|
|
- if(args.length == 0){
|
|
|
- args = new String[]{"help"};
|
|
|
- }
|
|
|
- switch(args[0].toLowerCase()){
|
|
|
- case "join":
|
|
|
- if(sender instanceof Player){
|
|
|
- if(sender.hasPermission("AbbaCaving.join")){
|
|
|
- Player p = (Player) sender;
|
|
|
- AbbaGame game;
|
|
|
-
|
|
|
- if(args.length >= 2){
|
|
|
- game = AbbaTools.getAbbaGame(args[1]);
|
|
|
- }else{
|
|
|
- game = AbbaTools.getAbbaGame();
|
|
|
- }
|
|
|
- if(game == null){
|
|
|
- sender.sendMessage("§cGame not found!");
|
|
|
- return false;
|
|
|
- }
|
|
|
- if(!(game.isOpen() || p.hasPermission("AbbaCaving.joinClosed"))){
|
|
|
- p.sendMessage("§cThis game is closed!");
|
|
|
- return false;
|
|
|
- }
|
|
|
- if(!(game.hasRoom() || p.hasPermission("AbbaCaving.joinFull"))){
|
|
|
- p.sendMessage("§cThis game is full!");
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- if(!p.hasPermission("AbbaCaving.canCarryContraband")){
|
|
|
- ItemStack[] contraband = AbbaTools.getContraband(p.getInventory());
|
|
|
- if(contraband != null && contraband.length >= 1){
|
|
|
- p.sendMessage("§cYou cannot carry " + contraband[0].getType().toString() + " with you on an abba game!");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- AbbaGame oldGame = AbbaTools.getAbbaGame(p);
|
|
|
- if(oldGame != null){
|
|
|
-
|
|
|
- p.sendMessage("Left game \"" + oldGame.getName() + "\"");
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- AbbaTools.join(p, game);
|
|
|
- p.sendMessage("Joined game \"" + game.getName() + "\"");
|
|
|
-
|
|
|
- p.teleport(game.getSpawn());
|
|
|
- p.setGameMode(GameMode.SURVIVAL);
|
|
|
- return true;
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.mustBeInGameError);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- case "leave":
|
|
|
- if(sender instanceof Player){
|
|
|
- if(sender.hasPermission("AbbaCaving.leave")){
|
|
|
- Player p = (Player) sender;
|
|
|
- AbbaGame game = AbbaTools.leave(p.getUniqueId());
|
|
|
- if(game != null){
|
|
|
- p.sendMessage("Left game \"" + game.getName() + "\"");
|
|
|
- return true;
|
|
|
- }else{
|
|
|
- p.sendMessage("§cYou aren't in a game right now!");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.mustBeInGameError);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- case "info":
|
|
|
- if(sender.hasPermission("AbbaCaving.info")){
|
|
|
- AbbaGame game;
|
|
|
- if(args.length >= 2){
|
|
|
- game = AbbaTools.getAbbaGame(args[1]);
|
|
|
- if(game == null){
|
|
|
- sender.sendMessage(String.format(Messages.gameNotFoundError, args[1]));
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- game = AbbaTools.getAbbaGame();
|
|
|
- if(game == null){
|
|
|
- sender.sendMessage("§cNo Games found!");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- sender.sendMessage("Game \"" + game.getName() + "\" " + (game.isOpen() ? "§aOpen":"§cClosed"));
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- case "list":
|
|
|
- if(sender.hasPermission("AbbaCaving.list")){
|
|
|
- sender.sendMessage("Games:");
|
|
|
- for(AbbaGame g:AbbaTools.getGames()){
|
|
|
- if(g.isOpen()){
|
|
|
- sender.sendMessage("- §a" + g.getName() + " (" + g.getPlayerCount() + "/" + g.getMaxPlayers() + ")");
|
|
|
- }else{
|
|
|
- sender.sendMessage("- §7§o" + g.getName() + " (" + g.getPlayerCount() + "/" + g.getMaxPlayers() + ")");
|
|
|
- }
|
|
|
- }
|
|
|
- return true;
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- case "calc":
|
|
|
- if(sender.hasPermission("AbbaCaving.calc")){
|
|
|
- Player calcPlayer;
|
|
|
- if(args.length >= 2){
|
|
|
- calcPlayer = getServer().getPlayer(args[1]);
|
|
|
- if(calcPlayer == null){
|
|
|
- sender.sendMessage("§cUnable to find player \"" + args[1] + "\"");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- if(sender instanceof Player){
|
|
|
- calcPlayer = (Player) sender;
|
|
|
- }else{
|
|
|
- sender.sendMessage("usage: /abba calc <Player>");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- CalculatedScore score = AbbaTools.calcScore(calcPlayer.getInventory());
|
|
|
- for(int i = 0; i < score.size(); i++){
|
|
|
- if(score.getItemCount(i) != 0)
|
|
|
- sender.sendMessage(score.getItemCount(i) + "x" + score.getItemStack(i).getType().toString() + ": " + score.getItemPoints(i));
|
|
|
- }
|
|
|
- sender.sendMessage("§aTotal Score: " + score.total);
|
|
|
-
|
|
|
-
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- break;
|
|
|
-
|
|
|
-
|
|
|
- //Admin commands
|
|
|
- case "calcscores":
|
|
|
- if(sender.hasPermission("AbbaCaving.calcScores")){
|
|
|
- AbbaGame game;
|
|
|
- if(args.length >= 2){
|
|
|
- game = AbbaTools.getAbbaGame(args[1]);
|
|
|
- }else{
|
|
|
- game = AbbaTools.getAbbaGame();
|
|
|
- }
|
|
|
- if(game.getState() == AbbaGame.GameState.FINISHED){
|
|
|
- game.calcScores();
|
|
|
-
|
|
|
- }else{
|
|
|
- sender.sendMessage("§cGame not finished yet!");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
- break;
|
|
|
- case "create":
|
|
|
- if(args.length <= 5 && !(sender instanceof Player)){
|
|
|
- System.out.println("Must be ingame or specify world and coordinates");
|
|
|
- return false;
|
|
|
- }
|
|
|
- if(sender.hasPermission("AbbaCaving.create")){
|
|
|
- String gameName;
|
|
|
- Location gameSpawn = null;
|
|
|
-
|
|
|
- // set gameName
|
|
|
- if(args.length >= 2){
|
|
|
- gameName = args[1];
|
|
|
- }else{
|
|
|
- DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
- gameName = "Abba" + dateFormat.format(new Date());
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- // set gameSpawn
|
|
|
- if(args.length >= 5){
|
|
|
- double spawnX, spawnY, spawnZ;
|
|
|
- try{
|
|
|
- spawnX = Double.parseDouble(args[2]);
|
|
|
- spawnY = Double.parseDouble(args[3]);
|
|
|
- spawnZ = Double.parseDouble(args[4]);
|
|
|
- }catch(NumberFormatException e){
|
|
|
- return false;
|
|
|
- }
|
|
|
- if(args.length >= 6){
|
|
|
- World w = getServer().getWorld(args[5]);
|
|
|
- if(w != null){
|
|
|
-
|
|
|
- gameSpawn = new Location(w, spawnX, spawnY, spawnZ);
|
|
|
-
|
|
|
- }else{
|
|
|
- sender.sendMessage("§4Unknown world: \"" + args[5] + "\"");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- }else{
|
|
|
- if(sender instanceof Player){
|
|
|
- gameSpawn = ((Player) sender).getLocation();
|
|
|
- }else{
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- while(AbbaTools.getAbbaGame(gameName) != null){
|
|
|
- gameName += "_";
|
|
|
- }
|
|
|
- //create game
|
|
|
- AbbaTools.create(gameName, gameSpawn);
|
|
|
- sender.sendMessage("Successfully created game \"" + gameName + "\"");
|
|
|
- return true;
|
|
|
-
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- case "remove":
|
|
|
- if(sender.hasPermission("AbbaCaving.remove")){
|
|
|
- if(args.length >= 2){
|
|
|
- if(AbbaTools.removeAbbaGame(args[1])){
|
|
|
- sender.sendMessage("Successfully removed game \"" + args[1] + "\"");
|
|
|
- return true;
|
|
|
- }else{
|
|
|
- sender.sendMessage(String.format(Messages.gameNotFoundError, args[1]));
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- sender.sendMessage("Usage: /abba remove <game>");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- case "open":
|
|
|
- if(sender.hasPermission("AbbaCaving.open")){
|
|
|
- AbbaGame game;
|
|
|
- if(args.length >= 2){
|
|
|
- game = AbbaTools.getAbbaGame(args[1]);
|
|
|
- if(game == null){
|
|
|
- sender.sendMessage(String.format(Messages.gameNotFoundError, args[1]));
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- game = AbbaTools.getAbbaGame();
|
|
|
- if(game == null){
|
|
|
- sender.sendMessage("§cNo game found");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- game.setOpen(true);
|
|
|
- sender.sendMessage("Opened game \"" + args[1] + "\"");
|
|
|
- return true;
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- case "close":
|
|
|
- if(sender.hasPermission("AbbaCaving.open")){
|
|
|
- AbbaGame game;
|
|
|
- if(args.length >= 2){
|
|
|
- game = AbbaTools.getAbbaGame(args[1]);
|
|
|
- if(game == null){
|
|
|
- sender.sendMessage(String.format(Messages.gameNotFoundError, args[1]));
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- game = AbbaTools.getAbbaGame();
|
|
|
- if(game == null){
|
|
|
- sender.sendMessage("§cNo game found");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- game.setOpen(false);
|
|
|
- sender.sendMessage("Closed game \"" + args[1] + "\"");
|
|
|
- return true;
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- //Abba help
|
|
|
- case "reload":
|
|
|
- if(sender.hasPermission("AbbaCaving.reload")){
|
|
|
- sender.sendMessage("Reloading config...");
|
|
|
- this.reloadConfig();
|
|
|
- sender.sendMessage("Reload Complete.");
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- case "start":
|
|
|
- if(sender.hasPermission("AbbaCaving.start")){
|
|
|
- AbbaGame game;
|
|
|
- if(args.length >= 2){
|
|
|
- game = AbbaTools.getAbbaGame(args[1]);
|
|
|
- if(game == null){
|
|
|
- sender.sendMessage(String.format(Messages.gameNotFoundError, args[1]));
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- game = AbbaTools.getAbbaGame();
|
|
|
- if(game == null){
|
|
|
- sender.sendMessage("§cNo games found");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- switch(game.getState()){
|
|
|
- case WAITING:
|
|
|
- game.start();
|
|
|
- return true;
|
|
|
- case PAUSED:
|
|
|
- break;
|
|
|
- case COUNTDOWN: //countdown and running both do the same
|
|
|
- case RUNNING:
|
|
|
- sender.sendMessage("§cGame already running!");
|
|
|
- return false;
|
|
|
- case FINISHED:
|
|
|
- case CONCLUDED:
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- case "config":
|
|
|
- if(sender.hasPermission("AbbaCaving.config")){
|
|
|
- if(args.length >= 2){
|
|
|
- if(args.length >= 3){
|
|
|
- AbbaGame game = AbbaTools.getAbbaGame(args[1]);
|
|
|
- if(game == null){
|
|
|
- sender.sendMessage(Messages.gameNotFoundError);
|
|
|
- }
|
|
|
- switch(args[2].toLowerCase()){
|
|
|
- case "timer":
|
|
|
-
|
|
|
- if(args.length >= 4){
|
|
|
- int newTime;
|
|
|
-
|
|
|
- try{
|
|
|
- newTime = Integer.parseInt(args[3]);
|
|
|
- }catch(NumberFormatException e){
|
|
|
- sender.sendMessage("§cPlease specify a number when you use this command");
|
|
|
- return false;
|
|
|
- }
|
|
|
- if(newTime <= 0){
|
|
|
- sender.sendMessage("§cPlease specify a stricktly positive number");
|
|
|
- return false;
|
|
|
- }
|
|
|
- if(game.getState() == AbbaGame.GameState.RUNNING || game.getState() == AbbaGame.GameState.PAUSED){
|
|
|
- game.setEndTime(System.currentTimeMillis() + newTime * 1000);
|
|
|
- }else{
|
|
|
- game.setDuration(newTime);
|
|
|
- }
|
|
|
- sender.sendMessage("Time has been updated!");
|
|
|
- return true;
|
|
|
-
|
|
|
- }else{
|
|
|
- sender.sendMessage("§cPlease specify new time");
|
|
|
- return false;
|
|
|
- }
|
|
|
- case "addchest":
|
|
|
- if(sender instanceof Player){
|
|
|
- Block blockInFront = ((Player) sender).getTargetBlock((Set<Material>) null, 5);
|
|
|
- if(BlockUtils.isSign(blockInFront)){
|
|
|
- Block blockNextTo = BlockUtils.getAttachedBlock(blockInFront);
|
|
|
- if(BlockUtils.isChest(blockNextTo)){
|
|
|
- if(AbbaTools.getAbbaGame(args[1]).addChest((Chest) blockNextTo.getState(), (Sign) blockInFront.getState())){
|
|
|
- sender.sendMessage("Chest created");
|
|
|
- return true;
|
|
|
- }else{
|
|
|
- sender.sendMessage("§cChest already in a game!");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- sender.sendMessage("§cPut a sign next to the chest!");
|
|
|
- return false;
|
|
|
- }else{
|
|
|
- sender.sendMessage("§cYou must look at a chest to register it!");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- sender.sendMessage("§cMust be ingame to register chests!");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- }else{
|
|
|
- sender.sendMessage("§cChoose an option!");
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.mustSpecifyGameError);
|
|
|
- return false;
|
|
|
- }
|
|
|
- }else{
|
|
|
- sender.sendMessage(Messages.noPermissionError);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- break;
|
|
|
- default:
|
|
|
- sender.sendMessage("Usage:\n - §aabba join§r: Joins the Abba Match\n - §aabba leave§f: Leaves current Abba Game\n - §aabba info§f: Displays info about an Abba Match\n - §aabba create§f: Creates an Abba Game at current location\n - §aabba remove§f: Stops game\n - §aabba open§f: Allows players to join the game\n - §aabba close§f: Prevents players from joining");
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- return false;
|
|
|
- }
|
|
|
- @Override
|
|
|
- public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args){
|
|
|
- List<String> cmds = new ArrayList<String>();
|
|
|
- if(command.getName().equalsIgnoreCase("abba")){
|
|
|
- switch(args.length){
|
|
|
- case 1:
|
|
|
- for(String s:abbaSubCommands){
|
|
|
- if(sender.hasPermission("AbbaCaving." + s) && s.startsWith(args[0])){
|
|
|
- cmds.add(s);
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- for(AbbaGame game:AbbaTools.getGames()){
|
|
|
- if(game.getName().toLowerCase().startsWith(args[1].toLowerCase())){
|
|
|
- cmds.add(game.getName());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- return cmds;
|
|
|
- }
|
|
|
+
|
|
|
}
|