237 lines
5.1 KiB
Java
237 lines
5.1 KiB
Java
package biomesoplenty.blocks;
|
|
|
|
import java.util.List;
|
|
|
|
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.item.ItemStack;
|
|
import net.minecraft.util.AxisAlignedBB;
|
|
import net.minecraft.util.Icon;
|
|
import net.minecraft.world.IBlockAccess;
|
|
import net.minecraft.world.World;
|
|
import biomesoplenty.BiomesOPlenty;
|
|
import biomesoplenty.blocks.renderers.RenderUtils;
|
|
|
|
public class BlockBones extends Block {
|
|
//Meta 3 & 4 used by alternate small bone rotations, 5 & 6 are used by alternate medium bone rotations
|
|
private static final String[] boneTypes = new String[] {"bones_small", "bones_medium", "bones_large"};
|
|
private Icon[] textures;
|
|
|
|
public BlockBones(int blockID)
|
|
{
|
|
super(blockID, Material.rock);
|
|
setHardness(3.0F);
|
|
setResistance(5.0F);
|
|
this.setCreativeTab(BiomesOPlenty.tabBiomesOPlenty);
|
|
}
|
|
|
|
@Override
|
|
public void registerIcons(IconRegister iconRegister)
|
|
{
|
|
textures = new Icon[boneTypes.length];
|
|
|
|
for (int i = 0; i < boneTypes.length; ++i) {
|
|
textures[i] = iconRegister.registerIcon("biomesoplenty:"+boneTypes[i]);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Icon getIcon(int side, int meta)
|
|
{
|
|
if (meta < 0 || meta >= textures.length) {
|
|
meta = 0;
|
|
}
|
|
|
|
if (meta == 4 || meta == 5) {
|
|
meta = 1;
|
|
}
|
|
|
|
return textures[meta];
|
|
}
|
|
|
|
@Override
|
|
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
|
|
{
|
|
int meta = world.getBlockMetadata(x, y, z);
|
|
|
|
switch (meta)
|
|
{
|
|
case 0:
|
|
return AxisAlignedBB.getBoundingBox(x + 0.374D, y, z + 0.374D, x + 0.626D, y + 1.0D, z + 0.626D);
|
|
|
|
case 1:
|
|
return AxisAlignedBB.getBoundingBox(x + 0.187D, y, z + 0.187D, x + 0.813D, y + 1.0D, z + 0.813D);
|
|
|
|
case 3:
|
|
return AxisAlignedBB.getBoundingBox(x + 0.374D, y + 0.374D, z, x + 0.626D, y + 0.626D, z + 1.00D);
|
|
|
|
case 4:
|
|
return AxisAlignedBB.getBoundingBox(x, y + 0.374D, z + 0.374D, x + 1.00D, y + 0.626D, z + 0.626D);
|
|
|
|
case 5:
|
|
return AxisAlignedBB.getBoundingBox(x + 0.187D, y + 0.187D, z, x + 0.813D, y + 0.813D, z + 1.00D);
|
|
|
|
case 6:
|
|
return AxisAlignedBB.getBoundingBox(x, y + 0.187D, z + 0.187D, x + 1.00D, y + 0.813D, z + 0.813D);
|
|
|
|
default:
|
|
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1.0D, y + 1.0D, z + 1.0D);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
|
|
{
|
|
int meta = world.getBlockMetadata(x, y, z);
|
|
|
|
switch (meta)
|
|
{
|
|
case 0:
|
|
return AxisAlignedBB.getBoundingBox(x + 0.374D, y, z + 0.374D, x + 0.626D, y + 1.0D, z + 0.626D);
|
|
|
|
case 1:
|
|
return AxisAlignedBB.getBoundingBox(x + 0.187D, y, z + 0.187D, x + 0.813D, y + 1.0D, z + 0.813D);
|
|
|
|
case 3:
|
|
return AxisAlignedBB.getBoundingBox(x + 0.374D, y + 0.374D, z, x + 0.626D, y + 0.626D, z + 1.00D);
|
|
|
|
case 4:
|
|
return AxisAlignedBB.getBoundingBox(x, y + 0.374D, z + 0.374D, x + 1.00D, y + 0.626D, z + 0.626D);
|
|
|
|
case 5:
|
|
return AxisAlignedBB.getBoundingBox(x + 0.187D, y + 0.187D, z, x + 0.813D, y + 0.813D, z + 1.00D);
|
|
|
|
case 6:
|
|
return AxisAlignedBB.getBoundingBox(x, y + 0.187D, z + 0.187D, x + 1.00D, y + 0.813D, z + 0.813D);
|
|
|
|
default:
|
|
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1.0D, y + 1.0D, z + 1.0D);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, int x, int y, int z)
|
|
{
|
|
int meta = iblockaccess.getBlockMetadata(x, y, z);
|
|
|
|
float minX;
|
|
float minY;
|
|
float minZ;
|
|
float maxX;
|
|
float maxY;
|
|
float maxZ;
|
|
|
|
switch (meta)
|
|
{
|
|
case 0:
|
|
minY = 0F;
|
|
minX = minZ = 0.374F;
|
|
maxX = maxZ = 0.626F;
|
|
maxY = 1.0F;
|
|
break;
|
|
|
|
case 1:
|
|
minY = 0F;
|
|
minX = minZ = 0.187F;
|
|
maxX = maxZ = 0.813F;
|
|
maxY = 1.00F;
|
|
break;
|
|
|
|
case 3:
|
|
minX = minY = 0.374F;
|
|
minZ = 0F;
|
|
maxX = maxY = 0.626F;
|
|
maxZ = 1.00F;
|
|
break;
|
|
|
|
case 4:
|
|
minX = 0F;
|
|
minY = minZ = 0.374F;
|
|
maxX = 1.00F;
|
|
maxY = maxZ = 0.626F;
|
|
break;
|
|
|
|
case 5:
|
|
minX = minY = 0.187F;
|
|
minZ = 0F;
|
|
maxX = maxY = 0.813F;
|
|
maxZ = 1.00F;
|
|
break;
|
|
|
|
case 6:
|
|
minX = 0F;
|
|
minY = minZ = 0.187F;
|
|
maxX = 1.00F;
|
|
maxY = maxZ = 0.813F;
|
|
break;
|
|
|
|
default:
|
|
minY = 0F;
|
|
minX = minZ = 0.0F;
|
|
maxX = maxZ = 1.0F;
|
|
maxY = 1.0F;
|
|
break;
|
|
}
|
|
|
|
setBlockBounds(minX, minY, minZ, maxX, maxY, maxZ);
|
|
}
|
|
|
|
@Override
|
|
public int getDamageValue(World world, int x, int y, int z)
|
|
{
|
|
int meta = world.getBlockMetadata(x, y, z);
|
|
if (meta == 3 || meta == 4) {
|
|
meta = 0;
|
|
}
|
|
if (meta == 5 || meta == 6) {
|
|
meta = 1;
|
|
}
|
|
return meta;
|
|
}
|
|
|
|
@Override
|
|
public void getSubBlocks(int blockID, CreativeTabs creativeTabs, List list)
|
|
{
|
|
for (int i = 0; i < boneTypes.length; ++i) {
|
|
list.add(new ItemStack(blockID, 1, i));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean isOpaqueCube()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean renderAsNormalBlock()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public int getRenderType()
|
|
{
|
|
return RenderUtils.bonesModel;
|
|
}
|
|
|
|
@Override
|
|
public boolean shouldSideBeRendered(IBlockAccess iblockaccess, int i, int j, int k, int l)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public int damageDropped(int meta)
|
|
{
|
|
if (meta == 3 || meta == 4) {
|
|
meta = 0;
|
|
}
|
|
if (meta == 5 || meta == 6) {
|
|
meta = 1;
|
|
}
|
|
return meta;
|
|
}
|
|
}
|