package net.tropicraft.block; import java.util.Random; 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.init.Blocks; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.tropicraft.info.TCNames; import net.tropicraft.registry.TCBlockRegistry; import net.tropicraft.registry.TCCreativeTabRegistry; public class BlockCoral extends BlockTropicraftMulti { /** Brightness value of coral blocks during the day */ private static final float BRIGHTNESS_DAY = 0.3F; /** Brightness value of coral blocks during the night */ private static final float BRIGHTNESS_NIGHT = 0.6F; public BlockCoral(String[] names) { super(names, Material.water); this.setCreativeTab(TCCreativeTabRegistry.tabBlock); setLightLevel(0.3F); setHardness(0.0F); setTickRandomly(true); this.setBlockTextureName(TCNames.coral); } /** * Indicate if a material is a normal solid opaque cube */ @SideOnly(Side.CLIENT) @Override public boolean isBlockNormalCube() { return false; } @Override public int damageDropped(int i) { return i & 7; } @Override public boolean canPlaceBlockAt(World world, int i, int j, int k) { return super.canPlaceBlockAt(world, i, j, k) && world.getBlock(i, j, k) != this && canThisPlantGrowOnThisBlock(world.getBlock(i, j - 1, k)) && world.getBlock(i, j, k).getMaterial() == Material.water && world.getBlock(i, j + 1, k).getMaterial() == Material.water; } protected boolean canThisPlantGrowOnThisBlock(Block b) { return b == Blocks.grass || b == Blocks.dirt || b == Blocks.sand || b == TCBlockRegistry.purifiedSand || b == TCBlockRegistry.mineralSands; } @Override public void onNeighborBlockChange(World world, int i, int j, int k, Block b) { super.onNeighborBlockChange(world, i, j, k, b); checkFlowerChange(world, i, j, k); } @Override public void updateTick(World world, int i, int j, int k, Random random) { checkFlowerChange(world, i, j, k); // if(!world.isRemote) //TODO generateTropicalFish(world,i,j,k,random); } @Override public int getRenderType() { return 1; } @Override public boolean isOpaqueCube() { return false; } @Override public boolean renderAsNormalBlock() { return false; } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k) { return null; } protected void checkFlowerChange(World world, int i, int j, int k) { if (!canBlockStay(world, i, j, k)) { dropBlockAsItem(world, i, j, k, world.getBlockMetadata(i, j, k) & 7, 0); world.setBlockToAir(i, j, k); } } @Override public int getLightValue(IBlockAccess world, int x, int y, int z) { return (int) (15.0F * BRIGHTNESS_NIGHT); } /** * Can this block stay at this position. Similar to canPlaceBlockAt except gets checked often with plants. */ @Override public boolean canBlockStay(World world, int x, int y, int z) { return (world.getBlock(x, y, z).getMaterial().isLiquid() && world.getBlock(x, y + 1, z).getMaterial().isLiquid()) && canThisPlantGrowOnThisBlock(world.getBlock(x, y - 1, z)); } }