Skip to content

Commit 96798e7

Browse files
committed
tried dep-AT finding
1 parent eda874c commit 96798e7

File tree

7 files changed

+270
-41
lines changed

7 files changed

+270
-41
lines changed

src/main/java/net/minecraftforge/gradle/patcher/PatcherPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -764,7 +764,7 @@ else if (f.getName().endsWith(".srg"))
764764
else if (f.getName().endsWith("_at.cfg"))
765765
{
766766
// Add ATs for deobf in the same run.. why not...
767-
deobfJar.addTransformer(f);
767+
deobfJar.addAt(f);
768768
mergeFiles.addAt(f);
769769
}
770770
}

src/main/java/net/minecraftforge/gradle/tasks/DeobfuscateJar.java

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
2424
import static org.objectweb.asm.Opcodes.ACC_PROTECTED;
2525
import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
26-
import groovy.lang.Closure;
2726

2827
import java.io.BufferedReader;
2928
import java.io.File;
@@ -37,20 +36,6 @@
3736
import java.util.Set;
3837
import java.util.zip.ZipFile;
3938

40-
import net.md_5.specialsource.AccessMap;
41-
import net.md_5.specialsource.Jar;
42-
import net.md_5.specialsource.JarMapping;
43-
import net.md_5.specialsource.JarRemapper;
44-
import net.md_5.specialsource.RemapperProcessor;
45-
import net.md_5.specialsource.provider.JarProvider;
46-
import net.md_5.specialsource.provider.JointProvider;
47-
import net.minecraftforge.gradle.common.Constants;
48-
import net.minecraftforge.gradle.util.caching.Cached;
49-
import net.minecraftforge.gradle.util.caching.CachedTask;
50-
import net.minecraftforge.gradle.util.json.JsonFactory;
51-
import net.minecraftforge.gradle.util.json.MCInjectorStruct;
52-
import net.minecraftforge.gradle.util.json.MCInjectorStruct.InnerClass;
53-
5439
import org.gradle.api.file.FileCollection;
5540
import org.gradle.api.tasks.Input;
5641
import org.gradle.api.tasks.InputFile;
@@ -67,6 +52,20 @@
6752
import com.google.common.io.LineProcessor;
6853

6954
import de.oceanlabs.mcp.mcinjector.MCInjectorImpl;
55+
import groovy.lang.Closure;
56+
import net.md_5.specialsource.AccessMap;
57+
import net.md_5.specialsource.Jar;
58+
import net.md_5.specialsource.JarMapping;
59+
import net.md_5.specialsource.JarRemapper;
60+
import net.md_5.specialsource.RemapperProcessor;
61+
import net.md_5.specialsource.provider.JarProvider;
62+
import net.md_5.specialsource.provider.JointProvider;
63+
import net.minecraftforge.gradle.common.Constants;
64+
import net.minecraftforge.gradle.util.caching.Cached;
65+
import net.minecraftforge.gradle.util.caching.CachedTask;
66+
import net.minecraftforge.gradle.util.json.JsonFactory;
67+
import net.minecraftforge.gradle.util.json.MCInjectorStruct;
68+
import net.minecraftforge.gradle.util.json.MCInjectorStruct.InnerClass;
7069

7170
public class DeobfuscateJar extends CachedTask
7271
{
@@ -102,18 +101,6 @@ public class DeobfuscateJar extends CachedTask
102101

103102
private Object log;
104103

105-
/**
106-
* adds an access transformer to the deobfuscation of this
107-
* @param obj access transformers
108-
*/
109-
public void addTransformer(Object... obj)
110-
{
111-
for (Object object : obj)
112-
{
113-
ats.add(object);
114-
}
115-
}
116-
117104
@TaskAction
118105
public void doTask() throws IOException
119106
{
@@ -457,6 +444,27 @@ public File call()
457444
};
458445
}
459446

447+
/**
448+
* adds an access transformer to the deobfuscation of this
449+
* @param obj access transformers
450+
*/
451+
public void addAt(Object obj)
452+
{
453+
ats.add(obj);
454+
}
455+
456+
/**
457+
* adds access transformers to the deobfuscation of this
458+
* @param obj access transformers
459+
*/
460+
public void addAts(Iterable<Object> objs)
461+
{
462+
for (Object object : objs)
463+
{
464+
ats.add(object);
465+
}
466+
}
467+
460468
public FileCollection getAts()
461469
{
462470
return getProject().files(ats.toArray());
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package net.minecraftforge.gradle.user;
2+
3+
import java.io.File;
4+
import java.io.FileFilter;
5+
import java.io.FileOutputStream;
6+
import java.io.IOException;
7+
import java.io.InputStream;
8+
import java.io.OutputStream;
9+
import java.util.List;
10+
import java.util.jar.JarEntry;
11+
import java.util.jar.JarFile;
12+
import java.util.jar.Manifest;
13+
14+
import org.gradle.api.DefaultTask;
15+
import org.gradle.api.file.FileCollection;
16+
import org.gradle.api.tasks.InputFiles;
17+
import org.gradle.api.tasks.OutputDirectory;
18+
import org.gradle.api.tasks.TaskAction;
19+
20+
import com.google.common.base.Splitter;
21+
import com.google.common.base.Strings;
22+
import com.google.common.collect.Lists;
23+
import com.google.common.io.ByteStreams;
24+
import com.google.common.io.Files;
25+
26+
public class TaskExtractDepAts extends DefaultTask
27+
{
28+
@InputFiles
29+
private List<FileCollection> collections;
30+
@OutputDirectory
31+
private Object outputDir;
32+
33+
@TaskAction
34+
public void doTask() throws IOException
35+
{
36+
FileCollection col = getCollections();
37+
File outputDir = getOutputDir();
38+
outputDir.mkdirs(); // make sur eit exists
39+
40+
// make a list of things to delete...
41+
List<File> toDelete = Lists.newArrayList(outputDir.listFiles(new FileFilter() {
42+
@Override
43+
public boolean accept(File f)
44+
{
45+
return f.isFile();
46+
}
47+
}));
48+
49+
Splitter splitter = Splitter.on(' ');
50+
51+
for (File f : col)
52+
{
53+
if (!f.exists() || !f.getName().endsWith("jar"))
54+
continue;
55+
56+
JarFile jar = new JarFile(f);
57+
Manifest man = jar.getManifest();
58+
59+
if (man != null)
60+
{
61+
String atString = man.getMainAttributes().getValue("FMLAT");
62+
if (!Strings.isNullOrEmpty(atString))
63+
{
64+
for (String at : splitter.split(atString.trim()))
65+
{
66+
// append _at.cfg just in case its not there already...
67+
// also differentiate the file name, in cas the same At comes from multiple jars.. who knows why...
68+
File outFile = new File(outputDir, at + "_" + Files.getNameWithoutExtension(f.getName()) + "_at.cfg");
69+
toDelete.remove(outFile);
70+
71+
JarEntry entry = jar.getJarEntry("META-INF/" + at);
72+
73+
InputStream istream = jar.getInputStream(entry);
74+
OutputStream ostream = new FileOutputStream(outFile);
75+
ByteStreams.copy(istream, ostream);
76+
77+
istream.close();
78+
ostream.close();
79+
}
80+
}
81+
}
82+
83+
jar.close();
84+
}
85+
86+
// remove the files that shouldnt be there...
87+
for (File f : toDelete)
88+
{
89+
f.delete();
90+
}
91+
}
92+
93+
public FileCollection getCollections()
94+
{
95+
return getProject().files(collections);
96+
}
97+
98+
public void addCollection(FileCollection col)
99+
{
100+
collections.add(col);
101+
}
102+
103+
public File getOutputDir()
104+
{
105+
return getProject().file(outputDir);
106+
}
107+
108+
public void setOutputDir(Object outputFile)
109+
{
110+
this.outputDir = outputFile;
111+
}
112+
}

src/main/java/net/minecraftforge/gradle/user/UserBaseExtension.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class UserBaseExtension extends BaseExtension
4141
private ArrayList<String> includes = new ArrayList<String>();
4242
private ArrayList<Object> ats = new ArrayList<Object>();
4343
private ArrayList<Object> atSources = new ArrayList<Object>();
44+
private boolean useDepAts = false;
4445
private String runDir = "run";
4546
private boolean makeObfSourceJar = true;
4647
private List<Object> clientJvmArgs = Lists.newArrayList();
@@ -128,6 +129,24 @@ public FileCollection getResolvedAccessTransformerSources()
128129
return resolveFiles(atSources);
129130
}
130131

132+
/**
133+
* Whether or not to grab Access Transformers from dependencies
134+
* @return
135+
*/
136+
public boolean isUseDepAts()
137+
{
138+
return useDepAts;
139+
}
140+
141+
/**
142+
*
143+
* @param useDepAts If TRUE, then
144+
*/
145+
public void setUseDepAts(boolean useDepAts)
146+
{
147+
this.useDepAts = useDepAts;
148+
}
149+
131150
public void setRunDir(String value)
132151
{
133152
this.runDir = value;
@@ -244,5 +263,4 @@ protected FileCollection resolveFiles(List<Object> objects)
244263
files[i++] = resolveFile(obj);
245264
return project.files(files).getAsFileTree();
246265
}
247-
248266
}

0 commit comments

Comments
 (0)