つまづきながらもテクスチャ付きのblockを作りに成功したので、そこまでの道のりを共有します。
全体像
- 環境構築
- jdk-8のインストール
- Minecraft FORGE MDKのダウンロード
- Minecraft FORGE MDKの配置
- Minecraft FORGE MDKのビルド
- ビルドの確認
- blockの作成
- modのmainファイルの作成
- blockファイルの作成
- 既存のmod設定ファイルに情報を追加
- assets:blockstatusファイルの作成
- assets:models/blockファイルの作成
- assets:models/itemファイルの作成
- テクスチャに使う画像の設置
- 名前ファイルの作成
- blockの動作確認
- modの情報確認
- blockの動作確認
環境構築
このような流れで行います。- jdk-8のインストール
- Minecraft FORGE MDKのダウンロード
- Minecraft FORGE MDKの配置
- Minecraft FORGE MDKのビルド
- ビルドの確認
jdk-8のインストール
ubuntuの場合は下記のコマンドでインストールできます。sudo apt-get install openjdk-8-jdk
Minecraft FORGE MDKのダウンロード
記事を書いている時点で安定しているという噂の1.8.9を利用しました。Downloads - 1.8.9
Minecraft FORGE MDKの配置
先ほどダウンロードしたzipファイルを解凍したものがMDKの開発環境になるので、その前提で解凍したファイルを配置してください。自分はminecraftというディレクトリを作って、そこに配置しました。
cd ~/Downloads unzip forge-1.8.9-11.15.1.1902-1.8.9-mdk.zip mkdir ~/minecraft mv forge-1.8.9-11.15.1.1902-1.8.9-mdk ~/minecraft
Minecraft FORGE MDKのビルド
下記のコマンドでビルドします。cd minecraft/forge-1.8.9-11.15.1.1902-1.8.9-mdk/ ./gradlew setupDecompWorkspace
■自分が詰まったこと
jdk-9ではforge-1.8.9で下記のエラーが出ました。
この場合はjdkのバージョンを8に変更してください。
Could not determine java version from '9-internal'.
下記のようなエラーはソースコードのダウンロードに失敗を意味します。
ネットワークを確認して再度ビルドを実行してみてください。
* What went wrong: A problem occurred evaluating root project 'forge-1.8.9-11.15.1.1902-1.8.9-mdk'. > Failed to apply plugin [id 'net.minecraftforge.gradle.forge'] > Unable to obtain url (http://export.mcpbot.bspk.rs/versions.json) with etag!
build試行錯誤中にjavaのバージョンを切り替えたりjdkをインストールしたりすると、下記のエラーが出ました。
「--refresh-dependencies」のオプションをつけてコマンドを再実行すると、解消されることがあります。
* What went wrong: Execution failed for task ':getAssets'. > java.io.FileNotFoundException: /home/asuki/.gradle/caches/minecraft/assets/indexes/1.8.json (そのようなファイルやディレクトリはありません)参考: Finding assets error (Gradle) #116
ビルドの確認
ビルドが成功すれば、下記のコマンドでminecraftを起動できます。遊んでみてください。
cd minecraft/forge-1.8.9-11.15.1.1902-1.8.9-mdk/ ./gradlew runClient
blockの作成
下記の内容を行うことで、テクスチャ付きのブロックを作れます。- modのmainファイルの作成
- blockファイルの作成
- 既存のmod設定ファイルに情報を追加
- assets:blockstatusファイルの作成
- assets:models/blockファイルの作成
- assets:models/itemファイルの作成
- テクスチャに使う画像の設置
- 名前ファイルの作成
ファイル名で[forge_dir]と記述している部分はforge-mdkのディレクトリと解釈してください。
上記の方法でforgeをインストールした場合は[~/minecraft/forge-1.8.9-11.15.1.1902-1.8.9-mdk/]が[forge_dir]です。
なお、ファイルやディレクトリが無い場合は適宜作成してください。
では、それぞれの手順を説明していきます。
modのmainファイルの作成
modが使用できる環境の定義や、blockファイルの読み込みなどを行うファイルです。modの動作に必須です。
[forge_dir]/src/main/java/com/simplesamplemod/SimpleSample.java
package com.simplesamplemod; import net.minecraft.block.Block; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; @Mod(modid = SimpleSample.MOD_ID, name = SimpleSample.MOD_NAME, version = SimpleSample.MOD_VERSION, dependencies = SimpleSample.MOD_DEPENDENCIES, acceptedMinecraftVersions = SimpleSample.MOD_ACCEPTED_MC_VERSIONS, useMetadata = true) public class SimpleSample { public static final String MOD_ID = "simplesamplemod"; public static final String MOD_NAME = "Simple Sample Mod"; public static final String MOD_VERSION = "0.0.1"; public static final String MOD_DEPENDENCIES = "required-after:Forge@[1.8-11.14.0.1239,)"; public static final String MOD_ACCEPTED_MC_VERSIONS = "[1.8,1.8.9]"; // defined in src/com/simplesample/SimpleSampleBlock.java public static Block simpleSampleBlock; @EventHandler public void preInit(FMLPreInitializationEvent event) { simpleSampleBlock = new SimpleSampleBlock(); if ( event.getSide().isClient() ) { // load resource to render texture ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(simpleSampleBlock), 0, new ModelResourceLocation(MOD_ID + ":" + ((SimpleSampleBlock) simpleSampleBlock).getName(), "inventory")); } } }
blockファイルの作成
blockを定義するファイルです。modの動作に必須です。
[forge_dir]/src/main/java/com/simplesamplemod/SimpleSampleBlock.java
package com.simplesamplemod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraftforge.fml.common.registry.GameRegistry; public class SimpleSampleBlock extends Block { private final String name = "SimpleSampleBlock"; public SimpleSampleBlock() { super(Material.rock); GameRegistry.registerBlock(this, name); setCreativeTab(CreativeTabs.tabBlock); setUnlocalizedName(name); } public String getName() { return name; } }
既存のmod設定ファイルに情報を追加
mcmod.infoにsimplesamplemodの情報を追加します。modの動作に必須です。
[forge_dir]/src/main/resources/mcmod.info
[ { "modid": "examplemod", "name": "Example Mod", "description": "Example placeholder mod.", "version": "${version}", "mcversion": "${mcversion}", "url": "", "updateUrl": "", "authorList": ["ExampleDude"], "credits": "The Forge and FML guys, for making this example", "logoFile": "", "screenshots": [], "dependencies": [] }, { "modid": "simplesamplemod", "name": "Simple Sample Mod", "description": "Simple example sample mod.", "version": "${version}", "mcversion": "${mcversion}", "url": "", "updateUrl": "", "authorList": ["Asuki Kono"], "credits": "Simple tutorial.", "logoFile": "", "screenshots": [], "dependencies": [] } ]
assets:blockstatusファイルの作成
assetsの入り口となるファイルです。このファイルが無くてもmodは動作しますが、テクスチャが表示できません。
[forge_dir]/src/main/resources/assets/simplesamplemod/blockstates/SimpleSampleBlock.json
{ "variants": { "normal": { "model": "simplesamplemod:SimpleSampleBlock" } } }
参考: Block states
assets:models/blockファイルの作成
定義したblockの表面に表示したい画像を指定します。このファイルが無くてもmodは動作しますが、テクスチャが表示できません。
今回は「logo.png」をテクスチャに設定します。
[forge_dir]/src/main/resources/assets/simplesamplemod/models/block/SimpleSampleBlock.json
{ "parent":"block/cube_all", "textures": { "all": "simplesamplemod:blocks/logo" } }
assets:models/itemファイルの作成
今回作成するのはblockですが「blockをitemとして持った時にどのように表示するか」の定義が必要なようです。このファイルが無くてもmodは動作しますが、テクスチャが表示できません
[forge_dir]/src/main/resources/assets/simplesamplemod/models/item/SimpleSampleBlock.json
{ "parent": "simplesamplemod:block/SimpleSampleBlock", "display": { "thirdperson": { "rotation": [ 10, -45, 170 ], "translation": [ 0, 1.5, -2.75 ], "scale": [ 0.375, 0.375, 0.375 ] } } }
テクスチャに使う画像の設置
下記のパスに画像を設置しました。[forge_dir]/src/main/resource/assets/simplesamplemod/texturess/blocks/logo.png
logo.png |
16x16pxの画像が推奨されていますが、100x100pxの画像でも表示できました。
アルファチャンネル(透明色)が入っていても大丈夫でした。
名前ファイルの作成
作成したblockの名前を定義するファイルです。このファイルが無くてもmodを動かせますが、ブロックの名前が「tile.SimpleSampleBlock.name」になります。
[forge_dir]/src/main/resource/assets/simplesamplemod/lang/en_US.lang
tile.SimpleSampleBlock.name=Simple Sample Block
日本語の設定はこちらです。
[forge_dir]/src/main/resource/assets/simplesamplemod/lang/ja_JP.lang
tile.SimpleSampleBlock.name=シンプルなサンプルブロック
blockの動作確認
下記のコマンドでminectaftを実行し、作成したblockを確認してみます。cd [forge_dir] ./gradlew runClient
問題がある場合、上記コマンドを実行したコンソールにエラーが表示されます。
うまく動かない場合は見てみてください。
modの情報確認
modsを選択します。Simple Sample Modを選択して、内容を確認します。
[forge_dir]/src/main/resources/mcmod.infoに記述した情報が表示されます。
blockの動作確認
SinglePlayerを選択します。Create New Worldを選択します。
作ったmodを確認したいため、Game Modeを何回かクリックして、全てのアイテムが使えるCreativeモードを選択します。
Creativeモードが選択できたら、左下のCreate New Worldをクリックします。
Creative modeの世界へようこそ。
キーボードで「e」を押すとアイテムメニューが開きます。
ブロックのタブが選択されているので、そのメニューを下にスクロールします。
作ったblockがありました!
装備して播けます。
以上です。
modについてまだ良く分かっていませんが、ゲーム画面での確認ができたので、これをベースに試行錯誤できると思います。
足りていない設定や、間違いなどがありましたら、指摘していただけると嬉しいです。
参考
Minecraft 1.8.9 Forge の Mod 開発で Block を追加してみたUpdating 1.7 to 1.8 Part 3: Basic Blocks
Kurosawa/PerpetualCraft
Basic Modding - First Block
参考になりました。ありがとうございます。
返信削除コメントありがとうございます。
削除お役に立てたようで嬉しいです。