1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 03:35:51 +00:00

Added verbose flag to /sf timings

This commit is contained in:
TheBusyBiscuit 2021-01-06 17:52:46 +01:00
parent 75b72eb630
commit 4f21d06c69
6 changed files with 71 additions and 10 deletions

View File

@ -1,6 +1,12 @@
package io.github.thebusybiscuit.slimefun4.core.commands.subcommands; package io.github.thebusybiscuit.slimefun4.core.commands.subcommands;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.ParametersAreNonnullByDefault;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.ConsoleCommandSender;
@ -15,6 +21,9 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
class TimingsCommand extends SubCommand { class TimingsCommand extends SubCommand {
private static final String FLAG_PREFIX = "--";
private final Set<String> flags = new HashSet<>(Arrays.asList("verbose"));
TimingsCommand(SlimefunPlugin plugin, SlimefunCommand cmd) { TimingsCommand(SlimefunPlugin plugin, SlimefunCommand cmd) {
super(plugin, cmd, "timings", false); super(plugin, cmd, "timings", false);
} }
@ -22,20 +31,61 @@ class TimingsCommand extends SubCommand {
@Override @Override
public void onExecute(CommandSender sender, String[] args) { public void onExecute(CommandSender sender, String[] args) {
if (sender.hasPermission("slimefun.command.timings") || sender instanceof ConsoleCommandSender) { if (sender.hasPermission("slimefun.command.timings") || sender instanceof ConsoleCommandSender) {
sender.sendMessage("Please wait a second... The results are coming in!"); if (hasInvalidFlags(sender, args)) {
PerformanceInspector inspector = inspectorOf(sender); return;
}
boolean verbose = hasFlag(args, "verbose");
if (verbose && sender instanceof Player) {
SlimefunPlugin.getLocalization().sendMessage(sender, "commands.timings.verbose-player", true);
return;
}
SlimefunPlugin.getLocalization().sendMessage(sender, "commands.timings.please-wait", true);
PerformanceInspector inspector = inspectorOf(sender, verbose);
SlimefunPlugin.getProfiler().requestSummary(inspector); SlimefunPlugin.getProfiler().requestSummary(inspector);
} else { } else {
SlimefunPlugin.getLocalization().sendMessage(sender, "messages.no-permission", true); SlimefunPlugin.getLocalization().sendMessage(sender, "messages.no-permission", true);
} }
} }
@ParametersAreNonnullByDefault
private boolean hasInvalidFlags(CommandSender sender, String[] args) {
boolean hasInvalidFlags = false;
// We start at 1 because args[0] will be "timings".
for (int i = 1; i < args.length; i++) {
String argument = args[i].toLowerCase(Locale.ROOT);
if (!argument.startsWith(FLAG_PREFIX) || !flags.contains(argument.substring(2))) {
hasInvalidFlags = true;
SlimefunPlugin.getLocalization().sendMessage(sender, "commands.timings.unknown-flag", true, msg -> msg.replace("%flag%", argument));
}
}
return hasInvalidFlags;
}
@ParametersAreNonnullByDefault
private boolean hasFlag(String[] args, String flag) {
// We start at 1 because args[0] will be "timings".
for (int i = 1; i < args.length; i++) {
if (args[i].equalsIgnoreCase(FLAG_PREFIX + flag)) {
return true;
}
}
return false;
}
@Nonnull @Nonnull
private PerformanceInspector inspectorOf(@Nonnull CommandSender sender) { private PerformanceInspector inspectorOf(@Nonnull CommandSender sender, boolean verbose) {
if (sender instanceof Player) { if (sender instanceof Player) {
return new PlayerPerformanceInspector((Player) sender); return new PlayerPerformanceInspector((Player) sender);
} else { } else {
return new ConsolePerformanceInspector(sender); return new ConsolePerformanceInspector(sender, verbose);
} }
} }

View File

@ -36,6 +36,6 @@ public interface PerformanceInspector {
* *
* @return Whether to send the full {@link PerformanceSummary} or a trimmed version * @return Whether to send the full {@link PerformanceSummary} or a trimmed version
*/ */
boolean hasFullView(); boolean isVerbose();
} }

View File

@ -152,7 +152,7 @@ class PerformanceSummary {
builder.append(ChatColor.YELLOW); builder.append(ChatColor.YELLOW);
for (Map.Entry<String, Long> entry : results) { for (Map.Entry<String, Long> entry : results) {
if (!inspector.hasFullView() || (shownEntries < MAX_ITEMS && (shownEntries < MIN_ITEMS || entry.getValue() > VISIBILITY_THRESHOLD))) { if (!inspector.isVerbose() || (shownEntries < MAX_ITEMS && (shownEntries < MIN_ITEMS || entry.getValue() > VISIBILITY_THRESHOLD))) {
builder.append("\n "); builder.append("\n ");
builder.append(ChatColor.stripColor(formatter.apply(entry))); builder.append(ChatColor.stripColor(formatter.apply(entry)));
shownEntries++; shownEntries++;

View File

@ -23,16 +23,22 @@ public class ConsolePerformanceInspector implements PerformanceInspector {
*/ */
private final CommandSender console; private final CommandSender console;
/**
* Whether a summary will be verbose or trimmed of.
*/
private final boolean verbose;
/** /**
* This creates a new {@link ConsolePerformanceInspector} for the given {@link CommandSender}. * This creates a new {@link ConsolePerformanceInspector} for the given {@link CommandSender}.
* *
* @param console * @param console
* The {@link CommandSender}, preferabbly a {@link ConsoleCommandSender} * The {@link CommandSender}, preferabbly a {@link ConsoleCommandSender}
*/ */
public ConsolePerformanceInspector(@Nonnull CommandSender console) { public ConsolePerformanceInspector(@Nonnull CommandSender console, boolean verbose) {
Validate.notNull(console, "CommandSender cannot be null"); Validate.notNull(console, "CommandSender cannot be null");
this.console = console; this.console = console;
this.verbose = verbose;
} }
@Override @Override
@ -42,8 +48,8 @@ public class ConsolePerformanceInspector implements PerformanceInspector {
} }
@Override @Override
public boolean hasFullView() { public boolean isVerbose() {
return false; return verbose;
} }
@Override @Override

View File

@ -50,7 +50,7 @@ public class PlayerPerformanceInspector implements PerformanceInspector {
} }
@Override @Override
public boolean hasFullView() { public boolean isVerbose() {
return false; return false;
} }

View File

@ -26,6 +26,11 @@ commands:
description: Charges the item you are holding description: Charges the item you are holding
charge-success: Item has been charged! charge-success: Item has been charged!
not-rechargeable: This item can not be charged! not-rechargeable: This item can not be charged!
timings:
please-wait: '&ePlease wait a second... The results are coming in!'
verbose-player: '&4The verbose flag cannot by used by a Player!'
unknown-flag: '&4Unknown flag: &c%flag%'
guide: guide:
locked: 'LOCKED' locked: 'LOCKED'