提供: Minecraft Modding Wiki
(難易度関連) |
|||
(2人の利用者による、間の2版が非表示) | |||
1行目: | 1行目: | ||
{{前提MOD|reqmod="Minecraft Forge Universal"}} | {{前提MOD|reqmod="Minecraft Forge Universal"}} | ||
− | {{チュートリアル難易度|difficulty=1 | + | {{チュートリアル難易度|difficulty=1}} |
− | {{チュートリアルカテゴリー |type=Render| difficulty=0}} | + | {{チュートリアルカテゴリー |type=Render| difficulty=0|clear=none}} |
− | {{チュートリアルカテゴリー |type=Block| difficulty=0}} | + | {{チュートリアルカテゴリー |type=Block| difficulty=0|clear=none}} |
{{チュートリアルカテゴリー |type=Item| difficulty=0}} | {{チュートリアルカテゴリー |type=Item| difficulty=0}} | ||
<p> | <p> | ||
48行目: | 48行目: | ||
{ | { | ||
− | /**インベントリ内のレンダリング, | + | /**インベントリ内のレンダリング,難解なためパスしてもよい**/ |
@Override | @Override | ||
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) | 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 | @Override | ||
62行目: | 65行目: | ||
renderer.setRenderBounds(0.2D, 0.2D, 0.2D, 0.8D, 0.8D, 0.8D); | 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); | renderer.renderStandardBlock(block, x, y, z); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
return true; | return true; | ||
} | } | ||
76行目: | 74行目: | ||
} | } | ||
@Override | @Override | ||
− | /**インベントリ内でレンダリングするか**/ | + | /**インベントリ内でレンダリングするか |
+ | renderInventoryBlockが空の場合はfalseでよい**/ | ||
public boolean shouldRender3DInInventory(int modelId) { | public boolean shouldRender3DInInventory(int modelId) { | ||
− | return | + | return true; |
} | } | ||
86行目: | 85行目: | ||
return core.RenderID; | 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); | ||
} | } | ||
92行目: | 139行目: | ||
<h3>Renderの適用</h3> | <h3>Renderの適用</h3> | ||
+ | *ブロッククラスに以下のコードを追加する | ||
<source lang = "java"> | <source lang = "java"> | ||
@Override | @Override | ||
104行目: | 152行目: | ||
<source lang = "java"> | <source lang = "java"> | ||
+ | //指定されたside面を描画するかどうか | ||
@SideOnly(Side.CLIENT) | @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_) | public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) | ||
110行目: | 159行目: | ||
} | } | ||
− | + | //通常の正方形ブロックのように描画するかどうか | |
public boolean renderAsNormalBlock() | public boolean renderAsNormalBlock() | ||
{ | { | ||
116行目: | 165行目: | ||
} | } | ||
− | + | //透明なブロックかどうか | |
public boolean isOpaqueCube() | public boolean isOpaqueCube() | ||
{ | { |
2021年5月10日 (月) 16:44時点における最新版
この記事は"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; }
などを入れる。