From 8cc92ff83634dffacfe1f25a135bc9ac665ff68b Mon Sep 17 00:00:00 2001 From: Luck Date: Sat, 7 Nov 2020 17:41:39 +0000 Subject: Update from text to adventure --- spark-bukkit/build.gradle | 6 +- .../me/lucko/spark/bukkit/BukkitCommandSender.java | 13 +- .../me/lucko/spark/bukkit/BukkitSparkPlugin.java | 14 +- .../placeholder/SparkPlaceholderProvider.java | 33 ++- spark-bungeecord/build.gradle | 6 +- .../spark/bungeecord/BungeeCordCommandSender.java | 13 +- .../spark/bungeecord/BungeeCordSparkPlugin.java | 10 +- spark-common/build.gradle | 13 +- .../java/me/lucko/spark/common/SparkPlatform.java | 73 ++--- .../common/command/CommandResponseHandler.java | 21 +- .../common/command/modules/ActivityLogModule.java | 57 ++-- .../common/command/modules/GcMonitoringModule.java | 126 ++++---- .../spark/common/command/modules/HealthModule.java | 322 +++++++++++---------- .../common/command/modules/HeapAnalysisModule.java | 76 ++--- .../common/command/modules/SamplerModule.java | 54 ++-- .../command/modules/TickMonitoringModule.java | 11 +- .../spark/common/command/sender/CommandSender.java | 2 +- .../spark/common/monitor/tick/TickMonitor.java | 88 +++--- .../spark/common/util/pagination/Pagination.java | 320 ++++++++++++++++++++ .../common/util/pagination/PaginationBuilder.java | 134 +++++++++ .../common/util/pagination/PaginationImpl.java | 226 +++++++++++++++ .../spark/common/util/pagination/Paginator.java | 56 ++++ spark-fabric/build.gradle | 2 +- .../me/lucko/spark/fabric/FabricCommandSender.java | 6 +- spark-forge/build.gradle | 22 +- .../me/lucko/spark/forge/ForgeCommandSender.java | 6 +- spark-sponge/build.gradle | 6 +- .../me/lucko/spark/sponge/SpongeCommandSender.java | 12 +- .../me/lucko/spark/sponge/SpongeSparkPlugin.java | 14 +- spark-universal/build.gradle | 2 +- .../spark/velocity/VelocityCommandSender.java | 2 +- 31 files changed, 1278 insertions(+), 468 deletions(-) create mode 100644 spark-common/src/main/java/me/lucko/spark/common/util/pagination/Pagination.java create mode 100644 spark-common/src/main/java/me/lucko/spark/common/util/pagination/PaginationBuilder.java create mode 100644 spark-common/src/main/java/me/lucko/spark/common/util/pagination/PaginationImpl.java create mode 100644 spark-common/src/main/java/me/lucko/spark/common/util/pagination/Paginator.java diff --git a/spark-bukkit/build.gradle b/spark-bukkit/build.gradle index fd5c016..869b16a 100644 --- a/spark-bukkit/build.gradle +++ b/spark-bukkit/build.gradle @@ -1,8 +1,8 @@ dependencies { compile project(':spark-common') - compile('net.kyori:text-adapter-bukkit:3.0.5') { - exclude(module: 'text-api') - exclude(module: 'text-serializer-gson') + compile ('net.kyori:adventure-platform-bukkit:4.0.0-SNAPSHOT') { + exclude(module: 'adventure-api') + exclude(module: 'adventure-text-serializer-gson') } compileOnly 'com.destroystokyo.paper:paper-api:1.16.4-R0.1-SNAPSHOT' diff --git a/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitCommandSender.java b/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitCommandSender.java index 5c03289..11f7e9e 100644 --- a/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitCommandSender.java +++ b/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitCommandSender.java @@ -20,18 +20,21 @@ package me.lucko.spark.bukkit; - import me.lucko.spark.common.command.sender.AbstractCommandSender; -import net.kyori.text.Component; -import net.kyori.text.adapter.bukkit.TextAdapter; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.platform.bukkit.BukkitAudiences; +import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.UUID; public class BukkitCommandSender extends AbstractCommandSender { - public BukkitCommandSender(CommandSender sender) { + private final Audience audience; + + public BukkitCommandSender(CommandSender sender, BukkitAudiences audienceFactory) { super(sender); + this.audience = audienceFactory.sender(sender); } @Override @@ -49,7 +52,7 @@ public class BukkitCommandSender extends AbstractCommandSender { @Override public void sendMessage(Component message) { - TextAdapter.sendMessage(super.delegate, message); + this.audience.sendMessage(message); } @Override diff --git a/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitSparkPlugin.java b/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitSparkPlugin.java index 7d749eb..89f6726 100644 --- a/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitSparkPlugin.java +++ b/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitSparkPlugin.java @@ -28,6 +28,7 @@ import me.lucko.spark.common.platform.PlatformInfo; import me.lucko.spark.common.sampler.ThreadDumper; import me.lucko.spark.common.sampler.tick.TickHook; import me.lucko.spark.common.sampler.tick.TickReporter; +import net.kyori.adventure.platform.bukkit.BukkitAudiences; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -39,12 +40,15 @@ import java.util.List; import java.util.stream.Stream; public class BukkitSparkPlugin extends JavaPlugin implements SparkPlugin { + private BukkitAudiences audienceFactory; + private SparkPlatform platform; private CommandExecutor tpsCommand = null; - private SparkPlatform platform; @Override public void onEnable() { + this.audienceFactory = BukkitAudiences.create(this); + this.platform = new SparkPlatform(this); this.platform.enable(); @@ -56,7 +60,7 @@ public class BukkitSparkPlugin extends JavaPlugin implements SparkPlugin { return true; } - BukkitCommandSender s = new BukkitCommandSender(sender) { + BukkitCommandSender s = new BukkitCommandSender(sender, this.audienceFactory) { @Override public boolean hasPermission(String permission) { return true; @@ -88,13 +92,13 @@ public class BukkitSparkPlugin extends JavaPlugin implements SparkPlugin { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - this.platform.executeCommand(new BukkitCommandSender(sender), args); + this.platform.executeCommand(new BukkitCommandSender(sender, this.audienceFactory), args); return true; } @Override public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { - return this.platform.tabCompleteCommand(new BukkitCommandSender(sender), args); + return this.platform.tabCompleteCommand(new BukkitCommandSender(sender, this.audienceFactory), args); } @Override @@ -117,7 +121,7 @@ public class BukkitSparkPlugin extends JavaPlugin implements SparkPlugin { return Stream.concat( getServer().getOnlinePlayers().stream().filter(player -> player.hasPermission(permission)), Stream.of(getServer().getConsoleSender()) - ).map(BukkitCommandSender::new); + ).map(sender -> new BukkitCommandSender(sender, this.audienceFactory)); } @Override diff --git a/spark-bukkit/src/main/java/me/lucko/spark/bukkit/placeholder/SparkPlaceholderProvider.java b/spark-bukkit/src/main/java/me/lucko/spark/bukkit/placeholder/SparkPlaceholderProvider.java index ee96630..842ac72 100644 --- a/spark-bukkit/src/main/java/me/lucko/spark/bukkit/placeholder/SparkPlaceholderProvider.java +++ b/spark-bukkit/src/main/java/me/lucko/spark/bukkit/placeholder/SparkPlaceholderProvider.java @@ -24,8 +24,9 @@ import me.lucko.spark.common.SparkPlatform; import me.lucko.spark.common.command.modules.HealthModule; import me.lucko.spark.common.monitor.cpu.CpuMonitor; import me.lucko.spark.common.monitor.tick.TickStatistics; -import net.kyori.text.TextComponent; -import net.kyori.text.serializer.legacy.LegacyComponentSerializer; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; enum SparkPlaceholderProvider { ; @@ -39,11 +40,11 @@ enum SparkPlaceholderProvider { switch (placeholder) { case "tps": - return TextComponent.builder("") - .append(HealthModule.formatTps(tickStatistics.tps5Sec())).append(TextComponent.of(", ")) - .append(HealthModule.formatTps(tickStatistics.tps10Sec())).append(TextComponent.of(", ")) - .append(HealthModule.formatTps(tickStatistics.tps1Min())).append(TextComponent.of(", ")) - .append(HealthModule.formatTps(tickStatistics.tps5Min())).append(TextComponent.of(", ")) + return Component.text() + .append(HealthModule.formatTps(tickStatistics.tps5Sec())).append(Component.text(", ")) + .append(HealthModule.formatTps(tickStatistics.tps10Sec())).append(Component.text(", ")) + .append(HealthModule.formatTps(tickStatistics.tps1Min())).append(Component.text(", ")) + .append(HealthModule.formatTps(tickStatistics.tps5Min())).append(Component.text(", ")) .append(HealthModule.formatTps(tickStatistics.tps15Min())) .build(); case "tps_5s": @@ -67,8 +68,8 @@ enum SparkPlaceholderProvider { switch (placeholder) { case "tickduration": - return TextComponent.builder("") - .append(HealthModule.formatTickDurations(tickStatistics.duration10Sec())).append(TextComponent.of("; ")) + return Component.text() + .append(HealthModule.formatTickDurations(tickStatistics.duration10Sec())).append(Component.text("; ")) .append(HealthModule.formatTickDurations(tickStatistics.duration1Min())) .build(); case "tickduration_10s": @@ -81,9 +82,9 @@ enum SparkPlaceholderProvider { if (placeholder.startsWith("cpu")) { switch (placeholder) { case "cpu_system": - return TextComponent.builder("") - .append(HealthModule.formatCpuUsage(CpuMonitor.systemLoad10SecAvg())).append(TextComponent.of(", ")) - .append(HealthModule.formatCpuUsage(CpuMonitor.systemLoad1MinAvg())).append(TextComponent.of(", ")) + return Component.text() + .append(HealthModule.formatCpuUsage(CpuMonitor.systemLoad10SecAvg())).append(Component.text(", ")) + .append(HealthModule.formatCpuUsage(CpuMonitor.systemLoad1MinAvg())).append(Component.text(", ")) .append(HealthModule.formatCpuUsage(CpuMonitor.systemLoad15MinAvg())) .build(); case "cpu_system_10s": @@ -93,9 +94,9 @@ enum SparkPlaceholderProvider { case "cpu_system_15m": return HealthModule.formatCpuUsage(CpuMonitor.systemLoad15MinAvg()); case "cpu_process": - return TextComponent.builder("") - .append(HealthModule.formatCpuUsage(CpuMonitor.processLoad10SecAvg())).append(TextComponent.of(", ")) - .append(HealthModule.formatCpuUsage(CpuMonitor.processLoad1MinAvg())).append(TextComponent.of(", ")) + return Component.text() + .append(HealthModule.formatCpuUsage(CpuMonitor.processLoad10SecAvg())).append(Component.text(", ")) + .append(HealthModule.formatCpuUsage(CpuMonitor.processLoad1MinAvg())).append(Component.text(", ")) .append(HealthModule.formatCpuUsage(CpuMonitor.processLoad15MinAvg())) .build(); case "cpu_process_10s": @@ -115,7 +116,7 @@ enum SparkPlaceholderProvider { if (result == null) { return null; } - return LegacyComponentSerializer.legacy().serialize(result); + return LegacyComponentSerializer.legacySection().serialize(result); } } diff --git a/spark-bungeecord/build.gradle b/spark-bungeecord/build.gradle index 7ae585d..fc08475 100644 --- a/spark-bungeecord/build.gradle +++ b/spark-bungeecord/build.gradle @@ -1,8 +1,8 @@ dependencies { compile project(':spark-common') - compile('net.kyori:text-adapter-bungeecord:3.0.5') { - exclude(module: 'text-api') - exclude(module: 'text-serializer-gson') + compile ('net.kyori:adventure-platform-bungeecord:4.0.0-SNAPSHOT') { + exclude(module: 'adventure-api') + exclude(module: 'adventure-text-serializer-gson') } compileOnly 'net.md-5:bungeecord-api:1.16-R0.4-SNAPSHOT' } diff --git a/spark-bungeecord/src/main/java/me/lucko/spark/bungeecord/BungeeCordCommandSender.java b/spark-bungeecord/src/main/java/me/lucko/spark/bungeecord/BungeeCordCommandSender.java index 27d3811..51d1a7d 100644 --- a/spark-bungeecord/src/main/java/me/lucko/spark/bungeecord/BungeeCordCommandSender.java +++ b/spark-bungeecord/src/main/java/me/lucko/spark/bungeecord/BungeeCordCommandSender.java @@ -20,18 +20,21 @@ package me.lucko.spark.bungeecord; - import me.lucko.spark.common.command.sender.AbstractCommandSender; -import net.kyori.text.Component; -import net.kyori.text.adapter.bungeecord.TextAdapter; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.platform.bungeecord.BungeeAudiences; +import net.kyori.adventure.text.Component; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import java.util.UUID; public class BungeeCordCommandSender extends AbstractCommandSender { - public BungeeCordCommandSender(CommandSender sender) { + private final Audience audience; + + public BungeeCordCommandSender(CommandSender sender, BungeeAudiences audienceFactory) { super(sender); + this.audience = audienceFactory.sender(sender); } @Override @@ -49,7 +52,7 @@ public class BungeeCordCommandSender extends AbstractCommandSender player.hasPermission(permission)), Stream.of(getProxy().getConsole()) - ).map(BungeeCordCommandSender::new); + ).map(sender -> new BungeeCordCommandSender(sender, this.audienceFactory)); } @Override @@ -90,12 +92,12 @@ public class BungeeCordSparkPlugin extends Plugin implements SparkPlugin { @Override public void execute(CommandSender sender, String[] args) { - this.plugin.platform.executeCommand(new BungeeCordCommandSender(sender), args); + this.plugin.platform.executeCommand(new BungeeCordCommandSender(sender, this.plugin.audienceFactory), args); } @Override public Iterable onTabComplete(CommandSender sender, String[] args) { - return this.plugin.platform.tabCompleteCommand(new BungeeCordCommandSender(sender), args); + return this.plugin.platform.tabCompleteCommand(new BungeeCordCommandSender(sender, this.plugin.audienceFactory), args); } } } diff --git a/spark-common/build.gradle b/spark-common/build.gradle index 3942bfd..8e526e6 100644 --- a/spark-common/build.gradle +++ b/spark-common/build.gradle @@ -8,18 +8,15 @@ dependencies { compile 'com.squareup.okhttp3:okhttp:3.14.1' compile 'com.squareup.okio:okio:1.17.3' compile 'org.tukaani:xz:1.8' - compile('net.kyori:text-api:3.0.4') { + compile('net.kyori:adventure-api:4.1.1') { exclude(module: 'checker-qual') } - compile('net.kyori:text-serializer-gson:3.0.4') { - exclude(module: 'text-api') + compile('net.kyori:adventure-text-serializer-gson:4.1.1') { + exclude(module: 'adventure-api') exclude(module: 'gson') } - compile('net.kyori:text-serializer-legacy:3.0.4') { - exclude(module: 'text-api') - } - compile('net.kyori:text-feature-pagination:3.0.4') { - exclude(module: 'text-api') + compile('net.kyori:adventure-text-serializer-legacy:4.1.1') { + exclude(module: 'adventure-api') } compileOnly 'com.google.code.gson:gson:2.7' compileOnly 'com.google.guava:guava:19.0' diff --git a/spark-common/src/main/java/me/lucko/spark/common/SparkPlatform.java b/spark-common/src/main/java/me/lucko/spark/common/SparkPlatform.java index da4f4d8..f03bab2 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/SparkPlatform.java +++ b/spark-common/src/main/java/me/lucko/spark/common/SparkPlatform.java @@ -42,10 +42,7 @@ import me.lucko.spark.common.monitor.tick.TickStatistics; import me.lucko.spark.common.sampler.tick.TickHook; import me.lucko.spark.common.sampler.tick.TickReporter; import me.lucko.spark.common.util.BytebinClient; -import net.kyori.text.TextComponent; -import net.kyori.text.event.ClickEvent; -import net.kyori.text.format.TextColor; -import net.kyori.text.format.TextDecoration; +import net.kyori.adventure.text.event.ClickEvent; import okhttp3.OkHttpClient; import java.util.ArrayList; @@ -55,6 +52,10 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import static net.kyori.adventure.text.Component.*; +import static net.kyori.adventure.text.format.NamedTextColor.*; +import static net.kyori.adventure.text.format.TextDecoration.*; + /** * Abstract spark implementation used by all platforms. */ @@ -166,26 +167,28 @@ public class SparkPlatform { CommandResponseHandler resp = new CommandResponseHandler(this, sender); if (!sender.hasPermission("spark")) { - resp.replyPrefixed(TextComponent.of("You do not have permission to use this command.", TextColor.RED)); + resp.replyPrefixed(text("You do not have permission to use this command.", RED)); return; } if (args.length == 0) { - resp.replyPrefixed(TextComponent.builder("") - .append(TextComponent.of("spark", TextColor.WHITE)) - .append(TextComponent.space()) - .append(TextComponent.of("v" + getPlugin().getVersion(), TextColor.GRAY)) + resp.replyPrefixed(text() + .append(text("spark", WHITE)) + .append(space()) + .append(text("v" + getPlugin().getVersion(), GRAY)) .build() ); - resp.replyPrefixed(TextComponent.builder("").color(TextColor.GRAY) - .append(TextComponent.of("Use ")) - .append(TextComponent.builder("/" + getPlugin().getCommandName() + " help") - .color(TextColor.WHITE) - .decoration(TextDecoration.UNDERLINED, true) + resp.replyPrefixed(text() + .color(GRAY) + .append(text("Use ")) + .append(text() + .content("/" + getPlugin().getCommandName() + " help") + .color(WHITE) + .decoration(UNDERLINED, true) .clickEvent(ClickEvent.runCommand("/" + getPlugin().getCommandName() + " help")) .build() ) - .append(TextComponent.of(" to view usage information.")) + .append(text(" to view usage information.")) .build() ); return; @@ -199,7 +202,7 @@ public class SparkPlatform { try { command.executor().execute(this, sender, resp, new Arguments(rawArgs)); } catch (IllegalArgumentException e) { - resp.replyPrefixed(TextComponent.of(e.getMessage(), TextColor.RED)); + resp.replyPrefixed(text(e.getMessage(), RED)); } return; } @@ -233,36 +236,38 @@ public class SparkPlatform { } private void sendUsage(CommandResponseHandler sender) { - sender.replyPrefixed(TextComponent.builder("") - .append(TextComponent.of("spark", TextColor.WHITE)) - .append(TextComponent.space()) - .append(TextComponent.of("v" + getPlugin().getVersion(), TextColor.GRAY)) + sender.replyPrefixed(text() + .append(text("spark", WHITE)) + .append(space()) + .append(text("v" + getPlugin().getVersion(), GRAY)) .build() ); for (Command command : this.commands) { String usage = "/" + getPlugin().getCommandName() + " " + command.aliases().get(0); ClickEvent clickEvent = ClickEvent.suggestCommand(usage); - sender.reply(TextComponent.builder("") - .append(TextComponent.builder(">").color(TextColor.GOLD).decoration(TextDecoration.BOLD, true).build()) - .append(TextComponent.space()) - .append(TextComponent.builder(usage).color(TextColor.GRAY).clickEvent(clickEvent).build()) + sender.reply(text() + .append(text(">", GOLD, BOLD)) + .append(space()) + .append(text().content(usage).color(GRAY).clickEvent(clickEvent).build()) .build() ); for (Command.ArgumentInfo arg : command.arguments()) { if (arg.requiresParameter()) { - sender.reply(TextComponent.builder(" ") - .append(TextComponent.of("[", TextColor.DARK_GRAY)) - .append(TextComponent.of("--" + arg.argumentName(), TextColor.GRAY)) - .append(TextComponent.space()) - .append(TextComponent.of("<" + arg.parameterDescription() + ">", TextColor.DARK_GRAY)) - .append(TextComponent.of("]", TextColor.DARK_GRAY)) + sender.reply(text() + .content(" ") + .append(text("[", DARK_GRAY)) + .append(text("--" + arg.argumentName(), GRAY)) + .append(space()) + .append(text("<" + arg.parameterDescription() + ">", DARK_GRAY)) + .append(text("]", DARK_GRAY)) .build() ); } else { - sender.reply(TextComponent.builder(" ") - .append(TextComponent.of("[", TextColor.DARK_GRAY)) - .append(TextComponent.of("--" + arg.argumentName(), TextColor.GRAY)) - .append(TextComponent.of("]", TextColor.DARK_GRAY)) + sender.reply(text() + .content(" ") + .append(text("[", DARK_GRAY)) + .append(text("--" + arg.argumentName(), GRAY)) + .append(text("]", DARK_GRAY)) .build() ); } diff --git a/spark-common/src/main/java/me/lucko/spark/common/command/CommandResponseHandler.java b/spark-common/src/main/java/me/lucko/spark/common/command/CommandResponseHandler.java index 635e785..472ae4c 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/command/CommandResponseHandler.java +++ b/spark-common/src/main/java/me/lucko/spark/common/command/CommandResponseHandler.java @@ -22,23 +22,26 @@ package me.lucko.spark.common.command; import me.lucko.spark.common.SparkPlatform; import me.lucko.spark.common.command.sender.CommandSender; -import net.kyori.text.Component; -import net.kyori.text.TextComponent; -import net.kyori.text.format.TextColor; -import net.kyori.text.format.TextDecoration; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import java.util.Set; import java.util.function.Consumer; import java.util.stream.Collectors; +import static net.kyori.adventure.text.Component.*; +import static net.kyori.adventure.text.format.NamedTextColor.*; +import static net.kyori.adventure.text.format.TextDecoration.*; + public class CommandResponseHandler { /** The prefix used in all messages "&8[&e&l⚡&8] &7" */ - private static final TextComponent PREFIX = TextComponent.builder("").color(TextColor.GRAY) - .append(TextComponent.of("[", TextColor.DARK_GRAY)) - .append(TextComponent.builder("⚡").color(TextColor.YELLOW).decoration(TextDecoration.BOLD, TextDecoration.State.TRUE).build()) - .append(TextComponent.of("]", TextColor.DARK_GRAY)) - .append(TextComponent.of(" ")) + private static final TextComponent PREFIX = text() + .color(GRAY) + .append(text("[", DARK_GRAY)) + .append(text("⚡", YELLOW, BOLD)) + .append(text("]", DARK_GRAY)) + .append(text(" ")) .build(); private final SparkPlatform platform; diff --git a/spark-common/src/main/java/me/lucko/spark/common/command/modules/ActivityLogModule.java b/spark-common/src/main/java/me/lucko/spark/common/command/modules/ActivityLogModule.java index c78e567..9b611fb 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/command/modules/ActivityLogModule.java +++ b/spark-common/src/main/java/me/lucko/spark/common/command/modules/ActivityLogModule.java @@ -24,14 +24,12 @@ import me.lucko.spark.common.activitylog.ActivityLog.Activity; import me.lucko.spark.common.command.Command; import me.lucko.spark.common.command.CommandModule; import me.lucko.spark.common.command.tabcomplete.TabCompleter; -import net.kyori.text.Component; -import net.kyori.text.TextComponent; -import net.kyori.text.event.ClickEvent; -import net.kyori.text.feature.pagination.Pagination; -import net.kyori.text.feature.pagination.Pagination.Renderer; -import net.kyori.text.feature.pagination.Pagination.Renderer.RowRenderer; -import net.kyori.text.format.TextColor; -import net.kyori.text.format.TextDecoration; +import me.lucko.spark.common.util.pagination.Pagination; +import me.lucko.spark.common.util.pagination.Pagination.Renderer; +import me.lucko.spark.common.util.pagination.Pagination.Renderer.RowRenderer; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.event.ClickEvent; import java.util.ArrayList; import java.util.Collection; @@ -39,6 +37,9 @@ import java.util.List; import java.util.function.Consumer; import static me.lucko.spark.common.command.CommandResponseHandler.*; +import static net.kyori.adventure.text.Component.*; +import static net.kyori.adventure.text.format.NamedTextColor.*; +import static net.kyori.adventure.text.format.TextDecoration.*; public class ActivityLogModule implements CommandModule, RowRenderer { @@ -46,12 +47,12 @@ public class ActivityLogModule implements CommandModule, RowRenderer { .renderer(new Renderer() { @Override public Component renderEmpty() { - return applyPrefix(TextComponent.of("There are no entries present in the log.")); + return applyPrefix(text("There are no entries present in the log.")); } @Override public Component renderUnknownPage(int page, int pages) { - return applyPrefix(TextComponent.of("Unknown page selected. " + pages + " total pages.")); + return applyPrefix(text("Unknown page selected. " + pages + " total pages.")); } }) .resultsPerPage(4); @@ -59,33 +60,35 @@ public class ActivityLogModule implements CommandModule, RowRenderer { @Override public Collection renderRow(Activity activity, int index) { List reply = new ArrayList<>(5); - reply.add(TextComponent.builder("") - .append(TextComponent.builder(">").color(TextColor.DARK_GRAY).decoration(TextDecoration.BOLD, true).build()) - .append(TextComponent.space()) - .append(TextComponent.of("#" + (index + 1), TextColor.WHITE)) - .append(TextComponent.of(" - ", TextColor.DARK_GRAY)) - .append(TextComponent.of(activity.getType(), TextColor.YELLOW)) - .append(TextComponent.of(" - ", TextColor.DARK_GRAY)) - .append(TextComponent.of(formatDateDiff(activity.getTime()), TextColor.GRAY)) + reply.add(text() + .append(text(">", DARK_GRAY, BOLD)) + .append(space()) + .append(text("#" + (index + 1), WHITE)) + .append(text(" - ", DARK_GRAY)) + .append(text(activity.getType(), YELLOW)) + .append(text(" - ", DARK_GRAY)) + .append(text(formatDateDiff(activity.getTime()), GRAY)) .build() ); - reply.add(TextComponent.builder(" ") - .append(TextComponent.of("Created by: ", TextColor.GRAY)) - .append(TextComponent.of(activity.getUser().getName(), TextColor.WHITE)) + reply.add(text() + .content(" ") + .append(text("Created by: ", GRAY)) + .append(text(activity.getUser().getName(), WHITE)) .build() ); - TextComponent.Builder valueComponent = TextComponent.builder(activity.getDataValue(), TextColor.WHITE); + TextComponent.Builder valueComponent = text().content(activity.getDataValue()).color(WHITE); if (activity.getDataType().equals("url")) { valueComponent.clickEvent(ClickEvent.openUrl(activity.getDataValue())); } - reply.add(TextComponent.builder(" ") - .append(TextComponent.of(Character.toUpperCase(activity.getDataType().charAt(0)) + activity.getDataType().substring(1) + ": ", TextColor.GRAY)) + reply.add(text() + .content(" ") + .append(text(Character.toUpperCase(activity.getDataType().charAt(0)) + activity.getDataType().substring(1) + ": ", GRAY)) .append(valueComponent) .build() ); - reply.add(TextComponent.space()); + reply.add(space()); return reply; } @@ -99,14 +102,14 @@ public class ActivityLogModule implements CommandModule, RowRenderer { log.removeIf(Activity::shouldExpire); if (log.isEmpty()) { - resp.replyPrefixed(TextComponent.of("There are no entries present in the log.")); + resp.replyPrefixed(text("There are no entries present in the log.")); return; } int page = Math.max(1, arguments.intFlag("page")); Pagination activityPagination = this.pagination.build( - TextComponent.of("Recent spark activity", TextColor.GOLD), + text("Recent spark activity", GOLD), this, value -> "/" + platform.getPlugin().getCommandName() + " activity --page " + value ); diff --git a/spark-common/src/main/java/me/lucko/spark/common/command/modules/GcMonitoringModule.java b/spark-common/src/main/java/me/lucko/spark/common/command/modules/GcMonitoringModule.java index ea1cc00..d66a181 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/command/modules/GcMonitoringModule.java +++ b/spark-common/src/main/java/me/lucko/spark/common/command/modules/GcMonitoringModule.java @@ -28,10 +28,7 @@ import me.lucko.spark.common.command.CommandResponseHandler; import me.lucko.spark.common.monitor.memory.GarbageCollectionMonitor; import me.lucko.spark.common.monitor.memory.GarbageCollectorStatistics; import me.lucko.spark.common.util.FormatUtil; -import net.kyori.text.Component; -import net.kyori.text.TextComponent; -import net.kyori.text.format.TextColor; -import net.kyori.text.format.TextDecoration; +import net.kyori.adventure.text.Component; import java.lang.management.MemoryUsage; import java.text.DecimalFormat; @@ -40,6 +37,10 @@ import java.util.List; import java.util.Map; import java.util.function.Consumer; +import static net.kyori.adventure.text.Component.*; +import static net.kyori.adventure.text.format.NamedTextColor.*; +import static net.kyori.adventure.text.format.TextDecoration.*; + public class GcMonitoringModule implements CommandModule { private static final DecimalFormat df = new DecimalFormat("#.##"); @@ -59,14 +60,14 @@ public class GcMonitoringModule implements CommandModule { consumer.accept(Command.builder() .aliases("gc") .executor((platform, sender, resp, arguments) -> { - resp.replyPrefixed(TextComponent.of("Calculating GC statistics...")); + resp.replyPrefixed(text("Calculating GC statistics...")); List report = new LinkedList<>(); - report.add(TextComponent.empty()); - report.add(TextComponent.builder("") - .append(TextComponent.builder(">").color(TextColor.DARK_GRAY).decoration(TextDecoration.BOLD, true).build()) - .append(TextComponent.space()) - .append(TextComponent.of("Garbage Collector statistics", TextColor.GOLD)) + report.add(empty()); + report.add(text() + .append(text(">", DARK_GRAY, BOLD)) + .append(space()) + .append(text("Garbage Collector statistics", GOLD)) .build() ); @@ -78,16 +79,18 @@ public class GcMonitoringModule implements CommandModule { double collectionTime = collector.getValue().getCollectionTime(); long collectionCount = collector.getValue().getCollectionCount(); - report.add(TextComponent.empty()); + report.add(empty()); if (collectionCount == 0) { - report.add(TextComponent.builder(" ") - .append(TextComponent.of(collectorName + " collector:", TextColor.GRAY)) + report.add(text() + .content(" ") + .append(text(collectorName + " collector:", GRAY)) .build() ); - report.add(TextComponent.builder(" ") - .append(TextComponent.of(0, TextColor.WHITE)) - .append(TextComponent.of(" collections", TextColor.GRAY)) + report.add(text() + .content(" ") + .append(text(0, WHITE)) + .append(text(" collections", GRAY)) .build() ); continue; @@ -96,27 +99,30 @@ public class GcMonitoringModule implements CommandModule { double averageCollectionTime = collectionTime / collectionCount; double averageFrequency = (serverUptime - collectionTime) / collectionCount; - report.add(TextComponent.builder(" ") - .append(TextComponent.of(collectorName + " collector:", TextColor.GRAY)) + report.add(text() + .content(" ") + .append(text(collectorName + " collector:", GRAY)) .build() ); - report.add(TextComponent.builder(" ") - .append(TextComponent.of(df.format(averageCollectionTime), TextColor.GOLD)) - .append(TextComponent.of(" ms avg", TextColor.GRAY)) - .append(TextComponent.of(", ", TextColor.DARK_GRAY)) - .append(TextComponent.of(collectionCount, TextColor.WHITE)) - .append(TextComponent.of(" total collections", TextColor.GRAY)) + report.add(text() + .content(" ") + .append(text(df.format(averageCollectionTime), GOLD)) + .append(text(" ms avg", GRAY)) + .append(text(", ", DARK_GRAY)) + .append(text(collectionCount, WHITE)) + .append(text(" total collections", GRAY)) .build() ); - report.add(TextComponent.builder(" ") - .append(TextComponent.of(formatTime((long) averageFrequency), TextColor.WHITE)) - .append(TextComponent.of(" avg frequency", TextColor.GRAY)) + report.add(text() + .content(" ") + .append(text(formatTime((long) averageFrequency), WHITE)) + .append(text(" avg frequency", GRAY)) .build() ); } if (report.size() == 1) { - resp.replyPrefixed(TextComponent.of("No garbage collectors are reporting data.")); + resp.replyPrefixed(text("No garbage collectors are reporting data.")); } else { report.forEach(resp::reply); } @@ -129,10 +135,10 @@ public class GcMonitoringModule implements CommandModule { .executor((platform, sender, resp, arguments) -> { if (this.activeGcMonitor == null) { this.activeGcMonitor = new ReportingGcMonitor(platform, resp); - resp.broadcastPrefixed(TextComponent.of("GC monitor enabled.")); + resp.broadcastPrefixed(text("GC monitor enabled.")); } else { close(); - resp.broadcastPrefixed(TextComponent.of("GC monitor disabled.")); + resp.broadcastPrefixed(text("GC monitor disabled.")); } }) .build() @@ -195,13 +201,15 @@ public class GcMonitoringModule implements CommandModule { this.platform.getPlugin().executeAsync(() -> { List report = new LinkedList<>(); - report.add(CommandResponseHandler.applyPrefix(TextComponent.builder("").color(TextColor.GRAY) - .append(TextComponent.of(gcType + " ")) - .append(TextComponent.of("GC", TextColor.RED)) - .append(TextComponent.of(" lasting ")) - .append(TextComponent.of(df.format(data.getGcInfo().getDuration()), TextColor.GOLD)) - .append(TextComponent.of(" ms." + gcCause)) - .build() + report.add(CommandResponseHandler.applyPrefix( + text() + .color(GRAY) + .append(text(gcType + " ")) + .append(text("GC", RED)) + .append(text(" lasting ")) + .append(text(df.format(data.getGcInfo().getDuration()), GOLD)) + .append(text(" ms." + gcCause)) + .build() )); for (Map.Entry entry : afterUsages.entrySet()) { @@ -219,33 +227,37 @@ public class GcMonitoringModule implements CommandModule { } if (diff > 0) { - report.add(TextComponent.builder(" ") - .append(TextComponent.of(FormatUtil.formatBytes(diff), TextColor.GOLD)) - .append(TextComponent.of(" freed from ", TextColor.DARK_GRAY)) - .append(TextComponent.of(type, TextColor.GRAY)) + report.add(text() + .content(" ") + .append(text(FormatUtil.formatBytes(diff), GOLD)) + .append(text(" freed from ", DARK_GRAY)) + .append(text(type, GRAY)) .build() ); - report.add(TextComponent.builder(" ") - .append(TextComponent.of(FormatUtil.formatBytes(before.getUsed()), TextColor.GRAY)) - .append(TextComponent.of(" → ", TextColor.DARK_GRAY)) - .append(TextComponent.of(FormatUtil.formatBytes(after.getUsed()), TextColor.GRAY)) - .append(TextComponent.space()) - .append(TextComponent.of("(", TextColor.DARK_GRAY)) - .append(TextComponent.of(FormatUtil.percent(diff, before.getUsed()), TextColor.WHITE)) - .append(TextComponent.of(")", TextColor.DARK_GRAY)) + report.add(text() + .content(" ") + .append(text(FormatUtil.formatBytes(before.getUsed()), GRAY)) + .append(text(" → ", DARK_GRAY)) + .append(text(FormatUtil.formatBytes(after.getUsed()), GRAY)) + .append(space()) + .append(text("(", DARK_GRAY)) + .append(text(FormatUtil.percent(diff, before.getUsed()), WHITE)) + .append(text(")", DARK_GRAY)) .build() ); } else { - report.add(TextComponent.builder(" ") - .append(TextComponent.of(FormatUtil.formatBytes(-diff), TextColor.GOLD)) - .append(TextComponent.of(" moved to ", TextColor.DARK_GRAY)) - .append(TextComponent.of(type, TextColor.GRAY)) + report.add(text() + .content(" ") + .append(text(FormatUtil.formatBytes(-diff), GOLD)) + .append(text(" moved to ", DARK_GRAY)) + .append(text(type, GRAY)) .build() ); - report.add(TextComponent.builder(" ") - .append(TextComponent.of(FormatUtil.formatBytes(before.getUsed()), TextColor.GRAY)) - .append(TextComponent.of(" → ", TextColor.DARK_GRAY)) - .append(TextComponent.of(FormatUtil.formatBytes(after.getUsed()), TextColor.GRAY)) + report.add(text() + .content(" ") + .append(text(FormatUtil.formatBytes(before.getUsed()), GRAY)) + .append(text(" → ", DARK_GRAY)) + .append(text(FormatUtil.formatBytes(after.getUsed()), GRAY)) .build() ); } diff --git a/spark-common/src/main/java/me/lucko/spark/common/command/modules/HealthModule.java b/spark-common/src/main/java/me/lucko/spark/common/command/modules/HealthModule.java index 64c2fba..9bf3421 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/command/modules/HealthModule.java +++ b/spark-common/src/main/java/me/lucko/spark/common/command/modules/HealthModule.java @@ -28,10 +28,9 @@ import me.lucko.spark.common.monitor.cpu.CpuMonitor; import me.lucko.spark.common.monitor.tick.TickStatistics; import me.lucko.spark.common.util.FormatUtil; import me.lucko.spark.common.util.RollingAverage; -import net.kyori.text.Component; -import net.kyori.text.TextComponent; -import net.kyori.text.format.TextColor; -import net.kyori.text.format.TextDecoration; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.TextColor; import java.io.IOException; import java.lang.management.ManagementFactory; @@ -46,6 +45,10 @@ import java.util.LinkedList; import java.util.List; import java.util.function.Consumer; +import static net.kyori.adventure.text.Component.*; +import static net.kyori.adventure.text.format.NamedTextColor.*; +import static net.kyori.adventure.text.format.TextDecoration.*; + public class HealthModule implements CommandModule { private static final int MSPT_95_PERCENTILE = 95; @@ -57,41 +60,45 @@ public class HealthModule implements CommandModule { .executor((platform, sender, resp, arguments) -> { TickStatistics tickStatistics = platform.getTickStatistics(); if (tickStatistics != null) { - resp.replyPrefixed(TextComponent.of("TPS from last 5s, 10s, 1m, 5m, 15m:")); - resp.replyPrefixed(TextComponent.builder(" ") - .append(formatTps(tickStatistics.tps5Sec())).append(TextComponent.of(", ")) - .append(formatTps(tickStatistics.tps10Sec())).append(TextComponent.of(", ")) - .append(formatTps(tickStatistics.tps1Min())).append(TextComponent.of(", ")) - .append(formatTps(tickStatistics.tps5Min())).append(TextComponent.of(", ")) + resp.replyPrefixed(text("TPS from last 5s, 10s, 1m, 5m, 15m:")); + resp.replyPrefixed(text() + .content(" ") + .append(formatTps(tickStatistics.tps5Sec())).append(text(", ")) + .append(formatTps(tickStatistics.tps10Sec())).append(text(", ")) + .append(formatTps(tickStatistics.tps1Min())).append(text(", ")) + .append(formatTps(tickStatistics.tps5Min())).append(text(", ")) .append(formatTps(tickStatistics.tps15Min())) .build() ); - resp.replyPrefixed(TextComponent.empty()); + resp.replyPrefixed(empty()); if (tickStatistics.isDurationSupported()) { - resp.replyPrefixed(TextComponent.of("Tick durations (min/med/95%ile/max ms) from last 10s, 1m:")); - resp.replyPrefixed(TextComponent.builder(" ") - .append(formatTickDurations(tickStatistics.duration10Sec())).append(TextComponent.of("; ")) + resp.replyPrefixed(text("Tick durations (min/med/95%ile/max ms) from last 10s, 1m:")); + resp.replyPrefixed(text() + .content(" ") + .append(formatTickDurations(tickStatistics.duration10Sec())).append(text("; ")) .append(formatTickDurations(tickStatistics.duration1Min())) .build() ); - resp.replyPrefixed(TextComponent.empty()); + resp.replyPrefixed(empty()); } } - resp.replyPrefixed(TextComponent.of("CPU usage from last 10s, 1m, 15m:")); - resp.replyPrefixed(TextComponent.builder(" ") - .append(formatCpuUsage(CpuMonitor.systemLoad10SecAvg())).append(TextComponent.of(", ")) - .append(formatCpuUsage(CpuMonitor.systemLoad1MinAvg())).append(TextComponent.of(", ")) + resp.replyPrefixed(text("CPU usage from last 10s, 1m, 15m:")); + resp.replyPrefixed(text() + .content(" ") + .append(formatCpuUsage(CpuMonitor.systemLoad10SecAvg())).append(text(", ")) + .append(formatCpuUsage(CpuMonitor.systemLoad1MinAvg())).append(text(", ")) .append(formatCpuUsage(CpuMonitor.systemLoad15MinAvg())) - .append(TextComponent.of(" (system)", TextColor.DARK_GRAY)) + .append(text(" (system)", DARK_GRAY)) .build() ); - resp.replyPrefixed(TextComponent.builder(" ") - .append(formatCpuUsage(CpuMonitor.processLoad10SecAvg())).append(TextComponent.of(", ")) - .append(formatCpuUsage(CpuMonitor.processLoad1MinAvg())).append(TextComponent.of(", ")) + resp.replyPrefixed(text() + .content(" ") + .append(formatCpuUsage(CpuMonitor.processLoad10SecAvg())).append(text(", ")) + .append(formatCpuUsage(CpuMonitor.processLoad1MinAvg())).append(text(", ")) .append(formatCpuUsage(CpuMonitor.processLoad15MinAvg())) - .append(TextComponent.of(" (process)", TextColor.DARK_GRAY)) + .append(text(" (process)", DARK_GRAY)) .build() ); }) @@ -103,103 +110,109 @@ public class HealthModule implements CommandModule { .aliases("healthreport", "health", "ht") .argumentUsage("memory", null) .executor((platform, sender, resp, arguments) -> { - resp.replyPrefixed(TextComponent.of("Generating server health report...")); + resp.replyPrefixed(text("Generating server health report...")); platform.getPlugin().executeAsync(() -> { List report = new LinkedList<>(); - report.add(TextComponent.empty()); + report.add(empty()); TickStatistics tickStatistics = platform.getTickStatistics(); if (tickStatistics != null) { - report.add(TextComponent.builder("") - .append(TextComponent.builder(">").color(TextColor.DARK_GRAY).decoration(TextDecoration.BOLD, true).build()) - .append(TextComponent.space()) - .append(TextComponent.of("TPS from last 5s, 10s, 1m, 5m, 15m:", TextColor.GOLD)) + report.add(text() + .append(text(">", DARK_GRAY, BOLD)) + .append(space()) + .append(text("TPS from last 5s, 10s, 1m, 5m, 15m:", GOLD)) .build() ); - report.add(TextComponent.builder(" ") - .append(formatTps(tickStatistics.tps5Sec())).append(TextComponent.of(", ")) - .append(formatTps(tickStatistics.tps10Sec())).append(TextComponent.of(", ")) - .append(formatTps(tickStatistics.tps1Min())).append(TextComponent.of(", ")) - .append(formatTps(tickStatistics.tps5Min())).append(TextComponent.of(", ")) + report.add(text() + .content(" ") + .append(formatTps(tickStatistics.tps5Sec())).append(text(", ")) + .append(formatTps(tickStatistics.tps10Sec())).append(text(", ")) + .append(formatTps(tickStatistics.tps1Min())).append(text(", ")) + .append(formatTps(tickStatistics.tps5Min())).append(text(", ")) .append(formatTps(tickStatistics.tps15Min())) .build() ); - report.add(TextComponent.empty()); + report.add(empty()); if (tickStatistics.isDurationSupported()) { - report.add(TextComponent.builder("") - .append(TextComponent.builder(">").color(TextColor.DARK_GRAY).decoration(TextDecoration.BOLD, true).build()) - .append(TextComponent.space()) - .append(TextComponent.of("Tick durations (min/med/95%ile/max ms) from last 10s, 1m:", TextColor.GOLD)) + report.add(text() + .append(text(">", DARK_GRAY, BOLD)) + .append(space()) + .append(text("Tick durations (min/med/95%ile/max ms) from last 10s, 1m:", GOLD)) .build() ); - report.add(TextComponent.builder(" ") - .append(formatTickDurations(tickStatistics.duration10Sec())).append(TextComponent.of("; ")) + report.add(text() + .content(" ") + .append(formatTickDurations(tickStatistics.duration10Sec())).append(text("; ")) .append(formatTickDurations(tickStatistics.duration1Min())) .build() ); - report.add(TextComponent.empty()); + report.add(empty()); } } - report.add(TextComponent.builder("") - .append(TextComponent.builder(">").color(TextColor.DARK_GRAY).decoration(TextDecoration.BOLD, true).build()) - .append(TextComponent.space()) - .append(TextComponent.of("CPU usage from last 10s, 1m, 15m:", TextColor.GOLD)) + report.add(text() + .append(text(">", DARK_GRAY, BOLD)) + .append(space()) + .append(text("CPU usage from last 10s, 1m, 15m:", GOLD)) .build() ); - report.add(TextComponent.builder(" ") - .append(formatCpuUsage(CpuMonitor.systemLoad10SecAvg())).append(TextComponent.of(", ")) - .append(formatCpuUsage(CpuMonitor.systemLoad1MinAvg())).append(TextComponent.of(", ")) + report.add(text() + .content(" ") + .append(formatCpuUsage(CpuMonitor.systemLoad10SecAvg())).append(text(", ")) + .append(formatCpuUsage(CpuMonitor.systemLoad1MinAvg())).append(text(", ")) .append(formatCpuUsage(CpuMonitor.systemLoad15MinAvg())) - .append(TextComponent.of(" (system)", TextColor.DARK_GRAY)) + .append(text(" (system)", DARK_GRAY)) .build() ); - report.add(TextComponent.builder(" ") - .append(formatCpuUsage(CpuMonitor.processLoad10SecAvg())).append(TextComponent.of(", ")) - .append(formatCpuUsage(CpuMonitor.processLoad1MinAvg())).append(TextComponent.of(", ")) + report.add(text() + .content(" ") + .append(formatCpuUsage(CpuMonitor.processLoad10SecAvg())).append(text(", ")) + .append(formatCpuUsage(CpuMonitor.processLoad1MinAvg())).append(text(", ")) .append(formatCpuUsage(CpuMonitor.processLoad15MinAvg())) - .append(TextComponent.of(" (process)", TextColor.DARK_GRAY)) + .append(text(" (process)", DARK_GRAY)) .build() ); - report.add(TextComponent.empty()); + report.add(empty()); MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); MemoryUsage heapUsage = memoryMXBean.getHeapMemoryUsage(); - report.add(TextComponent.builder("") - .append(TextComponent.builder(">").color(TextColor.DARK_GRAY).decoration(TextDecoration.BOLD, true).build()) - .append(TextComponent.space()) - .append(TextComponent.of("Memory usage:", TextColor.GOLD)) + report.add(text() + .append(text(">", DARK_GRAY, BOLD)) + .append(space()) + .append(text("Memory usage:", GOLD)) .build() ); - report.add(TextComponent.builder(" ") - .append(TextComponent.of(FormatUtil.formatBytes(heapUsage.getUsed()), TextColor.WHITE)) - .append(TextComponent.space()) - .append(TextComponent.of("/", TextColor.GRAY)) - .append(TextComponent.space()) - .append(TextComponent.of(FormatUtil.formatBytes(heapUsage.getMax()), TextColor.WHITE)) - .append(TextComponent.of(" ")) - .append(TextComponent.of("(", TextColor.GRAY)) - .append(TextComponent.of(FormatUtil.percent(heapUsage.getUsed(), heapUsage.getMax()), TextColor.GREEN)) - .append(TextComponent.of(")", TextColor.GRAY)) + report.add(text() + .content(" ") + .append(text(FormatUtil.formatBytes(heapUsage.getUsed()), WHITE)) + .append(space()) + .append(text("/", GRAY)) + .append(space()) + .append(text(FormatUtil.formatBytes(heapUsage.getMax()), WHITE)) + .append(text(" ")) + .append(text("(", GRAY)) + .append(text(FormatUtil.percent(heapUsage.getUsed(), heapUsage.getMax()), GREEN)) + .append(text(")", GRAY)) .build() ); - report.add(TextComponent.builder(" ").append(generateMemoryUsageDiagram(heapUsage, 40)).build()); - report.add(TextComponent.empty()); + report.add(text().content(" ").append(generateMemoryUsageDiagram(heapUsage, 40)).build()); + report.add(empty()); if (arguments.boolFlag("memory")) { MemoryUsage nonHeapUsage = memoryMXBean.getNonHeapMemoryUsage(); - report.add(TextComponent.builder("") - .append(TextComponent.builder(">").color(TextColor.DARK_GRAY).decoration(TextDecoration.BOLD, true).build()) - .append(TextComponent.space()) - .append(TextComponent.of("Non-heap memory usage:", TextColor.GOLD)) + report.add(text() + .append(text(">", DARK_GRAY, BOLD)) + .append(space()) + .append(text("Non-heap memory usage:", GOLD)) .build() ); - report.add(TextComponent.builder(" ") - .append(TextComponent.of(FormatUtil.formatBytes(nonHeapUsage.getUsed()), TextColor.WHITE)) + report.add(text() + .content(" ") + .append(text(FormatUtil.formatBytes(nonHeapUsage.getUsed()), WHITE)) .build() ); - report.add(TextComponent.empty()); + report.add(empty()); List memoryPoolMXBeans = ManagementFactory.getMemoryPoolMXBeans(); for (MemoryPoolMXBean memoryPool : memoryPoolMXBeans) { @@ -214,37 +227,39 @@ public class HealthModule implements CommandModule { usage = new MemoryUsage(usage.getInit(), usage.getUsed(), usage.getCommitted(), usage.getCommitted()); } - report.add(TextComponent.builder("") - .a