最新版 |
編集中の文章 |
2行目: |
2行目: |
| | | |
| | | |
− | == カスタムレンダーを使用するブロックの追加 == | + | == カスタムレンダーのブロックの追加 == |
| <p>独自に作成したレンダーを持つブロックの追加方法<br> | | <p>独自に作成したレンダーを持つブロックの追加方法<br> |
− | ブロックの追加などは他のチュートリアルを参照してください</p>
| + | ブロックの追加などは他のチュートリアルを参照vしてください</p> |
| | | |
| ===ソースコード=== | | ===ソースコード=== |
146行目: |
146行目: |
| } | | } |
| </source> | | </source> |
− |
| |
− | *RenderBenchBlock.java
| |
− | <source lang = "java">
| |
− | package mods.sample.bench.client;
| |
− |
| |
− | import org.lwjgl.opengl.GL11;
| |
− |
| |
− | import mods.sample.bench.BenchCore;
| |
− | import net.minecraft.block.Block;
| |
− | import net.minecraft.client.renderer.RenderBlocks;
| |
− | import net.minecraft.client.renderer.Tessellator;
| |
− | import net.minecraft.world.IBlockAccess;
| |
− | import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
| |
− |
| |
− | public class RenderBenchBlock implements ISimpleBlockRenderingHandler
| |
− | {
| |
− | //インベントリ向け
| |
− | @Override
| |
− | public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer)
| |
− | {
| |
− | if (modelId == this.getRenderId())
| |
− | {
| |
− | Tessellator tessellator = Tessellator.instance;
| |
− | //ココをいじるとブロックの大きさが変わる
| |
− | renderer.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D);
| |
− |
| |
− | //描画位置の調整。ココをいじると、中心にレンダー持ってきたり、遊べる
| |
− | GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
| |
− | //くコ:彡 、コピペ☆ RenderBlocksみてね
| |
− | 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();
| |
− | 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();
| |
− | 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();
| |
− | 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();
| |
− | 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();
| |
− | 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);
| |
− | GL11.glTranslatef(0.5F, 0.5F, 0.5F);
| |
− | }
| |
− | }
| |
− |
| |
− | //ワールドでのレンダー
| |
− | @Override
| |
− | public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
| |
− | {
| |
− | if (modelId == this.getRenderId())
| |
− | {
| |
− | //ココをいじればブロックの大きさが変わる。
| |
− | renderer.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D);
| |
− | renderer.renderStandardBlock(block, x, y, z);
| |
− | //上2つのコードを複数回実行することで、階段やドラゴンエッグのようなレンダーができる
| |
− | return true;
| |
− | }
| |
− | return false;
| |
− | }
| |
− |
| |
− | //インベントリのレンダーが面倒くさいなら、ココをfalseに。テクスチャだけ表示されるようになる
| |
− | @Override
| |
− | public boolean shouldRender3DInInventory()
| |
− | {
| |
− | return true;
| |
− | }
| |
− |
| |
− | //レンダーIDを返す
| |
− | @Override
| |
− | public int getRenderId()
| |
− | {
| |
− | return BenchCore.blockRenderId;
| |
− | }
| |
− | }
| |
− | </source>
| |
− |
| |
− | *IBenchProxy.java
| |
− | <source lang = "java">
| |
− | package mods.sample.bench;
| |
− |
| |
− | public interface IBenchProxy
| |
− | {
| |
− | public int getNewRenderType();
| |
− |
| |
− | public void registerRenderers();
| |
− | }
| |
− | </source>
| |
− |
| |
− | *ServerProxy.java
| |
− | <source lang = "java">
| |
− | package mods.sample.bench;
| |
− |
| |
− | public class ServerProxy implements IBenchProxy
| |
− | {
| |
− | @Override
| |
− | public int getNewRenderType()
| |
− | {
| |
− | return -1;
| |
− | }
| |
− |
| |
− | @Override
| |
− | public void registerRenderers(){}
| |
− |
| |
− | }
| |
− | </source>
| |
− |
| |
− | *ClientProxy.java
| |
− | <source lang = "java">
| |
− | package mods.sample.bench.client;
| |
− |
| |
− | import cpw.mods.fml.client.registry.RenderingRegistry;
| |
− | import mods.sample.bench.IBenchProxy;
| |
− |
| |
− | public class ClientProxy implements IBenchProxy
| |
− | {
| |
− | //レンダーIDの取得
| |
− | @Override
| |
− | public int getNewRenderType()
| |
− | {
| |
− | return RenderingRegistry.getNextAvailableRenderId();
| |
− | }
| |
− |
| |
− | //カスタムレンダーの登録
| |
− | @Override
| |
− | public void registerRenderers()
| |
− | {
| |
− | RenderingRegistry.registerBlockHandler(new RenderBenchBlock());
| |
− | }
| |
− | }
| |
− | </source>
| |
− |
| |
− | ==解説==
| |
− | ===BenchCore.java===
| |
− | <source lang = "java">
| |
− | blockRenderId = proxy.getNewRenderType();
| |
− | proxy.registerRenderers();
| |
− | </source>
| |
− | プロキシを使用して、カスタムレンダーのIDの取得や、カスタムレンダーの登録を行う。<br>
| |
− | プロキシ以外にも、クライアント側でしか行われないようにすれば、Core部分での登録も可能
| |
− |
| |
− | ===BlockBench.java===
| |
− | <source lang = "java">
| |
− | public int getRenderType()
| |
− | {
| |
− | return BenchCore.blockRenderId;
| |
− | }
| |
− |
| |
− | public boolean isOpaqueCube()
| |
− | {
| |
− | return false;
| |
− | }
| |
− |
| |
− | public boolean renderAsNormalBlock()
| |
− | {
| |
− | return false;
| |
− | }
| |
− | </source>
| |
− | 当たり判定などを気にしないなら、この3つを設定すればOK
| |
− |
| |
− | ===RenderBenchBlock.java===
| |
− | コピペ祭りで大体OK(オイ)<br>
| |
− | 詳しい事や、もっと複雑なことを知りたいなら、RenderBlocksの闇に進むのじゃ!
| |
− |
| |
− | ===ClientProxy.java===
| |
− | <source lang = "java">
| |
− | RenderingRegistry.getNextAvailableRenderId();
| |
− | RenderingRegistry.registerBlockHandler(new RenderBenchBlock());
| |
− | </source>
| |
− | この2つを行えばOK
| |