IntelliJを使っていよいよメイドさんのコードを記述します
tabulaと異なり一気に文字だらけになります
なおIntelliJである必要はないです。
正直エクリプスのほうがいいです
最低限JDK8のインストールは済ませる必要があります(エクリプスなら多分不要!)
ふわ@ふーの人 さんがMinecraft1.12.2用のリトルメイドマルチモデル開発環境を公開されているので利用します
https://github.com/firis-games/LittleMa ... /releases/
上から順番にそれぞれのバージョンを確認してLittleMaidModelProjectという名前が付いた最も新しいファイルをダウンロードします
ダウンロード後
https://github.com/firis-games/LittleMa ... delProject
を参照して手順通りに進めます
すべて完了したら次のステップに進みます
メイドさんをエクスポート
マインクラフトを起動しtabulaの画面に移動します。その後完成したメイドさんのプロジェクトを開きます
左上のボタンからドアと赤い矢印のエクスポートを選びます
その後Java Classを選択、package for classは適当で問題ないです
OKボタンを押すとマインクラフトのゲームディレクトリ、mods、tabulaの中にあるexportフォルダに.javaのファイルが保存されています
そのファイルを使ってメイドさんのコードを記述すると楽だと思います
結果としてメイドさんのコードが記述できれば良いのでtabulaじゃないとダメ!というわけではないです
コード記述
最初にあったbipedBody.addbox(ナントカカントカ)がようやく出てきます
エクリプスなどを使ってtabulaから出力したエクスポートメイド(.java)を開きます。以下exメイドと表記します
メイドさん開発環境にあるModelLittleMaid_SampleMaidModelを以下サンプルメイドと表記します
ここまで来たら差分を抽出してちょっと変えるだけです
ここでの差分抽出とはtabulaメイドさんプロジェクトの普通のメイドさんになくて、あなたが作成したメイドさんが持つ要素だけを取り出すということです
tabulaの普通のメイドさんもエクスポートしておくと楽ですかね…普通メイドさんファイルを上書き保存してしまった場合は再ダウンロードで解決します
最初にthis.パーツ名のthis.が邪魔なので置換機能を使って全て消します
this.があると見にくいだけであっても問題はないです
this,は必要!間違えないこと
例えば猫耳マウントパーツだけを付けるなら以下のものが必要です
public ModelRenderer nekomimiMount;
nekomimiMount = new ModelRenderer(this, 0, 0);
nekomimiMount.setRotationPoint(0.0F, -4.0F, 0.0F);
nekomimiMount.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F);
HeadMount.addChild(nekomimiMount);
コード: 全て選択
package cat;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
/**
* ModelLittleMaidBaseVer1 - Undefined
* Created using Tabula 7.1.0
*/
public class catModelLittleMaidBaseVer1 extends ModelBase {
public ModelRenderer mainFrame;
public ModelRenderer bipedTorso;
public ModelRenderer bipedNeck;
public ModelRenderer bipedBody;
public ModelRenderer bipedPelvic;
public ModelRenderer bipedHead;
public ModelRenderer bipedRightArm;
public ModelRenderer bipedLeftArm;
public ModelRenderer HeadMount;
public ModelRenderer HeadTop;
public ModelRenderer nekomimiMount;
public ModelRenderer nekomimiMountRight;
public ModelRenderer nekomimiMountLeft;
public ModelRenderer hadamimiL;
public ModelRenderer sotomimiL1;
public ModelRenderer sotomimiL2;
public ModelRenderer Arms0;
public ModelRenderer Arms1;
public ModelRenderer bipedRightLeg;
public ModelRenderer bipedLeftLeg;
public ModelRenderer Skirt;
public catModelLittleMaidBaseVer1() {
textureWidth = 64;
textureHeight = 32;
bipedPelvic = new ModelRenderer(this, 0, 0);
bipedPelvic.setRotationPoint(0.0F, 7.0F, 0.0F);
bipedPelvic.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F);
nekomimiMount = new ModelRenderer(this, 0, 0);
nekomimiMount.setRotationPoint(0.0F, -4.0F, 0.0F);
nekomimiMount.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F);
bipedNeck = new ModelRenderer(this, 0, 0);
bipedNeck.setRotationPoint(0.0F, 0.0F, 0.0F);
bipedNeck.addBox(0.0F, 0.0F, 0.0F, 0, 0, 0, 0.0F);
sotomimiL1 = new ModelRenderer(this, 8, 0);
sotomimiL1.setRotationPoint(-0.4F, -1.3F, -0.1F);
sotomimiL1.addBox(0.0F, 0.0F, 0.0F, 3, 1, 1, 0.0F);
setRotateAngle(sotomimiL1, 0.0F, 0.0F, 0.19303341527057286F);
nekomimiMountRight = new ModelRenderer(this, 0, 0);
nekomimiMountRight.setRotationPoint(0.0F, 0.0F, 0.0F);
nekomimiMountRight.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F);
HeadTop = new ModelRenderer(this, 0, 0);
HeadTop.setRotationPoint(0.0F, -13.0F, 0.0F);
HeadTop.addBox(0.0F, 0.0F, 0.0F, 0, 0, 0, 0.0F);
hadamimiL = new ModelRenderer(this, 17, 4);
hadamimiL.setRotationPoint(0.0F, 0.0F, 0.0F);
hadamimiL.addBox(0.0F, 0.0F, 0.0F, 2, 2, 1, 0.0F);
bipedLeftLeg = new ModelRenderer(this, 32, 19);
bipedLeftLeg.mirror = true;
bipedLeftLeg.setRotationPoint(1.0F, 0.0F, 0.0F);
bipedLeftLeg.addBox(-1.0F, 0.0F, -2.0F, 3, 9, 4, 0.0F);
Arms1 = new ModelRenderer(this, 0, 0);
Arms1.setRotationPoint(1.0F, 5.0F, -1.0F);
Arms1.addBox(0.0F, 0.0F, 0.0F, 0, 0, 0, 0.0F);
nekomimiMountLeft = new ModelRenderer(this, 0, 0);
nekomimiMountLeft.setRotationPoint(0.6F, 0.5F, 0.0F);
nekomimiMountLeft.addBox(0.0F, 0.0F, 0.0F, 0, 0, 0, 0.0F);
setRotateAngle(nekomimiMountLeft, 0.0F, 0.0F, -0.8466592201424491F);
Arms0 = new ModelRenderer(this, 0, 0);
Arms0.setRotationPoint(-1.0F, 5.0F, -1.0F);
Arms0.addBox(0.0F, 0.0F, 0.0F, 0, 0, 0, 0.0F);
Skirt = new ModelRenderer(this, 0, 16);
Skirt.setRotationPoint(0.0F, 0.0F, 0.0F);
Skirt.addBox(-4.0F, -2.0F, -4.0F, 8, 8, 8, 0.0F);
sotomimiL2 = new ModelRenderer(this, 8, 0);
sotomimiL2.setRotationPoint(1.5F, -1.0F, 0.1F);
sotomimiL2.addBox(0.0F, 0.0F, 0.0F, 1, 3, 1, 0.0F);
HeadMount = new ModelRenderer(this, 0, 0);
HeadMount.setRotationPoint(0.0F, -4.0F, 0.0F);
HeadMount.addBox(0.0F, 0.0F, 0.0F, 0, 0, 0, 0.0F);
bipedHead = new ModelRenderer(this, 0, 0);
bipedHead.setRotationPoint(0.0F, 0.0F, 0.0F);
bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 0.0F);
bipedRightLeg = new ModelRenderer(this, 32, 19);
bipedRightLeg.setRotationPoint(-1.0F, 0.0F, 0.0F);
bipedRightLeg.addBox(-2.0F, 0.0F, -2.0F, 3, 9, 4, 0.0F);
bipedRightArm = new ModelRenderer(this, 48, 0);
bipedRightArm.setRotationPoint(-3.0F, 1.5F, 0.0F);
bipedRightArm.addBox(-2.0F, -1.0F, -1.0F, 2, 8, 2, 0.0F);
bipedLeftArm = new ModelRenderer(this, 56, 0);
bipedLeftArm.setRotationPoint(3.0F, 1.5F, 0.0F);
bipedLeftArm.addBox(0.0F, -1.0F, -1.0F, 2, 8, 2, 0.0F);
bipedTorso = new ModelRenderer(this, 0, 0);
bipedTorso.setRotationPoint(0.0F, 0.0F, 0.0F);
bipedTorso.addBox(0.0F, 0.0F, 0.0F, 0, 0, 0, 0.0F);
mainFrame = new ModelRenderer(this, 0, 0);
mainFrame.setRotationPoint(0.0F, 0.0F, 0.0F);
mainFrame.addBox(0.0F, 0.0F, 0.0F, 0, 0, 0, 0.0F);
bipedBody = new ModelRenderer(this, 32, 8);
bipedBody.setRotationPoint(0.0F, 0.0F, 0.0F);
bipedBody.addBox(-3.0F, 0.0F, -2.0F, 6, 7, 4, 0.0F);
bipedTorso.addChild(bipedPelvic);
HeadMount.addChild(nekomimiMount);
bipedTorso.addChild(bipedNeck);
nekomimiMountLeft.addChild(sotomimiL1);
nekomimiMount.addChild(nekomimiMountRight);
bipedHead.addChild(HeadTop);
nekomimiMountLeft.addChild(hadamimiL);
bipedPelvic.addChild(bipedLeftLeg);
bipedLeftArm.addChild(Arms1);
nekomimiMount.addChild(nekomimiMountLeft);
bipedRightArm.addChild(Arms0);
bipedPelvic.addChild(Skirt);
nekomimiMountLeft.addChild(sotomimiL2);
bipedHead.addChild(HeadMount);
bipedNeck.addChild(bipedHead);
bipedPelvic.addChild(bipedRightLeg);
bipedNeck.addChild(bipedRightArm);
bipedNeck.addChild(bipedLeftArm);
mainFrame.addChild(bipedTorso);
bipedTorso.addChild(bipedBody);
}
@Override
public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {
mainFrame.render(f5);
}
/**
* This is a helper function from Tabula to set the rotation of model parts
*/
public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) {
modelRenderer.rotateAngleX = x;
modelRenderer.rotateAngleY = y;
modelRenderer.rotateAngleZ = z;
}
}
とりあえず追加したパーツが出てこない行を全て削除します
下の方の.addChildは複雑で削除ミスしやすいので気を付けてください
独自のパーツのみを抽出したもの
コード: 全て選択
public ModelRenderer nekomimiMount;
public ModelRenderer nekomimiMountRight;
public ModelRenderer nekomimiMountLeft;
public ModelRenderer hadamimiL;
public ModelRenderer sotomimiL1;
public ModelRenderer sotomimiL2;
nekomimiMount = new ModelRenderer(this, 0, 0);
nekomimiMount.setRotationPoint(0.0F, -4.0F, 0.0F);
nekomimiMount.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F);
sotomimiL1 = new ModelRenderer(this, 8, 0);
sotomimiL1.setRotationPoint(-0.4F, -1.3F, -0.1F);
sotomimiL1.addBox(0.0F, 0.0F, 0.0F, 3, 1, 1, 0.0F);
setRotateAngle(sotomimiL1, 0.0F, 0.0F, 0.19303341527057286F);
nekomimiMountRight = new ModelRenderer(this, 0, 0);
nekomimiMountRight.setRotationPoint(0.0F, 0.0F, 0.0F);
nekomimiMountRight.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F);
hadamimiL = new ModelRenderer(this, 17, 4);
hadamimiL.setRotationPoint(0.0F, 0.0F, 0.0F);
hadamimiL.addBox(0.0F, 0.0F, 0.0F, 2, 2, 1, 0.0F);
nekomimiMountLeft = new ModelRenderer(this, 0, 0);
nekomimiMountLeft.setRotationPoint(0.6F, 0.5F, 0.0F);
nekomimiMountLeft.addBox(0.0F, 0.0F, 0.0F, 0, 0, 0, 0.0F);
setRotateAngle(nekomimiMountLeft, 0.0F, 0.0F, -0.8466592201424491F);
sotomimiL2 = new ModelRenderer(this, 8, 0);
sotomimiL2.setRotationPoint(1.5F, -1.0F, 0.1F);
sotomimiL2.addBox(0.0F, 0.0F, 0.0F, 1, 3, 1, 0.0F);
HeadMount.addChild(nekomimiMount);
nekomimiMountLeft.addChild(sotomimiL1);
nekomimiMount.addChild(nekomimiMountRight);
nekomimiMountLeft.addChild(hadamimiL);
nekomimiMount.addChild(nekomimiMountLeft);
nekomimiMountLeft.addChild(sotomimiL2);
削除が終わったらpublic ModelRendererにあるパーツ行とaddChildのパーツ行を数えます
一致しなければどこかを間違って削除しているかと思います
差分を移動させる
削除完了したらサンプルメイド(開発環境側)にexメイド(tabulaエクスポート)のコードを移していきます
public ModelRenderer パーツ名;はすべて
public class ModelLittleMaid_SampleMaidModel extends ModelLittleMaid_SR2 {
この中に入れます
public ModelRenderer nekomimiMount;
public ModelLittleMaid_SampleMaidModel() {
super();
}
他はすべて
@Override
public void initModel(float psize, float pyoffset) {
super.initModel(psize, pyoffset);
この中に入れます
nekomimiMount = new ModelRenderer(this, 0, 0);
nekomimiMount.setRotationPoint(0.0F, -4.0F, 0.0F);
nekomimiMount.addBox(0.0F, 0.0F, 0.0F, 1, 1, 1, 0.0F);
HeadMount.addChild(nekomimiMount);
}
コードの書き換え
.addbox(.... ,0.0F);の最後の0.0Fはパーツ拡大率を表すようなので,0.0fを削除します
setRotationPointはそのまま
角度変更した場合にあるsetRotateAngle(sotomimiL1, 0.0F, 0.0F, 0.19303341527057286F);などは
sotomimiL1.setRotateAngle(0.0F, 0.0F, 0.19303341527057286F);に入れ替えます
ここまできたらコード部分も完成です
ビルド
LMMModelProjectの説明の一番最後にある5.メイドモデルをzip化にそって行います
なお名前変更に関してはサンプルメイドのサンプルマルチモデル定義のコメントに説明があります
// コメント
/*
これとかがコメントです
*/
名前変更する場合はエクリプス等のリファクタリング(名前変更)を使ってください
かなり急ぎ足で作成したので変な箇所があるかもしれません
意見は是非。
このトピックだけではなくマルチモデル作成のサイトはあるので、他の情報も検索してみてください
ただし、利用規約などは順守してください
メモ書き: 今まで気がついていませんでしたがinitModel辺りは開発環境で自動生成したメソッドでした。
配布されているモデルプロジェクトではメソッドが存在しないため生成か追加する必要があります。
不明確な部分なので
金曜日の夜に修正します