提供: Minecraft Modding Wiki
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
2行目: | 2行目: | ||
{{チュートリアル難易度|difficulty=0|clear=none}} | {{チュートリアル難易度|difficulty=0|clear=none}} | ||
{{チュートリアルカテゴリー |type=Block| difficulty=0}} | {{チュートリアルカテゴリー |type=Block| difficulty=0}} | ||
− | <p> | + | <p>ワールド上に設置できる簡単なブロックの追加方法</p> |
==ブロックの追加== | ==ブロックの追加== | ||
− | |||
===ソースコード=== | ===ソースコード=== | ||
*SampleMod.java | *SampleMod.java | ||
11行目: | 10行目: | ||
import net.minecraft.block.Block; | import net.minecraft.block.Block; | ||
+ | import net.minecraft.client.Minecraft; | ||
import net.minecraft.client.resources.model.ModelBakery; | import net.minecraft.client.resources.model.ModelBakery; | ||
import net.minecraft.client.resources.model.ModelResourceLocation; | import net.minecraft.client.resources.model.ModelResourceLocation; | ||
import net.minecraft.creativetab.CreativeTabs; | import net.minecraft.creativetab.CreativeTabs; | ||
import net.minecraft.item.Item; | import net.minecraft.item.Item; | ||
− | |||
import net.minecraftforge.fml.common.Mod; | import net.minecraftforge.fml.common.Mod; | ||
import net.minecraftforge.fml.common.Mod.EventHandler; | import net.minecraftforge.fml.common.Mod.EventHandler; | ||
− | import net.minecraftforge.fml.common.event. | + | import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; |
− | |||
import net.minecraftforge.fml.common.registry.GameRegistry; | import net.minecraftforge.fml.common.registry.GameRegistry; | ||
+ | import net.minecraftforge.fml.relauncher.Side; | ||
− | @Mod(modid = SampleMod | + | @Mod(modid = "SampleMod", name = "SampleMod", version = "1.0", dependencies = "required-after:Forge@[1.8-11.14.0.1239,)", useMetadata = true) |
− | |||
− | |||
− | |||
− | |||
− | |||
public class SampleMod { | public class SampleMod { | ||
− | + | public static final String MOD_ID = "SampleMod"; | |
− | public static final String MOD_ID | + | |
− | + | @Mod.Instance("SampleMod") | |
− | + | public static SampleMod INSTANCE; | |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | public static | ||
− | |||
public static Block sampleBlock; | public static Block sampleBlock; | ||
@EventHandler | @EventHandler | ||
− | public void preInit( | + | public void preInit(FMLPostInitializationEvent event) { |
sampleBlock = new SampleBlock(); | sampleBlock = new SampleBlock(); | ||
//ブロックの登録。登録文字列はMOD内で被らなければ何でも良い。 | //ブロックの登録。登録文字列はMOD内で被らなければ何でも良い。 | ||
− | + | GameRegistry.registerBlock(sampleBlock, "sampleBlock"); | |
− | GameRegistry.registerBlock(sampleBlock | ||
//テクスチャ・モデル指定JSONファイル名の登録。 | //テクスチャ・モデル指定JSONファイル名の登録。 | ||
− | if (event.getSide(). | + | if (event.getSide() == Side.CLIENT) { |
+ | //ItemStackのmetadataで種類を分けて描画させたい場合。登録名を予め登録する。 | ||
+ | ModelBakery.addVariantName(Item.getItemFromBlock(sampleBlock), MOD_ID + ":" + "sampleBlock0", MOD_ID + ":" + "sampleBlock1"); | ||
//モデルJSONファイルのファイル名を登録。1IDで1つだけなら、登録名はGameRegistryでの登録名と同じものにする。 | //モデルJSONファイルのファイル名を登録。1IDで1つだけなら、登録名はGameRegistryでの登録名と同じものにする。 | ||
− | |||
− | |||
//1IDで複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。 | //1IDで複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。 | ||
− | + | Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(sampleBlock), 0, new ModelResourceLocation(MOD_ID + ":" + "sampleBlock0", "inventory")); | |
− | + | Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(sampleBlock), 1, new ModelResourceLocation(MOD_ID + ":" + "sampleBlock1", "inventory")); | |
− | |||
− | |||
− | |||
} | } | ||
} | } | ||
} | } | ||
− | |||
− | |||
</source> | </source> | ||
*SampleBlock.java | *SampleBlock.java | ||
128行目: | 110行目: | ||
} | } | ||
</source> | </source> | ||
− | * | + | *sampleblock0.json(BlockState用) |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<source lang = "javascript"> | <source lang = "javascript"> | ||
{ | { | ||
"variants": { | "variants": { | ||
− | " | + | "normal": { "model": "samplemod:sampleblock0" } |
− | |||
} | } | ||
} | } | ||
176行目: | 137行目: | ||
"scale": [ 0.375, 0.375, 0.375 ] | "scale": [ 0.375, 0.375, 0.375 ] | ||
} | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | *sampleblock1.json(BlockState用) | ||
+ | <source lang = "javascript"> | ||
+ | { | ||
+ | "variants": { | ||
+ | "normal": { "model": "samplemod:sampleblock1" } | ||
} | } | ||
} | } | ||
184行目: | 153行目: | ||
"parent": "block/cube", | "parent": "block/cube", | ||
"textures": { | "textures": { | ||
− | |||
"down": "blocks/wool_colored_black", | "down": "blocks/wool_colored_black", | ||
"up": "blocks/wool_colored_white", | "up": "blocks/wool_colored_white", | ||
217行目: | 185行目: | ||
//モデルJSONファイルのファイル名を登録。1IDで1つだけなら、登録名はGameRegistryでの登録名と同じものにする。 | //モデルJSONファイルのファイル名を登録。1IDで1つだけなら、登録名はGameRegistryでの登録名と同じものにする。 | ||
//1IDで複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。 | //1IDで複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。 | ||
− | + | Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(sampleBlock), 0, new ModelResourceLocation(MOD_ID + ":" + "sampleBlock0", "inventory")); | |
− | + | Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(sampleBlock), 1, new ModelResourceLocation(MOD_ID + ":" + "sampleBlock1", "inventory")); | |
− | |||
− | |||
− | |||
} | } | ||
</source> | </source> | ||
227行目: | 192行目: | ||
ModelBakery#addVariantNameメソッドは、羊毛ブロックのような、1IDで複数種類のブロックのモデルを登録する際の登録名を予め指定しておくメソッドである。 | ModelBakery#addVariantNameメソッドは、羊毛ブロックのような、1IDで複数種類のブロックのモデルを登録する際の登録名を予め指定しておくメソッドである。 | ||
BlockStateのPropertyを持たないブロックを追加する場合は必要ない。 | BlockStateのPropertyを持たないブロックを追加する場合は必要ない。 | ||
− | + | ItemModelMesher#registerメソッドでテクスチャ・モデルのJSONファイルを登録している。 | |
ここで登録されるのは手持ちやドロップアイテム時の描画についてであり、設置時のモデルに関して登録は不要である。 | ここで登録されるのは手持ちやドロップアイテム時の描画についてであり、設置時のモデルに関して登録は不要である。 | ||
1.7と同様の処理については[[1.7のブロック追加]]を参照のこと。 | 1.7と同様の処理については[[1.7のブロック追加]]を参照のこと。 | ||
262行目: | 227行目: | ||
</source> | </source> | ||
BlockState周りのメソッド。それぞれ注記の通りである。 | BlockState周りのメソッド。それぞれ注記の通りである。 | ||
− | + | a===sampleblock0.json(BlockState用)=== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ===sampleblock0.json(BlockState用)=== | ||
BlockState別のモデルJSONファイルの指定を行う。 | BlockState別のモデルJSONファイルの指定を行う。 | ||
このファイルは、<br /> | このファイルは、<br /> | ||
assets\<modid>\blockstates<br /> | assets\<modid>\blockstates<br /> | ||
− | + | ディレクトリに配置する。 | |
− | |||
− | |||
+ | normal:BlockStateの状態指定。"meta=0,bool=false"のように書く。"normal"は状態別にしない場合。 | ||
model:モデル用JSONファイルのファイル名を指定。"<modid>:ファイル名"という形式。 | model:モデル用JSONファイルのファイル名を指定。"<modid>:ファイル名"という形式。 | ||
− | ===sampleblock0.json(Block Model用)=== | + | a===sampleblock0.json(Block Model用)=== |
ブロックモデル用JSONファイルである。 | ブロックモデル用JSONファイルである。 | ||
このファイルは、<br /> | このファイルは、<br /> | ||
assets\<modid>\models\block<br /> | assets\<modid>\models\block<br /> | ||
− | + | ディレクトリに配置する。 | |
parent:親のモデルJSONファイルを指定。"block/cube_all"で全面同一テクスチャの立方体モデルを指定。 | parent:親のモデルJSONファイルを指定。"block/cube_all"で全面同一テクスチャの立方体モデルを指定。 | ||
− | |||
texture:テクスチャのファイルパスを指定。parentの指定により、キーが異なる。"cube_all"の場合は、"all"に指定。 | texture:テクスチャのファイルパスを指定。parentの指定により、キーが異なる。"cube_all"の場合は、"all"に指定。 | ||
− | ===sampleblock0.json(Item Model用)=== | + | a===sampleblock0.json(Item Model用)=== |
アイテムモデル用JSONファイルである。 | アイテムモデル用JSONファイルである。 | ||
このファイルは、<br /> | このファイルは、<br /> | ||
assets\<modid>\models\item<br /> | assets\<modid>\models\item<br /> | ||
− | + | ディレクトリに配置する。 | |
parent:親のモデルJSONファイルを指定。ブロックの場合は、ブロックモデルのJSONファイルを指定。 | parent:親のモデルJSONファイルを指定。ブロックの場合は、ブロックモデルのJSONファイルを指定。 | ||
− | |||
display:描画時の回転、平行移動、拡大縮小の係数を指定。コピペ安定。 | display:描画時の回転、平行移動、拡大縮小の係数を指定。コピペ安定。 | ||
− | |||
thirdperson:三人称視点での指定。 | thirdperson:三人称視点での指定。 | ||
他のファイルの説明は省略。 | 他のファイルの説明は省略。 |