package net.minecraft.block;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.List;
import java.util.Map;
import java.util.Random;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockRedstoneTorch extends BlockTorch
{
private static Map field_150112_b = Maps.newHashMap();
private final boolean field_150113_a;
private static final String __OBFID = "CL_00000298";
private boolean func_176598_a(World worldIn, BlockPos p_176598_2_, boolean p_176598_3_)
{
if (!field_150112_b.containsKey(worldIn))
{
field_150112_b.put(worldIn, Lists.newArrayList());
}
List var4 = (List)field_150112_b.get(worldIn);
if (p_176598_3_)
{
var4.add(new BlockRedstoneTorch.Toggle(p_176598_2_, worldIn.getTotalWorldTime()));
}
int var5 = 0;
for (int var6 = 0; var6 < var4.size(); ++var6)
{
BlockRedstoneTorch.Toggle var7 = (BlockRedstoneTorch.Toggle)var4.get(var6);
if (var7.field_180111_a.equals(p_176598_2_))
{
++var5;
if (var5 >= 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, BlockPos pos, IBlockState state)
{
if (this.field_150113_a)
{
EnumFacing[] var4 = EnumFacing.values();
int var5 = var4.length;
for (int var6 = 0; var6 < var5; ++var6)
{
EnumFacing var7 = var4[var6];
worldIn.notifyNeighborsOfStateChange(pos.offset(var7), this);
}
}
}
public void breakBlock(World worldIn, BlockPos pos, IBlockState state)
{
if (this.field_150113_a)
{
EnumFacing[] var4 = EnumFacing.values();
int var5 = var4.length;
for (int var6 = 0; var6 < var5; ++var6)
{
EnumFacing var7 = var4[var6];
worldIn.notifyNeighborsOfStateChange(pos.offset(var7), this);
}
}
}
public int isProvidingWeakPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side)
{
return this.field_150113_a && state.getValue(FACING_PROP) != side ? 15 : 0;
}
private boolean func_176597_g(World worldIn, BlockPos p_176597_2_, IBlockState p_176597_3_)
{
EnumFacing var4 = ((EnumFacing)p_176597_3_.getValue(FACING_PROP)).getOpposite();
return worldIn.func_175709_b(p_176597_2_.offset(var4), var4);
}
/**
* Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.)
*/
public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random random) {}
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
{
boolean var5 = this.func_176597_g(worldIn, pos, state);
List var6 = (List)field_150112_b.get(worldIn);
while (var6 != null && !var6.isEmpty() && worldIn.getTotalWorldTime() - ((BlockRedstoneTorch.Toggle)var6.get(0)).field_150844_d > 60L)
{
var6.remove(0);
}
if (this.field_150113_a)
{
if (var5)
{
worldIn.setBlockState(pos, Blocks.unlit_redstone_torch.getDefaultState().withProperty(FACING_PROP, state.getValue(FACING_PROP)), 3);
if (this.func_176598_a(worldIn, pos, true))
{
worldIn.playSoundEffect((double)((float)pos.getX() + 0.5F), (double)((float)pos.getY() + 0.5F), (double)((float)pos.getZ() + 0.5F), "random.fizz", 0.5F, 2.6F + (worldIn.rand.nextFloat() - worldIn.rand.nextFloat()) * 0.8F);
for (int var7 = 0; var7 < 5; ++var7)
{
double var8 = (double)pos.getX() + rand.nextDouble() * 0.6D + 0.2D;
double var10 = (double)pos.getY() + rand.nextDouble() * 0.6D + 0.2D;
double var12 = (double)pos.getZ() + rand.nextDouble() * 0.6D + 0.2D;
worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, var8, var10, var12, 0.0D, 0.0D, 0.0D, new int[0]);
}
worldIn.scheduleUpdate(pos, worldIn.getBlockState(pos).getBlock(), 160);
}
}
}
else if (!var5 && !this.func_176598_a(worldIn, pos, false))
{
worldIn.setBlockState(pos, Blocks.redstone_torch.getDefaultState().withProperty(FACING_PROP, state.getValue(FACING_PROP)), 3);
}
}
public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock)
{
if (!this.func_176592_e(worldIn, pos, state))
{
if (this.field_150113_a == this.func_176597_g(worldIn, pos, state))
{
worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn));
}
}
}
public int isProvidingStrongPower(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing side)
{
return side == EnumFacing.DOWN ? this.isProvidingWeakPower(worldIn, pos, state, side) : 0;
}
/**
* Get the Item that this Block should drop when harvested.
*
* @param fortune the level of the Fortune enchantment on the player's tool
*/
public Item getItemDropped(IBlockState state, Random rand, 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;
}
public boolean isAssociatedBlock(Block other)
{
return other == Blocks.unlit_redstone_torch || other == Blocks.redstone_torch;
}
static class Toggle
{
BlockPos field_180111_a;
long field_150844_d;
private static final String __OBFID = "CL_00000299";
public Toggle(BlockPos p_i45688_1_, long p_i45688_2_)
{
this.field_180111_a = p_i45688_1_;
this.field_150844_d = p_i45688_2_;
}
}
}