This commit is contained in:
parent
efff2e71d3
commit
44433be9b7
|
@ -1,8 +1,10 @@
|
||||||
package org.ecorous.esnesnon.gradle
|
package org.ecorous.esnesnon.gradle
|
||||||
|
|
||||||
import net.fabricmc.fernflower.api.IFabricJavadocProvider
|
import net.fabricmc.fernflower.api.IFabricJavadocProvider
|
||||||
|
import org.ecorous.esnesnon.gradle.common.Env
|
||||||
import org.ecorous.esnesnon.gradle.run.AssetDownloader
|
import org.ecorous.esnesnon.gradle.run.AssetDownloader
|
||||||
import org.ecorous.esnesnon.gradle.run.RunConfigGenerator
|
import org.ecorous.esnesnon.gradle.run.RunConfigGenerator
|
||||||
|
import org.ecorous.esnesnon.gradle.run.task.RunGameTask
|
||||||
import org.ecorous.esnesnon.gradle.vineflower.ParchmentJavadocProvider
|
import org.ecorous.esnesnon.gradle.vineflower.ParchmentJavadocProvider
|
||||||
import org.ecorous.esnesnon.nonsense_remapper.provider.ParchmentProvider
|
import org.ecorous.esnesnon.nonsense_remapper.provider.ParchmentProvider
|
||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
|
@ -101,13 +103,17 @@ class NonsenseGradlePlugin : Plugin<Project> {
|
||||||
}
|
}
|
||||||
|
|
||||||
project.task("genRunConfigs").apply {
|
project.task("genRunConfigs").apply {
|
||||||
|
group = "nonsense"
|
||||||
doFirst {
|
doFirst {
|
||||||
group = "nonsense"
|
|
||||||
RunConfigGenerator.generate(project)
|
RunConfigGenerator.generate(project)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
project.tasks.register("runClient", RunGameTask::class.java, Env.CLIENT)
|
||||||
|
project.tasks.register("runServer", RunGameTask::class.java, Env.SERVER)
|
||||||
|
|
||||||
project.task("downloadAssets").apply {
|
project.task("downloadAssets").apply {
|
||||||
|
group = "nonsense"
|
||||||
doFirst {
|
doFirst {
|
||||||
AssetDownloader.download()
|
AssetDownloader.download()
|
||||||
}
|
}
|
||||||
|
@ -139,4 +145,4 @@ class NonsenseGradlePlugin : Plugin<Project> {
|
||||||
lateinit var remappedGameJarPath: Path
|
lateinit var remappedGameJarPath: Path
|
||||||
lateinit var parchmentVersion: String
|
lateinit var parchmentVersion: String
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,126 @@
|
||||||
|
package org.ecorous.esnesnon.gradle.run.task
|
||||||
|
|
||||||
|
import org.ecorous.esnesnon.gradle.NonsenseGradlePlugin
|
||||||
|
import org.ecorous.esnesnon.gradle.VersionChecker
|
||||||
|
import org.ecorous.esnesnon.gradle.common.Env
|
||||||
|
import org.gradle.api.file.ConfigurableFileCollection
|
||||||
|
import org.gradle.api.file.FileCollection
|
||||||
|
import org.gradle.api.plugins.JavaPluginExtension
|
||||||
|
import org.gradle.api.tasks.JavaExec
|
||||||
|
import org.gradle.api.tasks.SourceSet
|
||||||
|
import org.gradle.process.CommandLineArgumentProvider
|
||||||
|
import org.jetbrains.annotations.NonNls
|
||||||
|
import java.io.File
|
||||||
|
import java.nio.file.Files
|
||||||
|
import javax.inject.Inject
|
||||||
|
import kotlin.io.path.*
|
||||||
|
|
||||||
|
|
||||||
|
abstract class RunGameTask @Inject constructor(env: Env) : JavaExec() {
|
||||||
|
private val classpath: ConfigurableFileCollection = project.objects.fileCollection()
|
||||||
|
|
||||||
|
init {
|
||||||
|
group = "nonsense"
|
||||||
|
val assetPath = NonsenseGradlePlugin.nonsenseCacheDir.resolve("assets").absolute()
|
||||||
|
val assetIndexPath = assetPath.resolve("indexes")
|
||||||
|
if (assetIndexPath.notExists()) {
|
||||||
|
assetIndexPath.createDirectories()
|
||||||
|
}
|
||||||
|
val indexId = VersionChecker.downloadAssetIndex(NonsenseGradlePlugin.minecraftVersion, assetIndexPath)
|
||||||
|
val log4jPath = project.rootDir.resolve(".gradle/nonsense-gradle/log4j.xml").toPath().absolute()
|
||||||
|
if (log4jPath.notExists()) {
|
||||||
|
log4jPath.createParentDirectories()
|
||||||
|
this::class.java.getResourceAsStream("/log4j.xml").use { input ->
|
||||||
|
Files.copy(input!!, log4jPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
argumentProviders.add(
|
||||||
|
CommandLineArgumentProvider {
|
||||||
|
listOf(
|
||||||
|
"--assetsDir", assetPath.toString(),
|
||||||
|
"--version", "Nonsense",
|
||||||
|
"--assetIndex", indexId,
|
||||||
|
"--accessToken", "0"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
classpath.from(project.extensions.getByType(JavaPluginExtension::class.java).sourceSets.getByName(
|
||||||
|
SourceSet.MAIN_SOURCE_SET_NAME
|
||||||
|
).runtimeClasspath.filter { it.exists() })
|
||||||
|
|
||||||
|
jvmArguments.addAll(
|
||||||
|
"-Dnonsense.development=true",
|
||||||
|
"-Dnonsense.plugin.minecraft.gameJar=${NonsenseGradlePlugin.remappedGameJarPath}",
|
||||||
|
"-Dlog4j.configurationFile=$log4jPath",
|
||||||
|
writeArgFile()
|
||||||
|
)
|
||||||
|
|
||||||
|
mainClass.set("org.ecorous.esnesnon.nonsense.loader.impl.launch.${env.id}.Nonsense${env.pascalName}")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun writeArgFile(): String {
|
||||||
|
val file = Files.createTempFile("nonsense-classpath", ".args")
|
||||||
|
|
||||||
|
val content = "-classpath " + classpath.files.stream()
|
||||||
|
.map { it.absolutePath }
|
||||||
|
.map { quoteArg(it) }.toList()
|
||||||
|
.joinToString(File.pathSeparator)
|
||||||
|
file.writeText(content)
|
||||||
|
return "@" + file.toAbsolutePath()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun quoteArg(arg: String): String {
|
||||||
|
val specials = " #'\"\n\r\t\u000c"
|
||||||
|
var contains = false
|
||||||
|
specials.toCharArray().forEach {
|
||||||
|
if (arg.toCharArray().contains(it)) {
|
||||||
|
contains = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!contains) {
|
||||||
|
return arg
|
||||||
|
}
|
||||||
|
|
||||||
|
val sb: @NonNls StringBuilder = StringBuilder(arg.length * 2)
|
||||||
|
for (element in arg) {
|
||||||
|
when (element) {
|
||||||
|
' ', '#', '\'' -> sb.append('"').append(element).append('"')
|
||||||
|
'"' -> sb.append("\"\\\"\"")
|
||||||
|
'\n' -> sb.append("\"\\n\"")
|
||||||
|
'\r' -> sb.append("\"\\r\"")
|
||||||
|
'\t' -> sb.append("\"\\t\"")
|
||||||
|
'\u000c' -> sb.append("\"\\f\"")
|
||||||
|
else -> sb.append(element)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sb.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getClasspath(): FileCollection {
|
||||||
|
return classpath
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun exec() {
|
||||||
|
super.setClasspath(project.files())
|
||||||
|
workingDir = project.projectDir.resolve("run")
|
||||||
|
super.exec()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setWorkingDir(dir: File) {
|
||||||
|
if (!dir.exists()) {
|
||||||
|
dir.mkdirs()
|
||||||
|
}
|
||||||
|
super.setWorkingDir(dir)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun classpath(vararg paths: Any?): JavaExec {
|
||||||
|
this.classpath.from(paths)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setClasspath(classpath: FileCollection): JavaExec {
|
||||||
|
this.classpath.setFrom(classpath)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue