MinecraftForgeのMOD開発環境構築した

動機

FatCatModをv1.12対応しようと思い、MinecraftForgeのビルド環境を構築した

手順

1. MinecraftForgeのビルド環境を構築

情報は豊富にあるので割愛

2. IntelliJのマルチプロジェクト構成で構築

参考:MinecraftForge導入手順

ディレクトリ構成

MinecraftForge直下にMODのプロジェクトを配置

├── forge-1.12.2-14.23.4.2703-mdk
│   ├── CREDITS-fml.txt
│   ├── FatCatMOD
│   │   ├── FatCatMOD
│   │   ├── FatCatMOD.iml
│   │   ├── LICENSE.txt
│   │   ├── README.md
│   │   ├── build.gradle
│   │   ├── src
│   │   └── work
│   ├── LICENSE-new.txt
│   ├── MinecraftForge-Credits.txt
│   ├── Paulscode\ IBXM\ Library\ License.txt
│   ├── Paulscode\ SoundSystem\ CodecIBXM\ License.txt
│   ├── README.txt
│   ├── build
│   │   ├── classes
│   │   ├── dependency-cache
│   │   ├── libs
│   │   ├── resources
│   │   ├── sources
│   │   └── tmp
│   ├── build.gradle
│   ├── eclipse
│   ├── forge-1.12.2-14.23.4.2703-changelog.txt
│   ├── forge-1.12.2-14.23.4.2703-mdk.iml
│   ├── gradle
│   │   └── wrapper
│   ├── gradle.properties
│   ├── gradlew
│   ├── gradlew.bat
│   ├── out
│   │   └── production
│   ├── run
│   │   ├── addons
│   │   ├── config
│   │   ├── logs
│   │   ├── mods
│   │   ├── options.txt
│   │   ├── resourcepacks
│   │   ├── saves
│   │   ├── screenshots
│   │   ├── servers.dat
│   │   ├── usercache.json
│   │   └── usernamecache.json
│   ├── settings.gradle
│   └── src
│       ├── api
│       ├── main
│       └── test

/build.gradle (参考URLの内容を参考に書き換え)

buildscript {
    repositories {
        jcenter()
        maven { url = "http://files.minecraftforge.net/maven" }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
    }
}
//apply plugin: 'net.minecraftforge.gradle.forge'
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.

//version = "1.0"
//group = "com.yourname.modid" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
//archivesBaseName = "modid"

allprojects{

apply plugin: 'net.minecraftforge.gradle.forge'
    sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
    compileJava {
        sourceCompatibility = targetCompatibility = '1.8'
    }

runClient {
    args '--username', 'test1'
}


    minecraft {
    version = "1.12.2-14.23.4.2703"
    runDir = "run"
    
    // the mappings can be changed at any time, and must be in the following format.
    // snapshot_YYYYMMDD   snapshot are built nightly.
    // stable_#            stables are built at the discretion of the MCP team.
    // Use non-default mappings at your own risk. they may not always work.
    // simply re-run your setup task after changing the mappings to update your workspace.
    mappings = "snapshot_20171003"
    // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
}

archivesBaseName = project.projectDir.name
}

dependencies {
    // you may put jars on which you depend on in ./libs
    // or you may define them like so..
    //compile "some.group:artifact:version:classifier"
    //compile "some.group:artifact:version"
      
    // real examples
    //compile 'com.mod-buildcraft:buildcraft:6.0.8:dev'  // adds buildcraft to the dev env
    //compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env

    // the 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
    //provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'

    // the deobf configurations:  'deobfCompile' and 'deobfProvided' are the same as the normal compile and provided,
    // except that these dependencies get remapped to your current MCP mappings
    //deobfCompile 'com.mod-buildcraft:buildcraft:6.0.8:dev'
    //deobfProvided 'com.mod-buildcraft:buildcraft:6.0.8:dev'

    // for more info...
    // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
    // http://www.gradle.org/docs/current/userguide/dependency_management.html

}

processResources {
    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'
                
        // replace version and mcversion
        expand 'version':project.version, 'mcversion':project.minecraft.version
    }
        
    // copy everything else except the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
}

3. ビルド

MODフォルダ配下の/FatCatMOD/build.gradleからビルド (正しいやり方かはわかりませんが・・・)

/FatCatMOD/build.gradle (変更なし)

sourceSets.main {
    java.srcDirs project.projectDir.name
    resources.srcDirs project.projectDir.name
}
 
version = "1.1.0"
tasks.withType(Jar) {compileJava.options.encoding = 'UTF-8'}
tasks.withType(Jar) {compileApiJava.options.encoding = 'UTF-8'}


processResources
{
    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'
                
        // replace version and mcversion
        expand 'version':project.version, 'mcversion':project.minecraft.version
    }
        
    // copy everything else, thats not the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
}