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

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

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
1行目: 1行目:
{{前提MOD|reqmod="Minecraft Forge Universal 11.14.0.1296~"}}
+
{{前提MOD|reqmod="Minecraft Forge Universal 11.14.0.xxx~"}}
 
{{前提Mapping|reqmap="stable_16"}}
 
{{前提Mapping|reqmap="stable_16"}}
 
{{チュートリアル難易度|difficulty=1|clear=none}}
 
{{チュートリアル難易度|difficulty=1|clear=none}}
 
{{チュートリアルカテゴリー ‎|type=Render| difficulty=1}}
 
{{チュートリアルカテゴリー ‎|type=Render| difficulty=1}}
==ICustomModelLoader利用==
+
<p>ワールド上に設置できる簡単なブロックの追加方法</p>
 +
==ブロックの追加==
 
注意:一度入れたMODを外すと、再び入れてもテクスチャが反映されなくなります。デバッグ時にご注意を。
 
注意:一度入れたMODを外すと、再び入れてもテクスチャが反映されなくなります。デバッグ時にご注意を。
 
===ソースコード===
 
===ソースコード===
28行目: 29行目:
 
import net.minecraftforge.fml.common.registry.GameRegistry;
 
import net.minecraftforge.fml.common.registry.GameRegistry;
  
@Mod(modid = "SampleMod",  
+
@Mod(modid = "SampleMod", name = "SampleMod", version = "1.0", dependencies = "required-after:Forge@[1.8-11.14.0.1239,)", useMetadata = true)
    name = "SampleMod",  
 
    version = "1.0",  
 
    dependencies = "required-after:Forge@[1.8-11.14.0.1296,)",  
 
    acceptedMinecraftVersions = "[1.8,1.8.9]",
 
    useMetadata = true)
 
 
public class SampleMod{
 
public class SampleMod{
 
     public static final String MOD_ID = "SampleMod";
 
     public static final String MOD_ID = "SampleMod";
216行目: 212行目:
  
 
     @see net.minecraft.block.Block#getActualState
 
     @see net.minecraft.block.Block#getActualState
    @see ISmartBlockModel
 
 
     */
 
     */
 
     public IFlexibleBakedModel handleBlockState(IBlockState state){
 
     public IFlexibleBakedModel handleBlockState(IBlockState state){
228行目: 223行目:
  
 
     @see ItemStack#getTagCompound
 
     @see ItemStack#getTagCompound
    @see ISmartItemModel
 
 
     */
 
     */
 
     public IFlexibleBakedModel handleItemState(ItemStack stack){
 
     public IFlexibleBakedModel handleItemState(ItemStack stack){
235行目: 229行目:
  
 
     /**
 
     /**
     面が不透明なBlockに接していないときのみ描画する面を指定する。
+
     面が不透明なBlockに接しているならば描画されない面を指定する。
     必要な時しか描画しないのでgetGeneralQuadsで指定するより大幅に軽量化できる。
+
     描画しないのでgetGeneralQuadsで指定するより大幅に軽量化できる。
     が、万能ではないので注意。
+
     が、気づく通り銀の弾丸ではないので注意。
 
     もちろん、一つの面につき一つのQuadのような制約はない。
 
     もちろん、一つの面につき一つのQuadのような制約はない。
 
     今回は、目一杯1Block分の範囲を使っているのでここで全て指定している。
 
     今回は、目一杯1Block分の範囲を使っているのでここで全て指定している。
254行目: 248行目:
  
 
         //面の描画の設定、ほぼ使用されないと思われる。
 
         //面の描画の設定、ほぼ使用されないと思われる。
         //第一引数:cullface(使用されない)
+
         //第一引数:cullface
 
         //第二引数:tintindex兼layer兼renderPass
 
         //第二引数:tintindex兼layer兼renderPass
         //第三引数:テクスチャの場所(使用されない)
+
         //第三引数:テクスチャの場所
 
         //第四引数:TextureのUVの指定
 
         //第四引数:TextureのUVの指定
 
         BlockPartFace partFace = new BlockPartFace(face, face.getIndex(), new ResourceLocation("blocks/stone").toString(), uv);
 
         BlockPartFace partFace = new BlockPartFace(face, face.getIndex(), new ResourceLocation("blocks/stone").toString(), uv);
267行目: 261行目:
 
         //第五引数:面の方向
 
         //第五引数:面の方向
 
         //第六引数:モデルの回転
 
         //第六引数:モデルの回転
         //第七引数:面の回転(nullで自動)
+
         //第七引数:面の回転
 
         //第八引数:モデルの回転に合わせてテクスチャを回転させるか
 
         //第八引数:モデルの回転に合わせてテクスチャを回転させるか
 
         //第九引数:陰らせるかどうか
 
         //第九引数:陰らせるかどうか
293行目: 287行目:
 
     */
 
     */
 
     public VertexFormat getFormat(){
 
     public VertexFormat getFormat(){
         return Attributes.DEFAULT_BAKED_FORMAT;
+
         return DefaultVertexFormats.BLOCK;
 
     }
 
     }
  
 
     /**
 
     /**
     光を通すかどうか。
+
     周りの環境に影響を受けるか。
     trueなら、光を通さず影が生じる。
+
     trueなら影とかがつくようになる。
 
     */
 
     */
 
     public boolean isAmbientOcclusion(){
 
     public boolean isAmbientOcclusion(){
322行目: 316行目:
 
     パーティクルに使われる。
 
     パーティクルに使われる。
 
     Randomを通せば全部の面をパーティクルにのせるとかもできるかもしれない。
 
     Randomを通せば全部の面をパーティクルにのせるとかもできるかもしれない。
    が、Modelを代表したTextureとして求められる場合が多そうなので、普通に返したほうが無難。
 
 
     */
 
     */
 
     public TextureAtlasSprite getTexture(){
 
     public TextureAtlasSprite getTexture(){
344行目: 337行目:
 
}
 
}
 
</source>
 
</source>
 
 
==解説==
 
==解説==
 
===SampleMod.java===
 
===SampleMod.java===
373行目: 365行目:
 
</source>
 
</source>
 
Layerが働いているかの確認のためにLayerごとに色を割り当てている。
 
Layerが働いているかの確認のためにLayerごとに色を割り当てている。
 +
===SampleModelLoader.java===
 +
<source lang = "java">
 +
/**
 +
どんな物にこのModelLoaderを適応するか返す。
 +
今回は、判定が面倒いのでこのMod内で作られたModelなら全て適応する。
 +
*/
 +
public boolean accepts(ResourceLocation modelLocation){
 +
    return modelLocation.getResourceDomain().equals(SampleMod.MOD_ID.toLowerCase());
 +
}
 +
 +
/**
 +
描画するIModelを返す。 IResourceManagerがあれば、ここで外部ファイルを読み込んでIModelに渡せる。
 +
今回は、パターンが一つだけなのでそのまま返している。
 +
 +
@see #onResourceManagerReload
 +
*/
 +
public IModel loadModel(ResourceLocation modelLocation){
 +
    return new SampleModel();
 +
}
 +
</source>
 +
Modに一つなどといった制約はないので可読性の観点からできるかぎり分けるべきである。と思う。
 +
===SampleModelLoader.java===
 +
<source lang = "java">
 +
/**
 +
どんな物にこのModelLoaderを適応するか返す。
 +
今回は、判定が面倒いのでこのMod内で作られたModelなら全て適応する。
 +
*/
 +
public boolean accepts(ResourceLocation modelLocation){
 +
    return modelLocation.getResourceDomain().equals(SampleMod.MOD_ID.toLowerCase());
 +
}
 +
 +
/**
 +
描画するIModelを返す。 IResourceManagerがあれば、ここで外部ファイルを読み込んでIModelに渡せる。
 +
今回は、パターンが一つだけなのでそのまま返している。
 +
 +
@see #onResourceManagerReload
 +
*/
 +
public IModel loadModel(ResourceLocation modelLocation){
 +
    return new SampleModel();
 +
}
 +
</source>
 +
Modに一つなどといった制約はないので可読性の観点からできるかぎり分けるべきである。と思う。
 
===sampleblock.json(BlockState用)===
 
===sampleblock.json(BlockState用)===
 
これはどうしても配置しなければならない。が、複数のBlockを追加する場合でもこのファイル一つあればStateMapperを用いることで適応できる。
 
これはどうしても配置しなければならない。が、複数のBlockを追加する場合でもこのファイル一つあればStateMapperを用いることで適応できる。
  
 
他のファイルは、コメントのとおりである。
 
他のファイルは、コメントのとおりである。

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

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

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