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

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
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
 

Minecraft Modding Wikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMinecraft Modding Wiki:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート: