package net.minecraft.block; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.Random; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockRedstoneRepeater extends BlockRedstoneDiode { /** The offsets for the two torches in redstone repeater blocks. */ public static final double[] repeaterTorchOffset = new double[] { -0.0625D, 0.0625D, 0.1875D, 0.3125D}; /** The states in which the redstone repeater blocks can be. */ private static final int[] repeaterState = new int[] {1, 2, 3, 4}; private static final String __OBFID = "CL_00000301"; protected BlockRedstoneRepeater(boolean p_i45424_1_) { super(p_i45424_1_); } /** * Called upon block activation (right click on the block). Args : world, x, y, z, player, side, hitX, hitY, hitZ. * Return : Swing hand (client), abort the block placement (server) */ public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY, float subZ) { int i1 = worldIn.getBlockMetadata(x, y, z); int j1 = (i1 & 12) >> 2; j1 = j1 + 1 << 2 & 12; worldIn.setBlockMetadataWithNotify(x, y, z, j1 | i1 & 3, 3); return true; } protected int func_149901_b(int p_149901_1_) { return repeaterState[(p_149901_1_ & 12) >> 2] * 2; } protected BlockRedstoneDiode getBlockPowered() { return Blocks.powered_repeater; } protected BlockRedstoneDiode getBlockUnpowered() { return Blocks.unpowered_repeater; } public Item getItemDropped(int meta, Random random, int fortune) { return Items.repeater; } /** * 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 Items.repeater; } /** * The type of render function that is called for this block */ public int getRenderType() { return 15; } public boolean func_149910_g(IBlockAccess p_149910_1_, int p_149910_2_, int p_149910_3_, int p_149910_4_, int p_149910_5_) { return this.func_149902_h(p_149910_1_, p_149910_2_, p_149910_3_, p_149910_4_, p_149910_5_) > 0; } protected boolean func_149908_a(Block p_149908_1_) { return isRedstoneRepeaterBlockID(p_149908_1_); } public void breakBlock(World worldIn, int x, int y, int z, Block blockBroken, int meta) { super.breakBlock(worldIn, x, y, z, blockBroken, meta); this.func_149911_e(worldIn, x, y, z); } /** * 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.isRepeaterPowered) { int l = worldIn.getBlockMetadata(x, y, z); int i1 = getDirection(l); double d0 = (double)((float)x + 0.5F) + (double)(random.nextFloat() - 0.5F) * 0.2D; double d1 = (double)((float)y + 0.4F) + (double)(random.nextFloat() - 0.5F) * 0.2D; double d2 = (double)((float)z + 0.5F) + (double)(random.nextFloat() - 0.5F) * 0.2D; double d3 = 0.0D; double d4 = 0.0D; if (random.nextInt(2) == 0) { switch (i1) { case 0: d4 = -0.3125D; break; case 1: d3 = 0.3125D; break; case 2: d4 = 0.3125D; break; case 3: d3 = -0.3125D; } } else { int j1 = (l & 12) >> 2; switch (i1) { case 0: d4 = repeaterTorchOffset[j1]; break; case 1: d3 = -repeaterTorchOffset[j1]; break; case 2: d4 = -repeaterTorchOffset[j1]; break; case 3: d3 = repeaterTorchOffset[j1]; } } worldIn.spawnParticle("reddust", d0 + d3, d1, d2 + d4, 0.0D, 0.0D, 0.0D); } } }