plugins { id 'java-library' id 'net.neoforged.moddev' version '2.0.148' } group = 'net.dnorberg.rivencraft' version = mod_version base { archivesName = "rivencraft-${minecraft_version}" } java.toolchain.languageVersion = JavaLanguageVersion.of(25) neoForge { version = project.neo_version runs { client { client() if (project.hasProperty('connectAddress')) { programArgument '--quickPlayMultiplayer' programArgument project.property('connectAddress').toString() } if (project.hasProperty('clientName')) { programArgument '--username' programArgument project.property('clientName').toString() gameDirectory = project.layout.buildDirectory.dir('run-client-' + project.property('clientName')).get().asFile } } server { server() gameDirectory = project.hasProperty('serverRunDir') ? file(project.property('serverRunDir').toString()) : project.layout.buildDirectory.dir('run-server').get().asFile programArgument '--nogui' } } mods { rivencraft { sourceSet(sourceSets.main) } } } def generateModMetadata = tasks.register('generateModMetadata', ProcessResources) { def replaceProperties = [ mod_id: mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version, neo_version: neo_version, minecraft_version_range: minecraft_version_range, ] inputs.properties replaceProperties expand replaceProperties from 'src/main/templates' into 'build/generated/sources/modMetadata' } sourceSets.main.resources.srcDir generateModMetadata neoForge.ideSyncTask generateModMetadata tasks.named('processResources', ProcessResources).configure { // Reuse the existing sprite and base model without copying binary assets. from('../../src/main/resources') { include 'assets/rivencraft/textures/item/crystal_shard.png' include 'assets/rivencraft/textures/item/page.png' include 'assets/rivencraft/textures/item/page_link_panel.png' include 'assets/rivencraft/models/item/page_link_panel.json' include 'assets/rivencraft/textures/item/ink_vial.png' include 'assets/rivencraft/textures/item/ink_vial.png.mcmeta' include 'assets/rivencraft/models/item/ink_vial.json' include 'assets/rivencraft/models/item/crystal_shard.json' include 'assets/rivencraft/textures/item/descriptive_book.png' include 'assets/rivencraft/models/item/descriptive_book.json' include 'assets/rivencraft/textures/item/linking_book.png' include 'assets/rivencraft/textures/item/linking_book_unwritten.png' include 'assets/rivencraft/models/item/linking_book_bound.json' include 'assets/rivencraft/textures/gui/bookui_cover.png' include 'assets/rivencraft/textures/gui/notebook_pages.png' include 'assets/rivencraft/textures/gui/bookui_pager.png' include 'assets/rivencraft/textures/block/crystal_block.png' include 'assets/rivencraft/textures/block/book_binder.png' include 'assets/rivencraft/textures/block/book_binder_press.png' include 'assets/rivencraft/textures/gui/book_binder_legacy.png' include 'assets/rivencraft/textures/gui/ink_mixer_legacy.png' include 'assets/rivencraft/textures/block/inkwell_base.png' include 'assets/rivencraft/textures/block/inkwell_cup.png' include 'assets/rivencraft/textures/block/ink.png' include 'assets/rivencraft/textures/block/ink_glass.png' include 'assets/rivencraft/models/block/ink_mixer.json' include 'assets/rivencraft/models/item/ink_mixer.json' include 'assets/rivencraft/blockstates/ink_mixer.json' include 'data/rivencraft/loot_table/blocks/ink_mixer.json' include 'assets/rivencraft/models/block/book_binder.json' include 'assets/rivencraft/models/item/book_binder.json' include 'assets/rivencraft/blockstates/book_binder.json' include 'data/rivencraft/loot_table/blocks/book_binder.json' include 'assets/rivencraft/models/block/crystal_block.json' include 'assets/rivencraft/blockstates/crystal_block.json' include 'assets/rivencraft/blockstates/budding_crystal.json' include 'assets/rivencraft/blockstates/small_crystal_bud.json' include 'assets/rivencraft/blockstates/medium_crystal_bud.json' include 'assets/rivencraft/blockstates/large_crystal_bud.json' include 'assets/rivencraft/blockstates/crystal_cluster.json' include 'assets/rivencraft/models/block/budding_crystal.json' include 'assets/rivencraft/models/block/small_crystal_bud.json' include 'assets/rivencraft/models/block/medium_crystal_bud.json' include 'assets/rivencraft/models/block/large_crystal_bud.json' include 'assets/rivencraft/models/block/crystal_cluster.json' include 'assets/rivencraft/models/item/budding_crystal.json' include 'assets/rivencraft/models/item/small_crystal_bud.json' include 'assets/rivencraft/models/item/medium_crystal_bud.json' include 'assets/rivencraft/models/item/large_crystal_bud.json' include 'assets/rivencraft/models/item/crystal_cluster.json' include 'assets/rivencraft/textures/block/small_crystal_bud.png' include 'assets/rivencraft/textures/block/medium_crystal_bud.png' include 'assets/rivencraft/textures/block/large_crystal_bud.png' include 'assets/rivencraft/textures/block/crystal_cluster.png' include 'data/rivencraft/loot_table/blocks/crystal_block.json' include 'data/minecraft/tags/block/mineable/pickaxe.json' include 'data/minecraft/tags/item/cluster_max_harvestables.json' } } tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' } tasks.named('runServer').configure { standardInput = System.in }