import net.fabricmc.loom.task.RemapJarTask plugins { id 'multiloader-loader' id 'fabric-loom' } dependencies { minecraft "com.mojang:minecraft:${minecraft_version}" mappings loom.layered { officialMojangMappings() parchment("org.parchmentmc.data:parchment-${parchment_minecraft}:${parchment_version}@zip") } modImplementation(group: 'tschipp.carryon', name: 'carryon-fabric-1.21.1', version: '2.2.4.4') { transitive = false } modImplementation "net.fabricmc:fabric-loader:${fabric_loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}" modImplementation "curse.maven:jade-324717:7545228" testImplementation "net.fabricmc:fabric-loader-junit:${fabric_loader_version}" localRuntime 'net.covers1624:DevLogin:0.1.0.5' } loom { def commonResources = project(':common').file('src/main/resources/').getAbsolutePath().toString() def fabricResources = file('src/main/resources/').getAbsolutePath().toString() def fabricBuildResources = file('build/resources/main/').getAbsolutePath().toString() def commonBuildResources = project(':common').file('build/resources/main/').getAbsolutePath().toString() def generatedOutput = project(':common').file('src/generated/resources/').getAbsolutePath().toString() if (project(":common").file("src/main/resources/${mod_id}.accesswidener").exists()) { accessWidenerPath.set(project(":common").file("src/main/resources/${mod_id}.accesswidener")) } mixin { defaultRefmapName.set("${mod_id}.refmap.json") } runs { client { client() ideConfigGenerated true programArgs '--launch_target', 'net.fabricmc.loader.impl.launch.knot.KnotClient' mainClass.set 'net.covers1624.devlogin.DevLogin' setConfigName("Fabric Client") ideConfigGenerated(true) runDir("run") def args = [ "-Dlib39.modid=${mod_id}".toString(), "-Dlib39.output=${generatedOutput}".toString(), "-Dlib39.existing.fabric=${fabricResources}".toString(), "-Dlib39.existing.common=${commonResources}".toString(), "-Dlib39.existing.fabricBuild=${fabricBuildResources}".toString(), "-Dlib39.existing.commonBuild=${commonBuildResources}".toString() ] vmArgs.addAll(args) // 也可以添加JVM参数 vmArgs.addAll( "-Dfabric.log.level=info", "-Dmixin.debug.export=true" ) } server { server() serverWithGui() setConfigName("Fabric Server") ideConfigGenerated(true) runDir("run") def args = [ "-Dlib39.modid=${mod_id}".toString(), "-Dlib39.output=${generatedOutput}".toString(), "-Dlib39.existing.fabric=${fabricResources}".toString(), "-Dlib39.existing.common=${commonResources}".toString(), "-Dlib39.existing.fabricBuild=${fabricBuildResources}".toString(), "-Dlib39.existing.commonBuild=${commonBuildResources}".toString() ] vmArgs.addAll(args) } } } tasks.named('sourcesJar', Jar) { dependsOn classes dependsOn project(':common').tasks.named('sourcesJar') // 显式依赖common的source duplicatesStrategy = DuplicatesStrategy.EXCLUDE archiveClassifier.set('sources') from sourceSets.main.allSource from project(':common').sourceSets.main.allSource } // 配置javadoc任务 tasks.named('javadoc', Javadoc) { source project(':common').sourceSets.main.allJava dependsOn project(':common').tasks.named('javadoc') // 显式依赖common的javadoc source sourceSets.main.allJava classpath = configurations.compileClasspath classpath += project(':common').sourceSets.main.compileClasspath options.encoding = 'UTF-8' options.charSet = 'UTF-8' options.links("https://docs.oracle.com/en/java/javase/21/docs/api/") options.memberLevel = JavadocMemberLevel.PUBLIC options.addBooleanOption('Xdoclint:none', true) options.addStringOption('doctitle', "${mod_id} ${minecraft_version} ${version} Javadoc") } // 配置javadocJar任务 tasks.named('javadocJar', Jar) { dependsOn javadoc duplicatesStrategy = DuplicatesStrategy.EXCLUDE archiveClassifier.set('javadoc') from javadoc.destinationDir from project(':common').javadoc.destinationDir } // 确保build任务包含所有需要的jar tasks.named('build') { dependsOn tasks.named('sourcesJar') dependsOn tasks.named('javadocJar') } // 配置remap任务以包含sources和javadoc remapJar { dependsOn tasks.named('sourcesJar') dependsOn tasks.named('javadocJar') inputFile.set(tasks.named('jar').get().archiveFile) addNestedDependencies = false } remapSourcesJar { dependsOn tasks.named('sourcesJar') inputFile.set(tasks.named('sourcesJar').get().archiveFile) } // 将remapped artifacts添加到发布配置 publishing { publications { mavenJava(MavenPublication) { // 重置artifactsId artifactId = "${mod_id}-fabric-${minecraft_version}" artifacts.clear() // 手动添加需要的artifacts artifact(remapJar) { builtBy remapJar } artifact(remapSourcesJar) { builtBy remapSourcesJar classifier = 'sources' } artifact(javadocJar) { builtBy javadocJar classifier = 'javadoc' } } } test { useJUnitPlatform() } tasks.named('generateMetadataFileForMavenJavaPublication') { dependsOn tasks.named('remapJar') dependsOn tasks.named('remapSourcesJar') dependsOn tasks.named('javadocJar') } }