123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521 |
- package me.lennartVH01;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.List;
- import java.util.UUID;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import org.bukkit.GameMode;
- import org.bukkit.Location;
- import org.bukkit.World;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandSender;
- import org.bukkit.configuration.file.FileConfiguration;
- import org.bukkit.entity.Player;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.plugin.java.JavaPlugin;
- import org.bukkit.scheduler.BukkitRunnable;
- public class Main extends JavaPlugin{
-
-
-
-
-
- public Map<UUID, AbbaGame> playerMap = new HashMap<UUID, AbbaGame>();
-
- 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 FileConfiguration config = this.getConfig();
-
-
- public EventListener evtListener = new EventListener();
-
- @Override
- public void onEnable(){
- // Event handler
- evtListener.initialize(this);
- getServer().getPluginManager().registerEvents(evtListener, this);
-
-
-
- //Config
- this.saveDefaultConfig();
-
-
-
-
- // get Item Point Values
- List<Map<?,?>> itemPointMaps = config.getMapList("ItemValues");
- List<ValueItemPair> valueItemPairs = new ArrayList<ValueItemPair>();
- for(Map<?,?> itemMapGeneric:itemPointMaps){
-
- //Put the torches and pitchforks away, config.getMapList() *should* return Map<String, Object> anyways
- @SuppressWarnings("unchecked")
- Map<String, Object> itemMap = (Map<String, Object>) itemMapGeneric;
-
- if(itemMap.get("Value") == null)
- continue;
- int value = (int) itemMap.remove("Value");
- ItemStack stack = ItemStack.deserialize(itemMap);
- stack.setAmount(0);
- valueItemPairs.add(new ValueItemPair(stack, value));
- }
-
- AbbaTools.initialize(this, valueItemPairs);
-
-
- }
- @Override
- public void onDisable(){
-
- }
-
- 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.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 = playerMap.get(p.getUniqueId());
- if(oldGame != null){
- if(p.hasPermission("AbbaCaving.leave")){
- oldGame.leave(p);
- playerMap.remove(p.getUniqueId());
- p.sendMessage("Left game \"" + oldGame.getName() + "\"");
- }else{
- p.sendMessage("§cYou don't have permission to leave the current game!");
- }
- }
-
- game.addPlayer(p);
- playerMap.put(p.getUniqueId(), 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 = playerMap.get(p.getUniqueId());
- game.leave(p);
- playerMap.remove(p.getUniqueId());
- p.sendMessage("Left game \"" + game.getName() + "\"");
- return true;
- }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 "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.open();
- 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.close();
- 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:
- 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() == GameState.RUNNING || game.getState() == 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;
- }
- }
- }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().startsWith(args[1])){
- cmds.add(game.getName());
- }
- }
- }
-
- }
- return cmds;
- }
- }
|