1414import net .minecraftforge .gradle .MinecraftExtensionForProject ;
1515import net .minecraftforge .gradle .MinecraftMappings ;
1616import net .minecraftforge .gradle .SlimeLauncherOptions ;
17+ import org .apache .maven .artifact .versioning .ComparableVersion ;
1718import org .gradle .api .Action ;
1819import org .gradle .api .NamedDomainObjectContainer ;
1920import org .gradle .api .Project ;
3637import org .gradle .api .model .ObjectFactory ;
3738import org .gradle .api .plugins .ExtensionAware ;
3839import org .gradle .api .plugins .JavaPluginExtension ;
40+ import org .gradle .api .provider .ListProperty ;
3941import org .gradle .api .provider .Property ;
4042import org .gradle .api .provider .ProviderFactory ;
4143import org .gradle .api .reflect .TypeOf ;
@@ -182,6 +184,11 @@ static abstract class ForProjectImpl extends MinecraftExtensionImpl implements F
182184 private final ConfigurableFileCollection accessTransformer = getObjects ().fileCollection ();
183185 private final Property <String > accessTransformerPath = getObjects ().property (String .class );
184186
187+ // Facades
188+ private final ConfigurableFileCollection facades = getObjects ().fileCollection ();
189+ // Extra Mavenizer Arguments
190+ private final ListProperty <String > extraMavenizerArguments = this .getObjects ().listProperty (String .class );
191+
185192 private final ForgeGradleProblems problems = getObjects ().newInstance (ForgeGradleProblems .class );
186193
187194 protected abstract @ Inject Project getProject ();
@@ -277,6 +284,16 @@ public Property<String> getAccessTransformerPath() {
277284 return this .accessTransformerPath ;
278285 }
279286
287+ @ Override
288+ public ConfigurableFileCollection getFacade () {
289+ return this .facades ;
290+ }
291+
292+ @ Override
293+ public ListProperty <String > getMavenizerArguments () {
294+ return this .extraMavenizerArguments ;
295+ }
296+
280297 @ Override
281298 public List <? extends MavenArtifactRepository > getRepositories () {
282299 var repositoriesMode = getDependencyResolutionManagement ().getRepositoriesMode ().getOrElse (RepositoriesMode .PREFER_PROJECT );
@@ -399,6 +416,7 @@ public MavenizerInstance dependency(
399416 var mavenizer = this .getProviders ().of (MavenizerValueSource .class , spec -> {
400417 spec .parameters (params -> {
401418 var tool = this .plugin .getTool (Tools .MAVENIZER );
419+ var toolVersion = new ComparableVersion (tool .getModule ().getVersion ());
402420 params .getClasspath ().setFrom (tool .getClasspath ());
403421 params .getJavaLauncher ().set (tool .getJavaLauncher ().map (JavaLauncher ::getExecutablePath ));
404422 params .getArguments ().set (this .getProviders ().provider (() -> {
@@ -407,6 +425,10 @@ public MavenizerInstance dependency(
407425 .map (this .problems .ensureFileLocation ());
408426 var cache = toolCache .get ().dir ("caches" ).getAsFile ().getAbsolutePath ();
409427
428+ var localToolCache = this .plugin .localCaches ()
429+ .dir (tool .getName ().toLowerCase (Locale .ENGLISH ))
430+ .map (this .problems .ensureFileLocation ());
431+
410432 var ret = new ArrayList <>(List .of (
411433 "--maven" ,
412434 "--cache" , cache ,
@@ -422,7 +444,7 @@ public MavenizerInstance dependency(
422444 ret .add ("--ignore-cache" );
423445
424446 // If we are finding the access transformer from sourcesets, just find from any source set
425- // We can't filter by configurations becase the config cache doesn't like that.
447+ // We can't filter by configurations because the config cache doesn't like that.
426448 // So if users fuck up, then we can output a warning, or they can manually set the AT file.
427449 // This is a 'best effort'
428450 var sourceSets = getProject ().getExtensions ().getByType (JavaPluginExtension .class ).getSourceSets ();
@@ -449,6 +471,26 @@ else if (!"official".equals(mappings.getChannel()))
449471 ret .add ("--repository" );
450472 ret .add (repo .getName () + ',' + url );
451473 }
474+
475+ if (!minecraftDependency .getFacade ().isEmpty ()) {
476+ if (toolVersion .compareTo (Constants .Mavenizer .SUPPORTS_FACADES ) < 0 ) {
477+ problems .reportFacadesNotSupported (tool .getModule ().toString ());
478+ } else {
479+ for (var cfg : minecraftDependency .getFacade ()) {
480+ ret .add ("--facade-config" );
481+ ret .add (cfg .getAbsolutePath ());
482+ }
483+ }
484+ }
485+
486+ if (toolVersion .compareTo (Constants .Mavenizer .SUPPORTS_LOCAL_CACHE ) >= 0 ) {
487+ ret .add ("--local-cache" );
488+ ret .add (localToolCache .get ().getAsFile ().getAbsolutePath ());
489+ }
490+
491+ // Make sure to do this at the very end
492+ ret .addAll (minecraftDependency .getMavenizerArguments ().getOrElse (Collections .emptyList ()));
493+
452494 return ret ;
453495 }));
454496 });
0 commit comments