如何在 Minecraft Forge (Forge Gradle 3) 中添加另一个带有 mod 的 sourceSet?

How to add another sourceSet with a mod in Minecraft Forge (Forge Gradle 3)?

我有一个在 Forge 开发环境中制作的库,一个在 main 源集中,包含库代码;另一个在 testmod(或任何其他名称)源集中,包含需要作为 Forge mod.

加载的测试代码

只需添加

sourceSets {
    testmod {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output

        java {
            srcDir "src/testmod/java"
        }
        resources {
            srcDir "src/testmod/resources"
        }
    }
}

进入我的 build.gradle,Forge 不会扫描源集,因此不会加载我的 mod。我怎样才能让 Forge 加载我的 mod?

请注意,我的 mod 在 Forge 1.14.4 中,这应该适用于 Forge Gradle 3.

的所有版本

Forge 通过 minecraft/run 部分声明的 mod 加载 mod。您将需要添加以下行以使 Forge 扫描 mod 的 testmod 源集。

minecraft {
    // ...
    runs {
        client {
            // ...
            mods {
                mainmodid {
                    source sourceSets.main
                }
                testmodid {
                    source sourceSets.testmod
                }
            }
        }

        server {
            // ...
            mods {
                mainmodid {
                    source sourceSets.main
                }
                testmodid {
                    source sourceSets.testmod
                }
            }
        }
    }
}

用您自己的 modid 替换 mainmodidtestmodidmainmodid 应作为 examplemod.

包含在 MDK 中

尽管这确实会让 Forge 加载您的 类,但它无法正确找到您的 mods.toml(取决于 ForgeGradle 版本)。如果您 运行 遇到加载错误,说 mod 未在 mods.toml 中找到,请也添加以下代码段

processResources {
    from(sourceSets.testmod.resources.srcDirs) {
        include "META_INF/mods.toml"
    }
}

同样简单地添加源集 testmod 不会自动添加 Forge 和 Minecraft 作为它的依赖项。您还将拥有 add

configurations {
    testmodCompile.extendsFrom(compile)
    testmodCompileOnly.extendsFrom(compileOnly)
    testmodRuntimeOnly.extendsFrom(runtimeOnly)
}

使 Gradle 添加 Forge 和 Minecraft(testmodCompile 中的 testmod 是源集名称,请参阅 Gradle 文档)。