From ce95f90b0ddaf9324d9e027ff02870f5b9f824fb Mon Sep 17 00:00:00 2001 From: Chicken-Bomes Date: Tue, 29 Apr 2014 15:31:53 +1000 Subject: [PATCH] Update build, dependencies and DepLoader --- build/build.gradle | 18 +-- build/build.properties | 2 +- resources/dependancies.info | 9 -- resources/dependencies.info | 7 + .../core/asm/DelegatedTransformer.java | 2 +- .../asm/InterfaceDependancyTransformer.java | 6 +- .../core/asm/MCPDeobfuscationTransformer.java | 9 +- .../core/asm/TweakTransformer.java | 4 + .../core/featurehack/GameDataManipulator.java | 4 +- .../core/launch/CodeChickenCorePlugin.java | 1 + src/codechicken/core/launch/DepLoader.java | 127 ++++++++++-------- 11 files changed, 107 insertions(+), 82 deletions(-) delete mode 100644 resources/dependancies.info create mode 100644 resources/dependencies.info diff --git a/build/build.gradle b/build/build.gradle index e3acf7b..25a70ba 100644 --- a/build/build.gradle +++ b/build/build.gradle @@ -29,6 +29,7 @@ configFile.withReader { prop.load(it) project.ext.config = new ConfigSlurper().parse prop } + dependencies { compile "codechicken:CodeChickenLib:${config.mc_version}-${config.ccl_version}:dev" } @@ -57,11 +58,12 @@ processResources { //redo task if any of these properties change inputs.property "version", project.version inputs.property "mc_version", config.mc_version + inputs.property "ccl_version", config.ccl_version // Replace properties in info files from(sourceSets.main.resources.srcDirs) { include '*.info' - expand 'version':project.version,'mc_version':config.mc_version + expand 'version':project.version,'mc_version':config.mc_version,'ccl_version':config.ccl_version } // Copy everything else from(sourceSets.main.resources.srcDirs) { @@ -69,26 +71,24 @@ processResources { } } -task sourceJar(type: Jar) { - from sourceSets.main.allSource - classifier = 'src' - version = "${project.minecraft.version}-${project.version}" -} - +version = "${project.minecraft.version}-${project.version}" def commonManifest = { attributes 'FMLCorePlugin': 'codechicken.core.launch.CodeChickenCorePlugin' } jar { classifier = 'universal' - version = "${project.minecraft.version}-${project.version}" manifest commonManifest } +task sourceJar(type: Jar) { + from sourceSets.main.allSource + classifier = 'src' +} + task devJar(type: Jar) { from sourceSets.main.output classifier = 'dev' - version = "${project.minecraft.version}-${project.version}" manifest commonManifest } diff --git a/build/build.properties b/build/build.properties index 373e069..29c17e9 100644 --- a/build/build.properties +++ b/build/build.properties @@ -1,4 +1,4 @@ mc_version=1.7.2 forge_version=10.12.0.1054 -ccl_version=1.1.0.74 +ccl_version=1.1.0.76 mod_version=1.0 diff --git a/resources/dependancies.info b/resources/dependancies.info deleted file mode 100644 index a1959cd..0000000 --- a/resources/dependancies.info +++ /dev/null @@ -1,9 +0,0 @@ -{ - "repo": "http://files.minecraftforge.net/CodeChickenLib/", - "file": "CodeChickenLib-universal-@MCVERSION@-@VERSION@.jar", - "dev": "CodeChickenLib-dev-@MCVERSION@-@VERSION@.jar", - "class": "codechicken.lib.asm.ASMHelper", - "version": "1.0.0.62", - "mcversion": "1.6.4", - "coreLib": true -} \ No newline at end of file diff --git a/resources/dependencies.info b/resources/dependencies.info new file mode 100644 index 0000000..c40cb0a --- /dev/null +++ b/resources/dependencies.info @@ -0,0 +1,7 @@ +{ + "repo": "http://files.minecraftforge.net/maven/codechicken/CodeChickenLib/${mc_version}-${ccl_version}/", + "file": "CodeChickenLib-${mc_version}-${ccl_version}-universal.jar", + "dev": "CodeChickenLib-${mc_version}-${ccl_version}-dev.jar", + "class": "codechicken.lib.asm.ASMHelper", + "coreLib": true +} \ No newline at end of file diff --git a/src/codechicken/core/asm/DelegatedTransformer.java b/src/codechicken/core/asm/DelegatedTransformer.java index a96d80e..c212469 100644 --- a/src/codechicken/core/asm/DelegatedTransformer.java +++ b/src/codechicken/core/asm/DelegatedTransformer.java @@ -119,7 +119,7 @@ public class DelegatedTransformer implements IClassTransformer { ZipEntry entry = jar.getEntry(dependancy+".class"); if(entry == null) - throw new Exception("Dependancy "+dependancy+" not found in jar file "+jarFile.getName()); + throw new Exception("Dependency "+dependancy+" not found in jar file "+jarFile.getName()); byte[] depbytes = readFully(jar.getInputStream(entry)); defineDependancies(depbytes, jar, jarFile, depStack); diff --git a/src/codechicken/core/asm/InterfaceDependancyTransformer.java b/src/codechicken/core/asm/InterfaceDependancyTransformer.java index 46f5758..7992829 100644 --- a/src/codechicken/core/asm/InterfaceDependancyTransformer.java +++ b/src/codechicken/core/asm/InterfaceDependancyTransformer.java @@ -2,12 +2,12 @@ package codechicken.core.asm; import java.util.Iterator; +import codechicken.lib.asm.ASMInit; import net.minecraft.launchwrapper.Launch; import org.objectweb.asm.Type; import org.objectweb.asm.tree.AnnotationNode; import org.objectweb.asm.tree.ClassNode; -import codechicken.core.launch.CodeChickenCorePlugin; import codechicken.lib.asm.ASMHelper; import codechicken.lib.asm.ObfMapping; @@ -15,6 +15,10 @@ import net.minecraft.launchwrapper.IClassTransformer; public class InterfaceDependancyTransformer implements IClassTransformer { + static { + ASMInit.init(); + } + @Override public byte[] transform(String name, String tname, byte[] bytes) { if (bytes == null) return null; diff --git a/src/codechicken/core/asm/MCPDeobfuscationTransformer.java b/src/codechicken/core/asm/MCPDeobfuscationTransformer.java index 579437f..fa65e57 100644 --- a/src/codechicken/core/asm/MCPDeobfuscationTransformer.java +++ b/src/codechicken/core/asm/MCPDeobfuscationTransformer.java @@ -6,10 +6,8 @@ import java.lang.reflect.Field; import java.util.*; import java.util.Map.Entry; -import javax.swing.JFileChooser; - +import codechicken.lib.asm.ASMInit; import cpw.mods.fml.relauncher.IFMLLoadingPlugin; -import net.minecraft.launchwrapper.ITweaker; import net.minecraft.launchwrapper.Launch; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; @@ -26,7 +24,6 @@ import codechicken.lib.asm.ASMHelper; import codechicken.lib.asm.CC_ClassWriter; import codechicken.lib.asm.ObfMapping; import codechicken.lib.config.ConfigFile; -import codechicken.lib.config.ConfigTag; import codechicken.obfuscator.IHeirachyEvaluator; import codechicken.obfuscator.ObfuscationRun; import codechicken.obfuscator.ObfuscationMap.ObfuscationEntry; @@ -38,6 +35,10 @@ import net.minecraft.launchwrapper.LaunchClassLoader; public class MCPDeobfuscationTransformer implements IClassTransformer, Opcodes, IHeirachyEvaluator { + static { + ASMInit.init(); + } + public static class LoadPlugin implements IFMLLoadingPlugin { @Override diff --git a/src/codechicken/core/asm/TweakTransformer.java b/src/codechicken/core/asm/TweakTransformer.java index 2e6d460..c36f420 100644 --- a/src/codechicken/core/asm/TweakTransformer.java +++ b/src/codechicken/core/asm/TweakTransformer.java @@ -19,6 +19,10 @@ import static codechicken.lib.asm.InsnComparator.*; public class TweakTransformer implements IClassTransformer, Opcodes { + static { + ASMInit.init(); + } + private static ModularASMTransformer transformer = new ModularASMTransformer(); private static Map blocks = ASMReader.loadResource("/assets/codechickencore/asm/tweaks.asm"); public static ConfigTag tweaks; diff --git a/src/codechicken/core/featurehack/GameDataManipulator.java b/src/codechicken/core/featurehack/GameDataManipulator.java index d591cf3..87e2dc4 100644 --- a/src/codechicken/core/featurehack/GameDataManipulator.java +++ b/src/codechicken/core/featurehack/GameDataManipulator.java @@ -18,10 +18,10 @@ public class GameDataManipulator { try { f_registryObjects = RegistrySimple.class.getDeclaredField( - new ObfMapping("net/minecraft/util/RegistrySimple", "registryObjects", "Ljava/util/Map;").toRuntime().s_name); + new ObfMapping("net/minecraft/util/RegistrySimple", "field_82596_a", "Ljava/util/Map;").toRuntime().s_name); f_registryObjects.setAccessible(true); f_underlyingIntegerMap = RegistryNamespaced.class.getDeclaredField( - new ObfMapping("net/minecraft/util/RegistryNamespaced", "underlyingIntegerMap", "Lnet/minecraft/util/ObjectIntIdentityMap;").toRuntime().s_name); + new ObfMapping("net/minecraft/util/RegistryNamespaced", "field_148759_a", "Lnet/minecraft/util/ObjectIntIdentityMap;").toRuntime().s_name); f_underlyingIntegerMap.setAccessible(true); } catch (Exception e) { throw new RuntimeException(e); diff --git a/src/codechicken/core/launch/CodeChickenCorePlugin.java b/src/codechicken/core/launch/CodeChickenCorePlugin.java index 8431ccf..67ecc1f 100644 --- a/src/codechicken/core/launch/CodeChickenCorePlugin.java +++ b/src/codechicken/core/launch/CodeChickenCorePlugin.java @@ -17,6 +17,7 @@ import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import codechicken.core.asm.*; +import codechicken.lib.asm.ASMInit; import cpw.mods.fml.relauncher.CoreModManager; import net.minecraft.launchwrapper.Launch; diff --git a/src/codechicken/core/launch/DepLoader.java b/src/codechicken/core/launch/DepLoader.java index af578d6..0032ed5 100644 --- a/src/codechicken/core/launch/DepLoader.java +++ b/src/codechicken/core/launch/DepLoader.java @@ -32,6 +32,7 @@ import java.util.*; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -219,10 +220,36 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } } - public static class Dependancy { + public static class VersionedFile + { + public final Pattern pattern; + public final String filename; + public final ComparableVersion version; + public final String name; + + public VersionedFile(String filename, Pattern pattern) { + this.pattern = pattern; + this.filename = filename; + Matcher m = pattern.matcher(filename); + if(m.matches()) { + name = m.group(1); + version = new ComparableVersion(m.group(2)); + } + else { + name = null; + version = null; + } + } + + public boolean matches() { + return name != null; + } + } + + public static class Dependency + { public String url; - public String[] filesplit; - public ComparableVersion version; + public VersionedFile file; public String existing; /** @@ -230,19 +257,10 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { */ public boolean coreLib; - public Dependancy(String url, String[] filesplit, boolean coreLib) { + public Dependency(String url, VersionedFile file, boolean coreLib) { this.url = url; - this.filesplit = filesplit; + this.file = file; this.coreLib = coreLib; - version = new ComparableVersion(filesplit[1]); - } - - public String getName() { - return filesplit[0]; - } - - public String fileName() { - return filesplit[0] + filesplit[1] + filesplit[2]; } } @@ -252,7 +270,7 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { private IDownloadDisplay downloadMonitor; private JDialog popupWindow; - private Map depMap = new HashMap(); + private Map depMap = new HashMap(); private HashSet depSet = new HashSet(); public DepLoadInst() { @@ -308,11 +326,11 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } } - private void download(Dependancy dep) { + private void download(Dependency dep) { popupWindow = (JDialog) downloadMonitor.makeDialog(); - File libFile = new File(v_modsDir, dep.fileName()); + File libFile = new File(v_modsDir, dep.file.filename); try { - URL libDownload = new URL(dep.url + '/' + dep.fileName()); + URL libDownload = new URL(dep.url + '/' + dep.file.filename); downloadMonitor.updateProgressString("Downloading file %s", libDownload.toString()); System.out.format("Downloading file %s\n", libDownload.toString()); URLConnection connection = libDownload.openConnection(); @@ -332,7 +350,7 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { System.exit(1); return; } - downloadMonitor.showErrorDialog(dep.fileName(), dep.url + '/' + dep.fileName()); + downloadMonitor.showErrorDialog(dep.file.filename, dep.url + '/' + dep.file.filename); throw new RuntimeException("A download error occured", e); } } @@ -391,10 +409,10 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } } - private String checkExisting(String[] dependency) { + private String checkExisting(Dependency dep) { for (File f : modsDir.listFiles()) { - String[] split = splitFileName(f.getName()); - if (split == null || !split[0].equals(dependency[0])) + VersionedFile vfile = new VersionedFile(f.getName(), dep.file.pattern); + if (!vfile.matches() || !vfile.name.equals(dep.file.name)) continue; if (f.renameTo(new File(v_modsDir, f.getName()))) @@ -404,21 +422,18 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } for (File f : v_modsDir.listFiles()) { - String[] split = splitFileName(f.getName()); - if (split == null || !split[0].equals(dependency[0])) + VersionedFile vfile = new VersionedFile(f.getName(), dep.file.pattern); + if (!vfile.matches() || !vfile.name.equals(dep.file.name)) continue; - ComparableVersion found = new ComparableVersion(split[1]); - ComparableVersion requested = new ComparableVersion(dependency[1]); - - int cmp = found.compareTo(requested); + int cmp = vfile.version.compareTo(dep.file.version); if (cmp < 0) { System.out.println("Deleted old version " + f.getName()); deleteMod(f); return null; } if (cmp > 0) { - System.err.println("Warning: version of " + dependency[0] + ", " + split[1] + " is newer than request " + dependency[1]); + System.err.println("Warning: version of " + dep.file.name + ", " + vfile.version + " is newer than request " + dep.file.version); return f.getName(); } return f.getName();//found dependency @@ -436,7 +451,7 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } private void activateDeps() { - for (Dependancy dep : depMap.values()) + for (Dependency dep : depMap.values()) if (dep.coreLib) addClasspath(dep.existing); } @@ -446,7 +461,7 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { try { while (!depSet.isEmpty()) { Iterator it = depSet.iterator(); - Dependancy dep = depMap.get(it.next()); + Dependency dep = depMap.get(it.next()); it.remove(); load(dep); } @@ -458,12 +473,12 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } } - private void load(Dependancy dep) { - dep.existing = checkExisting(dep.filesplit); + private void load(Dependency dep) { + dep.existing = checkExisting(dep); if (dep.existing == null)//download dep { download(dep); - dep.existing = dep.fileName(); + dep.existing = dep.file.filename; } } @@ -521,31 +536,42 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { return; String repo = node.get("repo").getAsString(); - String file = node.get("file").getAsString(); + String filename = node.get("file").getAsString(); if (!obfuscated && node.has("dev")) - file = node.get("dev").getAsString(); + filename = node.get("dev").getAsString(); boolean coreLib = node.has("coreLib") && node.get("coreLib").getAsBoolean(); - String[] split = splitFileName(file); - if (split == null) - throw new RuntimeException("Invalid filename format for dependency: " + file); + Pattern pattern = null; + try { + if(node.has("pattern")) + pattern = Pattern.compile(node.get("pattern").getAsString()); + } catch (PatternSyntaxException e) { + System.err.println("Invalid filename pattern: "+node.get("pattern")); + e.printStackTrace(); + } + if(pattern == null) + pattern = Pattern.compile("(\\w+).*?([\\d\\.]+)[-\\w]*\\.[^\\d]+"); - addDep(new Dependancy(repo, split, coreLib)); + VersionedFile file = new VersionedFile(filename, pattern); + if (!file.matches()) + throw new RuntimeException("Invalid filename format for dependency: " + filename); + + addDep(new Dependency(repo, file, coreLib)); } - private void addDep(Dependancy newDep) { - if (mergeNew(depMap.get(newDep.getName()), newDep)) { - depMap.put(newDep.getName(), newDep); - depSet.add(newDep.getName()); + private void addDep(Dependency newDep) { + if (mergeNew(depMap.get(newDep.file.name), newDep)) { + depMap.put(newDep.file.name, newDep); + depSet.add(newDep.file.name); } } - private boolean mergeNew(Dependancy oldDep, Dependancy newDep) { + private boolean mergeNew(Dependency oldDep, Dependency newDep) { if (oldDep == null) return true; - Dependancy newest = newDep.version.compareTo(oldDep.version) > 0 ? newDep : oldDep; + Dependency newest = newDep.file.version.compareTo(oldDep.file.version) > 0 ? newDep : oldDep; newest.coreLib = newDep.coreLib || oldDep.coreLib; return newest == newDep; @@ -559,15 +585,6 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } } - private static String[] splitFileName(String filename) { - Pattern p = Pattern.compile("(.+?)([\\d\\.\\w]+)(\\.[^\\d]+)"); - Matcher m = p.matcher(filename); - if (!m.matches()) - return null; - - return new String[]{m.group(1), m.group(2), m.group(3)}; - } - @Override public String[] getASMTransformerClass() { return null;