Search in sources :

Example 21 with Command

use of com.sk89q.minecraft.util.commands.Command in project FastAsyncWorldEdit by IntellectualSites.

the class CommandsManagerRegistration method registerAll.

public boolean registerAll(List<Command> registered) {
    List<CommandInfo> toRegister = new ArrayList<>();
    for (Command command : registered) {
        List<String> permissions = null;
        Method cmdMethod = commands.getMethods().get(null).get(command.aliases()[0]);
        Map<String, Method> childMethods = commands.getMethods().get(cmdMethod);
        if (cmdMethod != null && cmdMethod.isAnnotationPresent(CommandPermissions.class)) {
            permissions = Arrays.asList(cmdMethod.getAnnotation(CommandPermissions.class).value());
        } else if (cmdMethod != null && childMethods != null && !childMethods.isEmpty()) {
            permissions = new ArrayList<>();
            for (Method m : childMethods.values()) {
                if (m.isAnnotationPresent(CommandPermissions.class)) {
                    permissions.addAll(Arrays.asList(m.getAnnotation(CommandPermissions.class).value()));
                }
            }
        }
        toRegister.add(new CommandInfo(command.usage(), command.desc(), command.aliases(), commands, permissions == null ? null : permissions.toArray(new String[permissions.size()])));
    }
    return register(toRegister);
}
Also used : Command(com.sk89q.minecraft.util.commands.Command) ArrayList(java.util.ArrayList) Method(java.lang.reflect.Method) CommandPermissions(com.sk89q.minecraft.util.commands.CommandPermissions)

Example 22 with Command

use of com.sk89q.minecraft.util.commands.Command in project WorldGuard by EngineHub.

the class ToggleCommands method allowFire.

@Command(aliases = { "allowfire" }, usage = "[<world>]", desc = "Allows all fire spread temporarily", max = 1)
@CommandPermissions({ "worldguard.fire-toggle.stop" })
public void allowFire(CommandContext args, Actor sender) throws CommandException {
    World world;
    if (args.argsLength() == 0) {
        world = worldGuard.checkPlayer(sender).getWorld();
    } else {
        world = worldGuard.getPlatform().getMatcher().matchWorld(sender, args.getString(0));
    }
    WorldConfiguration wcfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(world);
    if (wcfg.fireSpreadDisableToggle) {
        worldGuard.getPlatform().broadcastNotification(LabelFormat.wrap("Fire spread has been globally for '" + world.getName() + "' re-enabled by " + sender.getDisplayName() + "."));
    } else {
        sender.print("Fire spread was already globally enabled.");
    }
    wcfg.fireSpreadDisableToggle = false;
}
Also used : WorldConfiguration(com.sk89q.worldguard.config.WorldConfiguration) World(com.sk89q.worldedit.world.World) Command(com.sk89q.minecraft.util.commands.Command) CommandPermissions(com.sk89q.minecraft.util.commands.CommandPermissions)

Example 23 with Command

use of com.sk89q.minecraft.util.commands.Command in project WorldGuard by EngineHub.

the class WorldGuardCommands method report.

@Command(aliases = { "report" }, desc = "Writes a report on WorldGuard", flags = "p", max = 0)
@CommandPermissions({ "worldguard.report" })
public void report(CommandContext args, final Actor sender) throws CommandException, AuthorizationException {
    ReportList report = new ReportList("Report");
    worldGuard.getPlatform().addPlatformReports(report);
    report.add(new SystemInfoReport());
    report.add(new ConfigReport());
    if (sender instanceof LocalPlayer) {
        report.add(new ApplicableRegionsReport((LocalPlayer) sender));
    }
    String result = report.toString();
    try {
        File dest = new File(worldGuard.getPlatform().getConfigDir().toFile(), "report.txt");
        Files.write(result, dest, StandardCharsets.UTF_8);
        sender.print("WorldGuard report written to " + dest.getAbsolutePath());
    } catch (IOException e) {
        throw new CommandException("Failed to write report: " + e.getMessage());
    }
    if (args.hasFlag('p')) {
        sender.checkPermission("worldguard.report.pastebin");
        ActorCallbackPaste.pastebin(worldGuard.getSupervisor(), sender, result, "WorldGuard report: %s.report");
    }
}
Also used : LocalPlayer(com.sk89q.worldguard.LocalPlayer) IOException(java.io.IOException) CommandException(com.sk89q.minecraft.util.commands.CommandException) SystemInfoReport(com.sk89q.worldedit.util.report.SystemInfoReport) File(java.io.File) ReportList(com.sk89q.worldedit.util.report.ReportList) ApplicableRegionsReport(com.sk89q.worldguard.util.report.ApplicableRegionsReport) ConfigReport(com.sk89q.worldguard.util.report.ConfigReport) NestedCommand(com.sk89q.minecraft.util.commands.NestedCommand) Command(com.sk89q.minecraft.util.commands.Command) CommandPermissions(com.sk89q.minecraft.util.commands.CommandPermissions)

Example 24 with Command

use of com.sk89q.minecraft.util.commands.Command in project WorldGuard by EngineHub.

the class WorldGuardCommands method profile.

@Command(aliases = { "profile" }, usage = "[-p] [-i <interval>] [-t <thread filter>] [<minutes>]", desc = "Profile the CPU usage of the server", min = 0, max = 1, flags = "t:i:p")
@CommandPermissions("worldguard.profile")
public void profile(final CommandContext args, final Actor sender) throws CommandException, AuthorizationException {
    Predicate<ThreadInfo> threadFilter;
    String threadName = args.getFlag('t');
    final boolean pastebin;
    if (args.hasFlag('p')) {
        sender.checkPermission("worldguard.report.pastebin");
        pastebin = true;
    } else {
        pastebin = false;
    }
    if (threadName == null) {
        threadFilter = new ThreadIdFilter(Thread.currentThread().getId());
    } else if (threadName.equals("*")) {
        threadFilter = thread -> true;
    } else {
        threadFilter = new ThreadNameFilter(threadName);
    }
    int minutes;
    if (args.argsLength() == 0) {
        minutes = 5;
    } else {
        minutes = args.getInteger(0);
        if (minutes < 1) {
            throw new CommandException("You must run the profile for at least 1 minute.");
        } else if (minutes > 10) {
            throw new CommandException("You can profile for, at maximum, 10 minutes.");
        }
    }
    int interval = 20;
    if (args.hasFlag('i')) {
        interval = args.getFlagInteger('i');
        if (interval < 1 || interval > 100) {
            throw new CommandException("Interval must be between 1 and 100 (in milliseconds)");
        }
        if (interval < 10) {
            sender.printDebug("Note: A low interval may cause additional slowdown during profiling.");
        }
    }
    Sampler sampler;
    synchronized (this) {
        if (activeSampler != null) {
            throw new CommandException("A profile is currently in progress! Please use /wg stopprofile to cancel the current profile.");
        }
        SamplerBuilder builder = new SamplerBuilder();
        builder.setThreadFilter(threadFilter);
        builder.setRunTime(minutes, TimeUnit.MINUTES);
        builder.setInterval(interval);
        sampler = activeSampler = builder.start();
    }
    sender.print(TextComponent.of("Starting CPU profiling. Results will be available in " + minutes + " minutes.", TextColor.LIGHT_PURPLE).append(TextComponent.newline()).append(TextComponent.of("Use ", TextColor.GRAY)).append(TextComponent.of("/wg stopprofile", TextColor.AQUA).clickEvent(ClickEvent.of(ClickEvent.Action.SUGGEST_COMMAND, "/wg stopprofile"))).append(TextComponent.of(" at any time to cancel CPU profiling.", TextColor.GRAY)));
    worldGuard.getSupervisor().monitor(FutureForwardingTask.create(sampler.getFuture(), "CPU profiling for " + minutes + " minutes", sender));
    sampler.getFuture().addListener(() -> {
        synchronized (WorldGuardCommands.this) {
            activeSampler = null;
        }
    }, MoreExecutors.directExecutor());
    Futures.addCallback(sampler.getFuture(), new FutureCallback<>() {

        @Override
        public void onSuccess(Sampler result) {
            String output = result.toString();
            try {
                File dest = new File(worldGuard.getPlatform().getConfigDir().toFile(), "profile.txt");
                Files.write(output, dest, StandardCharsets.UTF_8);
                sender.print("CPU profiling data written to " + dest.getAbsolutePath());
            } catch (IOException e) {
                sender.printError("Failed to write CPU profiling data: " + e.getMessage());
            }
            if (pastebin) {
                ActorCallbackPaste.pastebin(worldGuard.getSupervisor(), sender, output, "Profile result: %s.profile");
            }
        }

        @Override
        public void onFailure(Throwable throwable) {
        }
    }, MoreExecutors.directExecutor());
}
Also used : Sampler(com.sk89q.worldguard.util.profiler.SamplerBuilder.Sampler) MoreExecutors(com.google.common.util.concurrent.MoreExecutors) CommandPermissions(com.sk89q.minecraft.util.commands.CommandPermissions) FutureForwardingTask(com.sk89q.worldedit.util.task.FutureForwardingTask) SystemInfoReport(com.sk89q.worldedit.util.report.SystemInfoReport) World(com.sk89q.worldedit.world.World) ActorCallbackPaste(com.sk89q.worldedit.util.paste.ActorCallbackPaste) SamplerBuilder(com.sk89q.worldguard.util.profiler.SamplerBuilder) Level(java.util.logging.Level) CommandException(com.sk89q.minecraft.util.commands.CommandException) Task(com.sk89q.worldedit.util.task.Task) ApplicableRegionsReport(com.sk89q.worldguard.util.report.ApplicableRegionsReport) ThreadInfo(java.lang.management.ThreadInfo) AuthorizationException(com.sk89q.worldedit.util.auth.AuthorizationException) Files(com.google.common.io.Files) TextColor(com.sk89q.worldedit.util.formatting.text.format.TextColor) ClickEvent(com.sk89q.worldedit.util.formatting.text.event.ClickEvent) WorldGuard(com.sk89q.worldguard.WorldGuard) NestedCommand(com.sk89q.minecraft.util.commands.NestedCommand) ConfigReport(com.sk89q.worldguard.util.report.ConfigReport) WorldEdit(com.sk89q.worldedit.WorldEdit) ReportList(com.sk89q.worldedit.util.report.ReportList) Nullable(javax.annotation.Nullable) TaskStateComparator(com.sk89q.worldedit.util.task.TaskStateComparator) ThreadNameFilter(com.sk89q.worldguard.util.profiler.ThreadNameFilter) TextComponent(com.sk89q.worldedit.util.formatting.text.TextComponent) Predicate(java.util.function.Predicate) LoggerToChatHandler(com.sk89q.worldguard.util.logging.LoggerToChatHandler) ThreadIdFilter(com.sk89q.worldguard.util.profiler.ThreadIdFilter) LocalPlayer(com.sk89q.worldguard.LocalPlayer) IOException(java.io.IOException) MessageBox(com.sk89q.worldedit.util.formatting.component.MessageBox) Logger(java.util.logging.Logger) FutureCallback(com.google.common.util.concurrent.FutureCallback) File(java.io.File) StandardCharsets(java.nio.charset.StandardCharsets) Actor(com.sk89q.worldedit.extension.platform.Actor) TimeUnit(java.util.concurrent.TimeUnit) TextComponentProducer(com.sk89q.worldedit.util.formatting.component.TextComponentProducer) Futures(com.google.common.util.concurrent.Futures) List(java.util.List) ConfigurationManager(com.sk89q.worldguard.config.ConfigurationManager) Capability(com.sk89q.worldedit.extension.platform.Capability) CommandContext(com.sk89q.minecraft.util.commands.CommandContext) Command(com.sk89q.minecraft.util.commands.Command) ThreadNameFilter(com.sk89q.worldguard.util.profiler.ThreadNameFilter) ThreadIdFilter(com.sk89q.worldguard.util.profiler.ThreadIdFilter) CommandException(com.sk89q.minecraft.util.commands.CommandException) IOException(java.io.IOException) SamplerBuilder(com.sk89q.worldguard.util.profiler.SamplerBuilder) ThreadInfo(java.lang.management.ThreadInfo) Sampler(com.sk89q.worldguard.util.profiler.SamplerBuilder.Sampler) File(java.io.File) NestedCommand(com.sk89q.minecraft.util.commands.NestedCommand) Command(com.sk89q.minecraft.util.commands.Command) CommandPermissions(com.sk89q.minecraft.util.commands.CommandPermissions)

Example 25 with Command

use of com.sk89q.minecraft.util.commands.Command in project WorldGuard by EngineHub.

the class WorldGuardCommands method listRunningTasks.

@Command(aliases = { "running", "queue" }, desc = "List running tasks", max = 0)
@CommandPermissions("worldguard.running")
public void listRunningTasks(CommandContext args, Actor sender) throws CommandException {
    List<Task<?>> tasks = WorldGuard.getInstance().getSupervisor().getTasks();
    if (tasks.isEmpty()) {
        sender.print("There are currently no running tasks.");
    } else {
        tasks.sort(new TaskStateComparator());
        MessageBox builder = new MessageBox("Running Tasks", new TextComponentProducer());
        builder.append(TextComponent.of("Note: Some 'running' tasks may be waiting to be start.", TextColor.GRAY));
        for (Task<?> task : tasks) {
            builder.append(TextComponent.newline());
            builder.append(TextComponent.of("(" + task.getState().name() + ") ", TextColor.BLUE));
            builder.append(TextComponent.of(CommandUtils.getOwnerName(task.getOwner()) + ": ", TextColor.YELLOW));
            builder.append(TextComponent.of(task.getName(), TextColor.WHITE));
        }
        sender.print(builder.create());
    }
}
Also used : FutureForwardingTask(com.sk89q.worldedit.util.task.FutureForwardingTask) Task(com.sk89q.worldedit.util.task.Task) TaskStateComparator(com.sk89q.worldedit.util.task.TaskStateComparator) TextComponentProducer(com.sk89q.worldedit.util.formatting.component.TextComponentProducer) MessageBox(com.sk89q.worldedit.util.formatting.component.MessageBox) NestedCommand(com.sk89q.minecraft.util.commands.NestedCommand) Command(com.sk89q.minecraft.util.commands.Command) CommandPermissions(com.sk89q.minecraft.util.commands.CommandPermissions)

Aggregations

Command (com.sk89q.minecraft.util.commands.Command)41 LocalPlayer (com.sk89q.worldguard.LocalPlayer)24 World (com.sk89q.worldedit.world.World)23 CommandPermissionsException (com.sk89q.minecraft.util.commands.CommandPermissionsException)22 CommandException (com.sk89q.minecraft.util.commands.CommandException)18 RegionManager (com.sk89q.worldguard.protection.managers.RegionManager)18 ProtectedRegion (com.sk89q.worldguard.protection.regions.ProtectedRegion)16 CommandPermissions (com.sk89q.minecraft.util.commands.CommandPermissions)15 GlobalProtectedRegion (com.sk89q.worldguard.protection.regions.GlobalProtectedRegion)12 NestedCommand (com.sk89q.minecraft.util.commands.NestedCommand)5 ConfigurationManager (com.sk89q.worldguard.config.ConfigurationManager)5 LoggerToChatHandler (com.sk89q.worldguard.util.logging.LoggerToChatHandler)5 Logger (java.util.logging.Logger)5 RegionPermissionModel (com.sk89q.worldguard.internal.permission.RegionPermissionModel)4 TextComponent (com.sk89q.worldedit.util.formatting.text.TextComponent)3 FutureForwardingTask (com.sk89q.worldedit.util.task.FutureForwardingTask)3 Task (com.sk89q.worldedit.util.task.Task)3 RegionAdder (com.sk89q.worldguard.commands.task.RegionAdder)3 WorldConfiguration (com.sk89q.worldguard.config.WorldConfiguration)3 RegionContainer (com.sk89q.worldguard.protection.regions.RegionContainer)3