public AsyncCommandHelper forRegionDataLoad(World world, boolean silent) { checkNotNull(world); formatUsing(world.getName()); registerWithSupervisor("Loading region data for '%s'"); if (silent) { thenTellErrorsOnly("Failed to load regions '%s'"); } else { sendMessageAfterDelay("(Please wait... loading the region data for '%s')"); thenRespondWith( "Loaded region data for '%s'", "Failed to load regions '%s'"); } return this; }
/** * Submit data to a pastebin service and inform the sender of * success or failure. * * @param supervisor The supervisor instance * @param sender The sender * @param content The content * @param successMessage The message, formatted with {@link String#format(String, Object...)} on success */ public static void pastebin(Supervisor supervisor, final Actor sender, String content, final String successMessage, final ExceptionConverter exceptionConverter) { ListenableFuture<URL> future = new EngineHubPaste().paste(content); AsyncCommandHelper.wrap(future, supervisor, sender, exceptionConverter) .registerWithSupervisor("Submitting content to a pastebin service...") .sendMessageAfterDelay("(Please wait... sending output to pastebin...)"); Futures.addCallback(future, new FutureCallback<URL>() { @Override public void onSuccess(URL url) { sender.print(String.format(successMessage, url)); } @Override public void onFailure(Throwable throwable) { LOGGER.log(Level.WARNING, "Failed to submit pastebin", throwable); sender.printError("Failed to submit to a pastebin. Please see console for the error."); } }); }
public static AsyncCommandHelper wrap(ListenableFuture<?> future, Supervisor supervisor, Actor sender, ExceptionConverter exceptionConverter) { return new AsyncCommandHelper(future, supervisor, sender, exceptionConverter); }
AsyncCommandHelper.wrap(WorldGuard.getInstance().getExecutorService().submit(task), worldGuard.getSupervisor(), sender, worldGuard.getExceptionConverter()) .formatUsing(existing.getId()) .registerWithSupervisor("Removing the region '%s'...") .sendMessageAfterDelay("(Please wait... removing '%s'...)") .thenRespondWith( "The region named '%s' has been removed.", "Failed to remove the region '%s'");
AsyncCommandHelper.wrap(sampler.getFuture(), worldGuard.getSupervisor(), sender, worldGuard.getExceptionConverter()) .formatUsing(minutes) .registerWithSupervisor("Running CPU profiler for %d minute(s)...") .sendMessageAfterDelay("(Please wait... profiling for %d minute(s)...)") .thenTellErrorsOnly("CPU profiling failed.");
AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), sender, worldGuard.getExceptionConverter()) .forRegionDataSave(world, false); } else { AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), sender, worldGuard.getExceptionConverter()) .registerWithSupervisor("Saving regions for all worlds") .sendMessageAfterDelay("(Please wait... saving region data for all worlds...)") .thenRespondWith( "Successfully saved the region data for all worlds.", "Failed to save regions for all worlds");
AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), sender, worldGuard.getExceptionConverter()) .forRegionDataLoad(world, false); } else { AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), sender, worldGuard.getExceptionConverter()) .registerWithSupervisor("Loading regions for all worlds") .sendMessageAfterDelay("(Please wait... loading region data for all worlds...)") .thenRespondWith( "Successfully load the region data for all worlds.", "Failed to load regions for all worlds");
public AsyncCommandHelper sendMessageAfterDelay(String message) { FutureProgressListener.addProgressListener(future, sender, format(message)); return this; }
@Command(aliases = {"addmember", "addmember", "addmem", "am"}, usage = "<id> <members...>", flags = "nw:", desc = "Add a member to a region", min = 2) public void addMember(CommandContext args, Actor sender) throws CommandException { warnAboutSaveFailures(sender); World world = checkWorld(args, sender, 'w'); // Get the world String id = args.getString(0); RegionManager manager = checkRegionManager(world); ProtectedRegion region = checkExistingRegion(manager, id, true); id = region.getId(); // Check permissions if (!getPermissionModel(sender).mayAddMembers(region)) { throw new CommandPermissionsException(); } // Resolve members asynchronously DomainInputResolver resolver = new DomainInputResolver( WorldGuard.getInstance().getProfileService(), args.getParsedPaddedSlice(1, 0)); resolver.setLocatorPolicy(args.hasFlag('n') ? UserLocatorPolicy.NAME_ONLY : UserLocatorPolicy.UUID_ONLY); // Then add it to the members ListenableFuture<DefaultDomain> future = Futures.transform( WorldGuard.getInstance().getExecutorService().submit(resolver), resolver.createAddAllFunction(region.getMembers())); AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), sender, worldGuard.getExceptionConverter()) .formatUsing(region.getId(), world.getName()) .registerWithSupervisor("Adding members to the region '%s' on '%s'") .sendMessageAfterDelay("(Please wait... querying player names...)") .thenRespondWith("Region '%s' updated with new members.", "Failed to add new members"); }
AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), sender, worldGuard.getExceptionConverter()) .registerWithSupervisor("Getting list of regions...") .sendMessageAfterDelay("(Please wait... fetching region list...)") .thenTellErrorsOnly("Failed to fetch region list");
public AsyncCommandHelper registerWithSupervisor(String description) { supervisor.monitor( FutureForwardingTask.create( future, format(description), sender)); return this; }
ListenableFuture<?> future = WorldGuard.getInstance().getExecutorService().submit(task); AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), player, worldGuard.getExceptionConverter()) .formatUsing(id) .registerWithSupervisor("Updating the region '%s'...") .sendMessageAfterDelay("(Please wait... updating '%s'...)") .thenRespondWith( "Region '%s' has been updated with a new area.", "Failed to update the region '%s'");
public AsyncCommandHelper forRegionDataSave(World world, boolean silent) { checkNotNull(world); formatUsing(world.getName()); registerWithSupervisor("Saving region data for '%s'"); if (silent) { thenTellErrorsOnly("Failed to save regions '%s'"); } else { sendMessageAfterDelay("(Please wait... saving the region data for '%s')"); thenRespondWith( "Saved region data for '%s'", "Failed to load regions '%s'"); } return this; }
ListenableFuture<?> future = WorldGuard.getInstance().getExecutorService().submit(task); AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), player, worldGuard.getExceptionConverter()) .formatUsing(id) .registerWithSupervisor("Adding the region '%s'...") .sendMessageAfterDelay("(Please wait... adding '%s'...)") .thenRespondWith( "A new region has been made named '%s'.", "Failed to add the region '%s'");
public AsyncCommandHelper thenTellErrorsOnly(String failure) { // Send a response message Futures.addCallback( future, new MessageFutureCallback.Builder(sender) .exceptionConverter(exceptionConverter) .onFailure(format(failure)) .build()); return this; }
AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), sender, worldGuard.getExceptionConverter()) .formatUsing(region.getId(), world.getName()) .registerWithSupervisor("Removing owners from the region '%s' on '%s'") .sendMessageAfterDelay("(Please wait... querying player names...)") .thenRespondWith("Region '%s' updated with owners removed.", "Failed to remove owners");
AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), sender, worldGuard.getExceptionConverter()) .formatUsing(region.getId(), world.getName()) .registerWithSupervisor("Removing members from the region '%s' on '%s'") .sendMessageAfterDelay("(Please wait... querying player names...)") .thenRespondWith("Region '%s' updated with members removed.", "Failed to remove members");
resolver.createAddAllFunction(region.getOwners())); AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), sender, worldGuard.getExceptionConverter()) .formatUsing(region.getId(), world.getName()) .registerWithSupervisor("Adding owners to the region '%s' on '%s'") .sendMessageAfterDelay("(Please wait... querying player names...)") .thenRespondWith("Region '%s' updated with new owners.", "Failed to add new owners");
ListenableFuture<?> future = worldGuard.getExecutorService().submit(task); AsyncCommandHelper.wrap(future, worldGuard.getSupervisor(), player, worldGuard.getExceptionConverter()) .formatUsing(id) .registerWithSupervisor("Claiming the region '%s'...") .sendMessageAfterDelay("(Please wait... claiming '%s'...)") .thenRespondWith( "A new region has been claimed named '%s'.", "Failed to claim the region '%s'");