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.");
}
}
}
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;
}
});
}
Aggregations