diff --git a/src/main/java/net/aufdemrand/denizen/CommandHandler.java b/src/main/java/net/aufdemrand/denizen/CommandHandler.java index d9898ebec0..27ed082a7d 100644 --- a/src/main/java/net/aufdemrand/denizen/CommandHandler.java +++ b/src/main/java/net/aufdemrand/denizen/CommandHandler.java @@ -1,6 +1,12 @@ package net.aufdemrand.denizen; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; import java.util.*; import net.aufdemrand.denizen.listeners.AbstractListener; @@ -697,13 +703,52 @@ public void chatbot(CommandContext args, CommandSender sender, NPC npc) throws C } + /* + * DENIZEN SUBMIT + */ + @Command( + aliases = { "denizen" }, usage = "submit", + desc = "Submits recorded logs triggered by /denizen debug -r", modifiers = { "submit" }, + min = 1, max = 3, permission = "denizen.submit") + public void submit(CommandContext args, CommandSender sender, NPC npc) throws CommandException { + if (!dB.record) { + Messaging.send(sender, ChatColor.RED + "Use /denizen debug -r to record debug information to be submitted"); + return; + } + dB.record = false; + try { + URL url = new URL("http://mcmonkey4eva.dyndns.org/paste"); + HttpURLConnection uc = (HttpURLConnection) url.openConnection(); + uc.setDoInput(true); + uc.setDoOutput(true); + uc.setConnectTimeout(10000); // Max 10 seconds - don't crash a server if the pastebin is down! + uc.connect(); + uc.getOutputStream().write( + ("postid=pastetext&pastetype=log" + + "&response=micro&pastetitle=Denizen+Debug+Logs+From+" + URLEncoder.encode(Bukkit.getServer().getMotd().replace(ChatColor.COLOR_CHAR, (char)0x01)) + + "&pastecontents=" + dB.Recording) + .getBytes("UTF-8")); + BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); + Messaging.send(sender, ChatColor.GREEN + "Successfully submitted to http://mcmonkey4eva.dyndns.org" + in.readLine()); + in.close(); + dB.Recording = ""; + } + catch (Exception e) { + if (dB.showStackTraces) { + e.printStackTrace(); + } + dB.Recording = ""; + Messaging.send(sender, ChatColor.RED + "Error while submitting."); + } + } + /* * DENIZEN DEBUG */ @Command( aliases = { "denizen" }, usage = "debug", desc = "Toggles debug mode for Denizen.", modifiers = { "debug", "de", "db" }, - min = 1, max = 3, permission = "denizen.debug", flags = "sceb") + min = 1, max = 3, permission = "denizen.debug", flags = "scebr") public void debug(CommandContext args, CommandSender sender, NPC npc) throws CommandException { if (args.hasFlag('s')) { if (!dB.debugMode) dB.toggle(); @@ -717,10 +762,13 @@ public void debug(CommandContext args, CommandSender sender, NPC npc) throws Com } else if (args.hasFlag('b')) { if (!dB.debugMode) dB.toggle(); dB.showScriptBuilder = !dB.showScriptBuilder; + } else if (args.hasFlag('r')) { + dB.record = !dB.record; + dB.Recording = ""; } else dB.toggle(); Messaging.send(sender, ChatColor.YELLOW + "Denizen debugger is " + (dB.debugMode ? - ((dB.showStackTraces) ? "enabled and showing stack-traces." : "enabled.") : "disabled.")); + ((dB.showStackTraces) ? "enabled and showing stack-traces." : "enabled.") : "disabled.") + (dB.record ? " (Recording Active)": "")); } /* diff --git a/src/main/java/net/aufdemrand/denizen/scripts/containers/core/WorldScriptHelper.java b/src/main/java/net/aufdemrand/denizen/scripts/containers/core/WorldScriptHelper.java index d9b54a1c4b..33a0758598 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/containers/core/WorldScriptHelper.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/containers/core/WorldScriptHelper.java @@ -1048,7 +1048,7 @@ public void run() { // <0-23>:00 in // time <0-23> in // - // @Triggers when a block is set on fire. + // @Triggers when the current time changes in a world (once per mine-hour). // @Context // returns the current time. // returns the world. diff --git a/src/main/java/net/aufdemrand/denizen/tags/core/TextTags.java b/src/main/java/net/aufdemrand/denizen/tags/core/TextTags.java index 978e8a4ac1..8e6df9c8d8 100644 --- a/src/main/java/net/aufdemrand/denizen/tags/core/TextTags.java +++ b/src/main/java/net/aufdemrand/denizen/tags/core/TextTags.java @@ -81,6 +81,8 @@ else if (event.getName().equals("Ü")) final String[] code = {"0","1","2","3","4","5","6","7","8","9" ,"a","b","c","d","e","f","k","l","m","n","o","r"}; + // TODO: Meta for all of these! All of them! + @EventHandler public void colorTags(ReplaceableTagEvent event) { Attribute attribute = diff --git a/src/main/java/net/aufdemrand/denizen/tags/core/UtilTags.java b/src/main/java/net/aufdemrand/denizen/tags/core/UtilTags.java index f70cabaa83..99e5879bf1 100644 --- a/src/main/java/net/aufdemrand/denizen/tags/core/UtilTags.java +++ b/src/main/java/net/aufdemrand/denizen/tags/core/UtilTags.java @@ -285,7 +285,6 @@ public void serverTags(ReplaceableTagEvent event) { // @description // Returns a list of all offline ops. // --> - // server.list_offline_ops if (attribute.startsWith("list_offline_ops")) { ArrayList players = new ArrayList(); for (OfflinePlayer player : Bukkit.getOfflinePlayers()) @@ -294,6 +293,18 @@ public void serverTags(ReplaceableTagEvent event) { return; } + // <--[tag] + // @attribute + // @returns Element + // @description + // Returns the server's current MOTD + // --> + if (attribute.startsWith("list_offline_ops")) { + event.setReplaced(new Element(Bukkit.getServer().getMotd()).getAttribute(attribute.fulfill(1))); + return; + } + // TODO: Add everything else from Bukkit.getServer().* + } @EventHandler diff --git a/src/main/java/net/aufdemrand/denizen/utilities/debugging/dB.java b/src/main/java/net/aufdemrand/denizen/utilities/debugging/dB.java index 508c6bb023..7fc6235910 100644 --- a/src/main/java/net/aufdemrand/denizen/utilities/debugging/dB.java +++ b/src/main/java/net/aufdemrand/denizen/utilities/debugging/dB.java @@ -6,6 +6,8 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.net.URLEncoder; +import java.util.Calendar; /** * Preferred method of outputting debugger information with Denizen and @@ -59,6 +61,8 @@ public class dB { public static boolean showScriptBuilder = false; public static boolean showColor = true; public static boolean showEventsFiring = false; + public static boolean record = false; + public static String Recording = ""; /** * Can be used with echoDebug(...) to output a header, footer, @@ -132,9 +136,26 @@ public static void sendMessage(String string) { } // 16:05:06 [INFO] } // Send buffer to the player + dB.Recording += URLEncoder.encode(getDate() + " [INFO] " + buffer.replace(ChatColor.COLOR_CHAR, (char)0x01) + "\n"); if (showColor) commandSender.sendMessage(buffer); else commandSender.sendMessage(ChatColor.stripColor(buffer)); + + + } + + static String getDate() { + Calendar calendar = Calendar.getInstance(); + int h = calendar.get(Calendar.HOUR_OF_DAY); + int m = calendar.get(Calendar.MINUTE); + int s = calendar.get(Calendar.SECOND); + String toret = ""; + if (h < 10) toret += "0" + h; else toret += h; + toret += ":"; + if (m < 10) toret += "0" + m; else toret += m; + toret += ":"; + if (s < 10) toret += "0" + s; else toret += s; + return toret; } }