mirror of
https://github.com/garbagemule/MobArena.git
synced 2024-11-23 02:55:46 +01:00
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.
This commit is contained in:
parent
a3fa0539ce
commit
353109c89a
BIN
MobArena.jar
BIN
MobArena.jar
Binary file not shown.
30
build.xml
30
build.xml
@ -30,14 +30,11 @@
|
||||
<property name="msjar" value="MagicSpells.jar" />
|
||||
<property name="msurl" value="http://dev.bukkit.org/media/files/575/866/${msjar}" />
|
||||
|
||||
|
||||
<path id="classpath">
|
||||
<fileset dir="${lib}" includes="*.jar" />
|
||||
<!--<fileset dir="${res}" includes="**/*.*" />-->
|
||||
<pathelement location="${bin}" />
|
||||
</path>
|
||||
|
||||
<fileset id="" dir="${src}">
|
||||
</fileset>
|
||||
|
||||
<target name="clean">
|
||||
<delete dir="${bin}" />
|
||||
@ -51,18 +48,22 @@
|
||||
<mkdir dir="${lib}" />
|
||||
</target>
|
||||
|
||||
<target name="copy-abilities">
|
||||
<target name="prepare-abilities">
|
||||
<mkdir dir="${ability-dest}" />
|
||||
</target>
|
||||
|
||||
<!--<target name="copy-abilities">
|
||||
<mkdir dir="${ability-dest}" />
|
||||
<copy toDir="${ability-dest}">
|
||||
<fileset dir="${ability-src}" />
|
||||
</copy>
|
||||
</target>
|
||||
</target>-->
|
||||
|
||||
<target name="cleanup-abilities">
|
||||
<delete dir="${ability-dest}" />
|
||||
</target>
|
||||
|
||||
<!-- Compile the source and put in the bin-folder -->
|
||||
|
||||
<!-- Builds the source code -->
|
||||
<target name="build-src" depends="prepare-bin">
|
||||
<javac target="1.6" source="1.6"
|
||||
srcdir="${src}" destdir="${bin}"
|
||||
@ -72,6 +73,7 @@
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- Builds the source code and shows deprecation issues -->
|
||||
<target name="build-src-with-deprecation-check" depends="prepare-bin">
|
||||
<javac target="1.6" source="1.6"
|
||||
srcdir="${src}" destdir="${bin}"
|
||||
@ -81,9 +83,19 @@
|
||||
<compilerarg value="-Xbootclasspath/p:${toString:classpath}"/>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- Builds the ability source code and places it in the resources folder -->
|
||||
<target name="build-abilities" depends="prepare-abilities">
|
||||
<javac target="1.6" source="1.6"
|
||||
srcdir="${ability-src}" destdir="${ability-dest}"
|
||||
debug="on" debuglevel="lines,vars,source"
|
||||
includeantruntime="no">
|
||||
<compilerarg value="-Xbootclasspath/p:${toString:classpath}"/>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- Build a .jar and copy to server's plugins-folder -->
|
||||
<target name="dist" depends="build-src-with-deprecation-check, copy-abilities">
|
||||
<target name="dist" depends="build-src-with-deprecation-check, build-abilities">
|
||||
<delete file="${pluginname}.jar" />
|
||||
<jar jarfile="${pluginname}.jar">
|
||||
<!-- Include the class-files (bin) and the resources (res) -->
|
||||
|
@ -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:
|
||||
|
@ -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<File> extractResources(File dir, String... resources) {
|
||||
public static List<File> extractResources(File dir, List<String> resources) {
|
||||
return extractResources(dir, "", resources);
|
||||
}
|
||||
|
||||
public static List<File> extractResources(File dir, String path, List<String> filenames) {
|
||||
List<File> files = new ArrayList<File>();
|
||||
|
||||
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<File> 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<String> 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<String> result = new ArrayList<String>();
|
||||
|
||||
// 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<JarEntry> 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<String>(1);
|
||||
}
|
||||
}
|
||||
|
||||
private static String getFilename(String resource) {
|
||||
int slash = resource.lastIndexOf("/");
|
||||
return (slash < 0 ? resource : resource.substring(slash + 1));
|
||||
|
@ -41,52 +41,47 @@ public class AbilityManager
|
||||
public static void loadAbilities(File classDir) {
|
||||
abilities = new HashMap<String,Ability>();
|
||||
|
||||
// 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<String> 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<String> files = new ArrayList<String>();
|
||||
|
||||
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<File> 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<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(toCompile);
|
||||
|
||||
// Include the MobArena.jar on the classpath, and set the destination folder.
|
||||
List<String> 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<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(toCompile);
|
||||
|
||||
// Include the MobArena.jar on the classpath, and set the destination folder.
|
||||
List<String> 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<File> 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<File> list) {
|
||||
return fileListToString(list, null);
|
||||
}
|
||||
|
||||
private static String fileListToString(List<File> 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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user