diff --git a/src/main/java/com/intellectualcrafters/plot/BukkitMain.java b/src/main/java/com/intellectualcrafters/plot/BukkitMain.java index bd566ff40..51ec62892 100644 --- a/src/main/java/com/intellectualcrafters/plot/BukkitMain.java +++ b/src/main/java/com/intellectualcrafters/plot/BukkitMain.java @@ -6,6 +6,7 @@ import java.util.Arrays; import java.util.List; import java.util.UUID; +import com.intellectualcrafters.plot.commands.*; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -18,70 +19,6 @@ import org.bukkit.generator.ChunkGenerator; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; -import com.intellectualcrafters.plot.commands.Add; -import com.intellectualcrafters.plot.commands.Auto; -import com.intellectualcrafters.plot.commands.BukkitCommand; -import com.intellectualcrafters.plot.commands.Chat; -import com.intellectualcrafters.plot.commands.Claim; -import com.intellectualcrafters.plot.commands.Clear; -import com.intellectualcrafters.plot.commands.Cluster; -import com.intellectualcrafters.plot.commands.Comment; -import com.intellectualcrafters.plot.commands.Condense; -import com.intellectualcrafters.plot.commands.Confirm; -import com.intellectualcrafters.plot.commands.Copy; -import com.intellectualcrafters.plot.commands.CreateRoadSchematic; -import com.intellectualcrafters.plot.commands.Database; -import com.intellectualcrafters.plot.commands.Debug; -import com.intellectualcrafters.plot.commands.DebugAllowUnsafe; -import com.intellectualcrafters.plot.commands.DebugClaimTest; -import com.intellectualcrafters.plot.commands.DebugClear; -import com.intellectualcrafters.plot.commands.DebugExec; -import com.intellectualcrafters.plot.commands.DebugFill; -import com.intellectualcrafters.plot.commands.DebugFixFlags; -import com.intellectualcrafters.plot.commands.DebugLoadTest; -import com.intellectualcrafters.plot.commands.DebugRoadRegen; -import com.intellectualcrafters.plot.commands.DebugSaveTest; -import com.intellectualcrafters.plot.commands.DebugUUID; -import com.intellectualcrafters.plot.commands.Delete; -import com.intellectualcrafters.plot.commands.Deny; -import com.intellectualcrafters.plot.commands.Disable; -import com.intellectualcrafters.plot.commands.Download; -import com.intellectualcrafters.plot.commands.FlagCmd; -import com.intellectualcrafters.plot.commands.Help; -import com.intellectualcrafters.plot.commands.Home; -import com.intellectualcrafters.plot.commands.Inbox; -import com.intellectualcrafters.plot.commands.Info; -import com.intellectualcrafters.plot.commands.Inventory; -import com.intellectualcrafters.plot.commands.Kick; -import com.intellectualcrafters.plot.commands.MainCommand; -import com.intellectualcrafters.plot.commands.Merge; -import com.intellectualcrafters.plot.commands.Move; -import com.intellectualcrafters.plot.commands.MusicSubcommand; -import com.intellectualcrafters.plot.commands.Purge; -import com.intellectualcrafters.plot.commands.Rate; -import com.intellectualcrafters.plot.commands.RegenAllRoads; -import com.intellectualcrafters.plot.commands.Reload; -import com.intellectualcrafters.plot.commands.Remove; -import com.intellectualcrafters.plot.commands.SchematicCmd; -import com.intellectualcrafters.plot.commands.Set; -import com.intellectualcrafters.plot.commands.SetOwner; -import com.intellectualcrafters.plot.commands.Setup; -import com.intellectualcrafters.plot.commands.Swap; -import com.intellectualcrafters.plot.commands.TP; -import com.intellectualcrafters.plot.commands.Target; -import com.intellectualcrafters.plot.commands.Template; -import com.intellectualcrafters.plot.commands.Toggle; -import com.intellectualcrafters.plot.commands.Trim; -import com.intellectualcrafters.plot.commands.Trust; -import com.intellectualcrafters.plot.commands.Unclaim; -import com.intellectualcrafters.plot.commands.Undeny; -import com.intellectualcrafters.plot.commands.Unlink; -import com.intellectualcrafters.plot.commands.Untrust; -import com.intellectualcrafters.plot.commands.Update; -import com.intellectualcrafters.plot.commands.Visit; -import com.intellectualcrafters.plot.commands.WE_Anywhere; -import com.intellectualcrafters.plot.commands.list; -import com.intellectualcrafters.plot.commands.plugin; import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.Settings; import com.intellectualcrafters.plot.database.plotme.ClassicPlotMeConnector; @@ -288,6 +225,7 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain { MainCommand.subCommands.add(new Purge()); MainCommand.subCommands.add(new Reload()); MainCommand.subCommands.add(new Merge()); + MainCommand.subCommands.add(new DebugPaste()); MainCommand.subCommands.add(new Unlink()); MainCommand.subCommands.add(new Kick()); MainCommand.subCommands.add(new Rate()); diff --git a/src/main/java/com/intellectualcrafters/plot/commands/Command.java b/src/main/java/com/intellectualcrafters/plot/commands/Command.java index c4c52800d..7b8df7b2c 100644 --- a/src/main/java/com/intellectualcrafters/plot/commands/Command.java +++ b/src/main/java/com/intellectualcrafters/plot/commands/Command.java @@ -55,6 +55,7 @@ public enum Command { ALLOWUNSAFE("debugallowunsafe"), DEBUGLOADTEST("debugloadtest"), DEBUGSAVETEST("debugsavetest"), + DEBUG_PASTE("debugpaste", "dp"), UNCLAIM("unclaim"), DEBUGCLEAR("debugclear", "fastclear"), SWAP("swap"), diff --git a/src/main/java/com/intellectualcrafters/plot/commands/DebugPaste.java b/src/main/java/com/intellectualcrafters/plot/commands/DebugPaste.java new file mode 100644 index 000000000..488bdacf7 --- /dev/null +++ b/src/main/java/com/intellectualcrafters/plot/commands/DebugPaste.java @@ -0,0 +1,38 @@ +package com.intellectualcrafters.plot.commands; + +import com.intellectualcrafters.plot.BukkitMain; +import com.intellectualcrafters.plot.PS; +import com.intellectualcrafters.plot.config.C; +import com.intellectualcrafters.plot.object.PlotPlayer; +import com.intellectualcrafters.plot.util.HastebinUtility; +import com.intellectualcrafters.plot.util.MainUtil; +import com.intellectualcrafters.plot.util.TaskManager; +import org.bukkit.Bukkit; + +import java.io.File; +import java.io.IOException; + +public class DebugPaste extends SubCommand { + + public DebugPaste() { + super(Command.DEBUG_PASTE, "Upload settings.yml & latest.log to hastebin", "", CommandCategory.DEBUG, false); + } + + @Override + public boolean execute(final PlotPlayer plr, String... args) { + TaskManager.runTaskAsync(new Runnable() { + @Override + public void run() { + try { + String link = HastebinUtility.upload(PS.get().configFile); + MainUtil.sendMessage(plr, C.SETTINGS_PASTE_UPLOADED.s().replace("%url%", link)); + link = HastebinUtility.upload(new File(BukkitMain.THIS.getDirectory(), "../../logs/latest.log")); + MainUtil.sendMessage(plr, C.LATEST_LOG_UPLOADED.s().replace("%url%", link)); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + return true; + } +} diff --git a/src/main/java/com/intellectualcrafters/plot/config/C.java b/src/main/java/com/intellectualcrafters/plot/config/C.java index 5b195fd8b..dc14f16f6 100644 --- a/src/main/java/com/intellectualcrafters/plot/config/C.java +++ b/src/main/java/com/intellectualcrafters/plot/config/C.java @@ -283,6 +283,8 @@ public enum C { * Player not found */ INVALID_PLAYER("$2Player not found: $1%s.", "Errors"), + SETTINGS_PASTE_UPLOADED("$2settings.yml was uploaded to: $1%url%", "Paste"), + LATEST_LOG_UPLOADED("$2latest.log was uploaded to: $1%url%", "Paste"), /* * */ diff --git a/src/main/java/com/intellectualcrafters/plot/util/HastebinUtility.java b/src/main/java/com/intellectualcrafters/plot/util/HastebinUtility.java new file mode 100644 index 000000000..f4d3778c4 --- /dev/null +++ b/src/main/java/com/intellectualcrafters/plot/util/HastebinUtility.java @@ -0,0 +1,53 @@ +package com.intellectualcrafters.plot.util; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class HastebinUtility { + + public static final String BIN_URL = "http://hastebin.com/documents", USER_AGENT = "Mozilla/5.0"; + public static final Pattern PATTERN = Pattern.compile("\\{\"key\":\"([\\S\\s]*)\"\\}"); + + public static String upload(final File file) throws IOException { + StringBuilder content = new StringBuilder(); + BufferedReader reader = new BufferedReader(new FileReader(file)); + String line; + while ((line = reader.readLine()) != null) { + content.append(line).append("\n"); + } + reader.close(); + URL url = new URL(BIN_URL); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + connection.setRequestMethod("POST"); + connection.setRequestProperty("User-Agent", USER_AGENT); + connection.setDoOutput(true); + + DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); + outputStream.writeUTF(content.toString()); + outputStream.flush(); + outputStream.close(); + + BufferedReader in = new BufferedReader( + new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + Matcher matcher = PATTERN.matcher(response.toString()); + if (matcher.matches()) { + return "http://hastebin.com/" + matcher.group(1); + } else { + throw new RuntimeException("Coldn't read response!"); + } + } + +} +