// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) braces deadcode fieldsfirst

package net.minecraft.src;

import java.util.Random;

import net.minecraft.src.forge.ITextureProvider;

// Referenced classes of package net.minecraft.src:
// BlockBreakable, Material, World, Block,
// EnumSkyBlock, IBlockAccess, EntityPlayer, ItemStack

public class PCmo_BlockPowerCrystal extends BlockBreakable implements PC_ISwapTerrain, ITextureProvider {
	@Override
	public String getTextureFile() {
		return getTerrainFile();
	}

	@Override
	public void onBlockPlaced(World world, int i, int j, int k, int l) {
		int meta = world.getBlockMetadata(i, j, k);
		if (meta == 0) {
			world.setBlockMetadataWithNotify(i, j, k, getNeighborColor(world, i, j, k));
		}
	}

	private int getNeighborColor(World world, int i, int j, int k) {
		if (world.getBlockMetadata(i + 1, j, k) != 0 && world.getBlockId(i + 1, j, k) == blockID) { return world.getBlockMetadata(i + 1, j,
				k); }
		if (world.getBlockMetadata(i - 1, j, k) != 0 && world.getBlockId(i - 1, j, k) == blockID) { return world.getBlockMetadata(i - 1, j,
				k); }
		if (world.getBlockMetadata(i, j, k + 1) != 0 && world.getBlockId(i, j, k + 1) == blockID) { return world.getBlockMetadata(i, j,
				k + 1); }
		if (world.getBlockMetadata(i, j, k - 1) != 0 && world.getBlockId(i, j, k - 1) == blockID) { return world.getBlockMetadata(i, j,
				k - 1); }
		if (world.getBlockMetadata(i, j + 1, k) != 0 && world.getBlockId(i, j + 1, k) == blockID) { return world.getBlockMetadata(i, j + 1,
				k); }
		if (world.getBlockMetadata(i, j - 1, k) != 0 && world.getBlockId(i, j - 1, k) == blockID) { return world.getBlockMetadata(i, j - 1,
				k); }
		return world.rand.nextInt(8) + 1;
	}

	@Override
	public void onBlockAdded(World world, int i, int j, int k) {
		onBlockPlaced(world, i, j, k, 0);
	}

	@Override
	public int getBlockColor() {
		return PC_Color.crystal_colors[2];
	}

	@Override
	public int getRenderColor(int i) {
		return PC_Color.crystal_colors[MathHelper.clamp_int(i, 0, 7)];
	}

	@Override
	public int colorMultiplier(IBlockAccess iblockaccess, int i, int j, int k) {
		return PC_Color.crystal_colors[MathHelper.clamp_int(iblockaccess.getBlockMetadata(i, j, k) - 1, 0, 7)];
	}

	public PCmo_BlockPowerCrystal(int i, int j) {
		super(i, j, Material.glass, false);
	}

	@Override
	public int getRenderBlockPass() {
		return 1;
	}

	@Override
	public boolean shouldSideBeRendered(IBlockAccess iblockaccess, int i, int j, int k, int l) {
		return true;
	}

	@Override
	public int quantityDropped(Random random) {
		return 1;
	}

	@Override
	protected int damageDropped(int i) {
		if (i == 0) { return 0; }
		return i - 1;
	}

	@Override
	public int idDropped(int i, Random random, int j) {
		return blockID;
	}

	@Override
	public int getMobilityFlag() {
		return 0;
	}

	@Override
	public String getTerrainFile() {
		return mod_PCmobile.getTerrainFile();
	}

	@Override
	public boolean renderAsNormalBlock() {
		return false;
	}

	@Override
	public int getRenderType() {
		return mod_PCmobile.rendererCrystal;
	}

	@Override
	public void randomDisplayTick(World world, int i, int j, int k, Random random) {

		int id_under = world.getBlockId(i, j - 1, k);
		EntityPlayer player = world.getClosestPlayer(i + 0.5D, j + 0.5D, k + 0.5D, 15);
		if (player != null) {

			if (id_under == Block.stone.blockID || id_under == 7 || id_under == Block.dirt.blockID || id_under == Block.gravel.blockID
					|| id_under == blockID) {

				int distance = (int) Math.round(player.getDistanceSq(i + 0.5D, j + 0.5D, k + 0.5D) / 10);

				if (distance == 0) {
					distance = 1;
				}

				if (random.nextInt(distance) == 0) {
					world.playSoundEffect(i + 0.5D, j + 0.5D, k + 0.5D, "random.orb", 0.15F,
							0.5F * ((random.nextFloat() - random.nextFloat()) * 0.7F + 1.8F));
				}

			}
		}

		int meta = world.getBlockMetadata(i, j, k);
		double r = PC_Color.red(getRenderColor(meta - 1));
		double g = PC_Color.green(getRenderColor(meta - 1));
		double b = PC_Color.blue(getRenderColor(meta - 1));

		r = (r > 0D ? r : 0.001D);
		g = (g > 0D ? g : 0.001D);
		b = (b > 0D ? b : 0.001D);

		float y = j + random.nextFloat();
		float x = i + random.nextFloat();
		float z = k + random.nextFloat();

		world.spawnParticle("reddust", x, y, z, r, g, b);
	}
}
