提供: Minecraft Modding Wiki
この記事は"Minecraft Forge Universal"を前提MODとしています。 |
1.7での独自Renderの追加
ここでは1.7での独自Renderの追加と、その適用方法について解説する。
- core.java
package SampleRender; import省略 @Mod(modid=core.MODID, name=core.MODNAME, version=core.VERSION) public class core { public static final String MODID = "core"; public static final String MODNAME = "core"; public static final String VERSION = "0.1"; //RenderIDの登録 public static int RenderID; @EventHandler public void preInit(FMLPreInitializationEvent event){} @EventHandler public void init(FMLInitializationEvent event) { //RenderIDを自動で割り振っている this.RenderID = RenderingRegistry.getNextAvailableRenderId(); //レンダーを指定する RenderingRegistry.registerBlockHandler(new Samplerender());
- Samplerender.java
package SampleRender; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.world.IBlockAccess; public class Samplerender implements ISimpleBlockRenderingHandler { /**インベントリ内のレンダリング,難解なためパスしてもよい**/ @Override public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { RendererInventory.renderBlockInventory(block,renderer,metadata,0.2f,0.2f,0.2f,0.8f,0.8f,0.8f); RendererInventory.renderBlockInventory(block,renderer,metadata,0.4f,0.0f,0.4f,0.6f,1.0f,0.6f); } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { if (modelId == this.getRenderId()) { //(始X, 始Y, 始Z, 終X, 終Y, 終Z)の順 renderer.setRenderBounds(0.2D, 0.2D, 0.2D, 0.8D, 0.8D, 0.8D); /*ここを別のものにすることで、複雑な形を作ることができる*/ renderer.renderStandardBlock(block, x, y, z); renderer.setRenderBounds(0.4D, 0.4D, 0.0D, 0.6D, 1.0D, 0.6D); renderer.renderStandardBlock(block, x, y, z); return true; } return false; } @Override /**インベントリ内でレンダリングするか renderInventoryBlockが空の場合はfalseでよい**/ public boolean shouldRender3DInInventory(int modelId) { return true; } /**自らのRenderIDをreturnする**/ @Override public int getRenderId() { return core.RenderID; } /**インベントリ内のレンダー用関数**/ public static void renderBlockInventory(Block block , RenderBlocks renderer , int metadata , double x1 , double y1 , double z1 ,double x2,double y2,double z2 ) { renderer.setRenderBounds(x1, y1, z1, x2, y2, z2); Tessellator tessellator = Tessellator.instance; //描画位置の調整 GL11.glTranslatef(-0.5F, -0.5F, -0.5F); //Y軸負の方向に長方形を描画 //描画開始 tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, -1.0F, 0.0F); //描画設定 renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 0, metadata)); //描画 tessellator.draw(); /*上4処理をそれぞれの面ごとに行っている*/ //Y軸正の方向 tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 1.0F, 0.0F); renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 1, metadata)); tessellator.draw(); //Z軸負の方向 tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 0.0F, -1.0F); renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 2, metadata)); tessellator.draw(); //Z軸正の方向 tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 0.0F, 1.0F); renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 3, metadata)); tessellator.draw(); //X軸負の方向 tessellator.startDrawingQuads(); tessellator.setNormal(-1.0F, 0.0F, 0.0F); renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 4, metadata)); tessellator.draw(); //X軸正の方向 tessellator.startDrawingQuads(); tessellator.setNormal(1.0F, 0.0F, 0.0F); renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 5, metadata)); tessellator.draw(); //リセット GL11.glTranslatef(0.5F, 0.5F, 0.5F); renderer.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); } }
Renderの適用
- ブロッククラスに以下のコードを追加する
@Override public int getRenderType() { return core.RenderID; }
これだけ。
getRenderTypeでRenderIDをreturnしている。
- 必要に応じて
//指定されたside面を描画するかどうか @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) { return true; } //通常の正方形ブロックのように描画するかどうか public boolean renderAsNormalBlock() { return false; } //透明なブロックかどうか public boolean isOpaqueCube() { return false; }
などを入れる。