提供: Minecraft Modding Wiki
この記事は1.8のブロック追加を読んだ事を前提としています。 |
この記事は"Minecraft Forge Universal 11.14.3.1487~"を前提MODとしています。 |
簡単なB3Dモデル利用ブロックの追加方法
ブロックの追加
注意:一度入れたMODを外すと、再び入れてもテクスチャが反映されなくなります。デバッグ時にご注意を。
通常のブロック追加と同様の箇所の解説は省きます。1.8のブロック追加を参照のこと。
※:使用するB3Dのオブジェクトはエディタで1つにまとめておくこと。
ソースコード
- SampleB3DModelMod.java
package com.example.examplemod; 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.client.model.b3d.B3DLoader; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.registry.GameRegistry; /** * Modエントリークラス */ @Mod(modid = SampleMod.MOD_ID, name = SampleMod.MOD_NAME, version = SampleMod.MOD_VERSION, dependencies = SampleMod.MOD_DEPENDENCIES, acceptedMinecraftVersions = SampleMod.MOD_ACCEPTED_MC_VERSIONS, useMetadata = true) public class SampleMod { /** ModId文字列 */ public static final String MOD_ID = "sampleb3dmod"; /** MOD名称 */ public static final String MOD_NAME = "SampleB3DMod"; /** MODのバージョン */ public static final String MOD_VERSION = "0.0.1"; /** 早紀に読み込まれるべき前提MODをバージョン込みで指定 */ public static final String MOD_DEPENDENCIES = "required-after:Forge@[1.8-11.14.0.1239,)"; /** 起動出来るMinecraft本体のバージョン。記法はMavenのVersion Range Specificationを検索すること。 */ public static final String MOD_ACCEPTED_MC_VERSIONS = "[1.8,1.8.8]"; /** ブロック登録名 */ public static final String BLOCK_REGISTER_NAME = "sample_b3d_block"; /** このクラスのインスタンス。GUI実装するなどしなければ不要。他のMODのエントリークラスのインスタンスも取得可能 */ @Mod.Instance("SampleMod") public static SampleB3DModelMod INSTANCE; /** サンプルブロックのインスタンス */ public static Block sampleB3dModelBlock; /** PreInitialization処理。ブロック・アイテムの登録、Messageクラスの登録、ItemMeshDefinition、CustomStateMapperの登録を行う */ @EventHandler public void preInit(FMLPreInitializationEvent event) { /* ブロックのインスタンス生成 */ sampleB3dModelBlock = new SampleB3dBlock(); /*ブロックの登録。登録文字列はMOD内で被らなければ何でも良い。*/ GameRegistry.registerBlock(sampleB3dModelBlock, SampleItemBlock.class, BLOCK_REGISTER_NAME); if (event.getSide().isClient()) { /* B33Dファイルの配置先ドメイン名登録。基本的にmodidの小文字を登録 */ B3DLoader.instance.addDomain(MOD_ID); /*手持ち描画用のModelResourceLocation登録*/ ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(sampleB3dModelBlock), 0, new ModelResourceLocation(MOD_ID + ":" + BLOCK_REGISTER_NAME, "inventory")); } } }
- SampleB3dBlock.java
package com.example.examplemod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; public class SampleB3dBlock extends Block { /** * コンストラクタ */ public SampleB3dBlock() { super(Material.ground); /*ブロックの内部名設定*/ this.setUnlocalizedName("blockSampleB3d"); /*クリエイティブタブ設定*/ this.setCreativeTab(CreativeTabs.tabBlock); /*ブロックの大きさを設定*/ this.setBlockBounds(0.199F, 0, 0.199F, 0.8F, 0.601F, 0.8F); } /** * 通常のブロックの形かどうか * @return true:通常のブロックと同じ。false:違う場合。 */ @Override public boolean isNormalCube() { return false; } /** * 1*1*1の大きさのブロックかどうか * @return true:1*1*1の立方体、false:違う場合。 */ @Override public boolean isFullCube() { return false; } /** * 不透過ブロックかどうか。 * @return true:不透過。false:透過 */ @Override public boolean isOpaqueCube() { return false; } }
- sample_b3d_block.json
{ "forge_marker": 1, "defaults": { "textures": { "sample_b3d_block": "samplemod:blocks/sample_b3d_block" }, "model": "samplemod:sample_b3d_block.b3d" }, "variants": { "normal": [{ "transform" : "forge:default-block" }], "inventory": [{ "transform" : "forge:default-block" }] } }
解説
SampleB3DModelMod.java
/* B33Dファイルの配置先ドメイン名登録。基本的にmodidの小文字を登録 */ B3DLoader.instance.addDomain(MOD_ID);
B3DLoaderにドメイン名を登録する処理。 登録しないと、B3Dファイルの走査対象フォルダとならない。
/*手持ち描画用のModelResourceLocation登録*/ ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(sampleB3dModelBlock), 0, new ModelResourceLocation(MOD_ID + ":" + BLOCK_REGISTER_NAME, "inventory"));
手持ち描画用の登録処理。 手持ちはアイコンでやりたい場合も、そのアイコンのJSON名を登録する必要あり。
sample_b3d_block.json
"forge_marker": 1,
forgeの形式のJSONであることを指定している。
"defaults": { "textures": { "sample_b3d_block": "sampleb3dmod:blocks/sample_b3d_block" }, "model": "sampleb3dmod:sample_b3d_block.b3d" },
blockstateに依らない項目の設定。
- textures:B3Dファイル内のテクスチャ指定文字列の置換。
この場合は"sample_b3d_block.png"のテクスチャで指定していたものを"assets/sampleb3dmod/textures/blocks/sample_b3d_block.png"に置き換えている。
- model:モデルのJSON名指定。B3Dモデルの場合B3Dファイルを指定。この場合は"assets/sampleb3dmod/models/block/sample_b3d_block.b3d"を指定している。
他にもuvlockを設定できる。
"variants": { "normal": [{ "transform" : "forge:default-block" }], "inventory": [{ "transform" : "forge:default-block" }] }
blockstate別の指定。
- normal:特別なBlockStateを持たないブロックの場合の指定。
- inventory:手持ち描画時の指定。
この中では以下の項目が設定できる。
- transform:モデルの平行移動、拡大縮小、回転の指定。以下の項目で設定できる他、通常のブロックの指定として"forge:default-block"という指定もできる。
- translation:平行移動。"[x, y, z]"の形で指定。※機能してない
- scale:拡大縮小。"1.0"の形で指定。※機能してない
- rotate:回転。"[ {"y": -45}, {"x": 10}, {"z": 170} ]"の形で指定。※機能してない
- submodel:blockstate別サブモデル指定。