提供: Minecraft Modding Wiki
この記事は"Minecraft Forge Universal 9.10.0.xxx~"を前提MODとしています。 |
カスタムレンダーのブロックの追加
独自に作成したレンダーを持つブロックの追加方法
ブロックの追加などは他のチュートリアルを参照vしてください
ソースコード
- BenchCore.java
package mods.sample.bench; import java.util.logging.Level; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraftforge.common.Configuration; import net.minecraftforge.common.Property; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; @Mod( modid = "samplebench", name = "Sample Bench", version = "1.0.0") @NetworkMod( clientSideRequired = true, serverSideRequired = false) public class BenchCore { //Block関係の変数。コンフィグなどは各自で public static Block blockBench; public static int benchBlockId = 3000; //レンダー関係。Proxyを使い、クライアント側でレンダーの登録などを行う @SidedProxy(clientSide = "mods.sample.bench.client.ClientProxy", serverSide = "mods.sample.bench.ServerProxy") public static IBenchProxy proxy; //ブロックのメソッドgetRenderType()で返す独自レンダーの値 public static int blockRenderId; @EventHandler public void preInit(FMLPreInitializationEvent event) { blockBench = new BlockBench(benchBlockId); GameRegistry.registerBlock(blockBench, "blockBench"); } @EventHandler public void init(FMLInitializationEvent event) { //Proxyの実行 blockRenderId = proxy.getNewRenderType(); proxy.registerRenderers(); LanguageRegistry.addName(blockBench, "Sample Bench"); } }
- BlockBench.java
package mods.sample.bench; import java.util.Iterator; import java.util.List; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Icon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockBench extends Block { public BlockBench(int par1) { super(par1, Material.rock); this.setHardness(5.0F); this.setResistance(2000.0F); this.setLightOpacity(0); this.setUnlocalizedName("bench"); this.setCreativeTab(CreativeTabs.tabDecorations); } //テクスチャはめんどいのでパス @SideOnly(Side.CLIENT) public Icon getIcon(int par1, int par2) { return Block.enchantmentTable.getIcon(par1, par2); } @SideOnly(Side.CLIENT) public void registerIcons(IconRegister par1IconRegister){} //重要。ココでBenchCoreに入っているレンダーのIDを返す @Override public int getRenderType() { return BenchCore.blockRenderId; } //下の2つはとりあえず両方falseに public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } //レンダーで使ったり使わなかったり public void setBlockBoundsForItemRender() { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.75F, 1.0F); } //階段やハーフブロックみるといいかも public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.75F, 1.0F); } //当たり判定。サボテンやソウルサンドを参考にすると良い。ココの設定をすると、onEntityCollidedWithBlockが呼ばれるようになる public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4) { double d = 0.0625D; return AxisAlignedBB.getAABBPool().getAABB((double)par2 + d, (double)par3, (double)par4 + d, (double)(par2 + 1) - d, (double)par3 + 0.75D - d, (double)(par4 + 1) - d); } //ブロックに視点を合わせた時に出てくる黒い線のアレ @SideOnly(Side.CLIENT) public AxisAlignedBB getSelectedBoundingBoxFromPool(World par1World, int par2, int par3, int par4) { return AxisAlignedBB.getAABBPool().getAABB((double)par2, (double)par3, (double)par4, (double)(par2 + 1), (double)par3 + 0.75D, (double)(par4 + 1)); } }