diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/VersionsCommand.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/VersionsCommand.java index 6a21e4ef9..4cd82755c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/VersionsCommand.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/VersionsCommand.java @@ -3,13 +3,18 @@ package io.github.thebusybiscuit.slimefun4.core.commands.subcommands; import java.util.Collection; import javax.annotation.Nonnull; + +import io.github.thebusybiscuit.slimefun4.api.SlimefunAddon; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.hover.content.Text; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.plugin.Plugin; -import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; import io.github.thebusybiscuit.slimefun4.core.commands.SlimefunCommand; import io.github.thebusybiscuit.slimefun4.core.commands.SubCommand; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; @@ -28,35 +33,107 @@ class VersionsCommand extends SubCommand { // so we will just fix this inconsistency for them :) String serverSoftware = PaperLib.isSpigot() && !PaperLib.isPaper() ? "Spigot" : Bukkit.getName(); - sender.sendMessage(ChatColor.GRAY + "This Server uses the following setup of Slimefun:"); - sender.sendMessage(ChatColors.color("&a" + serverSoftware + " &2" + Bukkit.getVersion())); - sender.sendMessage(ChatColors.color("&aSlimefun &2v" + SlimefunPlugin.getVersion())); + ComponentBuilder builder = new ComponentBuilder(); + builder.append("This Server uses the following setup of Slimefun:\n").color(ChatColor.GRAY) + .append(serverSoftware).color(ChatColor.GREEN).append(" " + Bukkit.getVersion() + '\n').color(ChatColor.DARK_GREEN) + .append("Slimefun").color(ChatColor.GREEN).append(" v" + SlimefunPlugin.getVersion() + '\n').color(ChatColor.DARK_GREEN); if (SlimefunPlugin.getMetricsService().getVersion() != null) { - sender.sendMessage(ChatColors.color("&aMetrics build: &2#" + SlimefunPlugin.getMetricsService().getVersion())); + builder.append("Metrics build: ").color(ChatColor.GREEN) + .append("#" + SlimefunPlugin.getMetricsService().getVersion() + '\n').color(ChatColor.DARK_GREEN); } + addJavaVersion(builder); + if (SlimefunPlugin.getRegistry().isBackwardsCompatible()) { - sender.sendMessage(ChatColor.RED + "Backwards compatibility enabled!"); + HoverEvent hoverEvent = new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text( + "Backwards compatibility has a negative impact on performance!\n" + + "We recommend you to disable this setting unless your server still " + + "has legacy Slimefun items (from before summer 2019) in circulation." + )); + + builder.append("Backwards compatibility enabled!\n").color(ChatColor.RED).event(hoverEvent); } - sender.sendMessage(""); + builder.append("\n").event((HoverEvent) null); - Collection addons = SlimefunPlugin.getInstalledAddons(); - sender.sendMessage(ChatColors.color("&7Installed Addons: &8(" + addons.size() + ")")); + addPluginVersions(builder); - for (Plugin plugin : addons) { - String version = plugin.getDescription().getVersion(); - - if (Bukkit.getPluginManager().isPluginEnabled(plugin)) { - sender.sendMessage(ChatColor.GREEN + " " + plugin.getName() + ChatColor.DARK_GREEN + " v" + version); - } else { - sender.sendMessage(ChatColor.RED + " " + plugin.getName() + ChatColor.DARK_RED + " v" + version); - } - } + sender.spigot().sendMessage(builder.create()); } else { SlimefunPlugin.getLocalization().sendMessage(sender, "messages.no-permission", true); } } + private void addJavaVersion(@Nonnull ComponentBuilder builder) { + String javaVer = System.getProperty("java.version"); + if (javaVer.startsWith("1.")) { + javaVer = javaVer.substring(2); + } + + // If it's like 11.0.1.3 or 8.0_275 + if (javaVer.indexOf('.') != -1) { + javaVer = javaVer.substring(0, javaVer.indexOf('.')); + } + int ver = Integer.parseInt(javaVer); + + if (ver < 11) { + builder.append("Java " + ver).color(ChatColor.RED) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text( + "You should be using at least Java 11! Paper will be dropping support for before Java 11 starting at MC 1.17" + ))) + .append("\n") + .event((HoverEvent) null); + } else { + builder.append("Java " + ver + "\n").color(ChatColor.GREEN); + } + } + + private void addPluginVersions(@Nonnull ComponentBuilder builder) { + Collection addons = SlimefunPlugin.getInstalledAddons(); + builder.append("Installed Addons: ").color(ChatColor.GRAY) + .append("(" + addons.size() + ")").color(ChatColor.DARK_GRAY); + + for (Plugin plugin : addons) { + String version = plugin.getDescription().getVersion(); + + if (Bukkit.getPluginManager().isPluginEnabled(plugin)) { + HoverEvent hoverEvent; + ClickEvent clickEvent = null; + if (plugin instanceof SlimefunAddon) { + hoverEvent = new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text( + "Author(s): " + String.join(", ", plugin.getDescription().getAuthors()) + + "\nClick to open the Bug Tracker" + )); + clickEvent = new ClickEvent(ClickEvent.Action.OPEN_URL, ((SlimefunAddon) plugin).getBugTrackerURL()); + } else { + hoverEvent = new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text( + "Author(s): " + String.join(", ", plugin.getDescription().getAuthors()) + )); + } + + builder.append("\n " + plugin.getName()).color(ChatColor.GREEN).event(hoverEvent).event(clickEvent) + .append(" v" + version).color(ChatColor.DARK_GREEN) + .append("").event((ClickEvent) null).event((HoverEvent) null); + } else { + HoverEvent hoverEvent; + ClickEvent clickEvent = null; + if (plugin instanceof SlimefunAddon) { + hoverEvent = new HoverEvent(HoverEvent.Action.SHOW_TEXT, + new Text("Plugin is disabled. Check the console for an error. Click here to report on their issue tracker")); + if (((SlimefunAddon) plugin).getBugTrackerURL() != null) { + clickEvent = new ClickEvent(ClickEvent.Action.OPEN_URL, ((SlimefunAddon) plugin).getBugTrackerURL()); + } + } else { + hoverEvent = new HoverEvent(HoverEvent.Action.SHOW_TEXT, + new Text("Plugin is disabled. Check the console for an error and report on their issue tracker.")); + } + + // We need to reset the hover event or it's added to all components + builder.append("\n " + plugin.getName()).color(ChatColor.RED).event(hoverEvent).event(clickEvent) + .append(" v" + version).color(ChatColor.DARK_RED) + .append("").event((ClickEvent) null).event((HoverEvent) null); + } + } + } }