11package net .minecraftforge .gradle .tasks .dev ;
22
3+ import java .io .BufferedWriter ;
34import java .io .File ;
45import java .io .FileNotFoundException ;
6+ import java .io .FileWriter ;
57import java .io .IOException ;
68import java .net .MalformedURLException ;
79import java .net .URL ;
810import java .net .URLClassLoader ;
911import java .nio .charset .Charset ;
1012import java .util .ArrayList ;
13+ import java .util .LinkedList ;
1114
1215import net .md_5 .specialsource .Jar ;
1316import net .md_5 .specialsource .JarMapping ;
1821import net .minecraftforge .gradle .delayed .DelayedFile ;
1922import net .minecraftforge .gradle .dev .FmlDevPlugin ;
2023
24+ import org .gradle .api .Action ;
2125import org .gradle .api .DefaultTask ;
2226import org .gradle .api .Project ;
2327import org .gradle .api .file .FileCollection ;
@@ -33,21 +37,44 @@ public class ObfuscateTask extends DefaultTask
3337 private DelayedFile srg ;
3438 private boolean reverse ;
3539 private DelayedFile buildFile ;
40+ private LinkedList <Action <Project >> configureProject = new LinkedList <Action <Project >>();
41+ private LinkedList <String > extraSrg = new LinkedList <String >();
3642
3743 @ TaskAction
3844 public void doTask () throws IOException
3945 {
4046 getLogger ().debug ("Building child project model..." );
4147 Project childProj = FmlDevPlugin .getProject (getBuildFile (), getProject ());
48+ for (Action <Project > act : configureProject )
49+ {
50+ if (act != null )
51+ act .execute (childProj );
52+ }
53+
4254 AbstractTask compileTask = (AbstractTask ) childProj .getTasks ().getByName ("compileJava" );
4355 AbstractTask jarTask = (AbstractTask ) childProj .getTasks ().getByName ("jar" );
4456
4557 // executing jar task
4658 getLogger ().debug ("Executing child Jar task..." );
4759 executeTask (jarTask );
60+
61+ // copy srg
62+ File tempSrg = File .createTempFile ("obf" , ".srg" , this .getTemporaryDir ());
63+ Files .copy (getSrg (), tempSrg );
64+
65+ // append SRG
66+ BufferedWriter writer = new BufferedWriter (new FileWriter (tempSrg , true ));
67+ for (String line : extraSrg )
68+ {
69+ writer .write (line );
70+ writer .newLine ();
71+ }
72+ writer .flush ();
73+ writer .close ();
74+
4875
4976 getLogger ().debug ("Obfuscating jar..." );
50- obfuscate ((File )jarTask .property ("archivePath" ), (FileCollection )compileTask .property ("classpath" ));
77+ obfuscate ((File )jarTask .property ("archivePath" ),tempSrg , (FileCollection )compileTask .property ("classpath" ));
5178 }
5279
5380 private void executeTask (AbstractTask task )
@@ -64,11 +91,11 @@ private void executeTask(AbstractTask task)
6491 }
6592 }
6693
67- private void obfuscate (File inJar , FileCollection classpath ) throws FileNotFoundException , IOException
94+ private void obfuscate (File inJar , File srg , FileCollection classpath ) throws FileNotFoundException , IOException
6895 {
6996 // load mapping
7097 JarMapping mapping = new JarMapping ();
71- mapping .loadMappings (Files .newReader (getSrg () , Charset .defaultCharset ()), null , null , reverse );
98+ mapping .loadMappings (Files .newReader (srg , Charset .defaultCharset ()), null , null , reverse );
7299
73100 // make remapper
74101 JarRemapper remapper = new JarRemapper (null , mapping );
@@ -144,6 +171,21 @@ public void setReverse(boolean reverse)
144171 {
145172 this .reverse = reverse ;
146173 }
174+
175+ public void configureProject (Action <Project > action )
176+ {
177+ configureProject .add (action );
178+ }
179+
180+ public LinkedList <String > getExtraSrg ()
181+ {
182+ return extraSrg ;
183+ }
184+
185+ public void setExtraSrg (LinkedList <String > extraSrg )
186+ {
187+ this .extraSrg = extraSrg ;
188+ }
147189
148190 public File getBuildFile ()
149191 {
0 commit comments