diff --git a/.gitignore b/.gitignore index 3bcf1345..de7cc817 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,5 @@ gradle.log /bukkit18/build build /mvn -spigot-1.10 \ No newline at end of file +spigot-1.10 +wiki_permissions.md \ No newline at end of file diff --git a/bukkit/src/main/resources/plugin.yml b/bukkit/src/main/resources/plugin.yml index d38aac5c..38e0f58c 100644 --- a/bukkit/src/main/resources/plugin.yml +++ b/bukkit/src/main/resources/plugin.yml @@ -8,9 +8,6 @@ load: STARTUP database: false #softdepend: [WorldGuard, PlotSquared, MCore, Factions, GriefPrevention, Residence, Towny, PlotMe, PreciousStones] commands: - fawe: - description: (FAWE) Reload the plugin - aliases: [/fawe,/fawereload] fcancel: description: (FAWE) Cancel your edit aliases: [fawecancel,/fcancel,/cancel,/fawecancel] diff --git a/core/src/main/java/com/boydti/fawe/Fawe.java b/core/src/main/java/com/boydti/fawe/Fawe.java index 3ce87a75..328bcb6b 100644 --- a/core/src/main/java/com/boydti/fawe/Fawe.java +++ b/core/src/main/java/com/boydti/fawe/Fawe.java @@ -1,7 +1,6 @@ package com.boydti.fawe; import com.boydti.fawe.command.Cancel; -import com.boydti.fawe.command.Reload; import com.boydti.fawe.config.BBC; import com.boydti.fawe.config.Commands; import com.boydti.fawe.config.Settings; @@ -113,6 +112,10 @@ import com.sk89q.worldedit.util.command.SimpleDispatcher; import com.sk89q.worldedit.util.command.parametric.ParameterData; import com.sk89q.worldedit.util.command.parametric.ParametricBuilder; import com.sk89q.worldedit.util.command.parametric.ParametricCallable; +import com.sk89q.worldedit.util.formatting.Fragment; +import com.sk89q.worldedit.util.formatting.component.CommandListBox; +import com.sk89q.worldedit.util.formatting.component.CommandUsageBox; +import com.sk89q.worldedit.util.formatting.component.MessageBox; import com.sk89q.worldedit.world.registry.BundledBlockData; import java.io.File; import java.io.InputStream; @@ -277,15 +280,29 @@ public class Fawe { if (Settings.IMP.UPDATE && isJava8()) { // Delayed updating updater = new Updater(); + TaskManager.IMP.async(new Runnable() { + @Override + public void run() { + update(); + } + }); TaskManager.IMP.repeatAsync(new Runnable() { @Override public void run() { - updater.update(IMP.getPlatform(), getVersion()); + update(); } }, 36000); } } + private boolean update() { + if (updater != null) { + updater.update(IMP.getPlatform(), getVersion()); + return true; + } + return false; + } + private boolean isJava8 = MainUtil.getJavaVersion() >= 1.8; public boolean isJava8() { @@ -331,7 +348,6 @@ public class Fawe { } private void setupCommands() { - this.IMP.setupCommand("fawe", new Reload()); this.IMP.setupCommand("fcancel", new Cancel()); } @@ -404,6 +420,11 @@ public class Fawe { ParameterData.inject(); // Translations ToolUtilCommands.inject(); // Fixes + Translations GeneralCommands.inject(); // Translations + gmask args + // Formatting + MessageBox.inject(); + Fragment.inject(); + CommandListBox.inject(); + CommandUsageBox.inject(); // Schematic SchematicReader.inject(); // Optimizations SchematicWriter.inject(); // Optimizations diff --git a/core/src/main/java/com/boydti/fawe/command/AnvilCommands.java b/core/src/main/java/com/boydti/fawe/command/AnvilCommands.java index d1f7ec6f..c667695f 100644 --- a/core/src/main/java/com/boydti/fawe/command/AnvilCommands.java +++ b/core/src/main/java/com/boydti/fawe/command/AnvilCommands.java @@ -54,6 +54,7 @@ import java.util.concurrent.TimeUnit; import static com.google.common.base.Preconditions.checkNotNull; +@Command(aliases = "/anvil", desc = "Manipulate billions of blocks: [More Info](https://github.com/boy0001/FastAsyncWorldedit/wiki/Anvil-API)") public class AnvilCommands { private final WorldEdit worldEdit; diff --git a/core/src/main/java/com/boydti/fawe/command/Reload.java b/core/src/main/java/com/boydti/fawe/command/Reload.java deleted file mode 100644 index 7818c39e..00000000 --- a/core/src/main/java/com/boydti/fawe/command/Reload.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.boydti.fawe.command; - -import com.boydti.fawe.Fawe; -import com.boydti.fawe.FaweVersion; -import com.boydti.fawe.config.BBC; -import com.boydti.fawe.object.FaweCommand; -import com.boydti.fawe.object.FawePlayer; -import com.boydti.fawe.util.HastebinUtility; -import com.boydti.fawe.util.MainUtil; -import com.boydti.fawe.util.Updater; -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.Map; -import java.util.Scanner; - -public class Reload extends FaweCommand { - - public Reload() { - super("fawe.reload"); - } - - @Override - public boolean execute(final FawePlayer player, final String... args) { - if (args.length != 1) { - BBC.COMMAND_SYNTAX.send(player, "/fawe [reload|version|debugpaste|threads|changelog]"); - return false; - } - switch (args[0].toLowerCase()) { - case "version": { - FaweVersion version = Fawe.get().getVersion(); - if (version == null) { - MainUtil.sendMessage(player, "No version information available."); - return false; - } - Date date = new GregorianCalendar(2000 + version.year, version.month - 1, version.day).getTime(); - MainUtil.sendMessage(player, "Version Date: " + date.toLocaleString()); - MainUtil.sendMessage(player, "Version Commit: " + Integer.toHexString(version.hash)); - MainUtil.sendMessage(player, "Version Build: #" + version.build); - return true; - } - case "threads": { - Map stacks = Thread.getAllStackTraces(); - for (Map.Entry entry : stacks.entrySet()) { - Thread thread = entry.getKey(); - Fawe.debug("--------------------------------------------------------------------------------------------"); - Fawe.debug("Thread: " + thread.getName() + " | Id: " + thread.getId() + " | Alive: " + thread.isAlive()); - for (StackTraceElement elem : entry.getValue()) { - Fawe.debug(elem); - } - } - if (player != null) { - player.sendMessage("&cSee console."); - } - return true; - } - case "changelog": { - try { - Updater updater = Fawe.get().getUpdater(); - String changes = updater != null ? updater.getChanges() : null; - if (changes == null) { - try (Scanner scanner = new Scanner(new URL("http://boydti.com/fawe/cl?" + Integer.toHexString(Fawe.get().getVersion().hash)).openStream(), "UTF-8")) { - changes = scanner.useDelimiter("\\A").next(); - } - } - player.sendMessage(BBC.getPrefix() + changes); - return true; - } catch (IOException e) { - e.printStackTrace(); - return false; - } - } - case "debugpaste": - case "paste": { - try { - String settingsYML = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "config.yml")); - String messagesYML = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "message.yml")); - String commandsYML = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "commands.yml")); - String latestLOG; - try { - latestLOG = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "../../logs/latest.log")); - } catch (IOException ignored) { - MainUtil.sendMessage(player, "&clatest.log is too big to be pasted, will ignore"); - latestLOG = "too big :("; - } - StringBuilder b = new StringBuilder(); - b.append( - "# Welcome to this paste\n# It is meant to provide us at IntellectualSites with better information about your " - + "problem\n\n# We will start with some informational files\n"); - b.append("links.config_yml: ").append(settingsYML).append('\n'); - b.append("links.messages_yml: ").append(messagesYML).append('\n'); - b.append("links.commands_yml: ").append(commandsYML).append('\n'); - b.append("links.latest_log: ").append(latestLOG).append('\n'); - b.append("\n# Server Information\n"); - b.append("version.server: ").append(Fawe.imp().getPlatform()).append('\n'); - b.append("\n\n# YAY! Now, let's see what we can find in your JVM\n"); - Runtime runtime = Runtime.getRuntime(); - b.append("memory.free: ").append(runtime.freeMemory()).append('\n'); - b.append("memory.max: ").append(runtime.maxMemory()).append('\n'); - b.append("java.specification.version: '").append(System.getProperty("java.specification.version")).append("'\n"); - b.append("java.vendor: '").append(System.getProperty("java.vendor")).append("'\n"); - b.append("java.version: '").append(System.getProperty("java.version")).append("'\n"); - b.append("os.arch: '").append(System.getProperty("os.arch")).append("'\n"); - b.append("os.name: '").append(System.getProperty("os.name")).append("'\n"); - b.append("os.version: '").append(System.getProperty("os.version")).append("'\n\n"); - b.append("# Okay :D Great. You are now ready to create your bug report!"); - b.append("\n# You can do so at https://github.com/boy0001/FastAsyncWorldedit/issues"); - - String link = HastebinUtility.upload(b.toString()); - BBC.DOWNLOAD_LINK.send(player, link); - return true; - } catch (IOException e) { - e.printStackTrace(); - } - } - case "reload": { - Fawe.get().setupConfigs(); - MainUtil.sendMessage(player, "Reloaded (" + Fawe.get().getVersion() + ")."); - return true; - } - default: - BBC.COMMAND_SYNTAX.send(player, "/fawe [reload|version|debugpaste|threads]"); - return false; - } - } -} diff --git a/core/src/main/java/com/boydti/fawe/config/BBC.java b/core/src/main/java/com/boydti/fawe/config/BBC.java index 4233d735..7a378b1e 100644 --- a/core/src/main/java/com/boydti/fawe/config/BBC.java +++ b/core/src/main/java/com/boydti/fawe/config/BBC.java @@ -216,6 +216,8 @@ public enum BBC { COMMAND_INVALID_SYNTAX("The command was not used properly (no more help available).", "WorldEdit.Command"), HELP_HEADER_CATEGORIES("Command Types", "WorldEdit.Help"), + HELP_HEADER_SUBCOMMANDS("Subcommands", "WorldEdit.Help"), + HELP_HEADER_COMMAND("&cHelp for: &7%s0", "WorldEdit.Help"), HELP_ITEM_ALLOWED("&a%s0&8 - &7%s1", "WorldEdit.Help"), HELP_ITEM_DENIED("&c%s0&8 - &7%s1", "WorldEdit.Help"), HELP_HEADER("Help: page %s0/%s1", "WorldEdit.Help"), @@ -272,7 +274,7 @@ public enum BBC { SEL_SPHERE("Sphere selector: left click=center, right click to set radius", "Selection"), SEL_CYLINDRICAL("Cylindrical selector: Left click=center, right click to extend.", "Selection"), SEL_MAX("%s0 points maximum.", "Selection"), - SEL_FUZZY("Fuzzy selector: Left click to select all contingent blocks, right click to add", "Selection"), + SEL_FUZZY("Fuzzy selector: Left click to select all contingent blocks, right click to add. To select an air cavity, use //pos1.", "Selection"), SEL_CONVEX_POLYHEDRAL("Convex polyhedral selector: Left click=First vertex, right click to add more.", "Selection"), SEL_LIST("For a list of selection types use:&c //sel list", "Selection"), SEL_MODES("Select one of the modes below:", "Selection"), diff --git a/core/src/main/java/com/boydti/fawe/regions/general/plot/CreateFromImage.java b/core/src/main/java/com/boydti/fawe/regions/general/plot/CreateFromImage.java index f5f33235..d032b636 100644 --- a/core/src/main/java/com/boydti/fawe/regions/general/plot/CreateFromImage.java +++ b/core/src/main/java/com/boydti/fawe/regions/general/plot/CreateFromImage.java @@ -51,7 +51,7 @@ import javax.imageio.ImageIO; aliases = {"createfromheightmap", "createfromimage", "cfhm"}, category = CommandCategory.APPEARANCE, requiredType = RequiredType.NONE, - description = "Generate a world from an image", + description = "Generate a world from an image heightmap: [More info](https://www.youtube.com/watch?v=cJZk1GTig7A)", usage = "/plots cfi [url or dimensions]" ) public class CreateFromImage extends Command { diff --git a/core/src/main/java/com/boydti/fawe/util/DocumentationPrinter.java b/core/src/main/java/com/boydti/fawe/util/DocumentationPrinter.java new file mode 100644 index 00000000..668488fb --- /dev/null +++ b/core/src/main/java/com/boydti/fawe/util/DocumentationPrinter.java @@ -0,0 +1,179 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.boydti.fawe.util; + +import com.boydti.fawe.command.AnvilCommands; +import com.sk89q.minecraft.util.commands.Command; +import com.sk89q.minecraft.util.commands.CommandPermissions; +import com.sk89q.minecraft.util.commands.NestedCommand; +import com.sk89q.worldedit.command.BiomeCommands; +import com.sk89q.worldedit.command.BrushCommands; +import com.sk89q.worldedit.command.ChunkCommands; +import com.sk89q.worldedit.command.ClipboardCommands; +import com.sk89q.worldedit.command.GeneralCommands; +import com.sk89q.worldedit.command.GenerationCommands; +import com.sk89q.worldedit.command.HistoryCommands; +import com.sk89q.worldedit.command.NavigationCommands; +import com.sk89q.worldedit.command.RegionCommands; +import com.sk89q.worldedit.command.SchematicCommands; +import com.sk89q.worldedit.command.ScriptingCommands; +import com.sk89q.worldedit.command.SelectionCommands; +import com.sk89q.worldedit.command.SnapshotCommands; +import com.sk89q.worldedit.command.SnapshotUtilCommands; +import com.sk89q.worldedit.command.SuperPickaxeCommands; +import com.sk89q.worldedit.command.ToolCommands; +import com.sk89q.worldedit.command.ToolUtilCommands; +import com.sk89q.worldedit.command.UtilityCommands; +import com.sk89q.worldedit.command.WorldEditCommands; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintStream; +import java.lang.reflect.Method; + +@SuppressWarnings("UseOfSystemOutOrSystemErr") +public final class DocumentationPrinter { + + private DocumentationPrinter() { + } + + /** + * Generates documentation. + * + * @param args arguments + * @throws IOException thrown on I/O error + */ + public static void main(String[] args) throws IOException { + writePermissionsWikiTable(); + } + + private static void writePermissionsWikiTable() + throws IOException { + try (FileOutputStream fos = new FileOutputStream("wiki_permissions.md")) { + PrintStream stream = new PrintStream(fos); + + stream.print("## Overview\n"); + stream.print("This page is generated from the source. " + + "Click one of the edit buttons below to modify a command class. " + + "You will need to find the parts which correspond to the documentation. " + + "Command documentation will be consistent with what is available ingame"); + stream.println(); + stream.println(); + stream.print("To view this information ingame use `//help`"); + stream.println(); + stream.print("## See also\n"); + stream.print(" - [Masks](https://github.com/boy0001/FastAsyncWorldedit/wiki/WorldEdit---FAWE-mask-list)\n"); + stream.print(" - [Patterns](https://github.com/boy0001/FastAsyncWorldedit/wiki/WorldEdit-and-FAWE-patterns)\n"); + stream.print(" - [Transforms](https://github.com/boy0001/FastAsyncWorldedit/wiki/Transforms)\n"); + stream.println(); + stream.print("## Content"); + stream.println(); + StringBuilder builder = new StringBuilder(); + writePermissionsWikiTable(stream, builder, "/we ", WorldEditCommands.class); + writePermissionsWikiTable(stream, builder, "/", GeneralCommands.class); + writePermissionsWikiTable(stream, builder, "/", UtilityCommands.class); + writePermissionsWikiTable(stream, builder, "/", RegionCommands.class); + writePermissionsWikiTable(stream, builder, "/", SelectionCommands.class); + writePermissionsWikiTable(stream, builder, "/", HistoryCommands.class); + writePermissionsWikiTable(stream, builder, "/", SchematicCommands.class); + writePermissionsWikiTable(stream, builder, "/", ClipboardCommands.class); + writePermissionsWikiTable(stream, builder, "/", GenerationCommands.class); + writePermissionsWikiTable(stream, builder, "/", BiomeCommands.class); + writePermissionsWikiTable(stream, builder, "/tool ", ToolCommands.class); + writePermissionsWikiTable(stream, builder, "/", ToolUtilCommands.class); + writePermissionsWikiTable(stream, builder, "/brush ", BrushCommands.class); + writePermissionsWikiTable(stream, builder, "/anvil ", AnvilCommands.class); + writePermissionsWikiTable(stream, builder, "/sp ", SuperPickaxeCommands.class); + writePermissionsWikiTable(stream, builder, "/", NavigationCommands.class); + writePermissionsWikiTable(stream, builder, "/", SnapshotCommands.class); + writePermissionsWikiTable(stream, builder, "/", SnapshotUtilCommands.class); + writePermissionsWikiTable(stream, builder, "/", ScriptingCommands.class); + writePermissionsWikiTable(stream, builder, "/", ChunkCommands.class); + stream.println(); + stream.print("#### Uncategorized\n"); + stream.append("| Aliases | Permission | flags | Usage |\n"); + stream.append("| --- | --- | --- | --- |\n"); + stream.append("| //cancel | fawe.cancel | | Cancels your current operations |\n"); + stream.append("| /plot replaceall | plots.replaceall | | Replace all blocks in the plot world |\n"); + stream.append("| /plot createfromimage | plots.createfromimage | | Starts world creation from a heightmap image: [More Info](https://www.youtube.com/watch?v=cJZk1GTig7A) |\n"); + stream.print("\n---\n"); + + stream.print(builder); + } + } + + private static void writePermissionsWikiTable(PrintStream stream, StringBuilder content, String prefix, Class cls) { + String title = cls.getSimpleName().replaceAll("(\\p{Ll})(\\p{Lu})", "$1 $2"); + stream.print(" - [`" + title + "`](#" + title.replaceAll(" ", "-") + "-) "); + Command cmd = cls.getAnnotation(Command.class); + if (cmd != null) { + stream.print(" (" + cmd.desc() + ")"); + } + stream.println(); + writePermissionsWikiTable(content, prefix, cls, true); + } + + private static void writePermissionsWikiTable(StringBuilder stream, String prefix, Class cls, boolean title) { + // //setbiome || worldedit.biome.set || //setbiome || p || Sets the biome of the player's current block or region. + if (title) { + String path = "https://github.com/boy0001/FastAsyncWorldedit/edit/master/core/src/main/java/" + cls.getName().replaceAll("\\.", "/") + ".java"; + stream.append("### **" + cls.getSimpleName().replaceAll("(\\p{Ll})(\\p{Lu})","$1 $2") + "** [`✎`](" + path + ")"); + stream.append("\n"); + stream.append("\n"); + stream.append("---"); + stream.append("\n"); + stream.append("\n"); + } + for (Method method : cls.getMethods()) { + if (!method.isAnnotationPresent(Command.class)) { + continue; + } + + Command cmd = method.getAnnotation(Command.class); + String[] aliases = cmd.aliases(); + String usage = prefix + aliases[0] + " " + cmd.usage(); + if (cmd.anyFlags()) { + for (char c : cmd.flags().toCharArray()) { + usage += " [-" + c + "]"; + } + } +// stream.append("#### [`" + usage + "`](" + "https://github.com/boy0001/FastAsyncWorldedit/wiki/" + aliases[0] + ")\n"); + stream.append("#### `" + usage + "`\n"); + if (method.isAnnotationPresent(CommandPermissions.class)) { + CommandPermissions perms = method.getAnnotation(CommandPermissions.class); + stream.append("**Perm**: `" + StringMan.join(perms.value(), "`, `") + "` \n"); + } + stream.append("**Desc**: " + cmd.desc().trim().replaceAll("\n", "
") + " \n"); + + if (method.isAnnotationPresent(NestedCommand.class)) { + NestedCommand nested = + method.getAnnotation(NestedCommand.class); + + Class[] nestedClasses = nested.value(); + for (Class clazz : nestedClasses) { + writePermissionsWikiTable(stream, prefix + cmd.aliases()[0] + " ", clazz, false); + } + } + } + stream.append("\n"); + if (title) stream.append("---"); + stream.append("\n"); + stream.append("\n"); + } +} diff --git a/core/src/main/java/com/boydti/fawe/util/HastebinUtility.java b/core/src/main/java/com/boydti/fawe/util/HastebinUtility.java index 22779d77..3d92b52b 100644 --- a/core/src/main/java/com/boydti/fawe/util/HastebinUtility.java +++ b/core/src/main/java/com/boydti/fawe/util/HastebinUtility.java @@ -1,5 +1,7 @@ package com.boydti.fawe.util; +import com.boydti.fawe.Fawe; +import com.boydti.fawe.config.BBC; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; @@ -60,4 +62,41 @@ public class HastebinUtility { return upload(content.toString()); } + public static String debugPaste() throws IOException { + String settingsYML = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "config.yml")); + String messagesYML = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "message.yml")); + String commandsYML = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "commands.yml")); + String latestLOG; + try { + latestLOG = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "../../logs/latest.log")); + } catch (IOException ignored) { + latestLOG = "too big :("; + } + StringBuilder b = new StringBuilder(); + b.append( + "# Welcome to this paste\n# It is meant to provide us at IntellectualSites with better information about your " + + "problem\n\n# We will start with some informational files\n"); + b.append("links.config_yml: ").append(settingsYML).append('\n'); + b.append("links.messages_yml: ").append(messagesYML).append('\n'); + b.append("links.commands_yml: ").append(commandsYML).append('\n'); + b.append("links.latest_log: ").append(latestLOG).append('\n'); + b.append("\n# Server Information\n"); + b.append("version.server: ").append(Fawe.imp().getPlatform()).append('\n'); + b.append("\n\n# YAY! Now, let's see what we can find in your JVM\n"); + Runtime runtime = Runtime.getRuntime(); + b.append("memory.free: ").append(runtime.freeMemory()).append('\n'); + b.append("memory.max: ").append(runtime.maxMemory()).append('\n'); + b.append("java.specification.version: '").append(System.getProperty("java.specification.version")).append("'\n"); + b.append("java.vendor: '").append(System.getProperty("java.vendor")).append("'\n"); + b.append("java.version: '").append(System.getProperty("java.version")).append("'\n"); + b.append("os.arch: '").append(System.getProperty("os.arch")).append("'\n"); + b.append("os.name: '").append(System.getProperty("os.name")).append("'\n"); + b.append("os.version: '").append(System.getProperty("os.version")).append("'\n\n"); + b.append("# Okay :D Great. You are now ready to create your bug report!"); + b.append("\n# You can do so at https://github.com/boy0001/FastAsyncWorldedit/issues"); + + String link = HastebinUtility.upload(b.toString()); + return link; + } + } diff --git a/core/src/main/java/com/boydti/fawe/util/TextureUtil.java b/core/src/main/java/com/boydti/fawe/util/TextureUtil.java new file mode 100644 index 00000000..543ba61e --- /dev/null +++ b/core/src/main/java/com/boydti/fawe/util/TextureUtil.java @@ -0,0 +1,33 @@ +package com.boydti.fawe.util; + +import com.sk89q.worldedit.world.registry.BundledBlockData; +import java.awt.Color; +import java.io.File; +import java.io.FilenameFilter; + +public class TextureUtil { + private final File folder; + private Color[] colors; + + public TextureUtil(File folder) { + this.folder = folder; + BundledBlockData bundled = BundledBlockData.getInstance(); + for (File file : folder.listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.endsWith(".png"); + } + })) { + String name = file.getName().split("\\.")[0]; + + } + } +// +// public Color getColor(BaseBlock block) { +// long r; +// long b; +// long g; +// long a; +// +// } +} diff --git a/core/src/main/java/com/boydti/fawe/util/Updater.java b/core/src/main/java/com/boydti/fawe/util/Updater.java index 38573b5e..bedf1a9d 100644 --- a/core/src/main/java/com/boydti/fawe/util/Updater.java +++ b/core/src/main/java/com/boydti/fawe/util/Updater.java @@ -14,15 +14,22 @@ public class Updater { private FaweVersion newVersion; private String changes; - public String getChanges() throws IOException { + public String getChanges() { if (changes == null) { try (Scanner scanner = new Scanner(new URL("http://boydti.com/fawe/cl?" + Integer.toHexString(Fawe.get().getVersion().hash)).openStream(), "UTF-8")) { changes = scanner.useDelimiter("\\A").next(); + } catch (IOException e) { + e.printStackTrace(); + return ""; } } return changes; } + public boolean isOutdated() { + return newVersion != null; + } + public void update(String platform, FaweVersion currentVersion) { if (currentVersion == null || platform == null) { return; diff --git a/core/src/main/java/com/sk89q/worldedit/command/BiomeCommands.java b/core/src/main/java/com/sk89q/worldedit/command/BiomeCommands.java index e2aeaa34..fa3ac031 100644 --- a/core/src/main/java/com/sk89q/worldedit/command/BiomeCommands.java +++ b/core/src/main/java/com/sk89q/worldedit/command/BiomeCommands.java @@ -63,6 +63,7 @@ import static com.sk89q.minecraft.util.commands.Logging.LogMode.REGION; /** * Implements biome-related commands such as "/biomelist". */ +@Command(aliases = "/biome", desc = "Change, list and inspect biomes") public class BiomeCommands { private final WorldEdit worldEdit; diff --git a/core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java b/core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java index ed832571..f4bc61dd 100644 --- a/core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java +++ b/core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java @@ -109,6 +109,7 @@ import static com.google.common.base.Preconditions.checkNotNull; /** * Commands to set brush shape. */ +@Command(aliases = { "brush", "br" }, desc = "Commands to build and draw from far away: [More Info](https://github.com/boy0001/FastAsyncWorldedit/wiki/Brushes)") public class BrushCommands { private final WorldEdit worldEdit; @@ -810,8 +811,7 @@ public class BrushCommands { help = "Flatten brush makes terrain flatter\n" + "The -r flag enables random off-axis rotation\n" + "The -l flag will work on snow layers", - desc = - "This brush raises and lowers land towards the clicked point\n", + desc = "This brush raises and lowers land towards the clicked point\n", min = 1, max = 4 ) diff --git a/core/src/main/java/com/sk89q/worldedit/command/ChunkCommands.java b/core/src/main/java/com/sk89q/worldedit/command/ChunkCommands.java index ecd1d45c..3c901197 100644 --- a/core/src/main/java/com/sk89q/worldedit/command/ChunkCommands.java +++ b/core/src/main/java/com/sk89q/worldedit/command/ChunkCommands.java @@ -41,6 +41,7 @@ import static com.sk89q.minecraft.util.commands.Logging.LogMode.REGION; /** * Commands for working with chunks. */ +@Command(aliases = {}, desc = "[legacy] Inspect chunks: [More Info](http://wiki.sk89q.com/wiki/WorldEdit/Chunk_tools)") public class ChunkCommands { private final WorldEdit worldEdit; diff --git a/core/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java b/core/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java index f67bbd36..956405ee 100644 --- a/core/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java +++ b/core/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java @@ -73,6 +73,7 @@ import static com.sk89q.minecraft.util.commands.Logging.LogMode.REGION; /** * Clipboard commands. */ +@Command(aliases = {}, desc = "Related commands to copy and pasting blocks: [More Info](http://wiki.sk89q.com/wiki/WorldEdit/Clipboard)") public class ClipboardCommands { private final WorldEdit worldEdit; @@ -251,7 +252,7 @@ public class ClipboardCommands { if (!FawePlayer.wrap(player).hasPermission("fawe.tips")) BBC.TIP_LAZYCUT.send(player); } - @Command(aliases = { "download" }, desc = "Download your clipboard") + @Command(aliases = { "download" }, desc = "Downloads your clipboard through the configured web interface") @Deprecated @CommandPermissions({ "worldedit.clipboard.download"}) public void download(final Player player, final LocalSession session, @Optional("schematic") final String formatName) throws CommandException, WorldEditException { diff --git a/core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java b/core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java index bcc9a5dd..17f4976a 100644 --- a/core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java +++ b/core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java @@ -24,6 +24,7 @@ import static com.google.common.base.Preconditions.checkNotNull; /** * General WorldEdit commands. */ +@Command(aliases = {}, desc = "Player toggles, settings and item info") public class GeneralCommands { private final WorldEdit worldEdit; @@ -56,7 +57,7 @@ public class GeneralCommands { @Command( aliases = { "/fast" }, usage = "[on|off]", - desc = "Toggle fast mode", + desc = "Toggles WorldEdit undo", min = 0, max = 1 ) diff --git a/core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java b/core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java index 2ce05897..fb7b7e24 100644 --- a/core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java +++ b/core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java @@ -54,6 +54,7 @@ import static com.sk89q.minecraft.util.commands.Logging.LogMode.POSITION; /** * Commands for the generation of shapes and other objects. */ +@Command(aliases = {}, desc = "Create structures and features: [More Info](http://wiki.sk89q.com/wiki/WorldEdit/Generation)") public class GenerationCommands { private final WorldEdit worldEdit; diff --git a/core/src/main/java/com/sk89q/worldedit/command/HistoryCommands.java b/core/src/main/java/com/sk89q/worldedit/command/HistoryCommands.java index caa83c78..b3e691fe 100644 --- a/core/src/main/java/com/sk89q/worldedit/command/HistoryCommands.java +++ b/core/src/main/java/com/sk89q/worldedit/command/HistoryCommands.java @@ -58,6 +58,7 @@ import static com.google.common.base.Preconditions.checkNotNull; /** * Commands to undo, redo, and clear history. */ +@Command(aliases = {}, desc = "Commands to undo, redo, and clear history: [More Info](http://wiki.sk89q.com/wiki/WorldEdit/Features#History)") public class HistoryCommands { private final WorldEdit worldEdit; @@ -74,8 +75,8 @@ public class HistoryCommands { @Command( aliases = { "/frb", "frb", "fawerollback", "/fawerollback", "/rollback" }, - usage = "