Compare commits

...

11 Commits
14.6 ... 15.3

Author SHA1 Message Date
6f054a8993 Update T2CBtab.java 2023-06-27 18:01:55 +02:00
a3ec7117dd 15.3
add minMcVersion (public static boolean minMc1_13() etc.) to net.t2code.t2codelib.SPIGOT.api.minecraftVersion.T2CmcVersion
2023-06-26 11:14:11 +02:00
034bf241e5 15.2
Changes:
Commands:
- The command '/t2code serverid' has been added to display the server ID assigned by the T2CodeLib.
- The command '/t2code bcmd <command>' was added to execute a bungee command from a spigot plugin

DebugLog:
- The number of offline players is now displayed in T2CoderLog.txt
- The offline players as well as the plugins in the T2CoderLog.txt are now listed in alphabetical order

- Smaller code changes
2023-06-19 21:17:49 +02:00
b2ebce50ed 15.1 | Stable 1.20 support
Stable 1.20 support
2023-06-19 14:30:37 +02:00
1b8bedc4e6 Merge branch 'development' of https://git.t2code.net/JaTiTV/T2CodeLib into development 2023-06-08 06:57:15 +02:00
4b7d8539ea 15.0
- Update auf Minecraft Version 1.20
- Kyori MiniMessage API Update auf 4.14.0
2023-06-08 06:55:44 +02:00
JaTiTV
bb230fb3ea Merge pull request 'Update pom.xml' (#20) from 14.7 into development
Reviewed-on: #20
2023-05-17 18:53:58 +00:00
b01bf2d84f Update pom.xml 2023-05-17 20:48:09 +02:00
JaTiTV
32fe2ab579 Merge pull request '14.5' (#19) from 14.5 into development
Reviewed-on: #19
2023-05-17 18:44:01 +00:00
JaTiTV
e9ee3e690c Merge pull request 'Update T2CnameHistory.java' (#18) from 14.5_FIX into 14.5
Reviewed-on: #18
2023-05-16 17:31:34 +00:00
Jkobs
c9ee80dd38 Update T2CnameHistory.java 2023-05-16 19:08:48 +02:00
13 changed files with 190 additions and 49 deletions

13
pom.xml
View File

@@ -6,7 +6,10 @@
<groupId>net.t2code</groupId>
<artifactId>T2CodeLib</artifactId>
<version>14.6</version>
<version>15.3</version>
<!--version>VERSION_snapshot-0</version-->
<!--version>VERSION_beta-0</version-->
<!--version>VERSION_dev-0</version-->
<packaging>jar</packaging>
<name>T2CodeLib</name>
@@ -115,7 +118,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.19.3-R0.1-SNAPSHOT</version>
<version>1.20-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
@@ -131,7 +134,7 @@
<dependency>
<groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId>
<version>1.19-R0.1-SNAPSHOT</version>
<version>1.20-R0.1-SNAPSHOT</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
@@ -163,7 +166,7 @@
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.11.2</version>
<version>2.11.3</version>
<scope>provided</scope>
</dependency>
@@ -179,7 +182,7 @@
<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-text-minimessage</artifactId>
<version>4.13.1</version>
<version>4.14.0</version>
<scope>compile</scope>
</dependency>
<dependency>

View File

@@ -10,31 +10,55 @@ import java.util.Iterator;
import java.util.List;
public class T2CBtab {
public static Iterable<String> tab(CommandSender sender, String[] args, String perm,Boolean onlinePlayer){
List<String> matches = new ArrayList<>();
Iterator var6 = ProxyServer.getInstance().getPlayers().iterator();
while (var6.hasNext()) {
ProxiedPlayer player1 = (ProxiedPlayer) var6.next();
if (passend(player1.getName(), args[0]) && hasPermission(sender, perm)){
matches.add(player1.getName());
}
public static void tab(List<String> matches, CommandSender sender, int arg, String[] args, String perm, Boolean onlinePlayer) {
if (args.length != arg + 1) return;
for (ProxiedPlayer player1 : ProxyServer.getInstance().getPlayers()) {
if (passend(player1.getName(), args[arg]) && hasPermission(sender, perm)) {
matches.add(player1.getName());
}
return matches;
}
}
public static Iterable<String> tab(CommandSender sender, String[] args, HashMap<String, String> permMap) {
List<String> matches = new ArrayList<>();
public static void tab(List<String> matches, CommandSender sender, int argEquals, String equalsValue, int arg, String[] args, String perm, Boolean onlinePlayer) {
if (args.length != arg + 1) return;
if (!args[argEquals].toLowerCase().equals(equalsValue)) return;
for (ProxiedPlayer player1 : ProxyServer.getInstance().getPlayers()) {
if (passend(player1.getName(), args[arg]) && hasPermission(sender, perm)) {
matches.add(player1.getName());
}
}
}
public static void tab(List<String> matches, CommandSender sender, int arg, String[] args, HashMap<String, String> permMap, Boolean onlinePlayer, String permForPlayer) {
if (args.length != arg + 1) return;
for (String command : permMap.keySet()) {
if (hasPermission(sender, permMap.get(command)) && passend(command, args[0])) {
if (hasPermission(sender, permMap.get(command)) && passend(command, args[arg])) {
matches.add(command);
} else if (onlinePlayer != null && permForPlayer != null) {
tab(matches, sender, arg, args, permForPlayer, onlinePlayer);
}
}
}
public static void tab(List<String> matches, CommandSender sender, int arg, String[] args, HashMap<String, String> permMap) {
tab(matches, sender, arg, args, permMap, null, null);
}
public static void tab(List<String> matches, CommandSender sender, int argEquals, String equalsValue, int arg, String[] args, HashMap<String, String> permMap) {
if (args.length != arg + 1) return;
if (!args[argEquals].toLowerCase().equals(equalsValue)) return;
for (String command : permMap.keySet()) {
if (hasPermission(sender, permMap.get(command)) && passend(command, args[arg])) {
matches.add(command);
}
}
return matches;
}
public static Iterable<String> tab(CommandSender sender, String[] args, String perm, String command) {
public static List<String> tab(CommandSender sender, int arg, String[] args, String perm, String command) {
List<String> matches = new ArrayList<>();
if (hasPermission(sender, perm) && passend(command, args[0])) {
if (hasPermission(sender, perm) && passend(command, args[arg])) {
matches.add(command);
}
return matches;

View File

@@ -5,7 +5,6 @@ import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.plugin.Plugin;
import net.t2code.t2codelib.BUNGEE.api.messages.T2CBsend;
import net.t2code.t2codelib.BUNGEE.system.config.T2CBlibConfig;
import net.t2code.t2codelib.SPIGOT.system.config.config.SelectLibConfig;
import net.t2code.t2codelib.T2CupdateObject;
import net.t2code.t2codelib.T2CupdateWebData;
import net.t2code.t2codelib.UpdateType;

View File

@@ -34,7 +34,7 @@ public class T2CBload {
throw new RuntimeException(e);
}
T2CBupdateAPI.onUpdateCheckTimer(plugin, prefix, discord, spigotID,url);
T2CBupdateAPI.onUpdateCheckTimer(plugin, prefix, discord, spigotID, url);
//API
plugin.getProxy().registerChannel("t2c:bcmd");

View File

@@ -43,8 +43,6 @@ public class T2CodeBMain extends Plugin {
mmIsLoad = false;
}
T2CBload.onLoad(plugin, Util.getPrefix(), autor, orgVersion, Util.getSpigot(), Util.getDiscord(), Util.getSpigotID(), Util.getBstatsID(),Util.getGit());
String[] fv = orgVersion.split("_");
plugin.getDescription().setVersion(fv[0]);
version = plugin.getDescription().getVersion();
}

View File

@@ -5,6 +5,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.PluginMessageEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler;
import net.t2code.t2codelib.Util;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
@@ -19,13 +20,14 @@ public class T2CplmsgBcmd implements Listener {
try {
String channel = stream.readUTF();
String input = stream.readUTF();
String serverID = stream.readUTF();
if (channel.equals("T2Code-Console")) {
ProxyServer.getInstance().getConsole().sendMessage("Command Console: "+ input);
ProxyServer.getInstance().getConsole().sendMessage(Util.getPrefix()+" [§6"+serverID+"§r] §cT2C BCMD Command Console: §r"+ input);
ProxyServer.getInstance().getPluginManager().dispatchCommand(ProxyServer.getInstance().getConsole(), input);
} else {
ProxiedPlayer player = ProxyServer.getInstance().getPlayer(channel);
if (player != null) {
ProxyServer.getInstance().getConsole().sendMessage("Command " + player +": "+ input);
ProxyServer.getInstance().getConsole().sendMessage(Util.getPrefix()+" [§6"+serverID+"§r] §cT2C BCMD Command §r" + player +": "+ input);
ProxyServer.getInstance().getPluginManager().dispatchCommand(player, input);
}
}

View File

@@ -21,7 +21,7 @@ public class T2CmcVersion {
mc1_18 = nms.contains("1_18");
mc1_19 = nms.contains("1_19");
mc1_20 = nms.contains("1_20");
nms1_8_R1 = nms.contains("1_8_R1");
nms1_8_R2 = nms.contains("1_8_R2");
nms1_8_R3 = nms.contains("1_8_R3");
@@ -43,6 +43,7 @@ public class T2CmcVersion {
nms1_19_R1 = nms.contains("1_19_R1");
nms1_19_R2 = nms.contains("1_19_R2");
nms1_20_R1 = nms.contains("1_20_R1");
nms1_20_R2 = nms.contains("1_20_R2");
}
private static String mcVersion;
@@ -83,6 +84,7 @@ public class T2CmcVersion {
private static boolean nms1_19_R1;
private static boolean nms1_19_R2;
private static boolean nms1_20_R1;
private static boolean nms1_20_R2;
public static String getMcVersion() {
return mcVersion;
@@ -231,4 +233,62 @@ public class T2CmcVersion {
public static boolean isNms1_20_R1() {
return nms1_20_R1;
}
public static boolean isNms1_20_R2() {
return nms1_20_R2;
}
public static boolean minMc1_8() {
return isMc1_8();
}
public static boolean minMc1_9() {
return !isMc1_8();
}
public static boolean minMc1_10() {
return !isMc1_8() && !isMc1_9();
}
public static boolean minMc1_11() {
return !isMc1_8() && !isMc1_9() && !isMc1_10();
}
public static boolean minMc1_12() {
return !isMc1_8() && !isMc1_9() && !isMc1_10() && !isMc1_11();
}
public static boolean minMc1_13() {
return !isMc1_8() && !isMc1_9() && !isMc1_10() && !isMc1_11() && !isMc1_12() ;
}
public static boolean minMc1_14() {
return !isMc1_8() && !isMc1_9() && !isMc1_10() && !isMc1_11() && !isMc1_12() && !isMc1_13();
}
public static boolean minMc1_15() {
return !isMc1_8() && !isMc1_9() && !isMc1_10() && !isMc1_11() && !isMc1_12() && !isMc1_13() && !isMc1_14() ;
}
public static boolean minMc1_16() {
return !isMc1_8() && !isMc1_9() && !isMc1_10() && !isMc1_11() && !isMc1_12() && !isMc1_13() && !isMc1_14() && !isMc1_15();
}
public static boolean minMc1_17() {
return !isMc1_8() && !isMc1_9() && !isMc1_10() && !isMc1_11() && !isMc1_12() && !isMc1_13() && !isMc1_14() && !isMc1_15() && !isMc1_16();
}
public static boolean minMc1_18() {
return !isMc1_8() && !isMc1_9() && !isMc1_10() && !isMc1_11() && !isMc1_12() && !isMc1_13() && !isMc1_14() && !isMc1_15() && !isMc1_16() && !isMc1_17();
}
public static boolean minMc1_19() {
return !isMc1_8() && !isMc1_9() && !isMc1_10() && !isMc1_11() && !isMc1_12() && !isMc1_13() && !isMc1_14() && !isMc1_15() && !isMc1_16() && !isMc1_17() && !isMc1_18();
}
public static boolean minMc1_20() {
return !isMc1_8() && !isMc1_9() && !isMc1_10() && !isMc1_11() && !isMc1_12() && !isMc1_13() && !isMc1_14() && !isMc1_15() && !isMc1_16() && !isMc1_17()
&& !isMc1_18() && !isMc1_19();
}
}

View File

@@ -5,7 +5,6 @@ import com.google.gson.JsonObject;
import com.google.gson.annotations.SerializedName;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -13,6 +12,7 @@ import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;
import java.util.UUID;
import java.util.stream.Collectors;
public class T2CnameHistory {
public static class NameLookup {
@@ -93,7 +93,7 @@ public class T2CnameHistory {
con.setReadTimeout(2000);
con.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String response = in.readLine();
String response = in.lines().collect(Collectors.joining());
in.close();
return response;
}

View File

@@ -1,5 +1,7 @@
package net.t2code.t2codelib.SPIGOT.system;
import net.t2code.t2codelib.SPIGOT.api.debug.T2Cdebug;
import net.t2code.t2codelib.Util;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -7,6 +9,7 @@ import org.bukkit.entity.Player;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class T2CbungeeCommandSenderReciver {
@@ -24,18 +27,22 @@ public class T2CbungeeCommandSenderReciver {
}
}
output.writeUTF(information);
output.writeUTF(String.valueOf(Util.getServerUUID()));
} catch (IOException e) {
e.printStackTrace();
}
if (sender instanceof Player) {
Player player = (Player) sender;
player.sendPluginMessage(T2CodeLibMain.getPlugin(), "t2c:bcmd", stream.toByteArray());
}else {
for(Player player : Bukkit.getOnlinePlayers()){
player.sendPluginMessage(T2CodeLibMain.getPlugin(), "t2c:bcmd", stream.toByteArray());
return;
}
T2Cdebug.debug(T2CodeLibMain.getPlugin(), "PluginMessage received T2CbungeeCommandSenderReciver: t2c:bcmd - " + Arrays.toString(stream.toByteArray()) + " Player: " + player.getName());
} else {
for (Player player : Bukkit.getOnlinePlayers()) {
player.sendPluginMessage(T2CodeLibMain.getPlugin(), "t2c:bcmd", stream.toByteArray());
T2Cdebug.debug(T2CodeLibMain.getPlugin(), "PluginMessage received T2CbungeeCommandSenderReciver: t2c:bcmd - " + Arrays.toString(stream.toByteArray()) + " Player: " + player.getName());
return;
}
//todo
}
}
}

View File

@@ -61,10 +61,10 @@ public final class T2CodeLibMain extends JavaPlugin {
}
T2CmcVersion.onCheck();
if (T2CmcVersion.isMc1_20()) {
if (T2CmcVersion.isNms1_20_R2()) {
T2Csend.console(prefix + " §4!!!!!!!!!!!!!!!!!!!!");
T2Csend.console(prefix);
T2Csend.warning(plugin, "The 1.20.* is a very fresh / new version. If there are any bugs in our plugins, please report them to us via our Discord: http://dc.t2code.net");
T2Csend.warning(plugin, "The 1.20.* (R2) is a very fresh / new version. If there are any bugs in our plugins, please report them to us via our Discord: http://dc.t2code.net");
T2Csend.console(prefix);
T2Csend.console(prefix + " §4!!!!!!!!!!!!!!!!!!!!");
if (!SelectLibConfig.getT2cTestDevelopment()) {
@@ -96,6 +96,9 @@ public final class T2CodeLibMain extends JavaPlugin {
T2Csend.console(prefix + " §3PlaceholderAPI: §6connected" + " §7- §e" + (System.currentTimeMillis() - long_) + "ms");
}
T2Csend.console(prefix + " §3Kyori MiniMessage Support: "+ (getMmIsLoad() ? "§2load" : "§4not load") + " §7- §e" + (System.currentTimeMillis() - long_) + "ms");
plugin.getCommand("t2code").setExecutor(new CmdExecuter());
ConfigCreate.configCreate();
T2CitemVersion.scan();
@@ -108,6 +111,7 @@ public final class T2CodeLibMain extends JavaPlugin {
Metrics.Bstats(plugin, Util.getBstatsID());
if (SelectLibConfig.getBungee()) {
Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, "t2c:bcmd");
T2Csend.debug(plugin, "registerIncomingPluginChannel §et2c:bcmd");
Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, "t2c:bonlp");
if (!Bukkit.getMessenger().isIncomingChannelRegistered(plugin, "t2c:bonlp")) {

View File

@@ -1,8 +1,12 @@
package net.t2code.t2codelib.SPIGOT.system.cmd;
import net.t2code.t2codelib.SPIGOT.api.debug.T2Cdebug;
import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend;
import net.t2code.t2codelib.SPIGOT.api.minecraftVersion.T2CmcVersion;
import net.t2code.t2codelib.SPIGOT.api.update.T2CupdateAPI;
import net.t2code.t2codelib.SPIGOT.api.bungeePlayers.T2CbungeePlayers;
import net.t2code.t2codelib.SPIGOT.system.T2CbungeeCommandSenderReciver;
import net.t2code.t2codelib.SPIGOT.system.T2CodeLibMain;
import net.t2code.t2codelib.T2CupdateObject;
import net.t2code.t2codelib.SPIGOT.system.config.config.SelectLibConfig;
import net.t2code.t2codelib.Util;
@@ -38,17 +42,30 @@ public class CmdExecuter implements CommandExecutor, TabCompleter {
Commands.info(sender);
return false;
case "updateinfo":
Commands.updateInfo(sender,args);
Commands.updateInfo(sender, args);
return false;
case "reloadconfig":
SelectLibConfig.onSelect();
T2Csend.sender(sender, Util.getPrefix() + " §2Config successfully reloaded");
return false;
case "debug":
Commands.debug(sender,args);
Commands.debug(sender, args);
return false;
case "test":
T2Csend.sender(sender, T2CbungeePlayers.getBungeePlayers().toString());
Commands.test(sender, args);
return false;
case "serverid":
T2Csend.sender(sender, ("[prefix] <red>T2C ServerID:</red> <gold><hover:show_text:'<yellow>copy</yellow>'>" +
"<click:copy_to_clipboard:[id]>[id]</click></hover></gold>").replace("[prefix]", Util.getPrefix()).replace("[id]", String.valueOf(Util.getServerUUID())));
return false;
case "bcmd":
String cmd = "";
for (String s : args) {
cmd = cmd + s + " ";
}
cmd = cmd.replace("bcmd ", "");
T2CbungeeCommandSenderReciver.sendToBungee(null, cmd, true);
T2Cdebug.debug(T2CodeLibMain.getPlugin(), "PluginMessage BCMD: " + cmd);
return false;
default:
@@ -61,6 +78,8 @@ public class CmdExecuter implements CommandExecutor, TabCompleter {
private static HashMap<String, String> arg1 = new HashMap<String, String>() {{
put("debug", "t2code.admin");
put("info", "t2code.admin");
put("serverid", "t2code.admin");
put("bcmd", "t2code.admin");
put("reloadconfig", "t2code.admin");
put("updateinfo", "t2code.admin");
}};
@@ -81,17 +100,23 @@ public class CmdExecuter implements CommandExecutor, TabCompleter {
if (args.length == 2 && args[0].equalsIgnoreCase("debug")) {
if (sender.hasPermission("t2code.admin")) {
if (hasPermission(p, arg1.get("debug"))) {
if (passend("createReportLog",args[1])) list.add("createReportLog");
if (passend("deleteReportLog",args[1])) list.add("deleteReportLog");
if (passend("createReportLog", args[1])) list.add("createReportLog");
if (passend("deleteReportLog", args[1])) list.add("deleteReportLog");
}
}
return list;
}
if (args.length == 2 && args[0].equalsIgnoreCase("bcmd")) {
if (sender.hasPermission("t2code.admin")) {
list.add("<command>");
}
return list;
}
if (args.length == 2 && args[0].equalsIgnoreCase("updateinfo")) {
if (sender.hasPermission("t2code.admin")) {
if (hasPermission(p, arg1.get("updateinfo"))) {
for (Map.Entry<String, T2CupdateObject> pl : T2CupdateAPI.pluginVersions.entrySet()){
if (passend(pl.getValue().pluginName,args[1])) list.add(pl.getValue().pluginName);
for (Map.Entry<String, T2CupdateObject> pl : T2CupdateAPI.pluginVersions.entrySet()) {
if (passend(pl.getValue().pluginName, args[1])) list.add(pl.getValue().pluginName);
}
}
}
@@ -99,11 +124,11 @@ public class CmdExecuter implements CommandExecutor, TabCompleter {
}
if (args.length == 3 && args[0].equalsIgnoreCase("debug")&& args[1].equalsIgnoreCase("deleteReportLog")) {
if (args.length == 3 && args[0].equalsIgnoreCase("debug") && args[1].equalsIgnoreCase("deleteReportLog")) {
if (sender.hasPermission("t2code.admin")) {
if (hasPermission(p, arg1.get("debug"))) {
for (String st : ReportLogStorage.list){
if (passend(st,args[2])) list.add(st);
for (String st : ReportLogStorage.list) {
if (passend(st, args[2])) list.add(st);
}
}
}

View File

@@ -3,6 +3,7 @@ package net.t2code.t2codelib.SPIGOT.system.cmd;
import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend;
import net.t2code.t2codelib.SPIGOT.api.messages.T2Ctemplate;
import net.t2code.t2codelib.SPIGOT.api.update.T2CupdateAPI;
import net.t2code.t2codelib.SPIGOT.system.T2CbungeeCommandSenderReciver;
import net.t2code.t2codelib.SPIGOT.system.T2CodeLibMain;
import net.t2code.t2codelib.Util;
import org.bukkit.Bukkit;
@@ -15,6 +16,9 @@ public class Commands {
public static void info(CommandSender sender) {
T2Ctemplate.sendInfo(sender, T2CodeLibMain.getPlugin(), Util.getSpigotID(), Util.getDiscord(), null, Util.getInfoText());
}
public static void test(CommandSender sender, String[] args) {
T2Csend.sender(sender,Util.getPrefix()+" &4Currently there is no development test command");
}
public static void debug(CommandSender sender, String[] args) {
if (args.length < 2) {

View File

@@ -29,7 +29,10 @@ import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@@ -101,18 +104,30 @@ public class CreateReportLog {
pWriter.println("T2C-LuckyBox isV: " + LuckyBoxAPI.isV());
pWriter.println();
}
pWriter.println("OfflinePlayers amount: " + Bukkit.getOfflinePlayers().length);
pWriter.println("OfflinePlayers: ");
for (OfflinePlayer player : Bukkit.getOfflinePlayers()) {
ArrayList<OfflinePlayer> players = new ArrayList<>();
Collections.addAll(players, Bukkit.getOfflinePlayers());
players.sort(Comparator.comparing(OfflinePlayer::getName));
for (OfflinePlayer player : players) {
pWriter.println(" - " + player.getName() + " - " + player.getUniqueId());
}
pWriter.println();
pWriter.println("Plugins amount: " + Bukkit.getPluginManager().getPlugins().length);
pWriter.println("Plugins: ");
for (Plugin pl : Bukkit.getPluginManager().getPlugins()) {
ArrayList<Plugin> plugins = new ArrayList<>();
Collections.addAll(plugins, Bukkit.getPluginManager().getPlugins());
plugins.sort(Comparator.comparing(Plugin::getName));
for (Plugin pl : plugins) {
pWriter.println(" - " + pl.getName() + " - " + pl.getDescription().getVersion() + " - Enabled: " + pl.isEnabled() + " - Autors: "
+ pl.getDescription().getAuthors() + " - SoftDepend: " + pl.getDescription().getSoftDepend() + " - Depend: " + pl.getDescription().getDepend()
+ " LoadBefore: " + pl.getDescription().getLoadBefore() + " - Website: " + pl.getDescription().getWebsite());
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {