plugins { id 'net.fabricmc.fabric-loom' } group = rootProject.maven_group version = rootProject.mod_version base { archivesName = 'sanctuary' } def clientRenderTests = providers.gradleProperty('sanctuaryClientTests') .map { it.toBoolean() }.getOrElse(false) fabricApi { configureTests { createSourceSet = true modId = 'sanctuary-gametest' enableGameTests = true // Explicit opt-in: the rendering check needs a graphics-capable client. enableClientGameTests = clientRenderTests eula = false } } if (clientRenderTests) { sourceSets.named('gametest') { java.srcDir('src/clientGametest/java') } tasks.named('runClientGameTest') { systemProperty('sanctuary.test.noVsync', providers.gradleProperty('sanctuaryClientNoVsync').getOrElse('false')) systemProperty('sanctuary.test.quick', providers.gradleProperty('sanctuaryQuickTests').getOrElse('false')) systemProperty('sanctuary.test.introVisualOnly', providers.gradleProperty('sanctuaryIntroVisualOnly').getOrElse('false')) systemProperty('sanctuary.test.atlasBaseline', providers.gradleProperty('sanctuaryAtlasBaseline').getOrElse('false')) systemProperty('sanctuary.test.inventoryClient', providers.gradleProperty('sanctuaryInventoryClientTests').getOrElse('false')) systemProperty('sanctuary.test.highland304', providers.gradleProperty('sanctuaryHighland304Visual').getOrElse('false')) } } // Fresh generation by default; the explicit laboratory reload verifies the same saved test world. tasks.register('cleanGameTestWorld', Delete) { onlyIf { !providers.gradleProperty('sanctuaryExpansionReload').map { it.toBoolean() }.getOrElse(false) } delete(layout.buildDirectory.dir('run/gameTest/world')) } tasks.named('runGameTest') { dependsOn('cleanGameTestWorld') systemProperty('sanctuary.test.village306.planOnly', providers.gradleProperty('sanctuaryVillagePlanOnly').getOrElse('false')) systemProperty('sanctuary.test.atlasOnly', providers.gradleProperty('sanctuaryAtlasOnly').getOrElse('false')) systemProperty('sanctuary.test.atlasSeeds', providers.gradleProperty('sanctuaryAtlasSeeds').getOrElse('0,42,-7228211907433324401')) systemProperty('sanctuary.test.atlasRevision', providers.gradleProperty('sanctuaryAtlasRevision').getOrElse('working-tree')) systemProperty('sanctuary.test.seed', providers.gradleProperty('sanctuaryTestSeed').getOrElse('0')) systemProperty('sanctuary.test.players', providers.gradleProperty('sanctuaryTestPlayers').getOrElse('10')) systemProperty('sanctuary.test.resourceSurvey', providers.gradleProperty('sanctuaryResourceSurvey').getOrElse('sample')) systemProperty('sanctuary.test.densityMaps', providers.gradleProperty('sanctuaryDensityMaps').getOrElse('true')) systemProperty('sanctuary.test.unified', providers.gradleProperty('sanctuaryUnifiedTests').getOrElse('true')) systemProperty('sanctuary.test.diameter', providers.gradleProperty('sanctuaryTestDiameter').getOrElse('724')) systemProperty('sanctuary.test.generation', providers.gradleProperty('sanctuaryTestGeneration').getOrElse( providers.gradleProperty('sanctuaryLostCityTests').map { it.toBoolean() }.getOrElse(false) ? '14' : providers.gradleProperty('sanctuaryLostCity15Tests').map { it.toBoolean() }.getOrElse(false) ? '15' : providers.gradleProperty('sanctuaryLostCity16Tests').map { it.toBoolean() }.getOrElse(false) ? '16' : providers.gradleProperty('sanctuaryRuins17Tests').map { it.toBoolean() }.getOrElse(false) ? '17' : providers.gradleProperty('sanctuaryHeritage19Tests').map { it.toBoolean() }.getOrElse(false) ? '19' : (providers.gradleProperty('sanctuaryHeritage20Tests').map { it.toBoolean() }.getOrElse(false) || providers.gradleProperty('sanctuaryLostCity20Tests').map { it.toBoolean() }.getOrElse(false)) ? '20' : (providers.gradleProperty('sanctuaryHeritage21Tests').map { it.toBoolean() }.getOrElse(false) || providers.gradleProperty('sanctuaryLostCity21Tests').map { it.toBoolean() }.getOrElse(false) || providers.gradleProperty('sanctuaryTransit21Tests').map { it.toBoolean() }.getOrElse(false)) ? '21' : providers.gradleProperty('sanctuarySelective22Tests').map { it.toBoolean() }.getOrElse(false) ? '22' : ['sanctuarySecrets23Tests', 'sanctuaryNative23Tests', 'sanctuaryOcean23Tests', 'sanctuaryAdmission23Tests'].any { providers.gradleProperty(it).map { v -> v.toBoolean() }.getOrElse(false) } ? '23' : '24')) systemProperty('sanctuary.test.aerial24.flowAdmission', providers.gradleProperty('sanctuaryAerial24FlowAdmission').getOrElse('false')) systemProperty('sanctuary.test.aerial24', providers.gradleProperty('sanctuaryAerial24Tests').getOrElse('false')) systemProperty('sanctuary.test.aerial24.reverseChunks', providers.gradleProperty('sanctuaryAerial24ReverseChunks').getOrElse('false')) systemProperty('sanctuary.test.aerial24.phase', providers.gradleProperty('sanctuaryAerial24Phase').getOrElse('create')) systemProperty('sanctuary.test.secrets23', providers.gradleProperty('sanctuarySecrets23Tests').getOrElse('false')) systemProperty('sanctuary.test.admission23', providers.gradleProperty('sanctuaryAdmission23Tests').getOrElse('false')) systemProperty('sanctuary.test.admission23.reserveOnly', providers.gradleProperty('sanctuaryAdmission23ReserveOnly').getOrElse('false')) systemProperty('sanctuary.test.admission23.diameter', providers.gradleProperty('sanctuaryAdmission23Diameter').getOrElse('256')) systemProperty('sanctuary.test.admission23.climate', providers.gradleProperty('sanctuaryAdmission23Climate').getOrElse('temperate')) systemProperty('sanctuary.test.admission23.relief', providers.gradleProperty('sanctuaryAdmission23Relief').getOrElse('natural')) systemProperty('sanctuary.test.ocean23', providers.gradleProperty('sanctuaryOcean23Tests').getOrElse('false')) systemProperty('sanctuary.test.native23', providers.gradleProperty('sanctuaryNative23Tests').getOrElse('false')) systemProperty('sanctuary.test.generateStructures', providers.gradleProperty('sanctuaryGenerateStructures').getOrElse('true')) systemProperty('sanctuary.test.selective22', providers.gradleProperty('sanctuarySelective22Tests').getOrElse('false')) systemProperty('sanctuary.transit.plannerDiagnostics', providers.gradleProperty('sanctuaryTransitDiagnostics').getOrElse('false')) systemProperty('sanctuary.test.transit29', providers.gradleProperty('sanctuaryTransit29Tests').getOrElse('false')) systemProperty('sanctuary.test.transit29.planOnly', providers.gradleProperty('sanctuaryTransit29PlanOnly').getOrElse('false')) systemProperty('sanctuary.test.requireMineshaft29', providers.gradleProperty('sanctuaryRequireMineshaft29').getOrElse('false')) systemProperty('sanctuary.test.requireCurvedRiverBank', providers.gradleProperty('sanctuaryRequireCurvedRiverBank').getOrElse('false')) systemProperty('sanctuary.expansion.structureDiagnostics', providers.gradleProperty('sanctuaryStructureDiagnostics').getOrElse('false')) systemProperty('sanctuary.test.heritage21', providers.gradleProperty('sanctuaryHeritage21Tests').getOrElse('false')) systemProperty('sanctuary.test.lostCity21', providers.gradleProperty('sanctuaryLostCity21Tests').getOrElse('false')) systemProperty('sanctuary.test.transit21', providers.gradleProperty('sanctuaryTransit21Tests').getOrElse('false')) systemProperty('sanctuary.test.expansion', providers.gradleProperty('sanctuaryExpansionTests').getOrElse('false')) systemProperty('sanctuary.test.expansionReload', providers.gradleProperty('sanctuaryExpansionReload').getOrElse('false')) systemProperty('sanctuary.test.lostCity', providers.gradleProperty('sanctuaryLostCityTests').getOrElse('false')) systemProperty('sanctuary.test.lostCity15', providers.gradleProperty('sanctuaryLostCity15Tests').getOrElse('false')) systemProperty('sanctuary.test.lostCity20', providers.gradleProperty('sanctuaryLostCity20Tests').getOrElse('false')) systemProperty('sanctuary.test.lostCity16', providers.gradleProperty('sanctuaryLostCity16Tests').getOrElse('false')) systemProperty('sanctuary.test.ruins17', providers.gradleProperty('sanctuaryRuins17Tests').getOrElse('false')) systemProperty('sanctuary.test.heritage20', providers.gradleProperty('sanctuaryHeritage20Tests').getOrElse('false')) systemProperty('sanctuary.test.heritage19', providers.gradleProperty('sanctuaryHeritage19Tests').getOrElse('false')) systemProperty('sanctuary.test.experimentalStructures', providers.gradleProperty('sanctuaryExperimentalStructures').getOrElse('true')) systemProperty('sanctuary.test.cityMatrix', providers.gradleProperty('sanctuaryCityMatrix').getOrElse('false')) systemProperty('sanctuary.test.cityMatrixOnly', providers.gradleProperty('sanctuaryCityMatrixOnly').getOrElse('false')) systemProperty('sanctuary.test.voidReuse', providers.gradleProperty('sanctuaryVoidReuseTests').getOrElse('false')) systemProperty('sanctuary.test.optionalStructureWitness', providers.gradleProperty('sanctuaryOptionalStructureWitness').getOrElse('false')) } tasks.named('processGametestResources') { def statuary106Client = providers.gradleProperty('sanctuaryStatuary106ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryStatuary106ClientTests', statuary106Client) if (statuary106Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Statuary106ClientChecks') } def villageOnly = providers.gradleProperty('sanctuaryVillageOnly').map { it.toBoolean() }.getOrElse(false) def focused = providers.gradleProperty('sanctuaryFocusedTests').getOrElse('').split(',').findAll { !it.isEmpty() } def focusClasses = [plans072: 'Plans072GameTests', starter052: 'Starter052GameTests', dispenser051: 'Dispenser051GameTests', head050: 'Head050GameTests', boatshead: 'BoatsHead049GameTests', poultry: 'Poultry048GameTests', starinspect: 'StarInspection047GameTests', skyflight: 'SkyFlight046GameTests', eggaudit: 'Companion044GameTests', headblocks: 'HeadBlocks043GameTests', operator: 'OperatorStars040GameTests', starter: 'Starter039GameTests', gravelayout: 'GraveInventory039GameTests', foodknowledge: 'FoodKnowledge039GameTests', graves: 'GravesFood038GameTests', realtime: 'Realtime037GameTests', corrections: 'Corrections036GameTests', collections: 'Collections035GameTests', notifications: 'Notifications034GameTests', menus: 'Menus033GameTests', aerial: 'Aerial24WorldGameTests', transit: 'Transit29WorldGameTests', village: 'Village306GameTests', drained: 'Drained307GameTests', expeditions: 'AncientExpeditions001GameTests', progression: 'Progression003GameTests', map: 'Atlas005GameTests', demeure: 'Demeure006GameTests', mining: 'Mining008GameTests', building: 'Building009GameTests', inventory: 'Inventory010GameTests', cycle: 'Cycle011GameTests', inventoryflow: 'Inventory012GameTests', sorting: 'Inventory014GameTests', tutorial: 'Tutorial016GameTests', movement: 'Movement017GameTests', accessories: 'Accessory018GameTests', companions: 'Companion019GameTests', familiar: 'Familiar020GameTests', carry: 'Carry027GameTests', familiarhit: 'Familiar029GameTests', refonte: 'Companion032GameTests', lights: 'Dynamic030GameTests', cosmetics: 'HeadCosmetic021GameTests', startup: 'StartupPerformanceGameTests', recipes: 'Recipes024GameTests'] focused.each { if (!focusClasses.containsKey(it)) throw new GradleException('Unknown focused native test: ' + it) } inputs.property('focusedNative', focused) def introClient = providers.gradleProperty('sanctuaryIntroClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('introClient', introClient) if (introClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Intro031ClientChecks') } def progressionClient = providers.gradleProperty('sanctuaryProgressionClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('progressionClient', progressionClient) def mapPerfClient = providers.gradleProperty('sanctuaryMapPerfClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('mapPerfClient', mapPerfClient) if (mapPerfClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Atlas026ClientChecks') } def lightsClient = providers.gradleProperty('sanctuaryLightsClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('lightsClient', lightsClient) if (lightsClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Dynamic030ClientChecks') } def skillsClient = providers.gradleProperty('sanctuarySkillsClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('skillsClient', skillsClient) if (skillsClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Skills025ClientChecks') } def fogClient = providers.gradleProperty('sanctuaryFogClientTests').map { it.toBoolean() }.getOrElse(false) def sky056Client = providers.gradleProperty('sanctuarySky056ClientTests').map { it.toBoolean() }.getOrElse(false) def cloud077Client = providers.gradleProperty('sanctuaryCloud077ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryCloud077ClientTests', cloud077Client) if (cloud077Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Cloud077ClientChecks') } def navigation076Client = providers.gradleProperty('sanctuaryNavigation076ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryNavigation076ClientTests', navigation076Client) if (navigation076Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Navigation076ClientChecks') } def welcome083Client = providers.gradleProperty('sanctuaryWelcome083ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryWelcome083ClientTests', welcome083Client) if (welcome083Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Welcome083ClientChecks') } def melt109Client = providers.gradleProperty('sanctuaryMelt109ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryMelt109ClientTests', melt109Client) if (melt109Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Melt109ClientChecks') } def snow108Client = providers.gradleProperty('sanctuarySnow108ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuarySnow108ClientTests', snow108Client) if (snow108Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Snow108ClientChecks') } def eggs107Client = providers.gradleProperty('sanctuaryEggs107ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryEggs107ClientTests', eggs107Client) if (eggs107Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Eggs107ClientChecks') } def living105Client = providers.gradleProperty('sanctuaryLiving105ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryLiving105ClientTests', living105Client) if (living105Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Living105ClientChecks') } def bricks102Client = providers.gradleProperty('sanctuaryBricks102ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryBricks102ClientTests', bricks102Client) if (bricks102Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Bricks102ClientChecks') } def landing101Client = providers.gradleProperty('sanctuaryLanding101ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryLanding101ClientTests', landing101Client) if (landing101Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Landing101ClientChecks') } def schematics100Client = providers.gradleProperty('sanctuarySchematics100ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuarySchematics100ClientTests', schematics100Client) if (schematics100Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Schematics100ClientChecks') } def exploration100Client = providers.gradleProperty('sanctuaryExploration100ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryExploration100ClientTests', exploration100Client) if (exploration100Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Exploration100ClientChecks') } def catalogue099Client = providers.gradleProperty('sanctuaryCatalogue099ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryCatalogue099ClientTests', catalogue099Client) if (catalogue099Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Catalogue099ClientChecks') } def temple097Client = providers.gradleProperty('sanctuaryTemple097ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryTemple097ClientTests', temple097Client) if (temple097Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Temple097ClientChecks') } def metatable096Client = providers.gradleProperty('sanctuaryMetatable096ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryMetatable096ClientTests', metatable096Client) if (metatable096Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Metatable096ClientChecks') } def piston087Client = providers.gradleProperty('sanctuaryPiston087ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryPiston087ClientTests', piston087Client) if (piston087Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Piston087ClientChecks') } def fut086Client = providers.gradleProperty('sanctuaryFut086ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryFut086ClientTests', fut086Client) if (fut086Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Fut086ClientChecks') } def fourneau085Client = providers.gradleProperty('sanctuaryFourneau085ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryFourneau085ClientTests', fourneau085Client) if (fourneau085Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Fourneau085ClientChecks') } def tooltip093Client = providers.gradleProperty('sanctuaryTooltip093ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryTooltip093ClientTests', tooltip093Client) if (tooltip093Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Tooltip093ClientChecks') } def pick092Client = providers.gradleProperty('sanctuaryPick092ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryPick092ClientTests', pick092Client) if (pick092Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Pick092ClientChecks') } def boatPassengers091Client = providers.gradleProperty('sanctuaryBoatPassengers091ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryBoatPassengers091ClientTests', boatPassengers091Client) if (boatPassengers091Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.BoatPassengers091ClientChecks') } def multiblocks084Client = providers.gradleProperty('sanctuaryMultiblocks084ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryMultiblocks084ClientTests', multiblocks084Client) if (multiblocks084Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Multiblocks084ClientChecks') } def menus083Client = providers.gradleProperty('sanctuaryMenus083ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryMenus083ClientTests', menus083Client) if (menus083Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Menus083ClientChecks') } def weather082Client = providers.gradleProperty('sanctuaryWeather082ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryWeather082ClientTests', weather082Client) if (weather082Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Weather082ClientChecks') } def balance080Client = providers.gradleProperty('sanctuaryBalance080ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryBalance080ClientTests', balance080Client) if (balance080Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Balance080ClientChecks') } def solo079Client = providers.gradleProperty('sanctuarySolo079ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuarySolo079ClientTests', solo079Client) if (solo079Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Solo079ClientChecks') } def autonomy074Client = providers.gradleProperty('sanctuaryAutonomy074ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sanctuaryAutonomy074ClientTests', autonomy074Client) if (autonomy074Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Autonomy074ClientChecks') } def arena073Client = providers.gradleProperty('sanctuaryArena073ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('arena073Client', arena073Client) if (arena073Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Arena073ClientChecks') } def plans072Client = providers.gradleProperty('sanctuaryPlans072ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('plans072Client', plans072Client) if (plans072Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Plans072ClientChecks') } def familiar071Client = providers.gradleProperty('sanctuaryFamiliar071ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('familiar071Client', familiar071Client) if (familiar071Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Familiar071ClientChecks') } def resourcePack070Client = providers.gradleProperty('sanctuaryResourcePack070ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('resourcePack070Client', resourcePack070Client) if (resourcePack070Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.ResourcePack070ClientChecks') } def loading068Client = providers.gradleProperty('sanctuaryLoading068ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('loading068Client', loading068Client) if (loading068Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Loading068ClientChecks') } def familiar067Client = providers.gradleProperty('sanctuaryFamiliar067ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('familiar067Client', familiar067Client) if (familiar067Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Familiar067ClientChecks') } def cosmetic066Client = providers.gradleProperty('sanctuaryCosmetic066ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('cosmetic066Client', cosmetic066Client) if (cosmetic066Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Cosmetic066ClientChecks') } def boat065Client = providers.gradleProperty('sanctuaryBoat065ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('boat065Client', boat065Client) if (boat065Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Boat065ClientChecks') } def loading064Client = providers.gradleProperty('sanctuaryLoading064ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('loading064Client', loading064Client) if (loading064Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Loading064ClientChecks') } def gameplay063Client = providers.gradleProperty('sanctuaryGameplay063ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('gameplay063Client', gameplay063Client) if (gameplay063Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Gameplay063ClientChecks') } def loading063Client = providers.gradleProperty('sanctuaryLoading063ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('loading063Client', loading063Client) inputs.property('loading063Entry', 'fr.koka.sanctuary.client.Loading063ClientAudit') if (loading063Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.Loading063ClientAudit') } def sunlight062Client = providers.gradleProperty('sanctuarySunlight062ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sunlight062Client', sunlight062Client) if (sunlight062Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Sunlight062ClientChecks') } def arrivalMount061Client = providers.gradleProperty('sanctuaryArrivalMount061ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('arrivalMount061Client', arrivalMount061Client) if (arrivalMount061Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.client.ArrivalMount061ClientChecks') } def mobHead060Client = providers.gradleProperty('sanctuaryMobHead060ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('mobHead060Client', mobHead060Client) if (mobHead060Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.MobHead060ClientChecks') } def atlas059Client = providers.gradleProperty('sanctuaryAtlas059ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('atlas059Client', atlas059Client) if (atlas059Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Atlas059ClientChecks') } def atlas058Client = providers.gradleProperty('sanctuaryAtlas058ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('atlas058Client', atlas058Client) if (atlas058Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Atlas058ClientChecks') } def weather057Client = providers.gradleProperty('sanctuaryWeather057ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('weather057Client', weather057Client) if (weather057Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Weather057ClientChecks') } inputs.property('sky056Client', sky056Client) if (sky056Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Sky056ClientChecks') } def strengthCarryClient = providers.gradleProperty('sanctuaryStrengthCarryClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('strengthCarryClient', strengthCarryClient) if (strengthCarryClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Strength055ClientChecks') } def combatClient = providers.gradleProperty('sanctuaryCombatClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('combatClient', combatClient) if (combatClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Combat054ClientChecks') } inputs.property('fogClient', fogClient) if (fogClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Fog053ClientChecks') } def starterNameClient = providers.gradleProperty('sanctuaryStarterNameClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('starterNameClient', starterNameClient) if (starterNameClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Starter052ClientChecks') } def head050Client = providers.gradleProperty('sanctuaryHead050ClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('head050Client', head050Client) if (head050Client) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Head050ClientChecks') } def boatsHeadClient = providers.gradleProperty('sanctuaryBoatsHeadClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('boatsHeadClient', boatsHeadClient) if (boatsHeadClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.BoatsHead049ClientChecks') } def poultryClient = providers.gradleProperty('sanctuaryPoultryClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('poultryClient', poultryClient) if (poultryClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Poultry048ClientChecks') } def starInspectionClient = providers.gradleProperty('sanctuaryStarInspectionClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('starInspectionClient', starInspectionClient) if (starInspectionClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.StarInspection047ClientChecks') } def skyFlightClient = providers.gradleProperty('sanctuarySkyFlightClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('skyFlightClient', skyFlightClient) if (skyFlightClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.SkyFlight046ClientChecks') } def titleClient = providers.gradleProperty('sanctuaryTitleClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('titleClient', titleClient) if (titleClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Title045ClientChecks') } def headBlocksClient = providers.gradleProperty('sanctuaryHeadBlocksClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('headBlocksClient', headBlocksClient) if (headBlocksClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.HeadBlocks043ClientChecks') } def lanCarryClient = providers.gradleProperty('sanctuaryLanCarryClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('lanCarryClient', lanCarryClient) if (lanCarryClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.LanCarry042ClientChecks') } def operatorClient = providers.gradleProperty('sanctuaryOperatorClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('operatorClient', operatorClient) if (operatorClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Operator040ClientChecks') } def foodKnowledgeClient = providers.gradleProperty('sanctuaryFoodKnowledgeClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('foodKnowledgeClient', foodKnowledgeClient) if (foodKnowledgeClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.FoodPanorama039ClientChecks') } def gravesClient = providers.gradleProperty('sanctuaryGravesClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('gravesClient', gravesClient) if (gravesClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.GravesFood038ClientChecks') } def realtimeClient = providers.gradleProperty('sanctuaryRealtimeClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('realtimeClient', realtimeClient) if (realtimeClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Realtime037ClientChecks') } def blueprintClient = providers.gradleProperty('sanctuaryBlueprintClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('blueprintClient', blueprintClient) if (blueprintClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Blueprint036ClientChecks') } def correctionsClient = providers.gradleProperty('sanctuaryCorrectionsClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('correctionsClient', correctionsClient) if (correctionsClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Corrections036ClientChecks') } def collectionsClient = providers.gradleProperty('sanctuaryCollectionsClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('collectionsClient', collectionsClient) if (collectionsClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Collections035ClientChecks') } def notificationsClient = providers.gradleProperty('sanctuaryNotificationsClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('notificationsClient', notificationsClient) if (notificationsClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Notifications034ClientChecks') } def menusClient = providers.gradleProperty('sanctuaryMenusClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('menusClient', menusClient) if (menusClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Menus033ClientChecks') } def recipesClient = providers.gradleProperty('sanctuaryRecipesClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('recipesClient', recipesClient) if (recipesClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Recipes024ClientChecks') } def cosmeticsClient = providers.gradleProperty('sanctuaryHeadCosmeticsClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('cosmeticsClient', cosmeticsClient) if (cosmeticsClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.HeadCosmetic021ClientChecks') } def familiarClient = providers.gradleProperty('sanctuaryFamiliarClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('familiarClient', familiarClient) if (familiarClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Familiar020ClientChecks') } def refonteClient = providers.gradleProperty('sanctuaryRefonteClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('refonteClient', refonteClient) if (refonteClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Companion032ClientChecks') } def companionsClient = providers.gradleProperty('sanctuaryCompanionsClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('companionsClient', companionsClient) if (companionsClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Companion019ClientChecks') } def accessoriesClient = providers.gradleProperty('sanctuaryAccessoriesClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('accessoriesClient', accessoriesClient) if (accessoriesClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Accessory018ClientChecks') } def movementClient = providers.gradleProperty('sanctuaryMovementClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('movementClient', movementClient) if (movementClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Movement017ClientChecks') } def tutorialClient = providers.gradleProperty('sanctuaryTutorialClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('tutorialClient', tutorialClient) if (tutorialClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Tutorial016ClientChecks') } def sortingClient = providers.gradleProperty('sanctuarySortingClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('sortingClient', sortingClient) if (sortingClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Inventory014ClientChecks') } def inlineClient = providers.gradleProperty('sanctuaryInlineClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('inlineClient', inlineClient) if (inlineClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Progression013ClientChecks') } def inventoryClient = providers.gradleProperty('sanctuaryInventoryClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('inventoryClient', inventoryClient) def cycleClient = providers.gradleProperty('sanctuaryCycleClientTests').map { it.toBoolean() }.getOrElse(false) inputs.property('cycleClient', cycleClient) if (cycleClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Cycle011ClientChecks') } if (inventoryClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Inventory010ClientChecks') } if (progressionClient) filter { line -> line.replace('fr.koka.sanctuary.gametest.SanctuaryClientRenderTests', 'fr.koka.sanctuary.gametest.Progression003ClientChecks') } inputs.property('villageOnly', villageOnly) def atlasOnly = providers.gradleProperty('sanctuaryAtlasOnly').map { it.toBoolean() }.getOrElse(false) inputs.property('atlasOnly', atlasOnly) def benchmark = providers.gradleProperty('sanctuaryBenchmark').map { it.toBoolean() }.getOrElse(false) inputs.property('benchmark', benchmark) def unified = providers.gradleProperty('sanctuaryUnifiedTests').map { it.toBoolean() }.getOrElse(true) inputs.property('unified', unified) def expansion = providers.gradleProperty('sanctuaryExpansionTests').map { it.toBoolean() }.getOrElse(false) inputs.property('expansion', expansion) def lostCity = providers.gradleProperty('sanctuaryLostCityTests').map { it.toBoolean() }.getOrElse(false) inputs.property('lostCity', lostCity) def lostCity15 = providers.gradleProperty('sanctuaryLostCity15Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('lostCity15', lostCity15) def lostCity16 = providers.gradleProperty('sanctuaryLostCity16Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('lostCity16', lostCity16) def ruins17 = providers.gradleProperty('sanctuaryRuins17Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('ruins17', ruins17) def lostCity20 = providers.gradleProperty('sanctuaryLostCity20Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('lostCity20', lostCity20) def heritage20 = providers.gradleProperty('sanctuaryHeritage20Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('heritage20', heritage20) def heritage21 = providers.gradleProperty('sanctuaryHeritage21Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('heritage21', heritage21) def lostCity21 = providers.gradleProperty('sanctuaryLostCity21Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('lostCity21', lostCity21) def aerial24Flow = providers.gradleProperty('sanctuaryAerial24FlowAdmission').map { it.toBoolean() }.getOrElse(false) inputs.property('aerial24Flow', aerial24Flow) def aerial24 = providers.gradleProperty('sanctuaryAerial24Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('aerial24', aerial24) def secrets23 = providers.gradleProperty('sanctuarySecrets23Tests').map { it.toBoolean() }.getOrElse(false) def admission23 = providers.gradleProperty('sanctuaryAdmission23Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('admission23', admission23) def ocean23 = providers.gradleProperty('sanctuaryOcean23Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('ocean23', ocean23) def native23 = providers.gradleProperty('sanctuaryNative23Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('secrets23', secrets23) inputs.property('native23', native23) def selective22 = providers.gradleProperty('sanctuarySelective22Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('selective22', selective22) def transit21 = providers.gradleProperty('sanctuaryTransit21Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('transit21', transit21) def heritage19 = providers.gradleProperty('sanctuaryHeritage19Tests').map { it.toBoolean() }.getOrElse(false) inputs.property('heritage19', heritage19) def voidReuse = providers.gradleProperty('sanctuaryVoidReuseTests').map { it.toBoolean() }.getOrElse(false) inputs.property('voidReuse', voidReuse) filesMatching('fabric.mod.json') { expand(gametest_entrypoint: villageOnly ? 'fr.koka.sanctuary.gametest.Village306GameTests' : atlasOnly ? 'fr.koka.sanctuary.gametest.TerrainAtlas305GameTests' : aerial24Flow ? 'fr.koka.sanctuary.gametest.Aerial24FlowAdmissionGameTests' : aerial24 ? 'fr.koka.sanctuary.gametest.Aerial24WorldGameTests' : admission23 ? 'fr.koka.sanctuary.gametest.Expansion23AdmissionGameTests' : ocean23 ? 'fr.koka.sanctuary.gametest.Ocean23WorldGameTests' : secrets23 ? 'fr.koka.sanctuary.gametest.Secrets23WorldGameTests' : native23 ? 'fr.koka.sanctuary.gametest.Native23WorldGameTests' : selective22 ? 'fr.koka.sanctuary.gametest.Selective22WorldGameTests' : transit21 ? 'fr.koka.sanctuary.gametest.Transit21WorldGameTests' : lostCity21 ? 'fr.koka.sanctuary.gametest.LostCity21WorldGameTests' : heritage21 ? 'fr.koka.sanctuary.gametest.Heritage21WorldGameTests' : lostCity20 ? 'fr.koka.sanctuary.gametest.LostCity20WorldGameTests' : heritage20 ? 'fr.koka.sanctuary.gametest.Heritage20WorldGameTests' : heritage19 ? 'fr.koka.sanctuary.gametest.Heritage19WorldGameTests' : ruins17 ? 'fr.koka.sanctuary.gametest.Ruins17WorldGameTests' : voidReuse ? 'fr.koka.sanctuary.gametest.ExpansionVoidReuseGameTests' : lostCity16 ? 'fr.koka.sanctuary.gametest.LostCity16WorldGameTests' : lostCity15 ? 'fr.koka.sanctuary.gametest.LostCity15WorldGameTests' : lostCity ? 'fr.koka.sanctuary.gametest.LostCityWorldGameTests' : expansion ? 'fr.koka.sanctuary.gametest.ExpansionWorldGameTests' : benchmark ? 'fr.koka.sanctuary.gametest.WorldgenPerformanceGameTests' : unified ? 'fr.koka.sanctuary.gametest.UnifiedWorldGameTests' : 'fr.koka.sanctuary.gametest.SanctuaryWorldGameTests') if (atlasOnly || villageOnly) filter { line -> line.replaceAll(/("fabric-gametest": \["[^"]+")[^\]]*/, '$1') } if (!focused.isEmpty()) filter { line -> line.contains('"fabric-gametest":') ? ' "fabric-gametest": [' + focused.collect { '"fr.koka.sanctuary.gametest.' + focusClasses[it] + '"' }.join(', ') + '],' : line } } } dependencies { implementation project(':jei') include project(':jei') implementation project(':demeure') include project(':demeure') 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 { from(rootProject.file('ressources-pack/sanctuary')) { include 'assets/**', 'pack.mcmeta', 'pack.png' exclude '**/.DS_Store' into 'resourcepacks/textures' } // Normalize launcher pre-release IDs when targeting one; final releases retain their exact ID. 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, jei_version: rootProject.jei_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 natural central holes, continuous erosion, density bounds and exterior void.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.WorldgenSmoke' } tasks.named('check') { dependsOn('worldgenSmoke') } tasks.register('hydrologySmoke', JavaExec) { group = 'verification' description = 'Check deterministic surface drainage, natural support and bounded excavation.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.SurfaceHydrologySmoke' } tasks.named('check') { dependsOn('hydrologySmoke') } // src/test contains a JavaExec assertion harness; engine tests use Fabric's gametest source set. tasks.named('test') { failOnNoDiscoveredTests = false } tasks.register('blockKnowledgeSmoke', JavaExec) { group = 'verification' description = 'Check personal block history, atomic persistence and corrupt-file refusal.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.knowledge.BlockKnowledgeSmoke' } tasks.named('check') { dependsOn('blockKnowledgeSmoke') } tasks.register('materialActivitySmoke', JavaExec) { group = 'verification' description = 'Check dated material observations, daily isolation and atomic persistence.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.knowledge.history.MaterialActivitySmoke' } tasks.named('check') { dependsOn('materialActivitySmoke') } tasks.register('naturalHydrologySmoke', JavaExec) { group = 'verification' description = 'Check broad shores, supported sediments and natural rock springs.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.NaturalHydrologySmoke' } tasks.named('check') { dependsOn('naturalHydrologySmoke') } tasks.register('starterLavaSmoke', JavaExec) { group = 'verification' description = 'Check a small contained lava niche in naturally supported rock.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.StarterLavaDepositSmoke' } tasks.named('check') { dependsOn('starterLavaSmoke') } // Alpha.6 has separate contracts so saved alpha.5 worlds keep their generation. tasks.register('layeredHydrologySmoke', JavaExec) { group = 'verification' description = 'Check retained basins, broad rock shores and lower wall springs.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.LayeredHydrologySmoke' } tasks.named('check') { dependsOn('layeredHydrologySmoke') } tasks.register('layeredEcologySmoke', JavaExec) { group = 'verification' description = 'Check altitude biome variation and naturally supported lower terraces.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.LayeredEcologySmoke' } tasks.named('check') { dependsOn('layeredEcologySmoke') } // Alpha.7 keeps previous biome palettes and generators unchanged. tasks.register('woodlandPaletteSmoke', JavaExec) { group = 'verification' description = 'Check surface forest coverage and bounded rare interior biomes.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.WoodlandPaletteSmoke' } tasks.register('woodlandGroveSmoke', JavaExec) { group = 'verification' description = 'Check natural tree supports and canopy space without creating terrain.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.WoodlandGroveSmoke' } tasks.named('check') { dependsOn('woodlandPaletteSmoke', 'woodlandGroveSmoke') } tasks.register('riftShapeSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.RiftShapeSmoke' } tasks.named('check') { dependsOn('riftShapeSmoke') } tasks.register('riftPaletteSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.RiftPaletteSmoke' } tasks.named('check') { dependsOn('riftPaletteSmoke') } tasks.register('riftHydrologySmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.RiftHydrologySmoke' } tasks.named('check') { dependsOn('riftHydrologySmoke') } tasks.register('riftLavaSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.RiftLavaSmoke' } tasks.named('check') { dependsOn('riftLavaSmoke') } tasks.register('cavernPaletteSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.CavernPaletteSmoke' } tasks.named('check') { dependsOn('cavernPaletteSmoke') } tasks.register('cavernHydrologySmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.CavernHydrologySmoke' } tasks.named('check') { dependsOn('cavernHydrologySmoke') } tasks.register('cavernLavaSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.CavernLavaSmoke' } tasks.named('check') { dependsOn('cavernLavaSmoke') } tasks.register('populationCapacitySmoke', JavaExec) { group = 'verification' description = 'Check supported capacities, area scaling, finite boundaries and regional ownership.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.PopulationCapacitySmoke' } tasks.named('check') { dependsOn('populationCapacitySmoke') } tasks.register('populationRegionPlanSmoke', JavaExec) { group = 'verification' description = 'Check atomic regional admission, hydraulic dependencies and translated chunk indices.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.PopulationRegionPlanSmoke' } tasks.named('check') { dependsOn('populationRegionPlanSmoke') } tasks.register('populationPlanCacheSmoke', JavaExec) { group = 'verification' description = 'Check that completed regions remain readable while new regions are planned.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.PopulationPlanCacheSmoke' } tasks.named('check') { dependsOn('populationPlanCacheSmoke') } tasks.register('expansionJournalSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.expansion.ExpansionJournalSmoke' } tasks.register('expansionReliefSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.expansion.ExpansionReliefSmoke' } tasks.named('check') { dependsOn('expansionJournalSmoke', 'expansionReliefSmoke') } tasks.register('expansionPlacementSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.expansion.ExpansionPlacementSmoke' } tasks.named('check') { dependsOn('expansionPlacementSmoke') } // Alpha.14 planner uses bounded natural support and never queries loaded chunks. tasks.register('lostCityPlannerSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.city.LostCityPlannerSmoke' } tasks.named('check') { dependsOn('lostCityPlannerSmoke') } tasks.register('lostCityRendererSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.city.LostCityRendererSmoke' } tasks.named('check') { dependsOn('lostCityRendererSmoke') } tasks.register('expansionSpatial14Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.expansion.ExpansionSpatialPlacement14Smoke' } tasks.named('check') { dependsOn('expansionSpatial14Smoke') } tasks.register('expansionVoidCertificateSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.expansion.ExpansionVoidCertificateSmoke' } tasks.named('check') { dependsOn('expansionVoidCertificateSmoke') } tasks.register('lostCityInteriors15Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.city.LostCityInteriors15Smoke' } tasks.named('check') { dependsOn('lostCityInteriors15Smoke') } tasks.register('lostCityUnderground15Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.city.LostCityUnderground15Smoke' } tasks.named('check') { dependsOn('lostCityUnderground15Smoke') } tasks.register('lostCityProtection15Smoke', JavaExec) { group = 'verification' description = 'Check bounded three-dimensional city protection and immutable snapshots.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.city.LostCityProtection15Smoke' } tasks.named('check') { dependsOn('lostCityProtection15Smoke') } tasks.register('lostCityPlanner15Smoke', JavaExec) { group = 'verification' description = 'Check terrain-certified city fragments, inset floors and anchored viaducts.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.city.LostCityPlanner15Smoke' } tasks.named('check') { dependsOn('lostCityPlanner15Smoke') } tasks.register('lostCityInteriors16Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.city.LostCityInteriors16Smoke' } tasks.named('check') { dependsOn('lostCityInteriors16Smoke') } tasks.register('lostCityUnderground16Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.city.LostCityUnderground16Smoke' } tasks.named('check') { dependsOn('lostCityUnderground16Smoke') } tasks.register('lostCityProtection16Smoke', JavaExec) { group = 'verification' description = 'Check bounded three-dimensional city protection and immutable snapshots.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.city.LostCityProtection16Smoke' } tasks.named('check') { dependsOn('lostCityProtection16Smoke') } tasks.register('lostCityPlanner16Smoke', JavaExec) { group = 'verification' description = 'Check terrain-certified city fragments, inset floors and anchored viaducts.' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.city.LostCityPlanner16Smoke' } tasks.named('check') { dependsOn('lostCityPlanner16Smoke') } tasks.register('lostCityFoundation16Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.city.LostCityFoundation16Smoke' } tasks.named('check') { dependsOn('lostCityFoundation16Smoke') } // The experimental pieces and algorithms are additive; historical city suites remain unchanged. ['Planner', 'Renderer', 'Piece'].each { component -> def smoke = tasks.register("ruins17${component}Smoke", JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = "fr.koka.sanctuary.worldgen.ruins.Ruins${component}17Smoke" } tasks.named('check') { dependsOn(smoke) } } // Local native starts keep the long heritage routes bounded by Minecraft's reference range. ['Planner', 'Renderer', 'Piece'].each { component -> def smoke = tasks.register("heritage19${component}Smoke", JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = "fr.koka.sanctuary.worldgen.heritage.Heritage${component}19Smoke" } tasks.named('check') { dependsOn(smoke) } } // Generation20 architecture retains the previous renderers and verifies connected block states. [ connectedBlocks20Smoke: 'detail.ConnectedBlocks20Smoke', heritage20RendererSmoke: 'heritage.HeritageRenderer20Smoke', heritage20PieceSmoke: 'heritage.HeritagePiece20Smoke', ruins20RendererSmoke: 'ruins.RuinsRenderer20Smoke', lostCityUnderground20Smoke: 'city.LostCityUnderground20Smoke', lostCitySurface20Smoke: 'city.LostCitySurface20Smoke', lostCityInteriors20Smoke: 'city.LostCityInteriors20Smoke' ].each { name, harness -> def smoke = tasks.register(name, JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = "fr.koka.sanctuary.worldgen.${harness}" } tasks.named('check') { dependsOn(smoke) } } // Optional actual block-state exports for architectural review; never enabled in ordinary checks. tasks.named('heritage20RendererSmoke') { if (providers.gradleProperty('sanctuaryArchitecturePreview').isPresent()) systemProperty('sanctuary.test.heritage20.export', rootProject.layout.buildDirectory.dir('alpha20-preview/heritage').get().asFile.absolutePath) } tasks.named('lostCityInteriors20Smoke') { if (providers.gradleProperty('sanctuaryArchitecturePreview').isPresent()) systemProperty('sanctuary.city20.preview', rootProject.layout.buildDirectory.file('alpha20-preview/city.json').get().asFile.absolutePath) } tasks.named('lostCitySurface20Smoke') { if (providers.gradleProperty('sanctuaryArchitecturePreview').isPresent()) systemProperty('sanctuary.city20.exteriorPreview', rootProject.layout.buildDirectory.file('alpha20-preview/exterior.json').get().asFile.absolutePath) } // Generation21 keeps published20 renderers immutable. [ heritage21RendererSmoke: 'heritage.HeritageRenderer21Smoke', heritage21PieceSmoke: 'heritage.HeritagePiece21Smoke', heritage21PlannerSmoke: 'heritage.HeritagePlanner21Smoke', lostCity21PlannerSmoke: 'city.LostCityPlanner21Smoke', lostCitySurface21Smoke: 'city.LostCitySurface21Smoke', lostCityInteriors21Smoke: 'city.LostCityInteriors21Smoke', transit21Smoke: 'transit.Transit21Smoke' ].each { name, harness -> def smoke = tasks.register(name, JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = "fr.koka.sanctuary.worldgen.${harness}" } tasks.named('check') { dependsOn(smoke) } } tasks.named('heritage21RendererSmoke') { if (providers.gradleProperty('sanctuaryArchitecturePreview').isPresent()) systemProperty('sanctuary.test.heritage21.export', rootProject.layout.buildDirectory.dir('alpha21-preview/heritage').get().asFile.absolutePath) } tasks.named('lostCityInteriors21Smoke') { if (providers.gradleProperty('sanctuaryArchitecturePreview').isPresent()) systemProperty('sanctuary.city21.preview', rootProject.layout.buildDirectory.file('alpha21-preview/city.json').get().asFile.absolutePath) } tasks.named('lostCitySurface21Smoke') { if (providers.gradleProperty('sanctuaryArchitecturePreview').isPresent()) systemProperty('sanctuary.city21.exteriorPreview', rootProject.layout.buildDirectory.file('alpha21-preview/exterior.json').get().asFile.absolutePath) } // Generation22 filters surface placement and adds an independent core hall; historical tests still run. [ lostCity22PlannerSmoke: 'city.LostCityPlanner22Smoke', underground22Smoke: 'city.LostCityUnderground22Smoke', heritage22PlannerSmoke: 'heritage.HeritagePlanner22Smoke', transit22PlannerSmoke: 'transit.TransitPlanner22Smoke', transit22RouteSmoke: 'transit.TransitRoute22Smoke', transit22RendererSmoke: 'transit.TransitRenderer22Smoke' ].each { name, harness -> def smoke = tasks.register(name, JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = "fr.koka.sanctuary.worldgen.${harness}" } tasks.named('check') { dependsOn(smoke) } } // New geography has a pure harness in addition to native world witnesses. tasks.register('expansionOcean23Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.expansion.ExpansionOcean23Smoke' } tasks.named('check') { dependsOn('expansionOcean23Smoke') } tasks.register('ancientExpeditions001Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.expansion.AncientExpeditions001Smoke' } tasks.named('check') { dependsOn('ancientExpeditions001Smoke') } [ secrets23Smoke: 'fr.koka.sanctuary.worldgen.mineral.Secrets23Smoke', structureCensusSmoke: 'fr.koka.sanctuary.knowledge.structures.StructureCensusSmoke', expansionPriorities23Smoke: 'fr.koka.sanctuary.expansion.ExpansionPriorities23Smoke' ].each { taskName, harness -> tasks.register(taskName, JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = harness } tasks.named('check') { dependsOn(taskName) } } // Versioned aerial planner: bounded search, native pieces and local claims. tasks.register('aerial24Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.aerial.Aerial24Smoke' if (providers.gradleProperty('sanctuaryAerialPreview').isPresent()) systemProperty('sanctuary.aerial.preview', rootProject.layout.buildDirectory.file('alpha27-preview/native-ships.json').get().asFile.absolutePath) } tasks.named('check') { dependsOn('aerial24Smoke') } tasks.register('aerialPersistence24Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.aerial.AerialPersistence24Smoke' } tasks.named('check') { dependsOn('aerialPersistence24Smoke') } tasks.register('swamp27VolumesSmoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.Swamp27VolumesSmoke' } tasks.named('check') { dependsOn('swamp27VolumesSmoke') } tasks.register('cavesRelief28Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.CavesRelief28Smoke' } tasks.named('check') { dependsOn('cavesRelief28Smoke') } // Fine ledges retain the alpha28 field below the upper relief. tasks.register('terraces29Smoke', JavaExec) { group = 'verification' dependsOn tasks.named('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.Terraces29Smoke' } tasks.named('check') { dependsOn('terraces29Smoke') } [ transit29Smoke: 'fr.koka.sanctuary.worldgen.transit.Transit29Smoke', mineshaftAdmission29Smoke: 'fr.koka.sanctuary.expansion.MineshaftAdmission29Smoke' ].each { taskName, harness -> tasks.register(taskName, JavaExec) { group = 'verification' dependsOn tasks.named('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = harness } tasks.named('check') { dependsOn(taskName) } } tasks.register('river30Smoke', JavaExec) { group = 'verification' dependsOn tasks.named('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.River30Smoke' } tasks.named('check') { dependsOn('river30Smoke') } tasks.register('surfaceRelief302Smoke', JavaExec) { group = 'verification' dependsOn tasks.named('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.SurfaceRelief302Smoke' } tasks.named('check') { dependsOn('surfaceRelief302Smoke') } tasks.register('balancedRelief303Smoke', JavaExec) { group = 'verification' dependsOn tasks.named('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.worldgen.BalancedRelief303Smoke' } tasks.named('check') { dependsOn('balancedRelief303Smoke') } // PROG-01: pure contract checks plus native server/player tests. tasks.register('progression003Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.progression.ProgressionSmoke' } tasks.named('check') { dependsOn('progression003Smoke') } // MAP-01: durable observation and progression migration contracts. tasks.register('atlas005Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.atlas.AtlasSmoke' } tasks.named('check') { dependsOn('atlas005Smoke') } // CYCLE-01 / FACTION-01: durable charge and reset contract. tasks.register('cycle011Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.cycle.CycleSmoke' } tasks.named('check') { dependsOn('cycle011Smoke') } // First tutorial actions: bounded rewards and independent durable claims. tasks.register('tutorial016Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.tutorial.TutorialSmoke' } tasks.named('check') { dependsOn('tutorial016Smoke') } tasks.register('movement017Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.progression.Movement017Smoke' } tasks.named('check') { dependsOn('movement017Smoke') } tasks.register('inventoryDrag018Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.client.InventoryDragPathSmoke' } tasks.named('check') { dependsOn('inventoryDrag018Smoke') } tasks.register('companion019Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.companion.Companion019Smoke' } tasks.named('check') { dependsOn('companion019Smoke') } // Visual-light spatial index, dirty budget and dropped-item stress checks. tasks.register('dynamic030Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.lighting.Dynamic030Smoke' } tasks.named('check') { dependsOn('dynamic030Smoke') } // INTRO-01: reversible UUID encoding, accelerating score and durable first arrival. tasks.register('intro031Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.progression.Intro031Smoke' } tasks.named('check') { dependsOn('intro031Smoke') } if (providers.gradleProperty('sanctuaryQuickTests').map { it.toBoolean() }.getOrElse(false)) { dependencies { gametestRuntimeOnly project(':sanctuary-test') } } tasks.register('notifications034Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.notifications.NotificationFeedSmoke' } tasks.named('check') { dependsOn('notifications034Smoke') } tasks.register('weather057Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.weather.Weather057Smoke' } tasks.named('check') { dependsOn('weather057Smoke') } tasks.register('collections035Catalogue', Exec) { group = 'verification' workingDir rootProject.projectDir commandLine 'python3', 'scripts/compile_collections.py' } tasks.named('check') { dependsOn('collections035Catalogue') } tasks.register('notifications036Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.notifications.NotificationLayoutSmoke' } tasks.named('check') { dependsOn('notifications036Smoke') } tasks.register('realtime037Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.realtime.Realtime037Smoke' } tasks.named('check') { dependsOn('realtime037Smoke') } tasks.register('poultry048Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.boats.FlightBalance048Smoke' } tasks.named('check') { dependsOn('poultry048Smoke') } // Personal map markers: durable discoveries, independent identities and bounded data. tasks.register('atlas059Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.atlas.AtlasMarker059Smoke' } tasks.named('check') { dependsOn('atlas059Smoke') } tasks.register('seasonal105Smoke', JavaExec) { group = 'verification' dependsOn('testClasses') classpath = sourceSets.test.runtimeClasspath mainClass = 'fr.koka.sanctuary.weather.Seasonal105Smoke' } tasks.named('check') { dependsOn('seasonal105Smoke') }