yarn/build.gradle

194 lines
5.7 KiB
Groovy
Raw Normal View History

2016-08-17 15:23:28 -04:00
buildscript {
repositories {
jcenter()
maven {
2017-11-22 08:56:07 -05:00
name "Modmuss50 Repository"
url 'https://maven.modmuss50.me'
}
}
dependencies {
2017-04-05 07:37:14 -04:00
classpath "net.fabricmc:weave:+"
classpath "commons-io:commons-io:1.4"
classpath "com.google.guava:guava:19.0"
}
2016-08-17 15:23:28 -04:00
}
2018-10-26 06:51:01 -04:00
def minecraft_version = "18w43c"
2016-09-09 08:47:32 -04:00
def pomfVersion = "${minecraft_version}"
def ENV = System.getenv()
if (ENV.BUILD_NUMBER) {
pomfVersion = pomfVersion + "." + "${System.getenv().BUILD_NUMBER}"
2016-09-09 08:47:32 -04:00
}
2016-08-17 15:23:28 -04:00
import groovy.json.JsonSlurper
import org.apache.commons.io.FileUtils
import com.google.common.hash.HashCode
import com.google.common.hash.Hashing
import com.google.common.io.Files
2016-10-02 11:46:04 -04:00
import net.fabricmc.weave.merge.JarMerger
import net.fabricmc.weave.CommandTinyify
import net.fabricmc.weave.CommandFindMappingErrors
2016-08-17 15:23:28 -04:00
import groovy.util.XmlSlurper
2016-09-21 08:52:54 -04:00
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
import java.io.File;
2016-08-17 15:23:28 -04:00
boolean validateChecksum(File file, String checksum) {
if (file != null) {
def hash = Files.hash(file, Hashing.sha1())
def builder = new StringBuilder()
hash.asBytes().each {
builder.append(Integer.toString((it & 0xFF) + 0x100, 16).substring(1))
}
return builder.toString().equals(checksum)
}
return false
}
task download << {
def cacheFiles = new File(".gradle/minecraft")
if (!cacheFiles.exists()) cacheFiles.mkdirs()
def manifestFile = new File(cacheFiles, "version_manifest.json")
logger.lifecycle(":downloading minecraft json")
FileUtils.copyURLToFile(new URL("https://launchermeta.mojang.com/mc/game/version_manifest.json"), manifestFile)
def manifest = new JsonSlurper().parseText(FileUtils.readFileToString(manifestFile))
def manifestVersion = manifest.versions.stream().filter({ it.id.equals(minecraft_version) }).findFirst()
if (manifestVersion.isPresent()) {
def versionFile = new File(cacheFiles, "${minecraft_version}.json")
FileUtils.copyURLToFile(new URL(manifestVersion.get().url), versionFile)
def version = new JsonSlurper().parseText(FileUtils.readFileToString(versionFile))
def clientJar = new File(cacheFiles, "${minecraft_version}-client.jar")
def serverJar = new File(cacheFiles, "${minecraft_version}-server.jar")
if (!clientJar.exists() || !validateChecksum(clientJar, version.downloads.client.sha1)) {
logger.lifecycle(":downloading minecraft client")
FileUtils.copyURLToFile(new URL(version.downloads.client.url), clientJar)
}
if (!serverJar.exists() || !validateChecksum(serverJar, version.downloads.server.sha1)) {
logger.lifecycle(":downloading minecraft server")
FileUtils.copyURLToFile(new URL(version.downloads.server.url), serverJar)
}
} else {
throw new RuntimeException("No version data for Minecraft version ${minecraft_version}")
}
}
task mergeJars << {
def mergedFile = new File("${minecraft_version}-merged.jar")
if (!mergedFile.exists()) {
def cacheFiles = new File(".gradle/minecraft")
def client = new FileInputStream(new File(cacheFiles, "${minecraft_version}-client.jar"))
def server = new FileInputStream(new File(cacheFiles, "${minecraft_version}-server.jar"))
def merged = new FileOutputStream(mergedFile)
def jarMerger = new JarMerger(client, server, merged)
jarMerger.merge()
jarMerger.close()
client.close()
server.close()
merged.close()
}
}
tasks.mergeJars.dependsOn "download"
task setupPomf << {
2016-08-17 15:23:28 -04:00
}
tasks.setupPomf.dependsOn "mergeJars"
task pomf << {
def cacheFiles = new File(".gradle/enigma")
if (!cacheFiles.exists()) cacheFiles.mkdirs()
def mavenMetadata = new File(cacheFiles, "maven-metadata.xml")
logger.lifecycle(":downloading enigma metadata")
2018-10-22 14:41:43 -04:00
FileUtils.copyURLToFile(new URL("http://maven.modmuss50.me/cuchaz/enigma/maven-metadata.xml"), mavenMetadata)
2016-08-17 15:23:28 -04:00
def metadata = new XmlSlurper().parseText(FileUtils.readFileToString(mavenMetadata))
def enigmaVersion = metadata.versioning.release
def enigma = new File(cacheFiles, "${enigmaVersion}.jar")
logger.lifecycle(":downloading enigma")
2018-10-22 14:41:43 -04:00
FileUtils.copyURLToFile(new URL("http://maven.modmuss50.me/cuchaz/enigma/${enigmaVersion}/enigma-${enigmaVersion}-all.jar"), enigma)
2016-08-17 15:23:28 -04:00
2018-10-26 14:57:13 -04:00
logger.lifecycle(":launching enigma ${enigmaVersion}")
2016-08-17 15:23:28 -04:00
ant.java(jar: enigma.getAbsolutePath(), fork: true, spawn: true) {
arg(value: new File("${minecraft_version}-merged.jar").getAbsolutePath())
arg(value: new File("mappings/").getAbsolutePath())
}
}
2016-09-08 18:42:45 -04:00
tasks.pomf.dependsOn "setupPomf"
task build(type: Zip) {
from "mappings/"
include "**/*"
2016-09-09 08:47:32 -04:00
archiveName "pomf-enigma-${pomfVersion}.zip"
2016-09-08 18:42:45 -04:00
destinationDir(file("build/libs"))
2016-09-09 08:47:32 -04:00
}
2016-09-21 08:52:54 -04:00
task checkMappings << {
logger.lifecycle(":checking mappings")
String[] args = [
new File("${minecraft_version}-merged.jar").getAbsolutePath(),
new File("mappings").getAbsolutePath()
]
new CommandFindMappingErrors().run(args)
}
2016-09-21 08:52:54 -04:00
task buildTiny << {
logger.lifecycle(":generating tiny mappings")
String[] args = [
new File("${minecraft_version}-merged.jar").getAbsolutePath(),
new File("mappings").getAbsolutePath(),
"mappings.tiny",
2016-10-02 13:26:07 -04:00
"mojang",
"pomf"
]
new CommandTinyify().run(args)
2016-09-21 08:52:54 -04:00
logger.lifecycle(":compressing tiny mappings")
2016-09-21 08:55:01 -04:00
def libs = new File("build/libs/")
if (!libs.exists()) libs.mkdirs()
2016-09-21 08:52:54 -04:00
def buffer = new byte[1024]
2016-09-21 08:55:01 -04:00
def outputFile = new File(libs, "pomf-tiny-${pomfVersion}.gz")
2016-09-21 08:52:54 -04:00
def fileOutputStream = new FileOutputStream(outputFile)
def outputStream = new GZIPOutputStream(fileOutputStream)
2016-09-21 08:52:54 -04:00
def inputFile = new File("mappings.tiny")
def fileInputStream = new FileInputStream(inputFile)
2016-09-21 08:52:54 -04:00
def length
while ((length = fileInputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length)
}
2016-09-21 08:52:54 -04:00
fileInputStream.close()
outputStream.finish()
outputStream.close()
2016-09-21 08:52:54 -04:00
inputFile.delete()
}
tasks.buildTiny.dependsOn "mergeJars"
tasks.build.dependsOn "buildTiny"