plugins { id 'net.fabricmc.fabric-loom' } group = rootProject.maven_group version = rootProject.mod_version base { archivesName = 'sanctuary' } fabricApi { configureTests { createSourceSet = true modId = 'sanctuary-gametest' enableGameTests = true enableClientGameTests = false eula = false } } // Every integration run must exercise fresh generation, never stale saved chunks. tasks.register('cleanGameTestWorld', Delete) { delete(layout.buildDirectory.dir('run/gameTest/world')) } tasks.named('runGameTest') { dependsOn('cleanGameTestWorld') } dependencies { minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" implementation "net.fabricmc:fabric-loader:${rootProject.loader_version}" implementation "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" } java { toolchain.languageVersion = JavaLanguageVersion.of(25) withSourcesJar() } tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' options.release = 25 } processResources { // The launcher uses 26.3-pre-2; Fabric's runtime normalizes it to 26.3-pre.2. def values = [version: project.version, minecraft_version: rootProject.minecraft_version, minecraft_dependency_version: rootProject.minecraft_version.replace('-pre-', '-pre.'), loader_version: rootProject.loader_version, fabric_api_version: rootProject.fabric_api_version] inputs.properties(values) filesMatching('fabric.mod.json') { expand(values) } } tasks.named('jar') { from(rootProject.file('LICENSE')) { rename { 'LICENSE_sanctuary' } } from(rootProject.file('THIRD_PARTY_NOTICES.md')) } tasks.register('worldgenSmoke', JavaExec) { group = 'verification' description = 'Check the guaranteed island core, density bounds and the surrounding void.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.WorldgenSmoke' } tasks.named('check') { dependsOn('worldgenSmoke') } // src/test contains a JavaExec assertion harness; engine tests use Fabric's gametest source set. tasks.named('test') { failOnNoDiscoveredTests = false }