Модульный проект

Версия Minecraft
1.16.5
API
Forge
1,560
86
204
Я реально не хотел создавать этот вопрос, но уже все методы с форума и с интернета перепробовал.
Вообщем, я хочу для примера сделать мод 1 и мод 2 как модули, и я хочу чтобы при запуске мода 1 запускался и мод 2.
Сделал два проекта модулями вот так вот:
Screenshot_1.png
(Генерировал проекты с помощью плагина MinecraftDevelopment)

Потом добавил в модуль testmod1.main (пробовал и просто в testmod) модули testmod2, testmod2.main и т.д.
Screenshot_2.png

Пробовал разные варианты, но при запуске высвечивается только мод 1. Пробовал также использовать Gradle с помощью compile project("testmod2") и т.д., всё равно не работает как надо. Спасибо заранее за помощь.
 

will0376

Токсичная личность
2,075
55
584
Лично что я знаю:
1) или создавать 1 общий проект, а в нём уже 2 нужных, цепляя второй к первому через грабли
2) или git submodule(что использую я для разделения мода на открытую и закрытую части)
 

Icosider

Kotliner
Администратор
3,603
99
664
1. Делаем include нужного проекта в settings.gradle
2. В зависимостях указываем мод, который тебе нужен

Если у тебя моды в разных репозиториях содержаться, то пропиши git submodule(будет также отображаться в репозитории на гите как папочка)
 
1,560
86
204

Icosider

Kotliner
Администратор
3,603
99
664
Значит неправильно делал, тебе надо прописать в settings.gradle название своего основного проекта, затем сделать include необходимого проекта. Если он находится в другой папке, то includeBuild('../nameFolder')

Нет, у тебя проект gradle, тебе вообще не нужно ничего в ide трогать. Добавлять зависимость надо так: compile 'group:name:version'
 
1,560
86
204
Сейчас просто не может найти через compile
settings.properties:
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false

rootProject.name = "TestMod1"

include "TestMod1"
includeBuild "../TestMod2"
Код:
// .... //

apply plugin: "java"

apply from: "../TestMod2/build.gradle"

// .... //

dependencies {
    minecraft 'net.minecraftforge:forge:1.16.5-36.1.4'

    compile "testmod2:TestMod2:1.0"
}

// .... //
Краш билда:
Could not find testmod2:TestMod2:1.0.
Searched in the following locations:
  - https://files.minecraftforge.net/maven/testmod2/TestMod2/1.0/TestMod2-1.0.pom
  - https://files.minecraftforge.net/maven/testmod2/TestMod2/1.0/TestMod2-1.0.jar
  - file:/C:/Users/Max/.gradle/caches/forge_gradle/bundeled_repo/testmod2/TestMod2/1.0/TestMod2-1.0.pom
  - file:/C:/Users/Max/.gradle/caches/forge_gradle/bundeled_repo/testmod2/TestMod2/1.0/TestMod2-1.0.jar
  - https://libraries.minecraft.net/testmod2/TestMod2/1.0/TestMod2-1.0.jar
  - https://repo.maven.apache.org/maven2/testmod2/TestMod2/1.0/TestMod2-1.0.pom
  - https://repo.maven.apache.org/maven2/testmod2/TestMod2/1.0/TestMod2-1.0.jar
Required by:
    project :

Possible solution:
- Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
 

Icosider

Kotliner
Администратор
3,603
99
664
Фигню пишешь, во первых, файл должен быть: settings.gradle, а ты судя по аргументам граблей написал в gradle.properties.
Во-вторых, тебе не надо делать apply from, потому что твой проект это не плагин для граблей. Создай flatDir в репозиториях, укажи туда путь до папки своего проекта, а потом цепляйся. Только не забудь во втором проекте создать файл settings.gradle с названием проекта, иначе цепляться не будет
 
1,560
86
204
Gradle (Groovy):
buildscript {
    repositories {
        maven { url = 'https://files.minecraftforge.net/maven' }
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
    }
}

apply plugin: 'net.minecraftforge.gradle'

group = 'testmod1'
version = '1.0-SNAPSHOT'
archivesBaseName = 'testmod1'

sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8'

minecraft {
    mappings channel: 'snapshot', version: '20210309-1.16.5'

    runs {
        client {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
            property 'forge.logging.console.level', 'debug'

            mods {
                testmod1 {
                    source sourceSets.main
                }
            }
        }

        server {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
            property 'forge.logging.console.level', 'debug'

            mods {
                testmod1 {
                    source sourceSets.main
                }
            }
        }

        data {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
            property 'forge.logging.console.level', 'debug'

            args '--mod', 'testmod1', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')

            mods {
                testmod1 {
                    source sourceSets.main
                }
            }
        }
    }
}

sourceSets.main.resources { srcDir 'src/generated/resources' }

repositories {
    flatDir {
        dirs "../TestMod2"
    }
}

dependencies {
    minecraft 'net.minecraftforge:forge:1.16.5-36.1.4'

    compile "testmod2:TestMod2:1.0"
}

jar {
    manifest {
        attributes([
                "Specification-Title"     : "testmod1",
                "Specification-Version"   : "1",
                "Implementation-Title"    : project.name,
                "Implementation-Version"  : project.version,
                "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
        ])
    }
}

jar.finalizedBy('reobfJar')
Gradle (Groovy):
rootProject.name = "TestMod1"

includeBuild "../TestMod2"
Gradle (Groovy):
buildscript {
    repositories {
        maven { url = 'https://files.minecraftforge.net/maven' }
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
    }
}

apply plugin: 'net.minecraftforge.gradle'

group = 'testmod2'
version = '1.0-SNAPSHOT'
archivesBaseName = 'testmod2'

sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8'

minecraft {
    mappings channel: 'snapshot', version: '20210309-1.16.5'

    runs {
        client {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
            property 'forge.logging.console.level', 'debug'

            mods {
                testmod2 {
                    source sourceSets.main
                }
            }
        }

        server {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
            property 'forge.logging.console.level', 'debug'

            mods {
                testmod2 {
                    source sourceSets.main
                }
            }
        }

        data {
            workingDirectory project.file('run')
            property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
            property 'forge.logging.console.level', 'debug'

            args '--mod', 'testmod2', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')

            mods {
                testmod2 {
                    source sourceSets.main
                }
            }
        }
    }
}

sourceSets.main.resources { srcDir 'src/generated/resources' }

dependencies {
    minecraft 'net.minecraftforge:forge:1.16.5-36.1.4'
}

jar {
    manifest {
        attributes([
                "Specification-Title"     : "testmod2",
                "Specification-Version"   : "1",
                "Implementation-Title"    : project.name,
                "Implementation-Version"  : project.version,
                "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
        ])
    }
}

jar.finalizedBy('reobfJar')
Gradle (Groovy):
rootProject.name = 'TestMod2'
 
Лично что я знаю:
1) или создавать 1 общий проект, а в нём уже 2 нужных, цепляя второй к первому через грабли
2) или git submodule(что использую я для разделения мода на открытую и закрытую части)
Второй вариант всегда использую.
 
7,099
324
1,510
Открой профиль запуска зависимого мода и добавь таску prepareRunClient(или Server, или Data) зависимости
1617796734242.png
Например, у меня ModB зависит от ModA
~~~
Вообще, по идее надо указывать зависимость таски :ModB:prepareRunClient от :ModA:prepareRunClient, однако эти таски создаются когда-то потом и если просто в билд-скрипт вставить tasks.prepareRunClient.dependsOn ':ModA:prepareRunClient', то это не работает
 
Последнее редактирование:
7,099
324
1,510
1,560
86
204
Спасибо! Сделал всё как написано, но всё равно не работает)
Может это из-за того, что я запускаю из определённого модуля (см. картинки снизу)? Может такое быть?
Screenshot_1.png
Screenshot_2.png
 
7,099
324
1,510
Обновил репу, чекни последние 4 коммита, особенно 4 и 3 с конца
 
Сверху