diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/addon/InternalAddon.java b/common/implementation/base/src/main/java/com/dfsek/terra/addon/InternalAddon.java index 28b5469ab..781e9c448 100644 --- a/common/implementation/base/src/main/java/com/dfsek/terra/addon/InternalAddon.java +++ b/common/implementation/base/src/main/java/com/dfsek/terra/addon/InternalAddon.java @@ -19,22 +19,22 @@ package com.dfsek.terra.addon; import ca.solostudios.strata.Versions; import ca.solostudios.strata.version.Version; - import cloud.commandframework.ArgumentDescription; import cloud.commandframework.CommandManager; -import cloud.commandframework.Description; - -import cloud.commandframework.arguments.standard.StringArgument; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.command.RegistryArgument; +import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.entity.CommandSender; import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; public class InternalAddon implements BaseAddon { + private static final Logger logger = LoggerFactory.getLogger(InternalAddon.class); private static final Version VERSION = Versions.getVersion(1, 0, 0); public InternalAddon(Platform platform) { @@ -44,37 +44,80 @@ public class InternalAddon implements BaseAddon { .then(event -> { CommandManager manager = event.getCommandManager(); manager.command( - manager.commandBuilder("addons", ArgumentDescription.of("List installed Terra addons")) - .handler(context -> { - StringBuilder addons = new StringBuilder("Installed addons:\n"); - platform.getAddons() - .forEach(addon -> addons - .append("- ") - .append(addon.getID()) - .append('@') - .append(addon.getVersion().getFormatted()) - .append('\n')); - context.getSender().sendMessage(addons.toString()); - }) - ); - manager.command(manager.commandBuilder("addons", ArgumentDescription.of("Get information about addons")) - .argument(RegistryArgument.of("addon", platform.getAddons())) + manager.commandBuilder("addons", ArgumentDescription.of("List installed Terra addons")) + .handler(context -> { + StringBuilder addons = new StringBuilder("Installed addons:\n"); + platform.getAddons() + .forEach(addon -> addons + .append(" - ") + .append(addon.getID()) + .append('@') + .append(addon.getVersion().getFormatted()) + .append('\n')); + context.getSender().sendMessage(addons.toString()); + }) + ) + .command( + manager.commandBuilder("addons") + .argument(RegistryArgument.of("addon", platform.getAddons())) + .handler(context -> { + BaseAddon addon = context.get("addon"); + StringBuilder addonInfo = new StringBuilder("Addon ").append(addon.getID()).append('\n'); + + addonInfo.append("Version: ").append(addon.getVersion().getFormatted()).append('\n'); + + addonInfo.append("Dependencies:\n"); + addon.getDependencies().forEach((id, versions) -> addonInfo + .append(" - ") + .append(id) + .append('@') + .append(versions.getFormatted()) + .append('\n')); + context.getSender().sendMessage(addonInfo.toString()); + }) + ) + .command(manager.commandBuilder("packs", ArgumentDescription.of("List installed config packs")) .handler(context -> { - BaseAddon addon = context.get("addon"); - StringBuilder addonInfo = new StringBuilder("Addon ").append(addon.getID()).append('\n'); - - addonInfo.append("Version: ").append(addon.getVersion().getFormatted()).append('\n'); - - addonInfo.append("Dependencies:\n"); - addon.getDependencies().forEach((id, versions) -> addonInfo - .append(" - ") - .append(id) - .append('@') - .append(versions.getFormatted()) - .append('\n')); - context.getSender().sendMessage(addonInfo.toString()); + StringBuilder packs = new StringBuilder("Installed packs:\n"); + platform.getConfigRegistry().forEach(pack -> packs.append(" - ") + .append(pack.getID()) + .append('@') + .append(pack.getVersion().getFormatted())); + context.getSender().sendMessage(packs.toString()); }) - ); + ) + .command(manager.commandBuilder("packs") + .literal("info", ArgumentDescription.of("Get information about a pack")) + .argument(RegistryArgument.of("pack", platform.getConfigRegistry())) + .handler(context -> { + ConfigPack pack = context.get("pack"); + StringBuilder packInfo = new StringBuilder("Pack ").append(pack.getID()).append('\n'); + + packInfo.append("Version: ").append(pack.getVersion().getFormatted()).append('\n'); + packInfo.append("Author: ").append(pack.getAuthor()).append('\n'); + + packInfo.append("Addon Dependencies:\n"); + pack.addons().forEach((id, versions) -> packInfo + .append(" - ") + .append(id.getID()) + .append('@') + .append(versions.getFormatted()) + .append('\n')); + context.getSender().sendMessage(packInfo.toString()); + })) + .command(manager.commandBuilder("packs") + .literal("reload", ArgumentDescription.of("Reload config packs")) + .handler(context -> { + context.getSender().sendMessage("Reloading Terra..."); + logger.info("Reloading Terra..."); + if(platform.reload()) { + logger.info("Terra reloaded successfully."); + context.getSender().sendMessage("Terra reloaded successfully."); + } else { + logger.error("Terra failed to reload."); + context.getSender().sendMessage("Terra failed to reload. See logs for more information."); + } + })); });