From 353109c89a6b748952033a04524b1dbc23d8183a Mon Sep 17 00:00:00 2001 From: garbagemule Date: Thu, 1 Mar 2012 22:13:36 +0100 Subject: [PATCH] Systems with no Java compiler will not try to compile files. Default abilities are now pre-compiled for compatibility with such systems. build.xml updated to reflect changes. --- MobArena.jar | Bin 302746 -> 317004 bytes build.xml | 30 ++-- resources/plugin.yml | 2 +- .../garbagemule/MobArena/util/FileUtils.java | 89 +++++++++++- .../waves/ability/AbilityManager.java | 134 ++++++++++-------- 5 files changed, 180 insertions(+), 75 deletions(-) diff --git a/MobArena.jar b/MobArena.jar index 0312f7b16e26b66ffcffe0510a7bc4e569019710..fc89d2308088e6942fdfd25df67c13c1cad9c257 100644 GIT binary patch delta 39747 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 delta 25750 zcmZs?bwHKD(=f^j5Tv_HQo6fAkd%_{?hXk(lpx*R(jeUp(k6ZVLxh6^0%K8L0|CHT-Y?JpyD6UkZ!-ab zz<5jm_jB_WAoARd1GtiNOaTc0)fbADdVZJ$&zM}53r34q1ipO!oepA5rU(Qh#YX}W zp$y}7puZgg!6@_Tp0Kw{v`-Tj|Y-?M(cn?|2-9YZWcje&kZqH@VU_f3;b&s zlQH-~@c%uGA7Jt4hvNX)L-cq>cojD0v;wd310G<><1Jr)&oZQzj-hw zD}(_ zqTcg}fVCuskN;Yetmj3oZHq!7dv1rnJ;3lom4&d@xyB#XUey)D+N?%11Sn7o?(lhD z!CL=*P1rb=27~aQ@kSdl;5mX2xO()UMJLU^uv)WcDB+MKVSP010MTji1~ABCwHkd;sjjfZ~sU1u#smNdO2L z7ak4{2RWIt4#3jb769Ob3HTiX*n-h6MF4JLz)URQ33MGvG^w&qmeZSzz-X}O&&l1MqgMA0Kx`cS^=l9 zLKvw{Ge8_hTHXnG3zK@&^B;`BFklXb!I}X0!GMHmzy%EWvH)<00Z%IcM;PF=2@rhS6gG0o=eaC{F+(7)A~Z zWP@RR5rI`O3=10Y5H?LBEFdxrLx&IirzAX5-~bG>{tD;gAp2IXn+(z*pfKUC5>1^N&J$8p-cHc6u6C#bU@dCOe%Vf+@C1|;r}lt zRSdvDs8IkLxtW0;Frb_jIR9+ljlmqiU+~X>2OlsTgbIKfjKOpfeGVKP-1p?kTo6Sv zg)k5|SyBl2?01dVLO?RutZ>DE^)RCy6$gHU&D>iW2y?;4_P4;ie*?NhvXb@(K&=;; z?B@s|Z;X@&mccp+C<3Km-Z zv`_*}{ik!ma6!QxsG-&)#nqEHW>o-@VFYD0z<01N_qD(z7~6zKAR-LNY5}@{V7eQ- z*Q%3;_7#2cY%k==RaIczWWyS$qndO8-@}NTyMdN4;8h>+I}G?a2>cG4Lg@&w3ns#D z4A=@2`g#h84Fg2xfR8X@ktN{22=R6q$p3F?3xp%vW2#rmk>OWcAz!n%_@e}y+-^5Mt9fuU5HscJA$LN5@7ig$YK5hgf zH7c}FV>F4E|G8j=O=s}c`56OA5^wz{1;MowH{ylzxCe8 z5aZH(od!IaPBI-w*ljz=;=bT{ojIKd2{6v))RWJg4^@E-U4Rh^krQ1S%$mIN%#uLM zqvPrq+Z6`{i(QS!$NA>z@0_8*(p7YFQDWWD{yn~O(@b;Jbky9HEATh5C z!8%M1uilK{TDkKE&L-%J2#OF*W?6ixP$y<9Xc&y*9`Froxf%T{ZS2)w9L#Y1GSoOU z`M_t5fj^kMsV@HSj+p&+=|_2ZaFkTz<&dyEhN2wzh?xOy^;}H+)!F(Y1H* zOLB#x&ADFG?WR{_1#?2nXGw@`v#z+7lMF~q1)jfl`Ym+b7#v=wqbDUZi|QiU!&l_i z43{R=%wYE(0trQa6QdR8q$+O@Xzg(W2(Qg^$`E(NTum z_N1p9`by{d;^BP>hO&#ec`1;?y{g~n1@|)tC-{6%6c+P-P3*hXjQ`mIM(6|U6Txv6#fj?iEj`SNi3TxK`-iG@|eq9*k$_5Mw5 z*Z9(`FD}>6Os?a`jF3r&L*AhFNr!8~p|s44EQ^~|My|cjl_>5^td~iUo%0_9hE%>i zy%9FEZdM|$n(-}bq=(*TjFH8sijIO)C+T%0A?cLv&P~KOD^2rn9gQp}bXkb~S9Rl5 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 E1NTR|SpWb4 diff --git a/build.xml b/build.xml index 8d555d2..a775729 100644 --- a/build.xml +++ b/build.xml @@ -30,14 +30,11 @@ + - - - - @@ -51,18 +48,22 @@ - + + + + + - - + + + + + + + + + + - + diff --git a/resources/plugin.yml b/resources/plugin.yml index c4ceb5c..1dd6375 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,7 +1,7 @@ name: MobArena author: garbagemule main: com.garbagemule.MobArena.MobArena -version: 0.94.4.49 +version: 0.94.4.51 softdepend: [Spout,MultiVerse,XcraftGate,Towny,Heroes,MagicSpells,Vault] commands: ma: diff --git a/src/com/garbagemule/MobArena/util/FileUtils.java b/src/com/garbagemule/MobArena/util/FileUtils.java index 6a39f86..08e9d6c 100644 --- a/src/com/garbagemule/MobArena/util/FileUtils.java +++ b/src/com/garbagemule/MobArena/util/FileUtils.java @@ -4,7 +4,11 @@ import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Enumeration; import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; import org.bukkit.configuration.file.YamlConfiguration; @@ -18,14 +22,32 @@ public class FileUtils * Note that even if the resources have different paths, they will all * be extracted to the given directory. * @param dir a directory - * @param resources an array of resources to extract + * @param resources a list of resources to extract * @return a list of all the files that were written */ - public static List extractResources(File dir, String... resources) { + public static List extractResources(File dir, List resources) { + return extractResources(dir, "", resources); + } + + public static List extractResources(File dir, String path, List filenames) { List files = new ArrayList(); - for (String resource : resources) { - File file = extractResource(dir, resource); + // If the path is empty, just forget about it. + if (!path.equals("")) { + // We want no leading slashes + if (path.startsWith("/")) { + path = path.substring(1); + } + + // But we do want trailing slashes + if (!path.endsWith("/")) { + path = path + "/"; + } + } + + // Extract each resource + for (String filename : filenames) { + File file = extractResource(dir, path + filename); if (file != null) { files.add(file); @@ -33,6 +55,18 @@ public class FileUtils } return files; } + + /** + * Extracts all of the given resources to the given directory. + * Convenience method, used if one is too lazy to create a new list for + * the resource names. + * @param dir a directory + * @param resources an array of resources to extract + * @return a list of all the files that were written + */ + public static List extractResources(File dir, String... resources) { + return extractResources(dir, Arrays.asList(resources)); + } /** * Extracts the given resource to the given directory. @@ -77,6 +111,53 @@ public class FileUtils return null; } + /** + * Lists all files in the MobArena jar file that exist on the given path. + * The resulting list contains only filenames (with extensions) + * @param path the path of the jar file to list files from + * @param ext the file extension of the file type, can be null or the empty string + * @return a list of file names + */ + public static List listFilesOnPath(String path, String ext) { + try { + // If the jar can't be found for some odd reason, escape. + File file = new File("plugins" + File.separator + "MobArena.jar"); + if (file == null || !file.exists()) return null; + + // Create a JarFile out of the.. jar file + JarFile jarFile = new JarFile(file); + List result = new ArrayList(); + + // JarEntry names never start with / + if (path.startsWith("/")) { + path = path.substring(1); + } + + // If null, replace with the empty string. + if (ext == null) { + ext = ""; + } + // Require that extensions start with a period + else if (!ext.startsWith(".")) { + ext = "." + ext; + } + + // Loop through all entries, add the ones that match the path and extension + for (Enumeration entries = jarFile.entries(); entries.hasMoreElements(); ) { + String name = entries.nextElement().getName(); + + if (name.startsWith(path) && name.endsWith(ext)) { + result.add(getFilename(name)); + } + } + return result; + } + catch (Exception e) { + e.printStackTrace(); + return new ArrayList(1); + } + } + private static String getFilename(String resource) { int slash = resource.lastIndexOf("/"); return (slash < 0 ? resource : resource.substring(slash + 1)); diff --git a/src/com/garbagemule/MobArena/waves/ability/AbilityManager.java b/src/com/garbagemule/MobArena/waves/ability/AbilityManager.java index 9af7903..4b05e3a 100644 --- a/src/com/garbagemule/MobArena/waves/ability/AbilityManager.java +++ b/src/com/garbagemule/MobArena/waves/ability/AbilityManager.java @@ -41,52 +41,47 @@ public class AbilityManager public static void loadAbilities(File classDir) { abilities = new HashMap(); - // Extract all of the source files. + // Grab the source directory. File javaDir = new File(classDir, "src"); - extractSourceFiles(javaDir); - // The custom abilities to compile will be in the 'src'-dir - compileAbilities(javaDir, classDir); + /* If the source directory exists, we need to verify that the system + * has a java compiler before attempting anything. If not, we need to + * skip the compiling step and just go straight to loading in the + * existing class files. */ + if (javaDir.exists()) { + if (ToolProvider.getSystemJavaCompiler() != null) { + compileAbilities(javaDir, classDir); + } else { + Messenger.warning("Found plugins/MobArena/abilites/src/ folder, but no Java compiler. The source files will not be compiled!"); + } + } + + /* If there is only one file in the directory, make sure it isn't the + * src/ folder, in which case there will be no .class files to load. + * In the case of no .class files, extract the defaults. */ + String[] files = classDir.list(); + if (files.length == 0 || (files.length == 1 && files[0].equals("src"))) { + Messenger.info("No boss abilities found. Extracting defaults..."); + extractDefaultAbilities(classDir); + } // Load all the custom abilities. loadClasses(classDir); } - private static void extractSourceFiles(File javaDir) { - // Only extract the files if the folder doesn't exist. - if (javaDir.exists()) return; + private static void extractDefaultAbilities(File classDir) { + // Grab a list of all the class files. + List resources = FileUtils.listFilesOnPath("res/abilities/", ".class"); - String path = "abilities/"; + // Check that there is stuff to extract. + if (resources == null || resources.isEmpty()) { + Messenger.severe("Couldn't extract the default boss abilities!"); + return; + } - List files = new ArrayList(); - - files.add(path + "ChainLightning.java"); - files.add(path + "LivingBomb.java"); - files.add(path + "ObsidianBomb.java"); - files.add(path + "Flood.java"); - files.add(path + "WarpToPlayer.java"); - files.add(path + "RootTarget.java"); - files.add(path + "ShufflePositions.java"); - - files.add(path + "ShootArrow.java"); - files.add(path + "ShootFireball.java"); - - files.add(path + "FireAura.java"); - files.add(path + "LightningAura.java"); - - files.add(path + "DisorientDistant.java"); - files.add(path + "DisorientNearby.java"); - files.add(path + "DisorientTarget.java"); - - files.add(path + "PullDistant.java"); - files.add(path + "PullNearby.java"); - files.add(path + "PullTarget.java"); - - files.add(path + "ThrowDistant.java"); - files.add(path + "ThrowNearby.java"); - files.add(path + "ThrowTarget.java"); - - FileUtils.extractResources(javaDir, files.toArray(new String[0])); + // Extract everything. + List files = FileUtils.extractResources(classDir, "abilities/", resources); + Messenger.info("Extracted abilities: " + fileListToString(files, "$")); } private static void compileAbilities(File javaDir, File classDir) { @@ -100,27 +95,33 @@ public class AbilityManager return; } - // Get the compiler and the file manager + // Notify the console. + Messenger.info("Compiling abilities: " + fileListToString(toCompile)); + + // Get the compiler JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); // Generate some JavaFileObjects - Iterable compilationUnits = fileManager.getJavaFileObjectsFromFiles(toCompile); - - // Include the MobArena.jar on the classpath, and set the destination folder. - List options = Arrays.asList("-classpath", classpath, "-d", classDir.getPath()); - - // Set up the compilation task. - JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, options, null, compilationUnits); - - // Call the task. - task.call(); - - // And close the file manager. try { + Iterable compilationUnits = fileManager.getJavaFileObjectsFromFiles(toCompile); + + // Include the MobArena.jar on the classpath, and set the destination folder. + List options = Arrays.asList("-classpath", classpath, "-d", classDir.getPath()); + + // Set up the compilation task. + JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, options, null, compilationUnits); + + // Call the task. + task.call(); + + // And close the file manager. fileManager.close(); } - catch (Exception e) {} + catch (Exception e) { + Messenger.severe("Compilation step failed..."); + e.printStackTrace(); + } } private static List getSourceFilesToCompile(File javaDir, File classDir) { @@ -264,16 +265,27 @@ public class AbilityManager return null; } - /** - * Turn an array of aliases into a comma-separated string of aliases. - * @param aliases an array of Strings - * @return a comma-separated String - */ - /*private static String aliasString(String[] aliases) { + private static String fileListToString(List list) { + return fileListToString(list, null); + } + + private static String fileListToString(List list, String exclude) { + if (list.isEmpty()) return ""; + StringBuffer buffy = new StringBuffer(); - for (String a : aliases) { - buffy.append(a + ", "); + + for (File file : list) { + String name = file.getName(); + int dot = name.lastIndexOf("."); + + if (exclude != null && name.contains(exclude)) { + continue; + } + + buffy.append(", " + name.substring(0, dot)); } - return buffy.substring(0, buffy.length() - 2); - }*/ + + // Trim off the first ", ". + return buffy.substring(2); + } }