// This sets us up for building a forge project - you need all of these buildscript { repositories { mavenCentral() maven { name = "forge" url = "http://files.minecraftforge.net/maven" } maven { name = "sonatype" url = "https://oss.sonatype.org/content/repositories/snapshots/" } } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' } } // Apply the forge plugin - this adds all the magic for automatically obfuscating, deobfuscating etc apply plugin: 'forge' // This is a simple flatdir repository for "uploadArchives" when you don't have a remote repo to target repositories { flatDir { name "fileRepo" dirs "repo" } } // IronChest uses git tagging to mark major versions. This sets up the project version to that version data def versionInfo = getGitVersion() version = "${versionInfo['IronChest.version']}" // This is our group. I'm cpw.mods group= "cpw.mods" // http://maven.apache.org/guides/mini/guide-naming-conventions.html // This is our actual project within the group. Note: FML has "fml" here. But this is ironchest. archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { version = "1.8-11.14.0.1251-1.8" } // This wrangles the resources for the jar files- stuff like textures and languages processResources { // we're omitting the .xcf files - they're development only exclude '**/*.xcf' // we only want to do search/replace stuff in mcmod.info, nothing else from(sourceSets.main.resources.srcDirs) { include 'mcmod.info' // replace version and mcversion expand 'version':project.version, 'mcversion':project.minecraft.version } // copy everything else, thats not the mcmod.info from(sourceSets.main.resources.srcDirs) { exclude 'mcmod.info' } // generate version.properties file from the git version data earlier doLast { def propsFile = new File(destinationDir, 'version.properties') def properties = new Properties() properties.putAll(versionInfo) properties['IronChest.build.mcversion'] = project.minecraft.version properties.store(propsFile.newWriter(), null) } } // this sets our output jar to have a 'tag' of 'universal' on it // It also adds the minecraft version in a custom version name // The result is files named ---universal.jar jar { classifier = 'universal' version = "${project.minecraft.version}-${project.version}" } println "FISHBUM ${jar.version}" // Add in a source jar for people, should they desire to download such a thing task sourceJar(type: Jar) { from sourceSets.main.allSource classifier = 'src' version = "${project.minecraft.version}-${project.version}" } // Add in an mcp named jar, for those who wish to run in a development environment (assuming mcp naming matches) task deobfJar(type: Jar) { from sourceSets.main.output classifier = 'deobf' version = "${project.minecraft.version}-${project.version}" } // Tell the artifact system about our extra jars artifacts { archives sourceJar, deobfJar } // Configure an upload task. this is setup for uploading to files.minecraftforge.net. There are other examples around uploadArchives { dependsOn 'reobf' repositories { if (project.hasProperty("filesmaven")) { logger.info('Publishing to files server') mavenDeployer { configuration = configurations.deployJars repository(url: project.filesmaven.url) { authentication(userName: project.filesmaven.username, privateKey: project.filesmaven.key) } // This is just the pom data for the maven repo pom { groupId = project.group // Force the maven upload to use the - syntax preferred at files version = "${project.minecraft.version}-${project.version}" artifactId = project.archivesBaseName project { name project.archivesBaseName packaging 'jar' description 'IronChest' url 'https://github.com/cpw/IronChest' scm { url 'https://github.com/progwml6/IronChest' connection 'scm:git:git://github.com/progwml6/IronChest.git' developerConnection 'scm:git:git@github.com:progwml6/IronChest.git' } issueManagement { system 'github' url 'https://github.com/progwml6/IronChest/issues' } licenses { license { name 'GNU Public License (GPL), Version 3.0' url 'http://www.gnu.org/licenses/gpl-3.0.txt' distribution 'repo' } } developers { developer { id 'cpw' name 'cpw' roles { role 'developer' } } } } } } } else { logger.info('Publishing to repo folder') mavenDeployer { pom.version = "${project.minecraft.version}-${project.version}" repository(url: 'file://localhost/' + project.file('repo').getAbsolutePath()) } } } } // This is a special task for pulling the version information from git and the environment (for BUILD_NUMBER) def getGitVersion() { def out = [:] // call git command. def outStream = new ByteArrayOutputStream() def result = exec { executable = 'git' args = [ 'describe', '--long', "--match=[^(jenkins)]*"] standardOutput = outStream } def fullVersion = outStream.toString().trim() def matcher = fullVersion =~ /(\d+).(\d+)-(\d+)-(.*)/ def maj = matcher[0][1] def min = matcher[0][2] def rev = matcher[0][3] def bn = System.getenv("BUILD_NUMBER") ?: "1" out['IronChest.build.major.number'] = maj.toString() out['IronChest.build.minor.number'] = min.toString() out['IronChest.build.revision.number'] = rev.toString() out['IronChest.build.githash'] = matcher[0][4].toString() out['IronChest.build.number' ] = bn.toString() out['IronChest.version' ] = "${maj}.${min}.${rev}.${bn}".toString() return out }