Search in sources :

Example 6 with Platform

use of org.spongepowered.api.Platform in project Nucleus by NucleusPowered.

the class InfoCommand method executeCommand.

@Override
public CommandResult executeCommand(CommandSource src, CommandContext args) throws Exception {
    // Sponge versions
    List<String> information = Lists.newArrayList();
    String separator = "------------";
    information.add(separator);
    information.add("Nucleus Diagnostics");
    information.add(separator);
    information.add("This file contains information about Nucleus and the environment it runs in.");
    information.add(separator);
    information.add("Environment");
    information.add(separator);
    Platform platform = Sponge.getPlatform();
    PluginContainer game = platform.getContainer(Platform.Component.GAME);
    PluginContainer implementation = platform.getContainer(Platform.Component.IMPLEMENTATION);
    PluginContainer api = platform.getContainer(Platform.Component.API);
    information.add(String.format("Minecraft Version: %s %s", game.getName(), game.getVersion().orElse("unknown")));
    information.add(String.format("Sponge Version: %s %s", implementation.getName(), implementation.getVersion().orElse("unknown")));
    information.add(String.format("Sponge API Version: %s %s", api.getName(), api.getVersion().orElse("unknown")));
    information.add("Nucleus Version: " + PluginInfo.VERSION + " (Git: " + PluginInfo.GIT_HASH + ")");
    information.add(separator);
    information.add("Plugins");
    information.add(separator);
    Sponge.getPluginManager().getPlugins().forEach(x -> information.add(x.getName() + " (" + x.getId() + ") version " + x.getVersion().orElse("unknown")));
    information.add(separator);
    information.add("Registered Commands");
    information.add(separator);
    final Map<String, String> commands = Maps.newHashMap();
    final Map<String, String> plcmds = Maps.newHashMap();
    final CommandManager manager = Sponge.getCommandManager();
    manager.getPrimaryAliases().forEach(x -> {
        Optional<? extends CommandMapping> ocm = manager.get(x);
        if (ocm.isPresent()) {
            Set<String> a = ocm.get().getAllAliases();
            Optional<PluginContainer> optionalPC = manager.getOwner(ocm.get());
            if (optionalPC.isPresent()) {
                PluginContainer container = optionalPC.get();
                String id = container.getId();
                String info = " - " + container.getName() + " (" + id + ") version " + container.getVersion().orElse("unknown");
                a.forEach(y -> {
                    if (y.startsWith(id + ":")) {
                        // /nucleus:<blah>
                        plcmds.put(y, "/" + y + info);
                    } else {
                        commands.put(y, "/" + y + info);
                    }
                });
            } else {
                String info = " - unknown (plugin container not present)";
                a.forEach(y -> commands.put(y, "/" + y + info));
            }
        } else {
            commands.put(x, "/" + x + " - unknown (mapping not present)");
        }
    });
    commands.entrySet().stream().sorted(Comparator.comparing(x -> x.getKey().toLowerCase())).forEachOrdered(x -> information.add(x.getValue()));
    information.add(separator);
    information.add("Namespaced commands");
    information.add(separator);
    plcmds.entrySet().stream().sorted(Comparator.comparing(x -> x.getKey().toLowerCase())).forEachOrdered(x -> information.add(x.getValue()));
    information.add(separator);
    information.add("Nucleus: Enabled Modules");
    information.add(separator);
    plugin.getModuleContainer().getModules().stream().sorted().forEach(information::add);
    Set<String> disabled = plugin.getModuleContainer().getModules(ModuleContainer.ModuleStatusTristate.DISABLE);
    if (!disabled.isEmpty()) {
        information.add(separator);
        information.add("Nucleus: Disabled Modules");
        information.add(separator);
        disabled.stream().sorted().forEach(information::add);
    }
    String fileName = "nucleus-info-" + DateTimeFormatter.BASIC_ISO_DATE.format(LocalDateTime.now()) + "-" + DateTimeFormatter.ofPattern("HHmmss").format(LocalDateTime.now()) + ".txt";
    try (BufferedWriter fw = new BufferedWriter(new FileWriter(fileName, false))) {
        for (String s : information) {
            fw.write(s);
            fw.newLine();
        }
        fw.flush();
    } catch (Exception e) {
        throw new TextMessageException(plugin.getMessageProvider().getTextMessageWithFormat("command.nucleus.info.fileerror"), e);
    }
    src.sendMessage(plugin.getMessageProvider().getTextMessageWithFormat("command.nucleus.info.saved", fileName));
    return CommandResult.success();
}
Also used : PluginContainer(org.spongepowered.api.plugin.PluginContainer) Platform(org.spongepowered.api.Platform) FileWriter(java.io.FileWriter) TextMessageException(org.spongepowered.api.util.TextMessageException) BufferedWriter(java.io.BufferedWriter) CommandManager(org.spongepowered.api.command.CommandManager) TextMessageException(org.spongepowered.api.util.TextMessageException)

Aggregations

Platform (org.spongepowered.api.Platform)6 PluginContainer (org.spongepowered.api.plugin.PluginContainer)4 IOException (java.io.IOException)2 Entry (java.util.Map.Entry)2 Sponge (org.spongepowered.api.Sponge)2 CommandSource (org.spongepowered.api.command.CommandSource)2 Text (org.spongepowered.api.text.Text)2 HISTORY (co.aikar.timings.TimingsManager.HISTORY)1 JSONUtil (co.aikar.util.JSONUtil)1 JsonObjectBuilder (co.aikar.util.JSONUtil.JsonObjectBuilder)1 Joiner (com.google.common.base.Joiner)1 Sets (com.google.common.collect.Sets)1 JsonArray (com.google.gson.JsonArray)1 JsonElement (com.google.gson.JsonElement)1 JsonObject (com.google.gson.JsonObject)1 ByteBuf (io.netty.buffer.ByteBuf)1 ChannelHandlerContext (io.netty.channel.ChannelHandlerContext)1 SimpleChannelInboundHandler (io.netty.channel.SimpleChannelInboundHandler)1 DatagramPacket (io.netty.channel.socket.DatagramPacket)1 BufferedWriter (java.io.BufferedWriter)1