From d174f06d0e9567c20648510fb65a93055cc8f8c7 Mon Sep 17 00:00:00 2001 From: zaaarf Date: Wed, 1 Feb 2023 20:53:23 +0100 Subject: [PATCH] feat: ported copyJar from fantabos.co client also removed useless comments from the forge example --- build.gradle | 151 ++++++++++++++++++-------------------- gradle.properties.example | 20 +++++ 2 files changed, 90 insertions(+), 81 deletions(-) create mode 100644 gradle.properties.example diff --git a/build.gradle b/build.gradle index 076ad3f..8474081 100644 --- a/build.gradle +++ b/build.gradle @@ -9,37 +9,42 @@ buildscript { } } apply plugin: 'net.minecraftforge.gradle' -// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. apply plugin: 'eclipse' apply plugin: 'maven-publish' apply plugin: "com.palantir.git-version" version gitVersion() -group = 'co.fantabos.boscovicino' // http://maven.apache.org/guides/mini/guide-naming-conventions.html +group = 'co.fantabos.bscv' archivesBaseName = 'boscovicino' +project.ext { + minecraftVersion = getProjectProperty("bscv.mc.version", "1.16.5") + forgeVersion = getProjectProperty("bscv.forge.version", "1.16.5-36.2.39") + copyJarDo = getProjectProperty("copyjar.do", "false") + copyJarUseVersionSubDir = getProjectProperty("copyjar.useVersionSubDir", "false") + copyJarKeepBackups = getProjectProperty("copyjar.keepBackups", "true") + copyJarTargetGameDir = getProjectProperty("copyjar.targetGameDir", getOsGameDir()) +} + +def getProjectProperty(String property, String fallback) { //allows for custom gradle.properties while retaining default fallback values + return (project.hasProperty(property)) ? project.property(property) : fallback +} + +def getOsGameDir() { + if (org.gradle.internal.os.OperatingSystem.current().isWindows()) + return System.getenv("APPDATA") + "/.minecraft" + else if (org.gradle.internal.os.OperatingSystem.current().isMacOsX()) + return System.properties["user.home"] + "/Library/Application Support/minecraft" + else + return System.properties["user.home"] + "/.minecraft" +} + java.toolchain.languageVersion = JavaLanguageVersion.of(8) // Mojang ships Java 8 to end users, so your mod should target Java 8. println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) -minecraft { - // The mappings can be changed at any time, and must be in the following format. - // Channel: Version: - // snapshot YYYYMMDD Snapshot are built nightly. - // stable # Stables are built at the discretion of the MCP team. - // official MCVersion Official field/method names from Mojang mapping files - // - // You must be aware of the Mojang license when using the 'official' mappings. - // See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md - // - // Use non-default mappings at your own risk. they may not always work. - // Simply re-run your setup task after changing the mappings to update your workspace. - mappings channel: 'official', version: '1.16.5' - // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. - - // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') - // Default run configurations. - // These can be tweaked, removed, or duplicated as needed. +minecraft { + mappings channel: 'official', version: "${project.ext.minecraftVersion}" runs { client { workingDirectory project.file('run') @@ -50,32 +55,6 @@ minecraft { // "REGISTRIES": For firing of registry events. // "REGISTRYDUMP": For getting the contents of all registries. property 'forge.logging.markers', 'REGISTRIES' - - // Recommended logging level for the console - // You can set various levels here. - // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels - property 'forge.logging.console.level', 'debug' - - mods { - bscv { - source sourceSets.main - } - } - } - - server { - workingDirectory project.file('run') - - // Recommended logging data for a userdev environment - // The markers can be changed as needed. - // "SCAN": For mods scan. - // "REGISTRIES": For firing of registry events. - // "REGISTRYDUMP": For getting the contents of all registries. - property 'forge.logging.markers', 'REGISTRIES' - - // Recommended logging level for the console - // You can set various levels here. - // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels property 'forge.logging.console.level', 'debug' mods { @@ -88,16 +67,10 @@ minecraft { data { workingDirectory project.file('run') - // Recommended logging data for a userdev environment - // The markers can be changed as needed. // "SCAN": For mods scan. // "REGISTRIES": For firing of registry events. // "REGISTRYDUMP": For getting the contents of all registries. property 'forge.logging.markers', 'REGISTRIES' - - // Recommended logging level for the console - // You can set various levels here. - // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels property 'forge.logging.console.level', 'debug' // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. @@ -116,32 +89,9 @@ minecraft { sourceSets.main.resources { srcDir 'src/generated/resources' } dependencies { - // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed - // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied. - // The userdev artifact is a special name and will get all sorts of transformations applied to it. - minecraft 'net.minecraftforge:forge:1.16.5-36.2.39' - - // You may put jars on which you depend on in ./libs or you may define them like so.. - // compile "some.group:artifact:version:classifier" - // compile "some.group:artifact:version" - - // Real examples - // compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env - // compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env - - // The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime. - // provided 'com.mod-buildcraft:buildcraft:6.0.8:dev' - - // These dependencies get remapped to your current MCP mappings - // deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev' - - // For more info... - // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html - // http://www.gradle.org/docs/current/userguide/dependency_management.html - + minecraft "net.minecraftforge:forge:${project.ext.forgeVersion}" } -// Example for how to get properties into the manifest for reading by the runtime.. jar { archiveName = "${jar.baseName}.${jar.extension}" manifest { @@ -157,11 +107,50 @@ jar { } } -// Example configuration to allow publishing using the maven-publish task -// This is the preferred method to reobfuscate your jar file -jar.finalizedBy('reobfJar') -// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing -//publish.dependsOn('reobfJar') +jar.finalizedBy('reobfJar') + +tasks.register('copyJar', Copy) { + if(!project.ext.copyJarDo.toBoolean()) return + def modDir = "${project.ext.copyJarTargetGameDir}/mods/" + + //check if the per-version subdirectory is disabled + if(project.ext.copyJarUseVersionSubDir.toBoolean()) + modDir = modDir + project.ext.minecraftVersion + + // find previous jar (if it exists) + final previousJars = project.fileTree(dir: modDir).matching { + include project.archivesBaseName + '*' + }.files + + //change filename + if (previousJars) { + if(copyJarKeepBackups.toBoolean()) { + //create .backups folder + final backupDir = modDir + '/.backups/' + project.file(backupDir).mkdirs() + + for (File previousJar : previousJars) { + final n = modDir + '/.backups/' + previousJar.getName() + '.bk' + def f = project.file(n) + def i = 1 + while (f.exists()) { + f = project.file(n + '_' + i) + i++ + } + previousJar.renameTo(f) + } + } else + previousJars + .stream() + .filter(f -> f.toString().toLowerCase().endsWith("jar")) //dont kill old backups but smite existing jars + .forEach(f -> f.delete()) + } + + //copy jar from build/libs to the forge mod folder + //from shadowJar //we want the über version, not the small one + from reobfJar + into modDir +} publishing { publications { diff --git a/gradle.properties.example b/gradle.properties.example new file mode 100644 index 0000000..872dd62 --- /dev/null +++ b/gradle.properties.example @@ -0,0 +1,20 @@ +## The following is an example gradle.properties file. +# You can use the gradle.properties file to customize several parts of the building process. +# You don't necessarily have to use all the keys. You can delete them, there are fallback values. +# Still, beware that misuse of the properties file may result in build failure. +# You shouldn't touch the properties starting with "bscv" unless you really know what you are doing. + +#The Minecraft version the client is for. Changing this may break things, take care. +bscv.mc.version=1.16.5 +#The Forge version the client is built with. Minor version changes SHOULD work fine. +bscv.forge.version=1.16.5-36.2.39 +#Tells build.gradle to automatically copy the resulting artifact to your mods folder. +copyjar.do=false +#Whether you want tha artifact to be stored in a version-specific subfolder (e.g. mods/1.12.2/). +copyjar.useVersionSubDir=false +#Saves old artifacts found in the mods folder in a .backup subfolder. +copyjar.keepBackups=true +#Tells the build.gradle where to find the game folder to copy the JAR in. +#Only use this if you want to use the auto-copy feature with third party launchers such as PolyMC and MultiMC. +#Note that, regardless of your OS, you should use "/" as folder separator. +copyjar.targetGameDir=C:/Program Files/MultiMC/instances/BoSCoVicino/.minecraft