提供: Minecraft Modding Wiki
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
28行目: | 28行目: | ||
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.1296,)", useMetadata = true) |
− | |||
− | |||
− | |||
− | |||
− | |||
public class SampleMod{ | public class SampleMod{ | ||
public static final String MOD_ID = "SampleMod"; | public static final String MOD_ID = "SampleMod"; | ||
216行目: | 211行目: | ||
@see net.minecraft.block.Block#getActualState | @see net.minecraft.block.Block#getActualState | ||
− | |||
*/ | */ | ||
public IFlexibleBakedModel handleBlockState(IBlockState state){ | public IFlexibleBakedModel handleBlockState(IBlockState state){ | ||
228行目: | 222行目: | ||
@see ItemStack#getTagCompound | @see ItemStack#getTagCompound | ||
− | |||
*/ | */ | ||
public IFlexibleBakedModel handleItemState(ItemStack stack){ | public IFlexibleBakedModel handleItemState(ItemStack stack){ | ||
235行目: | 228行目: | ||
/** | /** | ||
− | + | 面が不透明なBlockに接しているならば描画されない面を指定する。 | |
− | + | 描画しないのでgetGeneralQuadsで指定するより大幅に軽量化できる。 | |
− | + | が、気づく通り銀の弾丸ではないので注意。 | |
もちろん、一つの面につき一つのQuadのような制約はない。 | もちろん、一つの面につき一つのQuadのような制約はない。 | ||
今回は、目一杯1Block分の範囲を使っているのでここで全て指定している。 | 今回は、目一杯1Block分の範囲を使っているのでここで全て指定している。 | ||
254行目: | 247行目: | ||
//面の描画の設定、ほぼ使用されないと思われる。 | //面の描画の設定、ほぼ使用されないと思われる。 | ||
− | //第一引数: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); | ||
293行目: | 286行目: | ||
*/ | */ | ||
public VertexFormat getFormat(){ | public VertexFormat getFormat(){ | ||
− | return | + | return DefaultVertexFormats.BLOCK; |
} | } | ||
322行目: | 315行目: | ||
パーティクルに使われる。 | パーティクルに使われる。 | ||
Randomを通せば全部の面をパーティクルにのせるとかもできるかもしれない。 | Randomを通せば全部の面をパーティクルにのせるとかもできるかもしれない。 | ||
− | |||
*/ | */ | ||
public TextureAtlasSprite getTexture(){ | public TextureAtlasSprite getTexture(){ | ||
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を用いることで適応できる。 | ||
他のファイルは、コメントのとおりである。 | 他のファイルは、コメントのとおりである。 |