2017年10月16日月曜日

ドメイン取りました

移管しよう思ってて期日すぎちゃったので,折角だからとドメイン違うところでとって移行することにしました.

このブログのURLは次の通りです.


メインHPのドメインも近いうちに変えます.

2017年10月9日月曜日

メイドモデルの話。(続)


前回「できるならモデル作り直したい~」とかいう話をした。まあ、互換性を損なう気は毛頭無いのだが。

さて、先日ついったーでとあるモデラーの方が
ModLoaderもDecompileFixも泥箱死んでね?詰んでね?
というようなことを仰っていた。ブロマガ探すと記事が出てくるあたり隠す気がないがまあ要するに、1.6.xでのメイドモデル制作が、新規にできなくなってしまったというわけだ。
現環境を持っている人は、使い続ければいいのだけれど、とっくに1.6.xの黄金期も過ぎたので、ここでは1.7.10以上向けにメイドモデルを制作する手順について、軽くまとめようと思う。

とは言っても、現状1.7.10版のソースで環境を構築するのはちょっと面倒っぽいので、一回りして、私が前に作っていたLittleMaidMobNX(1.8.x向け)ソースを使って、対応することにする。

◆なぜ1.7.10で環境を作らないの?

※お急ぎの方は読み飛ばしてください

まず、最新のソースの入手が面倒というのが第一なんだけど、LMMXはmods以下の走査しかしてくれなくて、開発環境にあるビルド物は読んでくれない、という仕様になっている。
つまり製品版環境に成果物をすべてぶち込まないと、デバッグもまともにできないという仕様なのである。
そこでLMMNXでは、開発環境内のソースを読んでくれる仕様を追加していた。開発環境でも実環境でも、これで普通に動かせるようになる。

この間ちょっと手を加えて、この手順のために少しはマシに使えるようにしたんだけど、前回言った通りどこで何を読み込んでいるか把握しきれてないから、どこかで多重ロードしてたりしてちょっと遅いのは御愛嬌…

◆注意事項


基本的に、この手順で作成した「モデル」は、本家LMMとの互換性を持たない。つまり、ここで作成したモデルは、1.7.xより前のバージョンで使うことはできない。ただし、classファイルをちょっとごにょごにょすれば、一応1.6.xで使用する使うことは可能。詳しくはまた次回で軽く解説することにする。

ここで作成したモデルは基本的に、EMB4氏による1.7.10版littleMaidMobX、私制作のLittleMaidMobNX(1.8.x),LittleMaidReengaged(1.9.4+)での使用を想定する。現在、GitHub上でもClone,Forkプロジェクトがいくつか存在していて、そちらを使用する場合は、互換性を失っている場合があるので注意すること。

なお、「テクスチャ」だけ制作する場合は、無理にこのページの操作を行う必要はない。規定通り画像を配置して、zipに詰め込んで終わりである。

◆必要なもの

必須
  • Java Development Kit 8(JREではなく JDK)
  • 7-zip : ZIPを解凍せずに操作可能なツールであれば、代替可
  • ライセンス購入済みのMinecraft(Java Edition) および、Minecraft ForgeとlittleMaidMobX/LittleMaidMobNXを導入してプレイ可能な実環境 ※規約上、Modding環境の利用には製品の所有が必須である
推奨
  • Techne : 復旧版が利用可能。(MCForumに上がっていたもの,直リン注意)
  • git : Windows環境の場合Git for Windowsを別途入手すると楽。
  • eclipse : JavaとGradleを扱えるなら、何でもよい。今回は,eclipseを用いた手順を解説。

◆環境の準備


このページの、環境をeclipseにインポートするまでの手順を、新しいバージョンに書き換えたもの。
  1. 適当なディレクトリ(以下「作業ディレクトリ」とする)を作る。
  2. 作業ディレクトリの下に「root」ディレクトリを作る。
  3. 1.8用のForge MDK(開発キット)を用意する。以下のサイトから、適当な1.8用のForgeを選び、「mdk」をクリックしてアーカイブをダウンロードする。
    http://files.minecraftforge.net/
  4. MDKを、rootディレクトリに解凍する。
  5. EBLib(LMMNXの前提ライブラリ)のソースをダウンロードする。以下のページを開き、「Clone or Download」->「Download ZIP」の順にクリック。
    https://github.com/Verclene/EBLib/tree/forModelDev
  6. 作業ディレクトリに「EBLib」というディレクトリを作り、中に5.でダウンロードしたzipを解凍する。「EBLib」の直下に「src」がある状態にすること。

    gitを使っている人は、git cloneから、forModelDevをcheckoutすればOK
  7. 同様に、作業ディレクトリに「LittleMaidMobNX」というディレクトリを作り、LMMNXのソースをダウンロードする。さっきのように、ページを開いて「Clone or Download」->「Download ZIP」する。
    https://github.com/Verclene/LittleMaidMobNX

    もちろんgit cloneしてもOK。こちらは最新コミットの状態にしておく。
  8. この状態では、開発環境に読ませるファイルが足りないので追加する。
    「LittleMaidMobNX」ディレクトリに、「build.gradle」という名前のファイルを作成し、内容は以下のようにする。同じ名前のファイルが複数個所にあるので、取り違えないように。
    
    sourceSets.main {
     java.srcDirs project.projectDir.name
     resources.srcDirs project.projectDir.name
    }
    jar {
     doFirst {
      archivesBaseName = "[1.8.x]LittleMaidMobNX"
     }
     
     manifest {
      attributes 'FMLCorePlugin' : 'mmmlibx.lib.multiModel.MMMLoader.MMMCoremod'
      attributes 'FMLCorePluginContainsFMLMod' : 'true'
     }
    }
    dependencies { compile project (':EBLib') }
    runClient {
     args('-username=Player001')
    }
    tasks.withType(Jar) {compileJava.options.encoding = 'UTF-8'}
    tasks.withType(Jar) {compileApiJava.options.encoding = 'UTF-8'}
    
  9. もうすこし細工が必要。「root」ディレクトリにある、build.gradle内の次の部分を探して、
    
    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.4.1563"
        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 allways work.
        // simply re-run your setup task after changing the mappings to update your workspace.
        mappings = "snapshot_20141130"
        // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
    }
    

    次のように書き換える。(不要なコメントは削除してよい)
    
    allprojects{
        apply plugin: 'net.minecraftforge.gradle.forge'
    
        minecraft {
            version = "1.8-11.14.4.1563"
            runDir = "run"
    
            mappings = "snapshot_20141130"
        }
    }
    
  10. 同じく「root」ディレクトリに、「settings.gradle」というファイルを新規作成し、次の内容を入力。
    
    includeFlat 'EBLib', 'LittleMaidMobNX'
    
  11. ここまでできたら「root」ディレクトリでShift+右クリックから「コマンドウィンドウをここに開く」もしくは「PowerShellウィンドウをここに開く」をクリック。
  12. 次のコマンドを入力する。
    
    .\gradlew setupDecompWorkspace
    

    これを打てば、あとは自動で、Forgeの開発環境をセットアップすると同時に、開発環境でEBLibとLMMNXを動かせる状態にしてくれる。

    うまくいかない人は、gradleファイルの記述にミスがないか、JAVA_HOMEがJDKのディレクトリに設定されているか確認。

    IDEを使わないなら、これで準備は完了。カレントディレクトリはそのまま、次のコマンドを打つと、開発環境でテストプレイができる。最初に試しに動かしてみるとよい。.\gradlew :LittleMaidMobNX:runClient
  13. プロジェクトをeclipseにインポートする。適当にワークスペースを作ったら、「File」->「Import...」->「Gradle」の中にある「Existing Gradle Project」を選択して、「Next」をクリック。
  14. 「Welcome」画面は飛ばして、この画面になったら、「Project root directory」に、さっきの「root」ディレクトリのパスを指定する。
  15. Import Optionsの設定は特に弄らずNext.
  16. Import Previewの画面で、「root」->「Finish」をクリックすれば終わり。ワークスペースに「root」「LittleMaidMobNX」「EBLib」の3つのプロジェクトが出現しているはず。

◆モデルを弄る際の注意点

※eclipseがあるとリファクタリングが楽です

基本的には狐氏のこのページに書いてある内容に準ずる。ただし、モデルのベースとなるクラス名が、1.7.10からは変更されたため、そのまま書いてもエラーでコンパイルすら通してくれない。

ちょっと難しい話になるけど、Javaというのはオブジェクト指向型の言語で、クラス(class)ごとにデータの操作方法を定義しておくことで、抽象的にデータを扱えることを目的としている。
実際のデータはクラスのインスタンス(instance)というものに保存されるんだけど、平たく言えば、「このクラスを使ってデータを作ると、こんなことができるぞ」というのを書いておくのが.javaファイルである。
リトルメイドのモデルは、専用のクラスを書くことで、パーツやアニメーションが定義される。

で、クラスは継承(extend)をすることで、その機能を拡張したり、継承元のクラスの動作を変更したりできる。今回、問題になるのはその継承で、モデルを制作するにあたり使用する、ベースとなるクラスの名前が変わっているために、このようなことが起きる。

「MMM_」で始まる以下のクラスは、mmmlibx.lib.multiModel.model.mc162以下に、「MMM_」がなくなった名前で存在している。

MMM_EquippedStabilizer
MMM_IModelBaseMMM
MMM_IModelCaps
MMM_ModelBase
MMM_ModelBaseDuo
MMM_ModelBaseNihil
MMM_ModelBaseSolo
MMM_ModelBox
MMM_ModelBoxBase
MMM_ModelCapsHelper
MMM_ModelLittleMaid_AC
MMM_ModelLittleMaid_Archetype
MMM_ModelLittleMaid_Orign
MMM_ModelLittleMaid_RX2
MMM_ModelLittleMaid_Aug
MMM_ModelLittleMaid_SR2
MMM_ModelLittleMaidBase
MMM_ModelMultiBase
MMM_ModelMultiMMMBase
MMM_ModelPlate
MMM_ModelRenderer
MMM_ModelStabilizerBase

つまるところ、各ソースコードの先頭に次の一文を書き、

import mmmlibx.lib.multiModel.model.mc162.*;

上のクラス名を用いている部分から、「MMM_」を消せばよい。

あとあと面倒くさいので、モデルクラスを新規作成する場所はパッケージを分けておくとよい。
デフォルトパッケージでも構わない。

◆出力方法


rootディレクトリで再びコマンドウィンドウ(もしくはPowerShell)を開き、次のコマンドを打つと、LittleMaidMobNXごと「LittleMaidMobNX/build/libs」の下にjarファイルになってできているはず。

.\gradlew :LittleMaidMobNX:build

-sourcesがついていないほうのjarを、念のためどこかしらのディレクトリにコピーして、7-zipで自分で作成したモデルやテクスチャ以外のファイルを削除してしまえば、モデルだけのファイルが出来上がり。
1.7.10で読み込ませる場合は、jarファイル名を「littleMaidMob」から始めないと読み込まれないので注意。


あとでもうちょっとわかりやすく書き直す。