package com.vapourdrive.harderstart.blocks; import java.util.ArrayList; import java.util.List; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.enchantment.Enchantment; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import com.vapourdrive.harderstart.HS_ModInfo; import com.vapourdrive.harderstart.HarderStart; import com.vapourdrive.harderstart.items.GemRef; import com.vapourdrive.harderstart.items.ItemEnchantmentGem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class GemRock extends Block { private IIcon[] blockTexture; protected GemRock() { super(Material.glass); this.setBlockName(HS_BlockInfo.GemBlockName); this.setCreativeTab(HarderStart.tabGem); this.setHardness(0.4F); this.setStepSound(soundTypeStone); this.setLightLevel(1.0F); } @Override public void getSubBlocks(Item block, CreativeTabs creativeTabs, List list) { for (int i = 0; i < GemRef.gemNames.length; ++i) { list.add(new ItemStack(block, 1, i)); } } @Override public int getDamageValue(World world, int x, int y, int z) { return world.getBlockMetadata(x, y, z); } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister register) { blockTexture = new IIcon[GemRef.gemNames.length]; for (int i = 0; i < GemRef.gemNames.length; i++) { blockTexture[i] = register.registerIcon(HS_ModInfo.RESOURSE_LOCATION + GemRef.gemNames[i]); } } @Override protected boolean canSilkHarvest() { return true; } @Override public boolean isOpaqueCube() { return false; } /** * If this block doesn't render as an ordinary block it will return False * (examples: signs, buttons, stairs, etc) */ @Override public boolean renderAsNormalBlock() { return false; } @Override @SideOnly(Side.CLIENT) public int getRenderBlockPass() { return 1; } @Override @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess access, int x, int y, int z, int side) { Block block = access.getBlock(x, y, z); if (block == this) { return false; } return true; } @Override public IIcon getIcon(int side, int meta) { return blockTexture[meta]; } @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { } /** * Returns the quantity of items to drop on block destruction. */ @Override public Item getItemDropped(int meta, Random rand, int fortune) { return Item.getItemFromBlock(this); } /** * Spawns EntityItem in the world for the given ItemStack if the world is * not remote. */ @Override public int quantityDropped(Random rand) { return 0; } @Override public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) { ArrayList<ItemStack> ret = new ArrayList<ItemStack>(); int optioncount = GemRef.gem_colour[metadata].length; int option = world.rand.nextInt(optioncount); ItemEnchantmentGem gem = (ItemEnchantmentGem) GemRef.gem_colour[metadata][option]; Enchantment Enchantment = gem.getGemEnchantment(); int maxLevels = Enchantment.getMaxLevel(); ItemStack stack = new ItemStack(gem); float f = ((world.rand.nextFloat() + ((float) maxLevels) / (10.0f)) + ((float) fortune / (5.0f))); if (f > 0.8f) { f = (world.rand.nextFloat() + ((float) maxLevels) / (10.0f)) + ((float) fortune / (5.0f)) * maxLevels; int level = (int) f; if (level > maxLevels) { level = maxLevels; } if (level > 0) { stack.addEnchantment(Enchantment, level); } } if (stack != null) { ret.add(stack); } return ret; } }