Skip to content
 
 

Repository files navigation

GTNH Gradle plugin

This plugin is the container for most of our shared buildscript logic for all GTNH mods and some other 1.7.10 mods. The original buildscript grew to hundreds of lines of Groovy code, using this plugin we can use regular Java classes to compartmentalize that logic and make it easier to extend and update.

See the javadoc - the entrypoint is the plugin extension class.

Navigating the source code

The entrypoint for the plugin is in the GTNHGradlePlugin class. The main plugin class applies the plugin dependencies of GTNHGradle, including RFG, Maven publishing and the Download task, and then registers the gtnhGradle extension object which can be used to activate individual modules of this plugin.

test tests make sure that applying the plugin works correctly in a simple Gradle setup. Bulk of the testing is done in functionalTest which uses Gradle TestKit to test entire workflows in sandboxed Gradle environments.

Running against the complete modpack

Build and run the current mod in a full GTNH client with:

./gradlew runFullPack

Or start a full dedicated server with:

./gradlew runFullPackServer

runFullPack runs prepareFullPackClient automatically. Downloaded files are shared between projects under <GRADLE_USER_HOME>/caches/gtnh/fullpack. runFullPackServer likewise runs prepareFullPackServer; it does not accept Minecraft's EULA for you. Set fullPack.cleanServerRuntime to true for automated runs that need a fresh server directory. Normal runs keep the EULA, world, and server configuration.

Using this fork in a mod repository

Clone this repository, then run:

.\install-local-fork.ps1

This makes the fork available to every local project using GTNHGradle without changing their files. Run the installer again if you move the clone. Delete the installed file shown by the command to disable it.

To test a local dependency, publish it to Maven Local:

./gradlew publishToMavenLocal

Then use that version in the project and enable Maven Local overrides:

repositories {
    mavenLocal()
}

dependencies {
    api("com.github.GTNewHorizons:OtherMod:1.2.3-local:dev")
}

fullPack {
    preferMavenLocal.set(true)
}

Updating from the previous buildscript

  1. Make sure you're on the latest master commit and you pulled the recent repository changes ;-)
  2. Copy over the gradle/ directory and build.gradle, gradlew and gradlew.bat files from ExampleMod1.7.10 to the mod folder.
  3. Update settings.gradle pluginManagement{} and plugins{} block to the following: (keep the old blowdryerSetup as-is)
     pluginManagement {
         repositories {
             maven {
                 // RetroFuturaGradle
                 name "GTNH Maven"
                 url "https://nexus.gtnewhorizons.com/repository/public/"
                 mavenContent {
                     includeGroup("com.gtnewhorizons")
                     includeGroupByRegex("com\\.gtnewhorizons\\..+")
                 }
             }
             gradlePluginPortal()
             mavenCentral()
             mavenLocal()
         }
     }
    
     plugins {
         id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.7'
     }
  4. Run the automated migration while temporarily ignoring the new blowdryer setup with ./gradlew updateBuildscript -Pgtnh.settings.blowdryerTag=MIGRATION-MAGIC
  5. Check the updated files for any obvious mistakes
  6. Commit

Disabling modules

GTNHGradle uses some hidden properties to disable full modules of the plugin. Not every combination of toggles is supported, but here are a couple useful ones for non-GTNH projects:

# Disable git-based version detection, make sure to set project.version to a sensible value yourself
gtnh.modules.gitVersion = false

# Disable all GTNH code style checks (like Spotless autoformatting, CheckStyle rules, and any future additions)
gtnh.modules.codeStyle = false

# Disables lwjgl3ify-based utilities for working with and running with modern Java versions
gtnh.modules.modernJava = false

Run ./gradlew propertiesHelp to list all the available properties along with their descriptions.

About

This plugin is the container for most of our shared buildscript logic for all GTNH mods and some other 1.7.10 mods. The original buildscript grew to hundreds of lines of Groovy code, using this plugin we can use regular Java classes to compartmentalize that logic and make it easier to extend and update

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages