void arenaSelect(Player spectator) { Inventory gui = Bukkit.getServer().createInventory(spectator, 27, basePrefix); for (int i = 1; i < setup.getConfig().getInt("nextarena"); i++) { ItemStack arenaBook = new ItemStack(Material.BOOK, 1); ItemMeta meta = (ItemMeta) arenaBook.getItemMeta(); meta.setDisplayName(setup.getConfig().getString("arena." + i + ".name")); arenaBook.setItemMeta(meta); gui.addItem(arenaBook); } spectator.openInventory(gui); }
void lobbySetup(Player player, String arenaName) { int arenaNum = 0; for (int i = 1; i < setup.getConfig().getInt("nextarena"); i++) { if (setup.getConfig().getString("arena." + i + ".name").equals(arenaName)) { arenaNum = i; } } if (arenaNum == 0) { player.sendMessage( prefix + "Arena " + ChatColor.RED + arenaName + ChatColor.GOLD + " doesn't exist!"); } else { setup .getConfig() .set("arena." + arenaNum + ".lobby.y", Math.floor(player.getLocation().getY())); setup .getConfig() .set("arena." + arenaNum + ".lobby.x", Math.floor(player.getLocation().getX())); setup .getConfig() .set("arena." + arenaNum + ".lobby.z", Math.floor(player.getLocation().getZ())); setup.getConfig().set("arena." + arenaNum + ".lobby.world", player.getWorld().getName()); setup.saveConfig(); player.sendMessage( prefix + "Arena " + ChatColor.RED + arenaName + ChatColor.GOLD + "'s lobby location set to your location"); } }
@Override public void onEnable() { setup = new ConfigAccessor(this, "setup"); toggles = new ConfigAccessor(this, "toggles"); setup.saveDefaultConfig(); toggles.saveDefaultConfig(); compass = toggles.getConfig().getBoolean("compass", true); clock = toggles.getConfig().getBoolean("arenaclock", true); specchat = toggles.getConfig().getBoolean("specchat", true); scoreboard = toggles.getConfig().getBoolean("colouredtablist", true); output = toggles.getConfig().getBoolean("outputmessages", true); death = toggles.getConfig().getBoolean("deathspec", false); console = getServer().getConsoleSender(); if (scoreboard) { manager = Bukkit.getScoreboardManager(); board = manager.getNewScoreboard(); team = board.registerNewTeam("spec"); team.setPrefix( ChatColor.DARK_GRAY + "[" + ChatColor.GRAY + "Spec" + ChatColor.DARK_GRAY + "] " + ChatColor.GRAY); } for (Player player : getServer().getOnlinePlayers()) { user.put(player.getName(), new PlayerObject()); } getServer().getPluginManager().registerEvents(new SpectateListener(this), this); if (output) { console.sendMessage( prefix + "Version " + ChatColor.RED + "1.8" + ChatColor.GOLD + " is enabled!"); } this.getCommand("spectate").setExecutor(commands); this.getCommand("spec").setExecutor(commands); }
private void portalEditMenu( CommandSender sender, ConfigAccessor portalConfig, String portalName) { // make the text gui with the json message for a list of edit commands to be clicked or hovered // put \" for a " in the json messages // sadly there is no newline code so these three lines will have to be copied and pasted for // each line // use the usual messages for normal lines but anything that needs special features make sure // you use the // chat steriliser sender.sendMessage(""); sender.sendMessage(PluginMessages.customPrefix + " Editing: \u00A7e" + portalName); sender.sendMessage( " \u00A7apos1\u00A7e: " + portalConfig.getConfig().getString(portalName + ".pos1.X") + ", " + portalConfig.getConfig().getString(portalName + ".pos1.Y") + ", " + portalConfig.getConfig().getString(portalName + ".pos1.Z")); sender.sendMessage( " \u00A7apos2\u00A7e: " + portalConfig.getConfig().getString(portalName + ".pos2.X") + ", " + portalConfig.getConfig().getString(portalName + ".pos2.Y") + ", " + portalConfig.getConfig().getString(portalName + ".pos2.Z")); String destination = portalConfig.getConfig().getString(portalName + ".destination"); if (destination != null) { sender.sendMessage(" \u00A7adestination\u00A7e: " + destination); } else { sender.sendMessage(" \u00A7cdestination\u00A7e: null"); } String trigger = portalConfig.getConfig().getString(portalName + ".triggerblock"); if (trigger != null) { sender.sendMessage(" \u00A7atriggerBlock\u00A7e: " + trigger); } else { sender.sendMessage(" \u00A7ctriggerBlock\u00A7e: null"); } if (portalConfig.getConfig().getString(portalName + ".portalArgs.command.1") != null) { int commands = 0; String command = portalConfig.getConfig().getString(portalName + ".portalArgs.command.1"); // TODO possibly change code so it counds number of subvalues rather than a loop. while (command != null) { command = portalConfig.getConfig().getString(portalName + ".portalArgs.command." + ++commands); } if (--commands > 1) { sender.sendMessage(" \u00A7acommands\u00A7e: " + commands + " commands"); } else { sender.sendMessage(" \u00A7acommands\u00A7e: " + commands + " command"); } } else { sender.sendMessage(" \u00A7ccommands\u00A7e: none"); } sender.sendMessage(""); Player player = (Player) sender; plugin.compat.sendRawMessage( "{\"text\":\"\u00A7aFunctions\u00A7e: \"," + "\"extra\":[{\"text\":\"\u00A7eRemove\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Remove the selected portal\"},\"clickEvent\":{\"action\":\"clickEvent\",\"value\":\"/portal gui remove " + portalName + "\"}}" + ",{\"text\":\" \"},{\"text\":\"\u00A7eShow\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Show the selected portal\"},\"clickEvent\":{\"action\":\"clickEvent\",\"value\":\"/portal show " + portalName + "\"}}" + ",{\"text\":\" \"},{\"text\":\"\u00A7eRename\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Change the name of the portal\"},\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"/portal rename \"}}" + ",{\"text\":\" \"},{\"text\":\"\u00A7eActivate\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Teleport to the set destination\n(same as entering the portal)\"},\"clickEvent\":{\"action\":\"clickEvent\",\"value\":\"/warp " + destination + "\"}}]}", player); sender.sendMessage(""); }
@SuppressWarnings("deprecation") @Override public boolean onCommand(CommandSender sender, Command cmd, String command, String[] args) { ConfigAccessor config = new ConfigAccessor(plugin, "config.yml"); ConfigAccessor portalConfig = new ConfigAccessor(plugin, "portals.yml"); Player player = (Player) sender; PlayerInventory inventory = player.getInventory(); if (sender.hasPermission("advancedportals.portal")) { if (args.length > 0) { switch (args[0].toLowerCase()) { case "wand": case "selector": String ItemID = config.getConfig().getString("AxeItemId"); Material WandMaterial = Material.getMaterial(ItemID); if (WandMaterial == null) { WandMaterial = Material.IRON_AXE; } ItemStack regionselector = new ItemStack(WandMaterial); ItemMeta selectorname = regionselector.getItemMeta(); selectorname.setDisplayName("\u00A7ePortal Region Selector"); selectorname.setLore( Arrays.asList( "\u00A7rThis wand with has the power to help", "\u00A7r create portals bistowed upon it!")); regionselector.setItemMeta(selectorname); inventory.addItem(regionselector); sender.sendMessage( PluginMessages.customPrefix + " You have been given a \u00A7ePortal Region Selector\u00A7a!"); break; case "portalblock": // TODO change this to a purple wool block and give it a name with a color. Then listen // to when its placed. // Also do this for other blocks such as gateways and end portals just in case they want // it. ItemStack portalBlock = new ItemStack(Material.PORTAL, 1); inventory.addItem(portalBlock); sender.sendMessage( PluginMessages.customPrefix + " You have been given a \u00A7ePortal Block\u00A7a!"); break; case "create": if (player.hasMetadata("Pos1World") && player.hasMetadata("Pos2World")) { if (player .getMetadata("Pos1World") .get(0) .asString() .equals(player.getMetadata("Pos2World").get(0).asString()) && player .getMetadata("Pos1World") .get(0) .asString() .equals(player.getLocation().getWorld().getName())) { if (args.length >= 2) { // may make this next piece of code more efficient, maybe check against // a list of available variables or something // TODO change system to use arrays and hashmaps boolean hasName = false; boolean hasTriggerBlock = false; boolean hasDestination = false; boolean isBungeePortal = false; boolean needsPermission = false; boolean executesCommand = false; String destination = null; String portalName = null; String triggerBlock = null; String serverName = null; String permission = null; String portalCommand = null; ArrayList<PortalArg> extraData = new ArrayList<>(); for (int i = 1; i < args.length; i++) { if (args[i].toLowerCase().startsWith("name:") && args[i].length() > 5) { hasName = true; portalName = args[i].replaceFirst("name:", ""); } else if (args[i].toLowerCase().startsWith("name:")) { player.sendMessage( PluginMessages.customPrefixFail + " You must include a name for the portal that isnt nothing!"); return true; } else if (args[i].toLowerCase().startsWith("destination:") && args[i].length() > 12) { hasDestination = true; destination = args[i].toLowerCase().replaceFirst("destination:", ""); } else if (args[i].toLowerCase().startsWith("desti:") && args[i].length() > 6) { hasDestination = true; destination = args[i].toLowerCase().replaceFirst("desti:", ""); } else if (args[i].toLowerCase().startsWith("triggerblock:") && args[i].length() > 13) { hasTriggerBlock = true; triggerBlock = args[i].toLowerCase().replaceFirst("triggerblock:", ""); } else if (args[i].toLowerCase().startsWith("triggerblock:") && args[i].length() > 13) { hasTriggerBlock = true; triggerBlock = args[i].toLowerCase().replaceFirst("triggerblock:", ""); } else if (args[i].toLowerCase().startsWith("bungee:") && args[i].length() > 7) { // not completely implemented isBungeePortal = true; serverName = args[i].toLowerCase().replaceFirst("bungee:", ""); // extraData.add(new PortalArgs("bungee", serverName)); } else if (args[i].toLowerCase().startsWith("permission:") && args[i].length() > 11) { // not completely implemented needsPermission = true; permission = args[i].toLowerCase().replaceFirst("permission:", ""); extraData.add(new PortalArg("permission", permission)); } else if (args[i].toLowerCase().startsWith("command:") && args[i].length() > 8) { // not completely implemented executesCommand = true; portalCommand = parseArgVariable(args, i, "command:"); i += this.portalArgsStringLength - 1; extraData.add(new PortalArg("command.1", portalCommand)); } } if (!hasName) { player.sendMessage( PluginMessages.customPrefixFail + " You must include a name for the portal that you are creating in the variables!"); return true; } World world = org.bukkit.Bukkit.getWorld(player.getMetadata("Pos1World").get(0).asString()); Location pos1 = new Location( world, player.getMetadata("Pos1X").get(0).asInt(), player.getMetadata("Pos1Y").get(0).asInt(), player.getMetadata("Pos1Z").get(0).asInt()); Location pos2 = new Location( world, player.getMetadata("Pos2X").get(0).asInt(), player.getMetadata("Pos2Y").get(0).asInt(), player.getMetadata("Pos2Z").get(0).asInt()); ConfigAccessor desticonfig = new ConfigAccessor(plugin, "destinations.yml"); String destiPosX = desticonfig.getConfig().getString(destination + ".pos1.X"); if (!Portal.portalExists(portalName)) { player.sendMessage(""); player.sendMessage( PluginMessages.customPrefix + "\u00A7e You have created a new portal with the following details:"); player.sendMessage("\u00A7aname: \u00A7e" + portalName); if (hasDestination) { player.sendMessage("\u00A7adestination: \u00A7e" + destination); } else if (destiPosX == null) { player.sendMessage( "\u00A7cdestination: \u00A7e" + destination + " (destination does not exist)"); } else { player.sendMessage("\u00A7cdestination: \u00A7eN/A (will not work)"); } if (isBungeePortal) { player.sendMessage("\u00A7abungee: \u00A7e" + serverName); } if (needsPermission) { player.sendMessage("\u00A7apermission: \u00A7e" + permission); } else { player.sendMessage("\u00A7apermission: \u00A7e(none needed)"); } if (executesCommand) { player.sendMessage("\u00A7acommand: \u00A7e" + portalCommand); } Material triggerBlockMat = Material.getMaterial(0); if (hasTriggerBlock) { triggerBlockMat = Material.getMaterial(triggerBlock.toUpperCase()); if (triggerBlockMat != null) { player.sendMessage( "\u00A7atriggerBlock: \u00A7e" + triggerBlock.toUpperCase()); PortalArg[] portalArgs = new PortalArg[extraData.size()]; portalArgs = extraData.toArray(portalArgs); player.sendMessage( Portal.create( pos1, pos2, portalName, destination, triggerBlockMat, serverName, portalArgs)); } else { hasTriggerBlock = false; ConfigAccessor Config = new ConfigAccessor(plugin, "config.yml"); player.sendMessage( "\u00A7ctriggerBlock: \u00A7edefault(" + Config.getConfig().getString("DefaultPortalTriggerBlock") + ")"); player.sendMessage( "\u00A7cThe block " + triggerBlock.toUpperCase() + " is not a valid block name in minecraft so the trigger block has been set to the default!"); PortalArg[] portalArgs = new PortalArg[extraData.size()]; portalArgs = extraData.toArray(portalArgs); player.sendMessage( Portal.create( pos1, pos2, portalName, destination, serverName, portalArgs)); } } else { ConfigAccessor Config = new ConfigAccessor(plugin, "config.yml"); player.sendMessage( "\u00A7atriggerBlock: \u00A7edefault(" + Config.getConfig().getString("DefaultPortalTriggerBlock") + ")"); PortalArg[] portalArgs = new PortalArg[extraData.size()]; portalArgs = extraData.toArray(portalArgs); player.sendMessage( Portal.create( pos1, pos2, portalName, destination, serverName, portalArgs)); } } else { sender.sendMessage( PluginMessages.customPrefixFail + " A portal by that name already exists!"); } // add code to save the portal to the portal config and reload the portals player.sendMessage(""); } else { player.sendMessage( PluginMessages.customPrefixFail + " You need to at least add the name of the portal as a variable, \u00A7cType \u00A7e/portal variables\u00A7c" + " for a full list of currently available variables and an example command!"); } } else { player.sendMessage( PluginMessages.customPrefixFail + " The points you have selected need to be in the same world!"); } } else { player.sendMessage( PluginMessages.customPrefixFail + " You need to have two points selected to make a portal!"); } break; case "variables": sender.sendMessage( PluginMessages.customPrefix + " \u00A77Variables \u00A7c: \u00A7aname, triggerBlock, destination"); sender.sendMessage(""); sender.sendMessage( "\u00A7aExample command: \u00A7e/portal create name:test triggerId:portal"); break; case "select": // TODO finish the select command and the hit block to replace! if (!player.hasMetadata("selectingPortal")) { if (args.length > 1) { if (Portal.portalExists(args[1])) { player.setMetadata("selectedPortal", new FixedMetadataValue(plugin, args[1])); } else { player.sendMessage( PluginMessages.customPrefixFail + " No portal by the name \u00A7e" + args[1] + "\u00A7c exists (maybe you got the caps wrong)\n Try typing \u00A7e/portal select\u00A7c and hit inside the apropriate portals area!"); } } else { player.sendMessage( PluginMessages.customPrefix + " Hit a block inside the portal region to select the portal!"); player.setMetadata("selectingPortal", new FixedMetadataValue(plugin, true)); } } else { player.removeMetadata("selectingPortal", plugin); player.sendMessage(PluginMessages.customPrefixFail + " Portal selection cancelled!"); } break; case "gui": if (args.length > 1) { if (args[1].toLowerCase().equals("remove") && args.length > 2) { sender.sendMessage(""); sender.sendMessage( PluginMessages.customPrefixFail + " Are you sure you would like to remove the portal \u00A7e" + args[2] + "\u00A7c?"); sender.sendMessage(""); plugin.compat.sendRawMessage( "{\"text\":\" \",\"extra\":[{\"text\":\"\u00A7e[Yes]\",\"hoverEvent\":{\"action\":\"show_text\"," + "\"value\":\"Confirm removing this portal\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/portal remove " + args[2] + "\"}}, " + "{\"text\":\" \"},{\"text\":\"\u00A7e[No]\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Cancel removing this portal\"}" + ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/portal edit " + args[2] + "\"}}]}", player); sender.sendMessage(""); } } break; case "edit": if (args.length > 1) { if (Portal.portalExists(args[1])) { player.setMetadata("selectedPortal", new FixedMetadataValue(plugin, args[1])); portalEditMenu(sender, portalConfig, args[1]); } else { sender.sendMessage( PluginMessages.customPrefixFail + " No portal by the name \u00A7e" + args[1] + "\u00A7c exists!"); } } else { if (player.hasMetadata("selectedPortal")) { String portalName = player.getMetadata("selectedPortal").get(0).asString(); String posX = portalConfig.getConfig().getString(portalName + ".pos1.X"); if (posX != null) { portalEditMenu(sender, portalConfig, portalName); } else { sender.sendMessage( PluginMessages.customPrefixFail + " The portal you had selected no longer seems to exist!"); player.removeMetadata("selectedPortal", plugin); } } else { sender.sendMessage( PluginMessages.customPrefixFail + " No portal has been defined or selected!"); } } break; case "rename": // not finished yet / if (args.length > 1) { if (player.hasMetadata("selectedPortal")) { String portalName = player.getMetadata("selectedPortal").get(0).asString(); if (portalName.toLowerCase() != args[1].toLowerCase()) { String posX = portalConfig.getConfig().getString(portalName + ".pos1.X"); String newPortalPosX = portalConfig.getConfig().getString(args[1] + ".pos1.X"); if (posX != null && newPortalPosX == null) { Portal.rename(portalName, args[1]); sender.sendMessage( PluginMessages.customPrefix + " The portal \u00A7e" + portalName + "\u00A7a has been renamed to \u00A7e" + args[1] + "\u00A7a."); player.setMetadata("selectedPortal", new FixedMetadataValue(plugin, args[1])); } else if (newPortalPosX != null) { sender.sendMessage( PluginMessages.customPrefixFail + " There is already a portal with the name \u00A7e" + args[1] + "\u00A7c!"); } else { sender.sendMessage( PluginMessages.customPrefixFail + " The portal you had selected no longer seems to exist!"); player.removeMetadata("selectedPortal", plugin); } } else { sender.sendMessage( PluginMessages.customPrefixFail + " The portal you have selected is already called that!"); } } else { sender.sendMessage( PluginMessages.customPrefixFail + " No portal has been defined or selected!"); } } else { sender.sendMessage( PluginMessages.customPrefixFail + " You must select a portal first and then type \u00A7e/portal rename (new name)\u00A7c!"); } break; case "command": if (player.hasMetadata("selectedPortal")) { String portalName = player.getMetadata("selectedPortal").get(0).asString(); if (args.length > 1) { // TODO add the command autocompletes, add, remove and show if (args[1].toLowerCase().equals("add")) { if (args.length > 2) { String portalCommand = args[2]; for (int i = 3; i < args.length; i++) { portalCommand += args[i]; } if (Portal.addCommand(portalName, portalCommand)) { sender.sendMessage( PluginMessages.customPrefixFail + " Command added to portal!"); } else { sender.sendMessage( PluginMessages.customPrefixFail + " Failed to add command to portal!"); } } else { sender.sendMessage( PluginMessages.customPrefixFail + " You must actually specify a command to execute!"); } } else if (args[1].toLowerCase().equals("remove")) { // Specify what line to remove } else if (args[1].toLowerCase().equals("show")) { // Show all the commands the portal executes } else { sender.sendMessage( PluginMessages.customPrefixFail + " You must specify to \u00A7eadd\u00A7c or \u00A7eremove a command!"); } } else { sender.sendMessage( PluginMessages.customPrefixFail + " You must specify to \u00A7eadd\u00A7c or \u00A7eremove\u00A7c a command!"); } } else { } break; case "remove": if (args.length > 1) { String posX = portalConfig.getConfig().getString(args[1] + ".pos1.X"); if (posX != null) { Portal.remove(args[1]); sender.sendMessage( PluginMessages.customPrefixFail + " The portal \u00A7e" + args[1] + "\u00A7c has been removed!"); } else { sender.sendMessage( PluginMessages.customPrefixFail + " No portal by that name exists!"); } } else { if (player.hasMetadata("selectedPortal")) { String portalName = player.getMetadata("selectedPortal").get(0).asString(); String posX = portalConfig.getConfig().getString(portalName + ".pos1.X"); if (posX != null) { Portal.remove(portalName); sender.sendMessage( PluginMessages.customPrefixFail + " The portal \u00A77" + portalName + "\u00A7c has been removed!"); } else { sender.sendMessage( PluginMessages.customPrefixFail + " The portal you had selected no longer seems to exist!"); player.removeMetadata("selectedPortal", plugin); } } else { sender.sendMessage( PluginMessages.customPrefixFail + " No portal has been defined or selected!"); } } break; case "help": sender.sendMessage(PluginMessages.customPrefix + " Help Menu"); sender.sendMessage("\u00A7e\u00A7m-----------------------------------"); sender.sendMessage( "\u00A76/" + command + " selector \u00A7a- gives you a region selector"); sender.sendMessage( "\u00A76/" + command + " create \u00A7c[tags] \u00A7a- creates a portal with a selection "); sender.sendMessage("\u00A76/" + command + " portal \u00A7a- gives you a portal block"); sender.sendMessage( "\u00A76/" + command + " select \u00A7a- selects an existing portal"); sender.sendMessage("\u00A76/" + command + " remove \u00A7a- removes a portal"); sender.sendMessage( "\u00A76/" + command + " list \u00A7a- lists all the current portals"); sender.sendMessage( "\u00A76/" + command + " variables \u00A7a- lists all available tags"); sender.sendMessage("\u00A7e\u00A7m-----------------------------------"); break; case "show": if (args.length > 1) { String posX = portalConfig.getConfig().getString(args[1] + ".pos1.X"); if (posX != null) { Selection.Show(player, this.plugin, args[1]); } else { sender.sendMessage( PluginMessages.customPrefixFail + " No portal by that name exists!"); } } else { if (player.hasMetadata("selectedPortal")) { player.sendMessage( PluginMessages.customPrefix + " Your currently selected portal has been shown, it will dissapear shortly!"); Selection.Show( player, this.plugin, player.getMetadata("selectedPortal").get(0).asString()); } else if (player.hasMetadata("Pos1World") && player.hasMetadata("Pos2World")) { if (player .getMetadata("Pos1World") .get(0) .asString() .equals(player.getMetadata("Pos2World").get(0).asString()) && player .getMetadata("Pos1World") .get(0) .asString() .equals(player.getLocation().getWorld().getName())) { player.sendMessage( PluginMessages.customPrefix + " Your currently selected area has been shown, it will dissapear shortly!"); Selection.Show(player, this.plugin, null); } } else { player.sendMessage(PluginMessages.customPrefixFail + " No regions selected!"); } } break; case "reload": sender.sendMessage(PluginMessages.customPrefix + " Reloaded values!"); Listeners.reloadValues(plugin); Portal.loadPortals(); break; case "list": String message = PluginMessages.customPrefix + " \u00A77Portals \u00A7c:\u00A7a"; LinkedList<String> portals = new LinkedList<>(); for (AdvancedPortal portal : Portal.Portals) { portals.add(portal.portalName); } Collections.sort(portals); for (Object portalName : portals.toArray()) { message = message + " " + portalName; } player.sendMessage(message); break; default: PluginMessages.UnknownCommand(sender, command); } } else { PluginMessages.UnknownCommand(sender, command); } } else { PluginMessages.NoPermission(sender, command); } return true; }
boolean modeSetup(Player player, Block block) { if (user.get(player.getName()).setup == 2) { user.get(player.getName()).pos2 = block.getLocation(); user.get(player.getName()).setup = 0; Location lowPos, hiPos; lowPos = new Location(user.get(player.getName()).pos1.getWorld(), 0, 0, 0); hiPos = new Location(user.get(player.getName()).pos1.getWorld(), 0, 0, 0); // yPos if (Math.floor(user.get(player.getName()).pos1.getY()) > Math.floor(user.get(player.getName()).pos2.getY())) { hiPos.setY(Math.floor(user.get(player.getName()).pos1.getY())); lowPos.setY(Math.floor(user.get(player.getName()).pos2.getY())); } else { lowPos.setY(Math.floor(user.get(player.getName()).pos1.getY())); hiPos.setY(Math.floor(user.get(player.getName()).pos2.getY())); } // xPos if (Math.floor(user.get(player.getName()).pos1.getX()) > Math.floor(user.get(player.getName()).pos2.getX())) { hiPos.setX(Math.floor(user.get(player.getName()).pos1.getX())); lowPos.setX(Math.floor(user.get(player.getName()).pos2.getX())); } else { lowPos.setX(Math.floor(user.get(player.getName()).pos1.getX())); hiPos.setX(Math.floor(user.get(player.getName()).pos2.getX())); } // zPos if (Math.floor(user.get(player.getName()).pos1.getZ()) > Math.floor(user.get(player.getName()).pos2.getZ())) { hiPos.setZ(Math.floor(user.get(player.getName()).pos1.getZ())); lowPos.setZ(Math.floor(user.get(player.getName()).pos2.getZ())); } else { lowPos.setZ(Math.floor(user.get(player.getName()).pos1.getZ())); hiPos.setZ(Math.floor(user.get(player.getName()).pos2.getZ())); } setup .getConfig() .set("arena." + setup.getConfig().getInt("nextarena") + ".1.y", Math.floor(hiPos.getY())); setup .getConfig() .set("arena." + setup.getConfig().getInt("nextarena") + ".1.x", Math.floor(hiPos.getX())); setup .getConfig() .set("arena." + setup.getConfig().getInt("nextarena") + ".1.z", Math.floor(hiPos.getZ())); setup .getConfig() .set( "arena." + setup.getConfig().getInt("nextarena") + ".2.y", Math.floor(lowPos.getY())); setup .getConfig() .set( "arena." + setup.getConfig().getInt("nextarena") + ".2.x", Math.floor(lowPos.getX())); setup .getConfig() .set( "arena." + setup.getConfig().getInt("nextarena") + ".2.z", Math.floor(lowPos.getZ())); setup .getConfig() .set( "arena." + setup.getConfig().getInt("nextarena") + ".name", user.get(player.getName()).arenaName); setup.getConfig().set("nextarena", setup.getConfig().getInt("nextarena") + 1); setup.saveConfig(); player.sendMessage( prefix + "Arena " + ChatColor.RED + user.get(player.getName()).arenaName + " (#" + (setup.getConfig().getInt("nextarena") - 1) + ")" + ChatColor.GOLD + " successfully set up!"); return true; } else { if (user.get(player.getName()).setup == 1) { user.get(player.getName()).pos1 = block.getLocation(); player.sendMessage( prefix + "Punch point " + ChatColor.RED + "#2" + ChatColor.GOLD + " - the opposite corner of the arena"); user.get(player.getName()).setup = 2; return true; } else { return false; } } }
void enableSpectate(Player spectator, CommandSender sender) { if (user.get(spectator.getName()).spectating) { // Spectate mode wasn't on if (sender instanceof Player && spectator.getName().equals(sender.getName())) { spectator.sendMessage(prefix + "You are already spectating!"); } else { sender.sendMessage( prefix + ChatColor.RED + spectator.getDisplayName() + ChatColor.GOLD + " is already spectating!"); } } else { // teleport them to the global lobby spawnPlayer(spectator); // hide them from everyone for (Player target : getServer().getOnlinePlayers()) { target.hidePlayer(spectator); } // gamemode and inventory spectator.setGameMode(GameMode.ADVENTURE); savePlayerInv(spectator); spectator.setAllowFlight(true); spectator.setFoodLevel(20); // disable interaction user.get(spectator.getName()).spectating = true; PotionEffect heal = new PotionEffect(PotionEffectType.HEAL, Integer.MAX_VALUE, 1000, true); spectator.addPotionEffect(heal); // give them compass if toggle on if (compass) { ItemStack compass = new ItemStack(Material.COMPASS, 1); ItemMeta compassMeta = (ItemMeta) compass.getItemMeta(); compassMeta.setDisplayName(ChatColor.BLUE + "Teleporter"); compass.setItemMeta(compassMeta); spectator.getInventory().addItem(compass); } // give them clock (only for arena mode and if toggle is on) if (clock) { String mode = setup.getConfig().getString("mode"); if (mode.equals("arena")) { ItemStack book = new ItemStack(Material.WATCH, 1); ItemMeta bookMeta = (ItemMeta) book.getItemMeta(); bookMeta.setDisplayName(ChatColor.DARK_RED + "Arena chooser"); book.setItemMeta(bookMeta); spectator.getInventory().addItem(book); } } // set the prefix in the tab list if the toggle is on if (scoreboard) { team.addPlayer(spectator); } // manage messages if spectator was enabled if (sender instanceof Player && spectator.getName().equals(sender.getName())) { if (output) { spectator.sendMessage(prefix + "Spectator mode " + ChatColor.RED + "enabled"); } } else if (sender instanceof Player && !spectator.getName().equals(sender.getName())) { if (output) { spectator.sendMessage( prefix + "Spectator mode " + ChatColor.RED + "enabled" + ChatColor.GOLD + " by " + ChatColor.RED + ((Player) sender).getDisplayName()); } sender.sendMessage( prefix + "Spectator mode " + ChatColor.RED + "enabled" + ChatColor.GOLD + " for " + ChatColor.RED + spectator.getDisplayName()); } else { if (output) { spectator.sendMessage( prefix + "Spectator mode " + ChatColor.RED + "enabled" + ChatColor.GOLD + " by " + ChatColor.DARK_RED + "Console"); } sender.sendMessage( prefix + "Spectator mode " + ChatColor.RED + "enabled" + ChatColor.GOLD + " for " + ChatColor.RED + spectator.getDisplayName()); } } }
public boolean onCommand( CommandSender sender, Command command, String label, String[] args) { // On command: to the sender of the command if (sender instanceof Player && sender.hasPermission("spectate.use")) { Player spectator = getServer().getPlayer(sender.getName()); if (args.length > 0 && args[0].equals("on")) { if (args.length == 1) { enableSpectate((Player) sender, sender); } else if (getServer().getPlayer(args[1]) != null) { enableSpectate(getServer().getPlayer(args[1]), sender); } else { sender.sendMessage( prefix + ChatColor.RED + args[1] + ChatColor.GOLD + " isn't online"); } } else if (args.length > 0 && args[0].equals("off")) { if (args.length == 1) { disableSpectate((Player) sender, sender); } else if (getServer().getPlayer(args[1]) != null) { disableSpectate(getServer().getPlayer(args[1]), sender); } else { sender.sendMessage( prefix + ChatColor.RED + args[1] + ChatColor.GOLD + " isn't online"); } } else if (args.length == 1 && args[0].equals("lobby")) { if (sender.hasPermission("spectate.set")) { spectator.sendMessage( prefix + "Usage: " + ChatColor.RED + "/spectate lobby <set/del>"); } else { spectator.sendMessage(prefix + "You do not have permission to change the mode!"); } } else if (args.length == 2 && args[0].equals("lobby") && args[1].equals("set")) { if (sender.hasPermission("spectate.set")) { Location where = spectator.getLocation(); setup.getConfig().set("xPos", Math.floor(where.getX()) + 0.5); setup.getConfig().set("yPos", Math.floor(where.getY())); setup.getConfig().set("zPos", Math.floor(where.getZ()) + 0.5); setup.getConfig().set("world", where.getWorld().getName()); setup.getConfig().set("active", true); setup.saveConfig(); spectator.sendMessage( prefix + "Location saved! Players will be teleported here when they spectate"); } else { spectator.sendMessage( prefix + "You do not have permission to set the lobby location!"); } } else if (args.length == 2 && args[0].equals("lobby") && (args[1].equals("del") || args[1].equals("delete"))) { if (sender.hasPermission("spectate.set")) { setup.getConfig().set("xPos", 0); setup.getConfig().set("yPos", 0); setup.getConfig().set("zPos", 0); setup.getConfig().set("world", null); setup.getConfig().set("active", false); setup.saveConfig(); spectator.sendMessage( prefix + "Spectator lobby location removed! Players will be teleported to spawn when they spectate"); } else { spectator.sendMessage( prefix + "You do not have permission to set the lobby location!"); } } else if (args.length == 1 && args[0].equals("mode")) { if (sender.hasPermission("spectate.set")) { spectator.sendMessage( prefix + "Usage: " + ChatColor.RED + "/spectate mode <arena/any>"); } else { spectator.sendMessage(prefix + "You do not have permission to change the mode!"); } } else if (args.length > 1 && args[0].equals("mode") && args[1].equals("any")) { if (sender.hasPermission("spectate.set")) { setup.getConfig().set("mode", "any"); setup.saveConfig(); spectator.sendMessage(prefix + "Mode set to " + ChatColor.RED + "any"); } else { spectator.sendMessage(prefix + "You do not have permission to change the mode!"); } } else if (args.length > 1 && args[0].equals("mode") && args[1].equals("arena")) { if (sender.hasPermission("spectate.set")) { setup.getConfig().set("mode", "arena"); setup.saveConfig(); spectator.sendMessage( prefix + "Mode set to " + ChatColor.RED + "arena" + ChatColor.GOLD + ". Only players in arena regions can be teleported to by spectators."); } else { spectator.sendMessage(prefix + "You do not have permission to change the mode!"); } } else if ((args.length == 1 && args[0].equals("arena")) || (args.length == 2 && args[0].equals("arena") && args[1].equals("add"))) { if (sender.hasPermission("spectate.set")) { spectator.sendMessage( prefix + "Usage: " + ChatColor.RED + "/spectate arena <add <name>/reset/lobby <id>/list>"); } else { spectator.sendMessage(prefix + "You do not have permission to change the mode!"); } } else if (args.length == 3 && args[0].equals("arena") && args[1].equals("add")) { if (sender.hasPermission("spectate.set")) { user.get(spectator.getName()).arenaName = args[2]; spectator.sendMessage( prefix + "Punch point " + ChatColor.RED + "#1" + ChatColor.GOLD + " - a corner of the arena"); user.get(spectator.getName()).setup = 1; } else { spectator.sendMessage(prefix + "You do not have permission to change the mode!"); } } else if (args.length == 2 && args[0].equals("arena") && args[1].equals("list")) { if (sender.hasPermission("spectate.set")) { spectator.sendMessage( ChatColor.GOLD + " ~~ " + ChatColor.RED + "Arenas" + ChatColor.GOLD + " ~~ "); for (int i = 1; i < setup.getConfig().getInt("nextarena"); i++) { spectator.sendMessage( ChatColor.RED + "(#" + i + ") " + setup.getConfig().getString("arena." + i + ".name") + ChatColor.GOLD + " Lobby x:" + setup.getConfig().getDouble("arena." + i + ".lobby.x") + " y:" + setup.getConfig().getDouble("arena." + i + ".lobby.y") + " z:" + setup.getConfig().getDouble("arena." + i + ".lobby.z")); } } else { spectator.sendMessage(prefix + "You do not have permission to change the mode!"); } } else if (args.length == 3 && args[0].equals("arena") && args[1].equals("lobby")) { if (sender.hasPermission("spectate.set")) { lobbySetup(spectator, args[2]); } else { spectator.sendMessage(prefix + "You do not have permission to change the mode!"); } } else if (args.length == 2 && args[0].equals("arena") && args[1].equals("reset")) { if (sender.hasPermission("spectate.set")) { setup.getConfig().set("arena", null); setup.getConfig().set("nextarena", 1); setup.saveConfig(); spectator.sendMessage(prefix + "All arenas removed."); } else { spectator.sendMessage(prefix + "You do not have permission to change the mode!"); } } else { printHelp(sender); } } else { if (sender instanceof Player) { sender.sendMessage(prefix + "You don't have permission to spectate!"); } else { // Console commands if (args.length > 0 && args[0].equals("on")) { if (args.length == 1) { sender.sendMessage(prefix + "Usage: /spec on <player>"); } else if (getServer().getPlayer(args[1]) != null) { enableSpectate(getServer().getPlayer(args[1]), sender); } else { sender.sendMessage( prefix + ChatColor.RED + args[1] + ChatColor.GOLD + " isn't online"); } } else if (args.length > 0 && args[0].equals("off")) { if (args.length == 1) { sender.sendMessage(prefix + "Usage: /spec off <player>"); } else if (getServer().getPlayer(args[1]) != null) { disableSpectate(getServer().getPlayer(args[1]), sender); } else { sender.sendMessage( prefix + ChatColor.RED + args[1] + ChatColor.GOLD + " isn't online"); } } else if (args.length == 1 && args[0].equals("mode")) { sender.sendMessage( prefix + "Usage: " + ChatColor.RED + "/spectate mode <arena/any>"); } else if (args.length > 1 && args[0].equals("mode") && args[1].equals("any")) { setup.getConfig().set("mode", "any"); setup.saveConfig(); sender.sendMessage(prefix + "Mode set to " + ChatColor.RED + "any"); } else if (args.length > 1 && args[0].equals("mode") && args[1].equals("arena")) { setup.getConfig().set("mode", "arena"); setup.saveConfig(); sender.sendMessage( prefix + "Mode set to " + ChatColor.RED + "arena" + ChatColor.GOLD + ". Only players in arena regions can be teleported to by spectators."); } else { printHelp(sender); } } } return true; // return true: to stop usage showing } // end of onCommand
// player head inventory method void tpPlayer(Player spectator, int region) { Inventory gui = null; for (Player player : getServer().getOnlinePlayers()) { if (setup.getConfig().getString("mode").equals("any")) { if (gui == null) gui = Bukkit.getServer().createInventory(spectator, 27, ChatColor.BLACK + "Teleporter"); if (player.hasPermission("spectate.hide") == false && user.get(player.getName()).spectating == false) { ItemStack playerhead = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); SkullMeta meta = (SkullMeta) playerhead.getItemMeta(); meta.setOwner(player.getName()); meta.setDisplayName(player.getName()); playerhead.setItemMeta(meta); gui.addItem(playerhead); } } else if (setup.getConfig().getString("mode").equals("arena")) { if (region == 0) { if (output) { spectator.sendMessage(prefix + "Pick an arena first using the clock!"); } return; } else { if (gui == null) gui = Bukkit.getServer() .createInventory( spectator, 27, ChatColor.BLACK + "Arena " + ChatColor.ITALIC + setup.getConfig().getString("arena." + region + ".name")); Location where = player.getLocation(); int pos1y = setup.getConfig().getInt("arena." + region + ".1.y"); int pos2y = setup.getConfig().getInt("arena." + region + ".2.y"); int pos1x = setup.getConfig().getInt("arena." + region + ".1.x"); int pos2x = setup.getConfig().getInt("arena." + region + ".2.x"); int pos1z = setup.getConfig().getInt("arena." + region + ".1.z"); int pos2z = setup.getConfig().getInt("arena." + region + ".2.z"); // pos1 should have the highest co-ords of the arena, pos2 the lowest if (player.hasPermission("spectate.hide") == false && user.get(player.getName()).spectating == false) { if (Math.floor(where.getY()) < Math.floor(pos1y) && Math.floor(where.getY()) > Math.floor(pos2y)) { if (Math.floor(where.getX()) < pos1x && Math.floor(where.getX()) > pos2x) { if (Math.floor(where.getZ()) < pos1z && Math.floor(where.getZ()) > pos2z) { ItemStack playerhead = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); SkullMeta meta = (SkullMeta) playerhead.getItemMeta(); meta.setOwner(player.getName()); meta.setDisplayName(player.getName()); playerhead.setItemMeta(meta); gui.addItem(playerhead); } } } } } } } spectator.openInventory(gui); }
// custom method to spawn the player in the lobby void spawnPlayer(Player player) { player.setFireTicks(0); if (setup.getConfig().getBoolean("active") == true) { Location where = new Location( getServer().getWorld(setup.getConfig().getString("world")), setup.getConfig().getDouble("xPos"), setup.getConfig().getDouble("yPos"), setup.getConfig().getDouble("zPos")); Location aboveWhere = new Location( getServer().getWorld(setup.getConfig().getString("world")), setup.getConfig().getDouble("xPos"), setup.getConfig().getDouble("yPos") + 1, setup.getConfig().getDouble("zPos")); Location belowWhere = new Location( getServer().getWorld(setup.getConfig().getString("world")), setup.getConfig().getDouble("xPos"), setup.getConfig().getDouble("yPos") - 1, setup.getConfig().getDouble("zPos")); if (where.getBlock().getType() != Material.AIR || aboveWhere.getBlock().getType() != Material.AIR || (belowWhere.getBlock().getType() == Material.AIR || belowWhere.getBlock().getType() == Material.LAVA || belowWhere.getBlock().getType() == Material.WATER)) { while (where.getBlock().getType() != Material.AIR || aboveWhere.getBlock().getType() != Material.AIR || (belowWhere.getBlock().getType() == Material.AIR || belowWhere.getBlock().getType() == Material.LAVA || belowWhere.getBlock().getType() == Material.WATER)) { where.setY(where.getY() + 1); aboveWhere.setY(aboveWhere.getY() + 1); belowWhere.setY(belowWhere.getY() + 1); if (where.getY() > getServer() .getWorld(setup.getConfig().getString("world")) .getHighestBlockYAt(where)) { where.setY(where.getY() - 2); aboveWhere.setY(aboveWhere.getY() - 2); belowWhere.setY(belowWhere.getY() - 2); } } } user.get(player.getName()).teleporting = true; player.teleport(where); user.get(player.getName()).teleporting = false; } else { player.performCommand("spawn"); } }