/* * CraftBook Copyright (C) 2010-2017 sk89q <http://www.sk89q.com> * CraftBook Copyright (C) 2011-2017 me4502 <http://www.me4502.com> * CraftBook Copyright (C) Contributors * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public * License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program. If not, * see <http://www.gnu.org/licenses/>. */ package com.sk89q.craftbook.sponge.util.report; import com.me4502.modularframework.module.ModuleWrapper; import com.sk89q.craftbook.core.util.ConfigValue; import com.sk89q.craftbook.core.util.documentation.DocumentationProvider; import com.sk89q.craftbook.core.util.report.LogListBlock; import com.sk89q.craftbook.core.util.report.ReportWriter; import com.sk89q.craftbook.sponge.CraftBookPlugin; import com.sk89q.craftbook.sponge.st.SpongeSelfTriggerManager; import ninja.leaping.configurate.ConfigurationNode; import ninja.leaping.configurate.commented.SimpleCommentedConfigurationNode; import org.spongepowered.api.Sponge; import org.spongepowered.api.plugin.PluginContainer; import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; public class SpongeReportWriter extends ReportWriter { @Override public void appendPlatformSections() { appendServerInformation(); appendPluginInformation(); appendCraftBookInformation(); appendGlobalConfiguration(); appendModuleConfigurations(); } private void appendGlobalConfiguration() { appendHeader("Global Configuration"); LogListBlock log = new LogListBlock(); LogListBlock configLog = log.putChild("Configuration"); for (ConfigValue config : CraftBookPlugin.spongeInst().getConfig().getConfigurationNodes()) { ConfigurationNode node = SimpleCommentedConfigurationNode.root(); config.serializeDefault(node); configLog.put(config.getKey(), node.getString("UNKNOWN")); } append(log); appendln(); } private void appendServerInformation() { appendHeader("Server Information"); LogListBlock log = new LogListBlock(); Runtime runtime = Runtime.getRuntime(); log.put("Java", "%s %s (%s)", System.getProperty("java.vendor"), System.getProperty("java.version"), System.getProperty("java.vendor.url")); log.put("Operating system", "%s %s (%s)", System.getProperty("os.name"), System.getProperty("os.version"), System.getProperty("os.arch")); log.put("Available processors", runtime.availableProcessors()); log.put("Free memory", runtime.freeMemory() / 1024 / 1024 + " MB"); log.put("Max memory", runtime.maxMemory() / 1024 / 1024 + " MB"); log.put("Total memory", runtime.totalMemory() / 1024 / 1024 + " MB"); //log.put("Server ID", Sponge.getServer().getServerId()); //log.put("Server name", Sponge.getServerName()); log.put("Platform", Sponge.getPlatform().getType().name()); log.put("Game version", Sponge.getPlatform().getMinecraftVersion().getName()); log.put("Player count", "%d/%d", Sponge.getServer().getOnlinePlayers().size(), Sponge.getServer().getMaxPlayers()); append(log); appendln(); } private void appendCraftBookInformation() { appendHeader("CraftBook Information"); LogListBlock log = new LogListBlock(); List<ModuleWrapper> enabledModules = CraftBookPlugin.spongeInst().moduleController.getModules().stream() .filter(ModuleWrapper::isEnabled).collect(Collectors.toList()); int i = enabledModules.size(); log.put("Mechanics Loaded", "%d", i); Optional<SpongeSelfTriggerManager> selfTriggerManagerOptional = CraftBookPlugin.spongeInst().getSelfTriggerManager() .map(stm -> (SpongeSelfTriggerManager) stm); log.put("ST Mechanics Loaded", "%d", selfTriggerManagerOptional.map(stm -> stm.getSelfTriggeringMechanics().size()).orElse(0)); append(log); appendln(); appendHeader("Loaded Mechanics"); log = new LogListBlock(); for(ModuleWrapper<?> mech : enabledModules) { log.put(mech.getName(), mech.getId() + '-' + mech.getVersion()); } append(log); appendln(); } private void appendPluginInformation() { Collection<PluginContainer> plugins = Sponge.getPluginManager().getPlugins(); appendHeader("Plugins (" + plugins.size() + ')'); LogListBlock log = new LogListBlock(); for (PluginContainer plugin : plugins) { log.put(plugin.getName(), plugin.getVersion().orElse("UNKNOWN")); } append(log); appendln(); } private void appendModuleConfigurations() { appendHeader("Module Configurations"); LogListBlock log = new LogListBlock(); List<ModuleWrapper> enabledModules = CraftBookPlugin.spongeInst().moduleController.getModules().stream() .filter(ModuleWrapper::isEnabled).collect(Collectors.toList()); for (ModuleWrapper<?> moduleWrapper : enabledModules) { Object module = moduleWrapper.getModule().orElse(null); if (module == null || !(module instanceof DocumentationProvider)) { continue; } LogListBlock configLog = log.putChild(moduleWrapper.getName()); for (ConfigValue config : ((DocumentationProvider) module).getConfigurationNodes()) { ConfigurationNode node = SimpleCommentedConfigurationNode.root(); config.serializeDefault(node); configLog.put(config.getKey(), node.getString("UNKNOWN")); } } append(log); appendln(); } }