Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* A Gradle plugin for the creation of Minecraft mods and MinecraftForge plugins.
* Copyright (C) 2013-2019 Minecraft Forge
* Copyright (C) 2020-2021 anatawa12 and other contributors
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*/
package net.minecraftforge.gradle.common;
import static net.minecraftforge.gradle.common.Constants.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import net.minecraftforge.gradle.util.ReflectionUtil;
import net.minecraftforge.gradle.util.json.version.ManifestVersion;
import org.gradle.api.Action;
import org.gradle.api.DefaultTask;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.artifacts.ArtifactRepositoryContainer;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.artifacts.Configuration.State;
import org.gradle.api.artifacts.dsl.DependencyHandler;
import org.gradle.api.artifacts.repositories.ArtifactRepository;
import org.gradle.api.artifacts.repositories.FlatDirectoryArtifactRepository;
import org.gradle.api.artifacts.repositories.MavenArtifactRepository;
import org.gradle.api.initialization.Settings;
import org.gradle.api.initialization.dsl.ScriptHandler;
import org.gradle.api.logging.Logger;
import org.gradle.api.logging.Logging;
import org.gradle.api.plugins.ExtraPropertiesExtension;
import org.gradle.api.specs.Spec;
import org.gradle.api.tasks.Delete;
import org.gradle.testfixtures.ProjectBuilder;
import com.google.common.base.Charsets;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.io.ByteStreams;
import com.google.common.io.Files;
import com.google.gson.reflect.TypeToken;
import groovy.lang.Closure;
import net.minecraftforge.gradle.GradleVersionUtils;
import net.minecraftforge.gradle.tasks.CrowdinDownload;
import net.minecraftforge.gradle.tasks.Download;
import net.minecraftforge.gradle.tasks.DownloadAssetsTask;
import net.minecraftforge.gradle.tasks.EtagDownloadTask;
import net.minecraftforge.gradle.tasks.ExtractConfigTask;
import net.minecraftforge.gradle.tasks.GenSrgs;
import net.minecraftforge.gradle.tasks.JenkinsChangelog;
import net.minecraftforge.gradle.tasks.MergeJars;
import net.minecraftforge.gradle.tasks.SignJar;
import net.minecraftforge.gradle.tasks.SplitJarTask;
import net.minecraftforge.gradle.util.FileLogListenner;
import net.minecraftforge.gradle.util.GradleConfigurationException;
import net.minecraftforge.gradle.util.delayed.DelayedFile;
import net.minecraftforge.gradle.util.delayed.DelayedFileTree;
import net.minecraftforge.gradle.util.delayed.DelayedString;
import net.minecraftforge.gradle.util.delayed.ReplacementProvider;
import net.minecraftforge.gradle.util.delayed.TokenReplacer;
import net.minecraftforge.gradle.util.json.JsonFactory;
import net.minecraftforge.gradle.util.json.fgversion.FGBuildStatus;
import net.minecraftforge.gradle.util.json.fgversion.FGVersion;
import net.minecraftforge.gradle.util.json.fgversion.FGVersionWrapper;
import net.minecraftforge.gradle.util.json.version.Version;
public abstract class BasePlugin implements Plugin
{
private static final Logger LOGGER = Logging.getLogger(BasePlugin.class);
public Project project;
public BasePlugin> otherPlugin;
public ReplacementProvider replacer = new ReplacementProvider();
private Map mcManifest;
private Version mcVersionJson;
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public final void apply(Project arg)
{
project = arg;
// check for gradle version
{
List split = Splitter.on('.').splitToList(project.getGradle().getGradleVersion());
int major = Integer.parseInt(split.get(0));
int minor = Integer.parseInt(split.get(1).split("-")[0]);
if (major <= 1 || (major == 2 && minor < 3))
throw new RuntimeException("ForgeGradle 2.0 requires Gradle 2.3 or above.");
}
// check for java version
{
if ("9".equals(System.getProperty("java.specification.version")) && !"true".equals(System.getProperty("forgegradle.overrideJava9Check")))
throw new RuntimeException("ForgeGradle does not currently support Java 9");
}
if (project.getBuildDir().getAbsolutePath().contains("!"))
{
LOGGER.error("Build path has !, This will screw over a lot of java things as ! is used to denote archive paths, REMOVE IT if you want to continue");
throw new RuntimeException("Build path contains !");
}
// set the obvious replacements
replacer.putReplacement(REPLACE_CACHE_DIR, cacheFile("").getAbsolutePath());
replacer.putReplacement(REPLACE_BUILD_DIR, project.getBuildDir().getAbsolutePath());
// logging
{
File projectCacheDir = project.getGradle().getStartParameter().getProjectCacheDir();
if (projectCacheDir == null)
projectCacheDir = new File(project.getProjectDir(), ".gradle");
replacer.putReplacement(REPLACE_PROJECT_CACHE_DIR, projectCacheDir.getAbsolutePath());
FileLogListenner listener = new FileLogListenner(new File(projectCacheDir, "gradle.log"));
project.getLogging().addStandardOutputListener(listener);
project.getLogging().addStandardErrorListener(listener);
project.getGradle().addBuildListener(listener);
}
// extension objects
{
Type t = getClass().getGenericSuperclass();
while (t instanceof Class)
{
t = ((Class) t).getGenericSuperclass();
}
project.getExtensions().create(EXT_NAME_MC, (Class) ((ParameterizedType) t).getActualTypeArguments()[0], this);
}
// add buildscript usable tasks
{
ExtraPropertiesExtension ext = project.getExtensions().getExtraProperties();
ext.set("SignJar", SignJar.class);
ext.set("Download", Download.class);
ext.set("EtagDownload", EtagDownloadTask.class);
ext.set("CrowdinDownload", CrowdinDownload.class);
ext.set("JenkinsChangelog", JenkinsChangelog.class);
}
// repos
project.allprojects(new Action() {
public void execute(Project proj)
{
// the forge's repository doesn't have pom file.
addMavenRepo(proj, "forge", URL_FORGE_MAVEN, false);
proj.getRepositories().mavenCentral();
addMavenRepo(proj, "minecraft", URL_LIBRARY);
}
});
// do Mcp Snapshots Stuff
getRemoteJsons();
project.getConfigurations().maybeCreate(CONFIG_MCP_DATA);
project.getConfigurations().maybeCreate(CONFIG_MAPPINGS);
// set other useful configs
project.getConfigurations().maybeCreate(CONFIG_MC_DEPS);
project.getConfigurations().maybeCreate(CONFIG_MC_DEPS_CLIENT);
project.getConfigurations().maybeCreate(CONFIG_NATIVES);
project.getConfigurations().maybeCreate(CONFIG_FFI_DEPS);
addFernFlowerInvokerDeps();
// should be assumed until specified otherwise
project.getConfigurations().getByName(CONFIG_MC_DEPS).extendsFrom(project.getConfigurations().getByName(CONFIG_MC_DEPS_CLIENT));
// after eval
project.afterEvaluate(new Action() {
@Override
public void execute(Project project)
{
// dont continue if its already failed!
if (project.getState().getFailure() != null)
return;
afterEvaluate();
}
});
// some default tasks
makeCommonTasks();
// at last, apply the child plugins
applyPlugin();
}
public abstract void applyPlugin();
private static boolean displayBanner = true;
private void getRemoteJsons()
{
// MCP json
File jsonCache = cacheFile("McpMappings.json");
File etagFile = new File(jsonCache.getAbsolutePath() + ".etag");
String mcpJson = getWithEtag(URLS_MCP_JSON, jsonCache, etagFile);
getExtension().mcpJson = JsonFactory.GSON.fromJson(mcpJson, new TypeToken