Search in sources :

Example 1 with Prism

use of me.botsko.prism.Prism in project Prism-Bukkit by prism.

the class RadiusParameter method process.

/**
	 * 
	 */
@Override
public void process(QueryParameters query, String alias, String input, CommandSender sender) {
    Player player = null;
    if (sender instanceof Player) {
        player = (Player) sender;
    }
    String inputValue = input;
    final FileConfiguration config = Bukkit.getPluginManager().getPlugin("Prism").getConfig();
    if (TypeUtils.isNumeric(inputValue) || (inputValue.contains(":") && inputValue.split(":").length >= 1 && TypeUtils.isNumeric(inputValue.split(":")[1]))) {
        int radius, desiredRadius;
        Location coordsLoc = null;
        if (inputValue.contains(":")) {
            desiredRadius = Integer.parseInt(inputValue.split(":")[1]);
            final String radiusLocOrPlayer = inputValue.split(":")[0];
            if (radiusLocOrPlayer.contains(",") && player != null) {
                // Coordinates;
                // x,y,z
                final String[] coordinates = radiusLocOrPlayer.split(",");
                if (coordinates.length != 3) {
                    throw new IllegalArgumentException("Couldn't parse the coordinates '" + radiusLocOrPlayer + "'. Perhaps you have more than two commas?");
                }
                for (final String s : coordinates) {
                    if (!TypeUtils.isNumeric(s)) {
                        throw new IllegalArgumentException("The coordinate '" + s + "' is not a number.");
                    }
                }
                coordsLoc = (new Location(player.getWorld(), Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1]), Integer.parseInt(coordinates[2])));
            } else // Try to find an online player
            if (Bukkit.getServer().getPlayer(radiusLocOrPlayer) != null) {
                player = Bukkit.getServer().getPlayer(radiusLocOrPlayer);
            } else {
                throw new IllegalArgumentException("Couldn't find the player named '" + radiusLocOrPlayer + "'. Perhaps they are not online or you misspelled their name?");
            }
        } else {
            desiredRadius = Integer.parseInt(inputValue);
        }
        if (desiredRadius <= 0) {
            throw new IllegalArgumentException("Radius must be greater than zero. Or leave it off to use the default. Use /prism ? for help.");
        }
        // If neither sender or a named player found, die here
        if (player == null) {
            throw new IllegalArgumentException("The radius parameter must be used by a player. Use w:worldname if attempting to limit to a world.");
        }
        // Clamp radius based on perms, configs
        radius = MiscUtils.clampRadius(player, desiredRadius, query.getProcessType(), config);
        if (desiredRadius != radius) {
            if (sender != null)
                sender.sendMessage(Prism.messenger.playerError("Forcing radius to " + radius + " as allowed by config."));
        }
        if (radius > 0) {
            query.setRadius(radius);
            if (coordsLoc != null) {
                // We
                query.setMinMaxVectorsFromPlayerLocation(coordsLoc);
            // need
            // to
            // set
            // this
            // *after*
            // the
            // radius
            // has
            // been
            // set
            // or
            // it
            // won't
            // work.
            } else {
                query.setMinMaxVectorsFromPlayerLocation(player.getLocation());
            }
        }
    } else {
        // If neither sender or a named player found, die here
        if (player == null) {
            throw new IllegalArgumentException("The radius parameter must be used by a player. Use w:worldname if attempting to limit to a world.");
        }
        // User wants an area inside of a worldedit selection
        if (inputValue.equals("we")) {
            if (Prism.plugin_worldEdit == null) {
                throw new IllegalArgumentException("This feature is disabled because Prism couldn't find WorldEdit.");
            } else {
                // Load a selection from world edit as our area.
                final Prism prism = (Prism) Bukkit.getPluginManager().getPlugin("Prism");
                if (!WorldEditBridge.getSelectedArea(prism, player, query)) {
                    throw new IllegalArgumentException("Invalid region selected. Make sure you have a region selected, and that it doesn't exceed the max radius.");
                }
            }
        } else // Confine to the chunk
        if (inputValue.equals("c") || inputValue.equals("chunk")) {
            final Chunk ch = player.getLocation().getChunk();
            query.setWorld(ch.getWorld().getName());
            query.setMinLocation(ChunkUtils.getChunkMinVector(ch));
            query.setMaxLocation(ChunkUtils.getChunkMaxVector(ch));
        } else // User wants no radius, but contained within the current world
        if (inputValue.equals("world")) {
            // Do they have permission to override the global lookup radius
            if (query.getProcessType().equals(PrismProcessType.LOOKUP) && !player.hasPermission("prism.override-max-lookup-radius")) {
                throw new IllegalArgumentException("You do not have permission to override the max radius.");
            }
            // Do they have permission to override the global applier radius
            if (!query.getProcessType().equals(PrismProcessType.LOOKUP) && !player.hasPermission("prism.override-max-applier-radius")) {
                throw new IllegalArgumentException("You do not have permission to override the max radius.");
            }
            // Use the world defined in the w: param
            if (query.getWorld() != null) {
                inputValue = query.getWorld();
            } else // Use the current world
            {
                inputValue = player.getWorld().getName();
            }
            query.setWorld(inputValue);
            query.setAllowNoRadius(true);
        } else // User has asked for a global radius
        if (inputValue.equals("global")) {
            // Do they have permission to override the global lookup radius
            if (query.getProcessType().equals(PrismProcessType.LOOKUP) && !player.hasPermission("prism.override-max-lookup-radius")) {
                throw new IllegalArgumentException("You do not have permission to override the max radius.");
            }
            // Do they have permission to override the global applier radius
            if (!query.getProcessType().equals(PrismProcessType.LOOKUP) && !player.hasPermission("prism.override-max-applier-radius")) {
                throw new IllegalArgumentException("You do not have permission to override the max radius.");
            }
            // Either they have permission or player is null
            query.setWorld(null);
            query.setAllowNoRadius(true);
        } else {
            throw new IllegalArgumentException("Radius is invalid. There's a bunch of choice, so use /prism actions for assistance.");
        }
    }
}
Also used : FileConfiguration(org.bukkit.configuration.file.FileConfiguration) Player(org.bukkit.entity.Player) Chunk(org.bukkit.Chunk) Prism(me.botsko.prism.Prism) Location(org.bukkit.Location)

Example 2 with Prism

use of me.botsko.prism.Prism in project Prism-Bukkit by prism.

the class PrismCommands method setupCommands.

/**
	 * 
	 */
private void setupCommands() {
    final Prism prism = (Prism) plugin;
    /**
         * /prism about
         */
    addSub(new String[] { "about", "default" }, "prism.help").allowConsole().setHandler(new AboutCommand(prism));
    /**
         * /prism lookup
         */
    addSub(new String[] { "lookup", "l" }, "prism.lookup").allowConsole().setMinArgs(1).setHandler(new LookupCommand(prism));
    /**
         * /prism near
         */
    addSub("near", "prism.lookup").setHandler(new NearCommand(prism));
    /**
         * /prism page [page]
         */
    addSub(new String[] { "page", "pg" }, new String[] { "prism.lookup.paginate", "prism.lookup" }).allowConsole().setMinArgs(1).setHandler(new PageCommand(prism));
    /**
         * /prism wand
         */
    addSub(new String[] { "wand", "w", "i", "inspect" }, new String[] { "prism.rollback", "prism.restore", "prism.lookup", "prism.wand.inspect", "prism.wand.profile", "prism.wand.rollback", "prism.wand.restore" }).setHandler(new WandCommand(prism));
    /**
         * /prism setmy
         */
    addSub(new String[] { "setmy" }, new String[] { "prism.setmy.wand" }).setHandler(new SetmyCommand(prism));
    /**
         * /prism resetmy
         */
    addSub(new String[] { "resetmy" }, new String[] { "prism.setmy.wand" }).setHandler(new ResetmyCommand(prism));
    /**
         * /prism teleport [id]
         */
    addSub("tp", "prism.tp").setMinArgs(1).setHandler(new TeleportCommand(prism));
    /**
         * /prism ext
         */
    addSub("ex", "prism.extinguish").setHandler(new ExtinguishCommand(prism));
    /**
         * /prism drain
         */
    addSub("drain", "prism.drain").setHandler(new DrainCommand(prism));
    /**
         * /prism preview (params)
         */
    addSub(new String[] { "preview", "pv" }, "prism.preview").setMinArgs(1).setHandler(new PreviewCommand(prism));
    /**
         * /prism report
         */
    addSub(new String[] { "report", "rp" }, "prism.report").allowConsole().setHandler(new ReportCommand(prism));
    /**
         * /prism rollback (params)
         */
    addSub(new String[] { "rollback", "rb" }, "prism.rollback").allowConsole().setMinArgs(1).setHandler(new RollbackCommand(prism));
    /**
         * /prism restore (params)
         */
    addSub(new String[] { "restore", "rs" }, "prism.restore").allowConsole().setMinArgs(1).setHandler(new RestoreCommand(prism));
    /**
         * /prism delete (time)
         */
    addSub(new String[] { "delete", "purge" }, "prism.delete").allowConsole().setHandler(new DeleteCommand(prism));
    /**
         * /prism recorder
         */
    addSub("recorder", "prism.recorder").allowConsole().setHandler(new RecorderCommand(prism));
    /**
         * /prism undo
         */
    addSub("undo", "prism.rollback").setHandler(new UndoCommand(prism));
    /**
         * /prism view
         */
    addSub(new String[] { "view", "v" }, "prism.view").setMinArgs(1).setHandler(new ViewCommand(prism));
    /**
         * /prism ?
         */
    addSub(new String[] { "help", "?" }, "prism.help").allowConsole().setHandler(new HelpCommand());
    /**
         * /prism params
         */
    addSub("params", "prism.help").allowConsole().setHandler(new ParamsCommand());
    /**
         * /prism actions
         */
    addSub("actions", "prism.help").allowConsole().setHandler(new ActionsCommand());
    /**
         * /prism flags
         */
    addSub("flags", "prism.help").allowConsole().setHandler(new FlagsCommand());
    /**
         * /prism reload
         */
    addSub("reload", "prism.reload").allowConsole().setHandler(new SubHandler() {

        @Override
        public void handle(CallInfo call) {
            prism.reloadConfig();
            call.getSender().sendMessage(Prism.messenger.playerHeaderMsg("Configuration reloaded successfully."));
        }

        @Override
        public List<String> handleComplete(CallInfo call) {
            return null;
        }
    });
}
Also used : SubHandler(me.botsko.prism.commandlibs.SubHandler) CallInfo(me.botsko.prism.commandlibs.CallInfo) List(java.util.List) Prism(me.botsko.prism.Prism)

Aggregations

Prism (me.botsko.prism.Prism)2 List (java.util.List)1 CallInfo (me.botsko.prism.commandlibs.CallInfo)1 SubHandler (me.botsko.prism.commandlibs.SubHandler)1 Chunk (org.bukkit.Chunk)1 Location (org.bukkit.Location)1 FileConfiguration (org.bukkit.configuration.file.FileConfiguration)1 Player (org.bukkit.entity.Player)1