Migrate build-logic to filament (#2303)

* Migrate build-logic to filament

* Fix

* Cleanup
This commit is contained in:
modmuss50 2021-04-09 20:05:41 +01:00 committed by GitHub
parent f42f7bb2ed
commit 6304e347f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 17 additions and 105 deletions

View File

@ -10,6 +10,8 @@ To use yarn-deobfuscated Minecraft for Minecraft modding or as a dependency in a
To obtain a deobfuscated Minecraft jar, [`./gradlew mapNamedJar`](#mapNamedJar) will generate a jar named like `<minecraft version>-named.jar`, which can be sent to a decompiler for deobfuscated code. To obtain a deobfuscated Minecraft jar, [`./gradlew mapNamedJar`](#mapNamedJar) will generate a jar named like `<minecraft version>-named.jar`, which can be sent to a decompiler for deobfuscated code.
Please note to run the yarn build script **Java 11** or higher is required!
## Contributing ## Contributing
Please remember that copying and pasting mappings from alternate projects under more restrictive licenses (such as MCP, Spigot's or Mojang's obfuscation maps) Please remember that copying and pasting mappings from alternate projects under more restrictive licenses (such as MCP, Spigot's or Mojang's obfuscation maps)

View File

@ -1,15 +0,0 @@
plugins {
id 'groovy-gradle-plugin'
}
repositories {
maven {
name "Fabric Repository"
url 'https://maven.fabricmc.net'
}
}
dependencies {
api "org.ow2.asm:asm:9.1"
api "org.ow2.asm:asm-tree:9.1"
}

View File

@ -1 +0,0 @@
rootProject.name = 'build-logic'

View File

@ -1,3 +0,0 @@
import net.fabricmc.yarn.buildlogic.task.*
task generatePackageInfoMappings(type: GeneratePackageInfoMappingsTask)

View File

@ -1,80 +0,0 @@
package net.fabricmc.yarn.buildlogic.task
import groovy.transform.CompileStatic
import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.objectweb.asm.ClassReader
import org.objectweb.asm.Opcodes
import org.objectweb.asm.tree.ClassNode
import java.util.zip.ZipFile
@CompileStatic
class GeneratePackageInfoMappingsTask extends DefaultTask {
@InputFile
final RegularFileProperty inputJar = project.objects.fileProperty()
@OutputDirectory
final Property<String> packageName = project.objects.property(String.class)
@OutputDirectory
final DirectoryProperty outputDir = project.objects.directoryProperty()
@TaskAction
def run() {
project.logger.lifecycle("Scanning ${inputJar.get().asFile} for package-info classes")
outputDir.get().asFile.deleteDir()
new ZipFile(inputJar.get().asFile).withCloseable {zipFile ->
zipFile.entries().iterator().forEachRemaining({ entry ->
if (entry.name.endsWith(".class")) {
zipFile.getInputStream(entry).withCloseable {is ->
processEntry(entry.name, is)
}
}
})
}
}
private void processEntry(String name, InputStream inputStream) {
name = name.replace(".class", "")
if (name.contains("\$")) {
// Dont care about inner classes
return
}
ClassReader classReader = new ClassReader(inputStream)
ClassNode classNode = new ClassNode()
classReader.accept(classNode, 0)
if (classNode.access != (Opcodes.ACC_ABSTRACT | Opcodes.ACC_SYNTHETIC | Opcodes.ACC_INTERFACE )) {
// We only care about abstract synthetic interfaces, hopefully this is specific enough
return
}
if (classNode.methods.size() > 0 || classNode.fields.size() > 0 || classNode.interfaces.size() > 0) {
// Nope cannot be a package-info
return
}
generateMapping(name)
}
private void generateMapping(String name) {
String inputName = name.substring(name.lastIndexOf("/") + 1)
String className = "PackageInfo" + name.substring(name.lastIndexOf("_") + 1)
String fullName = packageName.get() + className;
File mappingsFile = new File(outputDir.get().asFile, "${className}.mapping")
mappingsFile.parentFile.mkdirs()
mappingsFile.text = """\
CLASS net/minecraft/$inputName $fullName
""".stripIndent()
}
}

View File

@ -23,7 +23,7 @@ plugins {
id 'maven-publish' id 'maven-publish'
id 'java' // for jd gen id 'java' // for jd gen
id 'org.cadixdev.licenser' version '0.5.1' id 'org.cadixdev.licenser' version '0.5.1'
id 'build-logic' id 'net.fabricmc.filament' version '0.1.0'
} }
def minecraft_version = "21w14a" def minecraft_version = "21w14a"

View File

@ -1,8 +1,17 @@
// This check is done here before any plugins that may require java 11 are able to load. pluginManagement {
if (!JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_11)) { repositories {
throw new UnsupportedOperationException("Yarn's buildscript requires Java 11 or higher.") maven {
name = 'Fabric'
url = 'https://maven.fabricmc.net/'
}
gradlePluginPortal()
mavenLocal()
}
} }
rootProject.name = "yarn" // This check is done here before any plugins that may require java 11 are able to load.
if (!JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_11)) {
throw new UnsupportedOperationException("Yarn's buildscript requires Java 11 or higher.")
}
includeBuild 'build-logic' rootProject.name = "yarn"