summaryrefslogtreecommitdiff
path: root/build.gradle
diff options
context:
space:
mode:
authorOsCoder <oscoder@lczimmermann.eu>2026-09-16 15:00:56 +0200
committerOsCoder <oscoder@lczimmermann.eu>2026-09-16 15:00:56 +0200
commitea71da9ccaa29adbaf1d2aff0196df898a271e45 (patch)
tree5b86201be9b281bc66bf1daa809b458922c3d3f2 /build.gradle
downloadtutorialmod-ea71da9ccaa29adbaf1d2aff0196df898a271e45.tar.xz
tutorialmod-ea71da9ccaa29adbaf1d2aff0196df898a271e45.zip
Initial Commit
Diffstat (limited to 'build.gradle')
-rw-r--r--build.gradle184
1 files changed, 184 insertions, 0 deletions
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..0d032ed
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,184 @@
+plugins {
+ id 'java-library'
+ id 'maven-publish'
+ id 'net.neoforged.moddev' version '2.0.147'
+ id 'idea'
+}
+
+tasks.named('wrapper', Wrapper).configure {
+ // Define wrapper values here so as to not have to always do so when updating gradlew.properties.
+ // Switching this to Wrapper.DistributionType.ALL will download the full gradle sources that comes with
+ // documentation attached on cursor hover of gradle classes and methods. However, this comes with increased
+ // file size for Gradle. If you do switch this to ALL, run the Gradle wrapper task twice afterwards.
+ // (Verify by checking gradle/wrapper/gradle-wrapper.properties to see if distributionUrl now points to `-all`)
+ distributionType = Wrapper.DistributionType.BIN
+}
+
+version = mod_version
+group = mod_group_id
+
+sourceSets.main.resources {
+ // Include resources generated by data generators.
+ srcDir('src/generated/resources')
+
+ // Exclude common development only resources from finalized outputs
+ exclude("**/*.bbmodel") // BlockBench project files
+ exclude("src/generated/**/.cache") // datagen cache files
+}
+
+repositories {
+ // Add here additional repositories if required by some of the dependencies below.
+}
+
+base {
+ archivesName = mod_id
+}
+
+// Mojang ships Java 25 to end users in 26.1.2, so mods should target Java 25.
+java.toolchain.languageVersion = JavaLanguageVersion.of(25)
+
+neoForge {
+ // Specify the version of NeoForge to use.
+ version = project.neo_version
+
+ // This line is optional. Access Transformers are automatically detected
+ // accessTransformers = project.files('src/main/resources/META-INF/accesstransformer.cfg')
+
+ // Default run configurations.
+ // These can be tweaked, removed, or duplicated as needed.
+ runs {
+ client {
+ client()
+ // Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
+ systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
+ }
+
+ server {
+ server()
+ programArgument '--nogui'
+ systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
+ }
+
+ // This run config launches GameTestServer and runs all registered gametests, then exits.
+ // By default, the server will crash when no gametests are provided.
+ // The gametest system is also enabled by default for other run configs under the /test command.
+ gameTestServer {
+ type = "gameTestServer"
+ systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
+ }
+
+ data {
+ clientData()
+ // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it
+ // gameDirectory = project.file('run-data')
+
+ // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
+ programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
+ }
+
+ // applies to all the run configs above
+ configureEach {
+ // Recommended logging data for a userdev environment
+ // The markers can be added/remove as needed separated by commas.
+ // "SCAN": For mods scan.
+ // "REGISTRIES": For firing of registry events.
+ // "REGISTRYDUMP": For getting the contents of all registries.
+ systemProperty '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
+ logLevel = org.slf4j.event.Level.DEBUG
+ }
+ }
+
+ mods {
+ // define mod <-> source bindings
+ // these are used to tell the game which sources are for which mod
+ // multi mod projects should define one per mod
+ "${mod_id}" {
+ sourceSet(sourceSets.main)
+ }
+ }
+}
+
+// Sets up a dependency configuration called 'localRuntime'.
+// This configuration should be used instead of 'runtimeOnly' to declare
+// a dependency that will be present for runtime testing but that is
+// "optional", meaning it will not be pulled by dependents of this mod.
+configurations {
+ runtimeClasspath.extendsFrom localRuntime
+}
+
+dependencies {
+ // Example optional mod dependency with JEI
+ // The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
+ // compileOnly "mezz.jei:jei-${mc_version}-common-api:${jei_version}"
+ // compileOnly "mezz.jei:jei-${mc_version}-neoforge-api:${jei_version}"
+ // We add the full version to localRuntime, not runtimeOnly, so that we do not publish a dependency on it
+ // localRuntime "mezz.jei:jei-${mc_version}-neoforge:${jei_version}"
+
+ // Example mod dependency using a mod jar from ./libs with a flat dir repository
+ // This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
+ // The group id is ignored when searching -- in this case, it is "blank"
+ // implementation "blank:coolmod-${mc_version}:${coolmod_version}"
+
+ // Example mod dependency using a file as dependency
+ // implementation files("libs/coolmod-${mc_version}-${coolmod_version}.jar")
+
+ // Example project dependency using a sister or child project:
+ // implementation project(":myproject")
+
+ // For more info:
+ // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
+ // http://www.gradle.org/docs/current/userguide/dependency_management.html
+}
+
+// This block of code expands all declared replace properties in the specified resource targets.
+// A missing property will result in an error. Properties are expanded using ${} Groovy notation.
+var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) {
+ var replaceProperties = [
+ minecraft_version : minecraft_version,
+ minecraft_version_range: minecraft_version_range,
+ neo_version : neo_version,
+ mod_id : mod_id,
+ mod_name : mod_name,
+ mod_license : mod_license,
+ mod_version : mod_version,
+ ]
+ inputs.properties replaceProperties
+ expand replaceProperties
+ from "src/main/templates"
+ into "build/generated/sources/modMetadata"
+}
+// Include the output of "generateModMetadata" as an input directory for the build
+// this works with both building through Gradle and the IDE.
+sourceSets.main.resources.srcDir generateModMetadata
+// To avoid having to run "generateModMetadata" manually, make it run on every project reload
+neoForge.ideSyncTask generateModMetadata
+
+// Example configuration to allow publishing using the maven-publish plugin
+publishing {
+ publications {
+ register('mavenJava', MavenPublication) {
+ from components.java
+ }
+ }
+ repositories {
+ maven {
+ url "file://${project.projectDir}/repo"
+ }
+ }
+}
+
+tasks.withType(JavaCompile).configureEach {
+ options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
+}
+
+// IDEA no longer automatically downloads sources/javadoc jars for dependencies, so we need to explicitly enable the behavior.
+idea {
+ module {
+ downloadSources = true
+ downloadJavadoc = true
+ }
+}