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

この記事は"Minecraft Forge Universal"を前提MODとしています。

Stone pickaxe.png
中級者向けのチュートリアルです。
C none.png
Renderに関係のあるチュートリアルです。
C block.png
Blockに関係のあるチュートリアルです。
C item.png
Itemに関係のあるチュートリアルです。

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)
	{}

@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.2D, 0.2D, 0.2D, 0.8D, 0.8D, 0.8D);
			renderer.renderStandardBlock(block, 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.2D, 0.2D, 0.2D, 0.8D, 0.8D, 0.8D);
			renderer.renderStandardBlock(block, x, y, z);

			return true;
		}
		return false;
      }
	@Override
	/**インベントリ内でレンダリングするか**/
	public boolean shouldRender3DInInventory(int modelId) {
		return false;
	}

	/**自らのRenderIDをreturnする**/
	@Override
	public int getRenderId() {

		return core.RenderID;
	}

}

Renderの適用

@Override
	public int getRenderType()
	{
		return core.RenderID;
	}

これだけ。
getRenderTypeでRenderIDをreturnしている。

  • 必要に応じて
@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;
    }

などを入れる。