Visual StudioでMinecraft Mod開発

Visual StudioでMinecraft Modが開発できるらしい。
Minecraft Mod Developer Pack

Minecraft Mod

ModとはModificationの略で要はPCゲームの改造である。Minecraftは家庭用ゲーム機のソフトとしても提供されているが、PC向け以外のMinecraftのModは聞いたことがない。

Minecraft Modには以前から興味があったが何から調べて良いのかわからず今に至る。公式のMod APIは以前から検討はされているが、現時点のMinecraft Modの仕組みはユーザ有志によって作られている。

Minecraftはスキン用のサーバあるくらいで、ゲーム内で課金もなければ、ユーザごとに閉じたワールドを生成して遊ぶため各ユーザが自分のMinecraftを改造したところで開発元やワールドを共有していない他のユーザに迷惑になることがなく、開発元のMojangもそこまで厳しく禁止してこなかったのが現状だと思われる。そんな中、Minecraftの開発元であるMojangを買収したMicrosoftが開発ツールを提供したというのは半分公式と受け取れなくもない。

Minecraft Modには描画を軽くするOptiFine HDや、3D表現をよりリアルにする影Modのような描画系のユーティリティMod、木をまとめて採集する木こりModのような機能的なユーティリティMod、竹Modのような建築材料を増やすMod、機能的なアイテムを追加する工業化Mod黄昏の森のような敵キャラやワールド生成時にダンジョンを追加するModなど沢山の種類がある。複数のModを組み合わせて遊ぶユーザも少なくない。

複数のModを簡単に適応させるため Minecraft Forge というツールがある。他にもMod Loaderなど似た仕組みを提供するツールもあったが最近はForgeの1強になりつつある。ForgeはMinecraft本体を改造し、modsディレクトリに各Modのファイルを配置するだけで起動時に読み込まれるというModである。従ってMinecraft Modを作って配布する場合は、Minecraft本体を改造するよりも、Forgeで読み込める形のModを作るのが汎用的である。

PC版のMinecraftはJavaで実装されており、ModもJavaで書くことになる。公式なMod APIがないこともあり、こういった改造はMinecraft本体のバージョンが上がると互換性がなくなって各Modの開発者はMinecraftのバージョンアップに伴い修正してリリースしている。継続的に開発する情熱がないとなかなか手をだすのが難しいし、技術的に互換性を保つのが難しくなり更新が止まってしまうModもある。

と、Modを使う側としてこれくらいは知っていたが作ったことがないのでそれ以上の知識もない。

Visual Studio Minecraft Mod Developer Pack

Visual Studio Minecraft Mod Developer PackはVisual StudioにMinecraft Modを開発できるようにするプラグインで、必要な環境は以下のようになっている。

  • Visual Studio (2013 Update 4 or 2015 RC or newer)
  • Java SE Development Kit (JDK) for Windows x64

Visual Studio 2015は個人の開発者向けにProfessional相当が無料で提供されることになっているのだが、まだ正式版が出ていなかったので今回はVisual Studio 2013の無料版であるVisual Studio Community 2013 Update 4をインストールすることにした。10GBもあってHDDが辛い。

しかし、以下の順番でインストールしたせいか上手く反映されなかった。

  1. Visual Studio Community 2013 Update 4
  2. JDK 8 Windows x64
  3. Minecraft Mod Developer Pack

Visual Studioを起動しても新規プロジェクトの作成でJavaのプロジェクトが一覧に表示されなかった。とりあえず困ったときのWindows再起動をしたら、Javaのプロジェクトは選べるようになったが、Minecraft Modプロジェクトは表示されなかった。この状態でもう一回、Minecraft Mod Developer Packをインストールしたところ「既にインストールされている」と怒られたがMinecraft Modプロジェクトを選べるようになった。よくわからない。そもそもMinecraft Mod関係なくVisual StudioでJavaが書けるとは知らなかった。

プロジェクトを生成するとREADME的なものが表示され

First thing, a provisioning build of your project will start. This will happen automatically after the project is created. This build will take between 5 and 20 minutes depending on your Internet connection. The following builds will only build your source code and will be much faster.

と最初の準備にインターネットの接続で5-20分かかると書いてある。Visual Studioを見ているとGradle Wrapperが動いていてMinecraft本体+Forgeをダウンロードしているっぽい。

Visual StudioからForge適応済みのMinecraftを起動できるのはなかなか便利だと思った。しかし、どういうわけかテンプレートで作成されたModはForgeで認識されておらず初期化処理のブレークポイントも効かなかった。具体的に何か作るものがあったわけではないので詳しくは調べてないけど。

build.gradle

Minecraft Mod Developer Packのプロジェクトテンプレートで作成したプロジェクトは以下のような build.gradle ができていた。graldeのforgeプラグインがあるってわかっただけでも大きい。

buildscript {
    repositories {
        mavenCentral()
        maven {
            name = "forge"
            url = "http://files.minecraftforge.net/maven"
        }
        maven {
            name = "sonatype"
            url = "https://oss.sonatype.org/content/repositories/snapshots/"
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
    }
}

apply plugin: 'forge'

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

minecraft {
    version = "1.8-11.14.1.1357"
    runDir = "eclipse"

    // 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 allways work.
    // simply re-run your setup task after changing the mappings to update your workspace.
    mappings = "snapshot_20141130"
}

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

    // 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, thats not the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
}

まとめ

Minecraft Modの開発のために10GB近いIDEをインストールするのは少しオーバースペックな気もするが、何から始めてよいかわからない場合にこういった開発環境があるというのは大きい。

Objective-CやXcodeをみんなが使い始めたのはそれらが他のプログラミング言語やIDEと比べて優れていたからではなくてiPhoneアプリの開発がそれでできたからという側面の方が大きいと思う。だからMinecraft Modの開発ができるからという理由でVisual Studioを使い始める人がいてもおかしくない。

俺は使わないけどな。

Windowsで開発する気がさらさらなく型落ちしたWindows PCしか持っていない。Visual Studio 2010までは趣味の開発で購入していたがここ数年は起動すらしていなかった。

gradleでビルドできるなら普通にMac OS XでIntelliJ IDEAを使って開発できるんだと思う。作りたいもの思いついたら調べる。