提供: Minecraft Modding Wiki
移動先: 案内検索

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
2行目: 2行目:
 
{{チュートリアル難易度|difficulty=0|clear=none}}
 
{{チュートリアル難易度|difficulty=0|clear=none}}
 
{{チュートリアルカテゴリー ‎|type=Block| difficulty=0}}
 
{{チュートリアルカテゴリー ‎|type=Block| difficulty=0}}
<p>ワールド上に設置できる簡単な無機能ブロックの追加方法</p>
+
<p>ワールド上に設置できる簡単なブロックの追加方法</p>
 
==ブロックの追加==
 
==ブロックの追加==
注意:一度入れたMODを外すと、再び入れてもテクスチャが反映されなくなります。デバッグ時にご注意を。
 
 
===ソースコード===
 
===ソースコード===
 
*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.client.model.ModelLoader;
 
 
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.FMLInitializationEvent;
+
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
+
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_ID,  
+
@Mod(modid = "SampleMod", name = "SampleMod", version = "1.0", dependencies = "required-after:Forge@[1.8-11.14.0.1239,)", useMetadata = true)
        name = SampleMod.MOD_NAME,  
 
        version = SampleMod.MOD_VERSION,  
 
        dependencies = SampleMod.MOD_DEPENDENCIES,
 
        acceptedMinecraftVersions = SampleMod.MOD_ACCEPTED_MC_VERSIONS,
 
        useMetadata = true)
 
 
public class SampleMod {
 
public class SampleMod {
    /** ModId文字列 */
+
     public static final String MOD_ID = "SampleMod";
     public static final String MOD_ID = "samplemod";
+
 
    /** MOD名称 */
+
     @Mod.Instance("SampleMod")
    public static final String MOD_NAME = "SampleMod";
+
     public static SampleMod INSTANCE;
    /** 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.9]";
 
    /** 追加したいブロックのインスタンスを格納するための変数。レシピ等で利用。 */
 
 
     public static Block sampleBlock;
 
     public static Block sampleBlock;
  
 
     @EventHandler
 
     @EventHandler
     public void preInit(FMLPreInitializationEvent event) {
+
     public void preInit(FMLPostInitializationEvent event) {
 
         sampleBlock = new SampleBlock();
 
         sampleBlock = new SampleBlock();
 
         //ブロックの登録。登録文字列はMOD内で被らなければ何でも良い。
 
         //ブロックの登録。登録文字列はMOD内で被らなければ何でも良い。
 
+
         GameRegistry.registerBlock(sampleBlock, "sampleBlock");
         GameRegistry.registerBlock(sampleBlock, SampleItemBlock.class, "sampleblock");
 
  
 
         //テクスチャ・モデル指定JSONファイル名の登録。
 
         //テクスチャ・モデル指定JSONファイル名の登録。
         if (event.getSide().isClient()) {
+
         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での登録名と同じものにする。
            //ItemStackのmetadataで種類を分けて描画させたい場合。登録名を予め登録する。
 
            ModelBakery.addVariantName(Item.getItemFromBlock(sampleBlock), MOD_ID + ":" + "sampleblock0", MOD_ID + ":" + "sampleblock1");
 
 
             //1IDで複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。
 
             //1IDで複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。
             ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(sampleBlock), 0, new ModelResourceLocation(MOD_ID + ":" + "sampleblock0", "inventory"));
+
             Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(sampleBlock), 0, new ModelResourceLocation(MOD_ID + ":" + "sampleBlock0", "inventory"));
             ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(sampleBlock), 1, new ModelResourceLocation(MOD_ID + ":" + "sampleblock1", "inventory"));
+
             Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(sampleBlock), 1, new ModelResourceLocation(MOD_ID + ":" + "sampleBlock1", "inventory"));
            //ModelLoader.setCustomStateMapper(sampleBlock, (new StateMap.Builder()).addPropertiesToIgnore(sampleBlock.METADATA).build());
 
            //上記のようにして無視させたいPropertyを指定することもできる。
 
            //その他にもここで設定できる項目もあるが割愛させていただく。
 
 
         }
 
         }
 
     }
 
     }
 
}
 
}
 
 
 
</source>
 
</source>
 
*SampleBlock.java
 
*SampleBlock.java
128行目: 111行目:
 
}
 
}
 
</source>
 
</source>
*SampleItemBlock.java
+
*sampleblock0.json(BlockState用)
<source lang = "java">
 
package com.example.examplemod;
 
 
 
import net.minecraft.block.Block;
 
import net.minecraft.item.ItemBlock;
 
 
 
public class SampleItemBlock extends ItemBlock {
 
    public SampleItemBlock(Block block) {
 
        super(block);
 
    }
 
 
 
    //ItemStackのdamage値からmetadataの値を返す。
 
    @Override
 
    public int getMetadata(int damage) {
 
        return damage;
 
    }
 
}
 
 
 
</source>
 
*sampleblock.json(BlockState用)
 
 
<source lang = "javascript">
 
<source lang = "javascript">
 
{
 
{
 
     "variants": {
 
     "variants": {
         "meta=0":  { "model": "samplemod:sampleblock0" },
+
         "normal":  { "model": "samplemod:sampleblock0" }
        "meta=1":  { "model": "samplemod:sampleblock1" }
 
 
     }
 
     }
 
}
 
}
176行目: 138行目:
 
             "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行目: 154行目:
 
     "parent": "block/cube",
 
     "parent": "block/cube",
 
     "textures": {
 
     "textures": {
        "particle": "blocks/wool_colored_orange",
 
 
         "down": "blocks/wool_colored_black",
 
         "down": "blocks/wool_colored_black",
 
         "up": "blocks/wool_colored_white",
 
         "up": "blocks/wool_colored_white",
213行目: 182行目:
 
         //テクスチャ・モデル指定JSONファイル名の登録。
 
         //テクスチャ・モデル指定JSONファイル名の登録。
 
         if (event.getSide() == Side.CLIENT) {
 
         if (event.getSide() == Side.CLIENT) {
             //ItemStackのmetadataで種類を分けて描画させたい場合。登録名を予め登録する。
+
             //ItemStackのmetadataで種類を分けて描画させたい場合。登録名を予め登録する。ModelBakery.addVariantName(Item.getItemFromBlock(sampleBlock), MOD_ID + ":" + "sampleBlock0", MOD_ID + ":" + "sampleBlock1");
            ModelBakery.addVariantName(Item.getItemFromBlock(sampleBlock), MOD_ID + ":" + "sampleBlock0", MOD_ID + ":" + "sampleBlock1");
 
 
             //モデルJSONファイルのファイル名を登録。1IDで1つだけなら、登録名はGameRegistryでの登録名と同じものにする。
 
             //モデルJSONファイルのファイル名を登録。1IDで1つだけなら、登録名はGameRegistryでの登録名と同じものにする。
 
             //1IDで複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。
 
             //1IDで複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。
             ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(sampleBlock), 0, new ModelResourceLocation(MOD_ID + ":" + "sampleBlock0", "inventory"));
+
             Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(sampleBlock), 0, new ModelResourceLocation(MOD_ID + ":" + "sampleBlock0", "inventory"));
             ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(sampleBlock), 1, new ModelResourceLocation(MOD_ID + ":" + "sampleBlock1", "inventory"));
+
             Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(sampleBlock), 1, new ModelResourceLocation(MOD_ID + ":" + "sampleBlock1", "inventory"));
            //ModelLoader.setCustomStateMapper(sampleBlock, (new StateMap.Builder()).addPropertiesToIgnore(sampleBlock.METADATA).build());
 
            //上記のようにして無視させたいPropertyを指定することもできる。
 
            //その他にもここで設定できる項目もあるが割愛させていただく。
 
 
         }
 
         }
 
</source>
 
</source>
227行目: 192行目:
 
ModelBakery#addVariantNameメソッドは、羊毛ブロックのような、1IDで複数種類のブロックのモデルを登録する際の登録名を予め指定しておくメソッドである。
 
ModelBakery#addVariantNameメソッドは、羊毛ブロックのような、1IDで複数種類のブロックのモデルを登録する際の登録名を予め指定しておくメソッドである。
 
BlockStateのPropertyを持たないブロックを追加する場合は必要ない。
 
BlockStateのPropertyを持たないブロックを追加する場合は必要ない。
ModelLoader#setCustomModelResourceLocationメソッドでテクスチャ・モデルのJSONファイルを登録している。
+
ItemModelMesher#registerメソッドでテクスチャ・モデルのJSONファイルを登録している。
 
ここで登録されるのは手持ちやドロップアイテム時の描画についてであり、設置時のモデルに関して登録は不要である。
 
ここで登録されるのは手持ちやドロップアイテム時の描画についてであり、設置時のモデルに関して登録は不要である。
 
1.7と同様の処理については[[1.7のブロック追加]]を参照のこと。
 
1.7と同様の処理については[[1.7のブロック追加]]を参照のこと。
 
 
===SampleBlock.java===
 
===SampleBlock.java===
 
<source lang = "java">
 
<source lang = "java">
262行目: 226行目:
 
</source>
 
</source>
 
BlockState周りのメソッド。それぞれ注記の通りである。
 
BlockState周りのメソッド。それぞれ注記の通りである。
===SampleItemBlock.java===
+
a===sampleblock0.json(BlockState用)===
<source lang = "java">
 
    //ItemStackのdamage値からmetadataの値を返す。
 
    @Override
 
    public int getMetadata(int damage) {
 
        return damage;
 
    }
 
</source>
 
Itemの該当メソッドが0を返しているため、Overrideしている。onItemUseをOverrideすれば不要。
 
===sampleblock0.json(BlockState用)===
 
 
BlockState別のモデルJSONファイルの指定を行う。
 
BlockState別のモデルJSONファイルの指定を行う。
 
このファイルは、<br />
 
このファイルは、<br />
 
assets\<modid>\blockstates<br />
 
assets\<modid>\blockstates<br />
ディレクトリに配置する。(※MODIDに大文字が含まれる場合、フォルダ名称は小文字にする)
+
ディレクトリに配置する。
 
 
meta=0:BlockStateの状態指定。"meta=0,bool=false"のように書く。BlockStatesが無い場合は、"normal"とする。
 
  
 +
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 />
ディレクトリに配置する。(※MODIDに大文字が含まれる場合、フォルダ名称は小文字にする)
+
ディレクトリに配置する。
  
 
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 />
ディレクトリに配置する。(※MODIDに大文字が含まれる場合、フォルダ名称は小文字にする)
+
ディレクトリに配置する。
  
 
parent:親のモデルJSONファイルを指定。ブロックの場合は、ブロックモデルのJSONファイルを指定。
 
parent:親のモデルJSONファイルを指定。ブロックの場合は、ブロックモデルのJSONファイルを指定。
 
 
display:描画時の回転、平行移動、拡大縮小の係数を指定。コピペ安定。
 
display:描画時の回転、平行移動、拡大縮小の係数を指定。コピペ安定。
 
 
thirdperson:三人称視点での指定。
 
thirdperson:三人称視点での指定。
  
 
他のファイルの説明は省略。
 
他のファイルの説明は省略。

Minecraft Modding Wikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMinecraft Modding Wiki:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)