package net.minecraft.block;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockRedstoneTorch extends BlockTorch
{
private boolean field_150113_a;
private static Map field_150112_b = new HashMap();
private static final String __OBFID = "CL_00000298";
private boolean func_150111_a(World p_150111_1_, int p_150111_2_, int p_150111_3_, int p_150111_4_, boolean p_150111_5_)
{
if (!field_150112_b.containsKey(p_150111_1_))
{
field_150112_b.put(p_150111_1_, new ArrayList());
}
List list = (List)field_150112_b.get(p_150111_1_);
if (p_150111_5_)
{
list.add(new BlockRedstoneTorch.Toggle(p_150111_2_, p_150111_3_, p_150111_4_, p_150111_1_.getTotalWorldTime()));
}
int l = 0;
for (int i1 = 0; i1 < list.size(); ++i1)
{
BlockRedstoneTorch.Toggle toggle = (BlockRedstoneTorch.Toggle)list.get(i1);
if (toggle.field_150847_a == p_150111_2_ && toggle.field_150845_b == p_150111_3_ && toggle.field_150846_c == p_150111_4_)
{
++l;
if (l >= 8)
{
return true;
}
}
}
return false;
}
protected BlockRedstoneTorch(boolean p_i45423_1_)
{
this.field_150113_a = p_i45423_1_;
this.setTickRandomly(true);
this.setCreativeTab((CreativeTabs)null);
}
/**
* How many world ticks before ticking
*/
public int tickRate(World worldIn)
{
return 2;
}
public void onBlockAdded(World worldIn, int x, int y, int z)
{
if (worldIn.getBlockMetadata(x, y, z) == 0)
{
super.onBlockAdded(worldIn, x, y, z);
}
if (this.field_150113_a)
{
worldIn.notifyBlocksOfNeighborChange(x, y - 1, z, this);
worldIn.notifyBlocksOfNeighborChange(x, y + 1, z, this);
worldIn.notifyBlocksOfNeighborChange(x - 1, y, z, this);
worldIn.notifyBlocksOfNeighborChange(x + 1, y, z, this);
worldIn.notifyBlocksOfNeighborChange(x, y, z - 1, this);
worldIn.notifyBlocksOfNeighborChange(x, y, z + 1, this);
}
}
public void breakBlock(World worldIn, int x, int y, int z, Block blockBroken, int meta)
{
if (this.field_150113_a)
{
worldIn.notifyBlocksOfNeighborChange(x, y - 1, z, this);
worldIn.notifyBlocksOfNeighborChange(x, y + 1, z, this);
worldIn.notifyBlocksOfNeighborChange(x - 1, y, z, this);
worldIn.notifyBlocksOfNeighborChange(x + 1, y, z, this);
worldIn.notifyBlocksOfNeighborChange(x, y, z - 1, this);
worldIn.notifyBlocksOfNeighborChange(x, y, z + 1, this);
}
}
public int isProvidingWeakPower(IBlockAccess worldIn, int x, int y, int z, int side)
{
if (!this.field_150113_a)
{
return 0;
}
else
{
int i1 = worldIn.getBlockMetadata(x, y, z);
return i1 == 5 && side == 1 ? 0 : (i1 == 3 && side == 3 ? 0 : (i1 == 4 && side == 2 ? 0 : (i1 == 1 && side == 5 ? 0 : (i1 == 2 && side == 4 ? 0 : 15))));
}
}
private boolean func_150110_m(World p_150110_1_, int p_150110_2_, int p_150110_3_, int p_150110_4_)
{
int l = p_150110_1_.getBlockMetadata(p_150110_2_, p_150110_3_, p_150110_4_);
return l == 5 && p_150110_1_.getIndirectPowerOutput(p_150110_2_, p_150110_3_ - 1, p_150110_4_, 0) ? true : (l == 3 && p_150110_1_.getIndirectPowerOutput(p_150110_2_, p_150110_3_, p_150110_4_ - 1, 2) ? true : (l == 4 && p_150110_1_.getIndirectPowerOutput(p_150110_2_, p_150110_3_, p_150110_4_ + 1, 3) ? true : (l == 1 && p_150110_1_.getIndirectPowerOutput(p_150110_2_ - 1, p_150110_3_, p_150110_4_, 4) ? true : l == 2 && p_150110_1_.getIndirectPowerOutput(p_150110_2_ + 1, p_150110_3_, p_150110_4_, 5))));
}
/**
* Ticks the block if it's been scheduled
*/
public void updateTick(World worldIn, int x, int y, int z, Random random)
{
boolean flag = this.func_150110_m(worldIn, x, y, z);
List list = (List)field_150112_b.get(worldIn);
while (list != null && !list.isEmpty() && worldIn.getTotalWorldTime() - ((BlockRedstoneTorch.Toggle)list.get(0)).field_150844_d > 60L)
{
list.remove(0);
}
if (this.field_150113_a)
{
if (flag)
{
worldIn.setBlock(x, y, z, Blocks.unlit_redstone_torch, worldIn.getBlockMetadata(x, y, z), 3);
if (this.func_150111_a(worldIn, x, y, z, true))
{
worldIn.playSoundEffect((double)((float)x + 0.5F), (double)((float)y + 0.5F), (double)((float)z + 0.5F), "random.fizz", 0.5F, 2.6F + (worldIn.rand.nextFloat() - worldIn.rand.nextFloat()) * 0.8F);
for (int l = 0; l < 5; ++l)
{
double d0 = (double)x + random.nextDouble() * 0.6D + 0.2D;
double d1 = (double)y + random.nextDouble() * 0.6D + 0.2D;
double d2 = (double)z + random.nextDouble() * 0.6D + 0.2D;
worldIn.spawnParticle("smoke", d0, d1, d2, 0.0D, 0.0D, 0.0D);
}
}
}
}
else if (!flag && !this.func_150111_a(worldIn, x, y, z, false))
{
worldIn.setBlock(x, y, z, Blocks.redstone_torch, worldIn.getBlockMetadata(x, y, z), 3);
}
}
public void onNeighborBlockChange(World worldIn, int x, int y, int z, Block neighbor)
{
if (!this.func_150108_b(worldIn, x, y, z, neighbor))
{
boolean flag = this.func_150110_m(worldIn, x, y, z);
if (this.field_150113_a && flag || !this.field_150113_a && !flag)
{
worldIn.scheduleBlockUpdate(x, y, z, this, this.tickRate(worldIn));
}
}
}
public int isProvidingStrongPower(IBlockAccess worldIn, int x, int y, int z, int side)
{
return side == 0 ? this.isProvidingWeakPower(worldIn, x, y, z, side) : 0;
}
public Item getItemDropped(int meta, Random random, int fortune)
{
return Item.getItemFromBlock(Blocks.redstone_torch);
}
/**
* Can this block provide power. Only wire currently seems to have this change based on its state.
*/
public boolean canProvidePower()
{
return true;
}
/**
* A randomly called display update to be able to add particles or other items for display
*/
@SideOnly(Side.CLIENT)
public void randomDisplayTick(World worldIn, int x, int y, int z, Random random)
{
if (this.field_150113_a)
{
int l = worldIn.getBlockMetadata(x, y, z);
double d0 = (double)((float)x + 0.5F) + (double)(random.nextFloat() - 0.5F) * 0.2D;
double d1 = (double)((float)y + 0.7F) + (double)(random.nextFloat() - 0.5F) * 0.2D;
double d2 = (double)((float)z + 0.5F) + (double)(random.nextFloat() - 0.5F) * 0.2D;
double d3 = 0.2199999988079071D;
double d4 = 0.27000001072883606D;
if (l == 1)
{
worldIn.spawnParticle("reddust", d0 - d4, d1 + d3, d2, 0.0D, 0.0D, 0.0D);
}
else if (l == 2)
{
worldIn.spawnParticle("reddust", d0 + d4, d1 + d3, d2, 0.0D, 0.0D, 0.0D);
}
else if (l == 3)
{
worldIn.spawnParticle("reddust", d0, d1 + d3, d2 - d4, 0.0D, 0.0D, 0.0D);
}
else if (l == 4)
{
worldIn.spawnParticle("reddust", d0, d1 + d3, d2 + d4, 0.0D, 0.0D, 0.0D);
}
else
{
worldIn.spawnParticle("reddust", d0, d1, d2, 0.0D, 0.0D, 0.0D);
}
}
}
/**
* Gets an item for the block being called on. Args: world, x, y, z
*/
@SideOnly(Side.CLIENT)
public Item getItem(World worldIn, int x, int y, int z)
{
return Item.getItemFromBlock(Blocks.redstone_torch);
}
public boolean isAssociatedBlock(Block other)
{
return other == Blocks.unlit_redstone_torch || other == Blocks.redstone_torch;
}
static class Toggle
{
int field_150847_a;
int field_150845_b;
int field_150846_c;
long field_150844_d;
private static final String __OBFID = "CL_00000299";
public Toggle(int p_i45422_1_, int p_i45422_2_, int p_i45422_3_, long p_i45422_4_)
{
this.field_150847_a = p_i45422_1_;
this.field_150845_b = p_i45422_2_;
this.field_150846_c = p_i45422_3_;
this.field_150844_d = p_i45422_4_;
}
}
}