BingoRufus

Debug Log Creator

Oct 6th, 2020
882
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.03 KB | None | 0 0
  1. package me.bingorufus.chatitemdisplay.executors;
  2.  
  3. import me.bingorufus.chatitemdisplay.ChatItemDisplay;
  4. import me.bingorufus.chatitemdisplay.util.string.StringFormatter;
  5. import me.bingorufus.chatitemdisplay.util.string.VersionComparator;
  6. import net.md_5.bungee.api.chat.ClickEvent;
  7. import net.md_5.bungee.api.chat.ComponentBuilder;
  8. import net.md_5.bungee.api.chat.HoverEvent;
  9. import net.md_5.bungee.api.chat.TextComponent;
  10. import net.md_5.bungee.api.chat.hover.content.Text;
  11. import org.apache.commons.lang.StringEscapeUtils;
  12. import org.bukkit.Bukkit;
  13. import org.bukkit.ChatColor;
  14. import org.bukkit.Server;
  15. import org.bukkit.command.Command;
  16. import org.bukkit.command.CommandExecutor;
  17. import org.bukkit.command.CommandSender;
  18. import org.bukkit.entity.Player;
  19. import org.bukkit.plugin.Plugin;
  20. import org.jetbrains.annotations.NotNull;
  21. import org.spigotmc.SpigotConfig;
  22.  
  23. import java.io.*;
  24. import java.text.SimpleDateFormat;
  25. import java.util.Date;
  26.  
  27. public class DebugExecutor implements CommandExecutor {
  28.     final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH.mm.ss");
  29.  
  30.     public boolean onCommand(CommandSender sender, @NotNull Command cmd, @NotNull String label, String[] args) {
  31.  
  32.  
  33.         if (!sender.hasPermission(" ChatItemDisplay.reload")) {
  34.             sender.sendMessage(new StringFormatter().format(
  35.                     ChatItemDisplay.getInstance().getConfig().getString("messages.missing-permission")));
  36.             return true;
  37.         }
  38.  
  39.         File folder = ChatItemDisplay.getInstance().getDataFolder();
  40.         String logName = "Debug Log " + dateFormat.format(new Date()) + ".txt";
  41.         File log = folder.toPath().resolve("logs").resolve(logName).toFile();
  42.  
  43.         File logFolder = folder.toPath().resolve("logs").toFile();
  44.         if (!logFolder.exists()) logFolder.mkdirs();
  45.  
  46.         BufferedWriter writer = null;
  47.         OutputStreamWriter out = null;
  48.  
  49.         try {
  50.             log.createNewFile();
  51.             out = new OutputStreamWriter(new FileOutputStream(log));
  52.  
  53.             writer = new BufferedWriter(out);
  54.  
  55.             if (!writeLogs(writer)) {
  56.                 sender.sendMessage(ChatColor.RED + "An unexpected error has occurred");
  57.                 writer.close();
  58.                 out.close();
  59.                 writer.flush();
  60.                 out.flush();
  61.                 return true;
  62.             }
  63.             TextComponent tc = new TextComponent(ChatColor.GREEN + "A debug log has been successfully generated and has been saved to ");
  64.             TextComponent extra = new TextComponent(ChatColor.GREEN + "" + ChatColor.BOLD + log.getAbsolutePath());
  65.  
  66.             VersionComparator.Status s = new VersionComparator().isRecent(
  67.                     Bukkit.getServer().getVersion().substring(Bukkit.getServer().getVersion().indexOf("(MC: ") + 5,
  68.                             Bukkit.getServer().getVersion().indexOf(")")),
  69.                     "1.16");
  70.  
  71.             if (s.equals(VersionComparator.Status.BEHIND)) {
  72.                 extra.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click to copy the file path").create()));
  73.                 extra.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, log.getAbsolutePath()));
  74.  
  75.             } else {
  76.                 extra.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Click to copy the file path")));
  77.                 extra.setClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, log.getAbsolutePath()));
  78.             }
  79.  
  80.             tc.addExtra(extra);
  81.             if (sender instanceof Player) sender.spigot().sendMessage(tc);
  82.             else
  83.                 sender.sendMessage(ChatColor.GREEN + "A debug log has been successfully generated and has been saved to " + ChatColor.BOLD + log.getAbsolutePath());
  84.             writer.close();
  85.             out.close();
  86.         } catch (IOException e) {
  87.             try {
  88.                 if (writer != null) {
  89.                     writer.close();
  90.                 }
  91.                 if (out != null) {
  92.                     out.close();
  93.                 }
  94.             } catch (Exception ignored) {
  95.             }
  96.             e.printStackTrace();
  97.             sender.sendMessage(ChatColor.RED + "An unexpected error has occurred");
  98.             return true;
  99.         }
  100.  
  101.  
  102.         return true;
  103.     }
  104.  
  105.     private boolean writeLogs(BufferedWriter w) {
  106.         Server s = Bukkit.getServer();
  107.         try {
  108.             writeLine(w, "Server Version - " + s.getVersion());
  109.             writeLine(w, "Bukkit Version - " + s.getBukkitVersion());
  110.             writeLine(w, "Bungee - " + SpigotConfig.bungee);
  111.             writeLine(w, "Offline - " + !s.getOnlineMode());
  112.             writeLine(w, "Java Version - " + System.getProperty("java.version"));
  113.             writeLine(w, "Operating System - " + System.getProperty("os.name"));
  114.             writeLine(w, "OS Version - " + System.getProperty("os.version"));
  115.  
  116.  
  117.             w.newLine();
  118.  
  119.             for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
  120.                 writeLine(w, plugin.getName() + " by " + plugin.getDescription().getAuthors().toString() + " Version: " +
  121.                         plugin.getDescription().getVersion() + " - " + (plugin.isEnabled() ? " Enabled" : "Disabled"));
  122.             }
  123.             w.newLine();
  124.             w.newLine();
  125.             writeLine(w, ChatItemDisplay.getInstance().getConfig().saveToString());
  126.             w.newLine();
  127.             writeLine(w, "Displays:");
  128.  
  129.             ChatItemDisplay.getInstance().getDisplayedManager().forEach(display -> {
  130.                 try {
  131.                     writeLine(w, StringEscapeUtils.unescapeJava(display.serialize()));
  132.                 } catch (IOException e) {
  133.                     e.printStackTrace();
  134.                 }
  135.             });
  136.         } catch (IOException e) {
  137.             e.printStackTrace();
  138.             return false;
  139.         }
  140.         return true;
  141.  
  142.  
  143.     }
  144.  
  145.     private void writeLine(BufferedWriter w, String s) throws IOException {
  146.         w.write(s);
  147.         w.newLine();
  148.     }
  149. }
Advertisement
Add Comment
Please, Sign In to add comment