123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556 |
- plugins {
- id("fabric-loom") version("0.5-SNAPSHOT") apply false
- id("maven-publish")
- id("java")
- id("java-library")
- id("net.minecrell.licenser") version("0.4.1")
- id("com.matthewprenger.cursegradle") version("1.4.0")
- id("net.corda.plugins.jar-filter") version("5.0.8") apply false
- }
- import net.fabricmc.loom.LoomGradleExtension
- import net.fabricmc.loom.task.RemapJarTask
- import net.fabricmc.loom.util.DownloadUtil
- import net.fabricmc.loom.util.MinecraftVersionInfo
- import net.fabricmc.lorenztiny.TinyMappingsReader
- import net.fabricmc.mapping.tree.TinyMappingFactory
- import org.cadixdev.lorenz.MappingSet
- import org.cadixdev.lorenz.io.TextMappingsWriter
- import org.cadixdev.lorenz.io.proguard.ProGuardReader
- import org.cadixdev.lorenz.model.*
- import org.zeroturnaround.zip.ByteSource
- import org.zeroturnaround.zip.ZipEntrySource
- import org.zeroturnaround.zip.ZipUtil
- import java.nio.charset.StandardCharsets
- import java.nio.file.Files
- import java.nio.file.Path
- import java.text.SimpleDateFormat
- import java.util.function.Consumer
- archivesBaseName = "RoughlyEnoughItems"
- def runNumber = (System.getenv("GITHUB_RUN_NUMBER") == null ? "9999" : System.getenv("GITHUB_RUN_NUMBER"))
- version = rootProject.base_version + "." + runNumber
- group = "me.shedaniel"
- allprojects {
- apply plugin: 'maven-publish'
- apply plugin: 'maven'
- apply plugin: 'fabric-loom'
- apply plugin: 'net.minecrell.licenser'
- apply plugin: 'net.corda.plugins.jar-filter'
- sourceCompatibility = targetCompatibility = 1.8
- loom {
- shareCaches = true
- }
- repositories {
- maven { url "https://dl.bintray.com/shedaniel/shedaniel-mods" }
- mavenLocal()
- }
- afterEvaluate {
- processResources {
- filesMatching('fabric.mod.json') {
- expand 'version': project.version
- }
- inputs.property "version", project.version
- }
- license {
- header rootProject.file('HEADER')
- include '**/*.java'
- }
- jar {
- from rootProject.file("LICENSE")
- }
- }
- dependencies {
- minecraft("com.mojang:minecraft:${project.minecraft_version}")
- mappings(new MojangMappingsDependency(project, loom))
- modApi("net.fabricmc:fabric-loader:${project.fabricloader_version}")
- modApi(fabricApi.module("fabric-api-base", project.fabric_api))
- modApi(fabricApi.module("fabric-resource-loader-v0", project.fabric_api))
- modApi(fabricApi.module("fabric-networking-v0", project.fabric_api))
- modApi(fabricApi.module("fabric-lifecycle-events-v1", project.fabric_api))
- modApi(fabricApi.module("fabric-rendering-fluids-v1", project.fabric_api))
- modRuntime("net.fabricmc.fabric-api:fabric-api:${project.fabric_api}")
- modApi("me.shedaniel.cloth.api:cloth-client-events-v0:${cloth_client_events_v0_version}") {
- transitive(false)
- }
- modApi("me.shedaniel.cloth:config-2:${cloth_config_version}") {
- exclude(module: "fabric-api")
- }
- modApi("me.sargunvohra.mcmods:autoconfig1u:${project.autoconfig1u}") {
- exclude(module: "fabric-api")
- }
- modApi("org.jetbrains:annotations:19.0.0")
- modCompileOnly("io.github.prospector:modmenu:${modmenu_version}") {
- transitive(false)
- }
- modRuntime("io.github.prospector:modmenu:${modmenu_version}") {
- transitive(false)
- }
- modRuntime("me.shedaniel:SmoothScrollingEverywhere:3.0.3-unstable") {
- transitive(false)
- }
- }
- tasks.withType(JavaCompile) {
- options.encoding = "UTF-8"
- }
- task sourcesJar(type: Jar, dependsOn: classes) {
- classifier("sources")
- from sourceSets.main.allSource
- }
- }
- subprojects {
- group = rootProject.group
- version = rootProject.version
- task remapMavenJar(type: Copy, dependsOn: remapJar) {
- afterEvaluate {
- from("${project.buildDir}/libs/$archivesBaseName-${version}.jar")
- into("${project.buildDir}/libs/")
- rename { String fn -> "$archivesBaseName-${version}-maven.jar" }
- }
- }
- configurations {
- dev
- remapped
- }
- jar {
- classifier("dev")
- }
- remapJar {
- input.set(file("${project.buildDir}/filtered-libs/$archivesBaseName-${version}-dev-filtered.jar"))
- classifier(null)
- }
- artifacts {
- dev file: file("${project.buildDir}/libs/$archivesBaseName-${version}-dev.jar"), type: "jar", builtBy: jar
- remapped file: file("${project.buildDir}/libs/$archivesBaseName-${version}.jar"), type: "jar", builtBy: remapJar
- }
- task jarFilter(type: net.corda.gradle.jarfilter.JarFilterTask) {
- jars jar
- annotations {
- forRemove = [
- "org.jetbrains.annotations.NotNull",
- "org.jetbrains.annotations.Nullable",
- "org.jetbrains.annotations.ApiStatus\$Experimental",
- "org.jetbrains.annotations.ApiStatus\$Internal",
- "org.jetbrains.annotations.ApiStatus\$ScheduledForRemoval",
- "org.jetbrains.annotations.ApiStatus\$AvailableSince",
- "org.jetbrains.annotations.ApiStatus\$NonExtendable",
- "org.jetbrains.annotations.ApiStatus\$OverrideOnly"
- ]
- }
- }
- remapJar.dependsOn("jarFilter")
- publishing {
- publications {
- create("${archivesBaseName}_mavenJava", MavenPublication) {
- afterEvaluate {
- artifact(file("${project.buildDir}/libs/$archivesBaseName-${version}-maven.jar")) {
- builtBy remapMavenJar
- }
- artifact(sourcesJar) {
- builtBy remapSourcesJar
- }
- }
- }
- }
- repositories {
- if (System.getenv("MAVEN_PASS") != null) {
- maven {
- url = "https://deploy.shedaniel.me/"
- credentials {
- username = "shedaniel"
- password = System.getenv("MAVEN_PASS")
- }
- }
- }
- }
- }
- }
- task licenseFormatAll
- subprojects { licenseFormatAll.dependsOn("${path}:licenseFormat") }
- subprojects { rootProject.remapJar.dependsOn("${path}:remapJar") }
- task remapMavenJar(type: RemapJarTask, dependsOn: jar) {
- afterEvaluate {
- input.set(file("${project.buildDir}/libs/${archivesBaseName}-${version}-dev.jar"))
- archiveName = "${archivesBaseName}-${version}-maven.jar"
- addNestedDependencies.set(false)
- }
- }
- dependencies {
- afterEvaluate {
- subprojects.each {
- compile project(path: ":${it.name}", configuration: "dev")
- include project(path: ":${it.name}", configuration: "remapped")
- }
- def listAdded = new ArrayList(Arrays.asList((api_exculde as String).split(',')))
- def eachDep = { dep ->
- for (apiIncludeDepStr in (api_include as String).split(',')) {
- if (apiIncludeDepStr.isEmpty()) continue
- def apiIncludeGroup = apiIncludeDepStr.split(':')[0]
- def apiIncludeDep = apiIncludeDepStr.split(':')[1]
- if (dep.module.id.group == apiIncludeGroup && dep.module.id.name.startsWith(apiIncludeDep)) {
- def version = dep.module.id.version.indexOf('@') >= 0 ? dep.module.id.version.substring(0, dep.module.id.version.indexOf('@')) : dep.module.id.version
- def mavenDep = "${dep.module.id.group}:${dep.module.id.name}:$version"
- if (!(mavenDep in listAdded)) {
- include(mavenDep) {
- transitive = false
- }
- listAdded.add(mavenDep)
- }
- break
- }
- }
- }
- rootProject.configurations.compile.resolvedConfiguration.firstLevelModuleDependencies.each eachDep
- rootProject.configurations.runtimeClasspath.resolvedConfiguration.firstLevelModuleDependencies.each eachDep
- }
- }
- def releaseChangelog = "No changelog"
- /* Thank you modmenu & fablabs */
- task releaseOnCf {
- def df = new SimpleDateFormat("yyyy-MM-dd HH:mm")
- df.setTimeZone(TimeZone.getTimeZone("UTC"))
- def branch
- if (System.env.BRANCH_NAME) {
- branch = System.env.BRANCH_NAME
- branch = branch.substring(branch.lastIndexOf("/") + 1)
- } else {
- branch = "git rev-parse --abbrev-ref HEAD".execute().in.text.trim()
- }
- if (branch == "HEAD") {
- branch = "git rev-parse --short HEAD".execute().in.text.trim()
- }
- def time = df.format(new Date())
- def changes = new StringBuilder()
- changes << "<h2>REI v$project.version for $project.supported_version</h2>Updated at <b>$time</b>.<br><a href=\"https://www.github.com/shedaniel/RoughlyEnoughItems/commits/$branch\">Click here for changelog</a>"
- def proc = "git log --max-count=200 --pretty=format:%s".execute()
- proc.in.eachLine { line ->
- def processedLine = line.toString()
- if (!processedLine.contains("New translations") && !processedLine.contains("Merge") && !processedLine.contains("branch")) {
- changes << "<br>- ${processedLine.capitalize()}"
- }
- }
- proc.waitFor()
- releaseChangelog = changes.toString()
- dependsOn tasks.getByName("curseforge")
- }
- curseforge {
- if (project.hasProperty('danielshe_curse_api_key') || System.getenv('danielshe_curse_api_key') != null) {
- apiKey = project.hasProperty('danielshe_curse_api_key') ? project.property('danielshe_curse_api_key') : System.getenv('danielshe_curse_api_key')
- project {
- id = "310111"
- releaseType = "release"
- changelogType = "html"
- changelog = releaseChangelog
- addGameVersion "1.16-Snapshot"
- addGameVersion "1.16.2"
- addGameVersion "1.16.3"
- addGameVersion "1.16.4"
- addGameVersion "1.16.5"
- addGameVersion "Java 8"
- addGameVersion "Fabric"
- relations {
- requiredDependency "fabric-api"
- embeddedLibrary "cloth-api"
- embeddedLibrary "cloth-config"
- embeddedLibrary "auto-config-updated-api"
- }
- mainArtifact(file("${project.buildDir}/libs/${project.archivesBaseName}-${project.version}.jar")) {
- displayName = "[Fabric $project.supported_version] v$project.version"
- }
- addArtifact(file("${project.buildDir}/libs/${project.archivesBaseName}-${project.version}-sources.jar")) {
- displayName = "[Fabric $project.supported_version] v$project.version Sources"
- }
- afterEvaluate {
- uploadTask.dependsOn("build")
- }
- }
- }
- options {
- forgeGradleIntegration = false
- javaVersionAutoDetect = false
- }
- }
- publishing {
- publications {
- mavenJava(MavenPublication) {
- artifact(file("${project.buildDir}/libs/$archivesBaseName-${version}-maven.jar")) {
- builtBy remapMavenJar
- }
- artifact(sourcesJar) {
- builtBy remapSourcesJar
- }
- pom.withXml {
- def depsNode = asNode().appendNode("dependencies")
- subprojects.each {
- def depNode = depsNode.appendNode("dependency")
- depNode.appendNode("groupId", it.group)
- depNode.appendNode("artifactId", it.name)
- depNode.appendNode("version", it.version)
- depNode.appendNode("scope", "compile")
- }
- }
- }
- }
- repositories {
- if (project.hasProperty('danielshe_pass')) {
- maven {
- url = "http://deploy.modmuss50.me/"
- credentials {
- username = "danielshe"
- password = project.getProperty('danielshe_pass')
- }
- }
- }
- }
- }
- /*
- The following code is licensed under MIT License.
- Copyright (c) 2016 FabricMC
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
- class MojangMappingsDependency implements SelfResolvingDependency {
- private final Project project
- private final LoomGradleExtension extension
- MojangMappingsDependency(Project project, LoomGradleExtension extension) {
- this.project = project
- this.extension = extension
- }
- @Override
- Set<File> resolve() {
- Path mappingsDir = extension.getMappingsProvider().getMappingsDir()
- Path mappingsFile = mappingsDir.resolve(String.format("net.mojang.minecraft-mappings-%s.tiny", getVersion()))
- Path clientMappings = mappingsDir.resolve(String.format("net.mojang.minecraft.mappings-%s-client.map", getVersion()))
- Path serverMappings = mappingsDir.resolve(String.format("net.mojang.minecraft.mappings-%s-server.map", getVersion()))
- if (!Files.exists(mappingsFile) || project.getGradle().getStartParameter().isRefreshDependencies()) {
- MappingSet mappingSet
- try {
- mappingSet = getMappingsSet(clientMappings, serverMappings)
- Writer writer = new StringWriter()
- new TinyWriter(writer, "intermediary", "named").write(mappingSet)
- Files.deleteIfExists(mappingsFile)
- ZipUtil.pack([
- new ByteSource("mappings/mappings.tiny", writer.toString().getBytes(StandardCharsets.UTF_8))
- ] as ZipEntrySource[], mappingsFile.toFile())
- writer.close()
- } catch (IOException e) {
- throw new RuntimeException("Failed to resolve Mojang mappings", e)
- }
- }
- return Collections.singleton(mappingsFile.toFile())
- }
- private MappingSet getMappingsSet(Path clientMappings, Path serverMappings) throws IOException {
- MinecraftVersionInfo versionInfo = extension.getMinecraftProvider().getVersionInfo()
- if (versionInfo.downloads.get("client_mappings") == null) {
- throw new RuntimeException("Failed to find official mojang mappings for " + getVersion())
- }
- String clientMappingsUrl = versionInfo.downloads.get("client_mappings").url
- String serverMappingsUrl = versionInfo.downloads.get("server_mappings").url
- DownloadUtil.downloadIfChanged(new URL(clientMappingsUrl), clientMappings.toFile(), project.getLogger())
- DownloadUtil.downloadIfChanged(new URL(serverMappingsUrl), serverMappings.toFile(), project.getLogger())
- MappingSet mappings = MappingSet.create()
- BufferedReader clientBufferedReader = Files.newBufferedReader(clientMappings, StandardCharsets.UTF_8)
- BufferedReader serverBufferedReader = Files.newBufferedReader(serverMappings, StandardCharsets.UTF_8)
- ProGuardReader proGuardReaderClient = new ProGuardReader(clientBufferedReader)
- ProGuardReader proGuardReaderServer = new ProGuardReader(serverBufferedReader)
- proGuardReaderClient.read(mappings)
- proGuardReaderServer.read(mappings)
- clientBufferedReader.close()
- serverBufferedReader.close()
- proGuardReaderClient.close()
- proGuardReaderServer.close()
- MappingSet officialToNamed = mappings.reverse()
- MappingSet intermediaryToOfficial
- BufferedReader reader = Files.newBufferedReader(extension.getMappingsProvider().getIntermediaryTiny(), StandardCharsets.UTF_8)
- intermediaryToOfficial = new TinyMappingsReader(TinyMappingFactory.loadWithDetection(reader), "intermediary", "official").read()
- reader.close()
- MappingSet intermediaryToMojang = MappingSet.create()
- // Merging. Don't use MappingSet#merge
- iterateClasses(intermediaryToOfficial, { inputMappings ->
- officialToNamed.getClassMapping(inputMappings.getFullDeobfuscatedName())
- .ifPresent({ namedClass ->
- ClassMapping mojangClassMapping = intermediaryToMojang.getOrCreateClassMapping(inputMappings.getFullObfuscatedName())
- .setDeobfuscatedName(namedClass.getFullDeobfuscatedName())
- for (FieldMapping fieldMapping : inputMappings.getFieldMappings()) {
- namedClass.getFieldMapping(fieldMapping.getDeobfuscatedName())
- .ifPresent({ namedField ->
- mojangClassMapping.getOrCreateFieldMapping(fieldMapping.getSignature())
- .setDeobfuscatedName(namedField.getDeobfuscatedName())
- })
- }
- for (MethodMapping methodMapping : inputMappings.getMethodMappings()) {
- namedClass.getMethodMapping(methodMapping.getDeobfuscatedSignature())
- .ifPresent({ namedMethod ->
- mojangClassMapping.getOrCreateMethodMapping(methodMapping.getSignature())
- .setDeobfuscatedName(namedMethod.getDeobfuscatedName())
- })
- }
- })
- })
- return intermediaryToMojang
- }
- @Override
- Set<File> resolve(boolean transitive) {
- return resolve()
- }
- @Override
- TaskDependency getBuildDependencies() {
- return { Collections.emptySet() }
- }
- @Override
- String getGroup() {
- return "net.mojang.minecraft"
- }
- @Override
- String getName() {
- return "mappings"
- }
- @Override
- String getVersion() {
- return extension.getMinecraftProvider().getMinecraftVersion()
- }
- @Override
- boolean contentEquals(Dependency dependency) {
- if (dependency instanceof MojangMappingsDependency) {
- return ((MojangMappingsDependency) dependency).extension.getMinecraftProvider().getMinecraftVersion() == getVersion()
- }
- return false
- }
- @Override
- Dependency copy() {
- return new MojangMappingsDependency(project, extension)
- }
- @Override
- String getReason() {
- return null
- }
- @Override
- void because(String s) {
- }
- private static void iterateClasses(MappingSet mappings, Closure<ClassMapping> consumer) {
- for (TopLevelClassMapping classMapping : mappings.getTopLevelClassMappings()) {
- iterateClass(classMapping, consumer)
- }
- }
- private static void iterateClass(ClassMapping classMapping, Consumer<ClassMapping> consumer) {
- consumer.accept(classMapping)
- for (InnerClassMapping innerClassMapping : classMapping.getInnerClassMappings()) {
- iterateClass(innerClassMapping, consumer)
- }
- }
- private static class TinyWriter extends TextMappingsWriter {
- private final String namespaceFrom
- private final String namespaceTo
- protected TinyWriter(Writer writer, String namespaceFrom, String namespaceTo) {
- super(writer)
- this.namespaceFrom = namespaceFrom
- this.namespaceTo = namespaceTo
- }
- @Override
- void write(MappingSet mappings) {
- writer.println("tiny\t2\t0\t" + namespaceFrom + "\t" + namespaceTo)
- iterateClasses(mappings, { classMapping ->
- writer.println("c\t" + classMapping.getFullObfuscatedName() + "\t" + classMapping.getFullDeobfuscatedName())
- for (FieldMapping fieldMapping : classMapping.getFieldMappings()) {
- fieldMapping.getType().ifPresent({ fieldType ->
- writer.println("\tf\t" + fieldType + "\t" + fieldMapping.getObfuscatedName() + "\t" + fieldMapping.getDeobfuscatedName())
- })
- }
- for (MethodMapping methodMapping : classMapping.getMethodMappings()) {
- writer.println("\tm\t" + methodMapping.getSignature().getDescriptor() + "\t" + methodMapping.getObfuscatedName() + "\t" + methodMapping.getDeobfuscatedName())
- }
- })
- }
- }
- }
|