    001package net.minecraft.block;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import net.minecraft.client.renderer.texture.IconRegister;
    006import net.minecraft.util.Icon;
    007import net.minecraft.world.World;
    008
    009public class BlockRailPowered extends BlockRailBase
    010{
    011    @SideOnly(Side.CLIENT)
    012    protected Icon theIcon;
    013
    014    protected BlockRailPowered(int par1)
    015    {
    016        super(par1, true);
    017    }
    018
    019    @SideOnly(Side.CLIENT)
    020
    021    /**
    022     * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
    023     */
    024    public Icon getIcon(int par1, int par2)
    025    {
    026        return (par2 & 8) == 0 ? this.blockIcon : this.theIcon;
    027    }
    028
    029    @SideOnly(Side.CLIENT)
    030
    031    /**
    032     * When this method is called, your block should register all the icons it needs with the given IconRegister. This
    033     * is the only chance you get to register icons.
    034     */
    035    public void registerIcons(IconRegister par1IconRegister)
    036    {
    037        super.registerIcons(par1IconRegister);
    038        this.theIcon = par1IconRegister.registerIcon(this.getUnlocalizedName2() + "_powered");
    039    }
    040
    041    protected boolean func_94360_a(World par1World, int par2, int par3, int par4, int par5, boolean par6, int par7)
    042    {
    043        if (par7 >= 8)
    044        {
    045            return false;
    046        }
    047        else
    048        {
    049            int j1 = par5 & 7;
    050            boolean flag1 = true;
    051
    052            switch (j1)
    053            {
    054                case 0:
    055                    if (par6)
    056                    {
    057                        ++par4;
    058                    }
    059                    else
    060                    {
    061                        --par4;
    062                    }
    063
    064                    break;
    065                case 1:
    066                    if (par6)
    067                    {
    068                        --par2;
    069                    }
    070                    else
    071                    {
    072                        ++par2;
    073                    }
    074
    075                    break;
    076                case 2:
    077                    if (par6)
    078                    {
    079                        --par2;
    080                    }
    081                    else
    082                    {
    083                        ++par2;
    084                        ++par3;
    085                        flag1 = false;
    086                    }
    087
    088                    j1 = 1;
    089                    break;
    090                case 3:
    091                    if (par6)
    092                    {
    093                        --par2;
    094                        ++par3;
    095                        flag1 = false;
    096                    }
    097                    else
    098                    {
    099                        ++par2;
    100                    }
    101
    102                    j1 = 1;
    103                    break;
    104                case 4:
    105                    if (par6)
    106                    {
    107                        ++par4;
    108                    }
    109                    else
    110                    {
    111                        --par4;
    112                        ++par3;
    113                        flag1 = false;
    114                    }
    115
    116                    j1 = 0;
    117                    break;
    118                case 5:
    119                    if (par6)
    120                    {
    121                        ++par4;
    122                        ++par3;
    123                        flag1 = false;
    124                    }
    125                    else
    126                    {
    127                        --par4;
    128                    }
    129
    130                    j1 = 0;
    131            }
    132
    133            return this.func_94361_a(par1World, par2, par3, par4, par6, par7, j1) ? true : flag1 && this.func_94361_a(par1World, par2, par3 - 1, par4, par6, par7, j1);
    134        }
    135    }
    136
    137    protected boolean func_94361_a(World par1World, int par2, int par3, int par4, boolean par5, int par6, int par7)
    138    {
    139        int j1 = par1World.getBlockId(par2, par3, par4);
    140
    141        if (j1 == this.blockID)
    142        {
    143            int k1 = par1World.getBlockMetadata(par2, par3, par4);
    144            int l1 = k1 & 7;
    145
    146            if (par7 == 1 && (l1 == 0 || l1 == 4 || l1 == 5))
    147            {
    148                return false;
    149            }
    150
    151            if (par7 == 0 && (l1 == 1 || l1 == 2 || l1 == 3))
    152            {
    153                return false;
    154            }
    155
    156            if ((k1 & 8) != 0)
    157            {
    158                if (par1World.isBlockIndirectlyGettingPowered(par2, par3, par4))
    159                {
    160                    return true;
    161                }
    162
    163                return this.func_94360_a(par1World, par2, par3, par4, k1, par5, par6 + 1);
    164            }
    165        }
    166
    167        return false;
    168    }
    169
    170    protected void func_94358_a(World par1World, int par2, int par3, int par4, int par5, int par6, int par7)
    171    {
    172        boolean flag = par1World.isBlockIndirectlyGettingPowered(par2, par3, par4);
    173        flag = flag || this.func_94360_a(par1World, par2, par3, par4, par5, true, 0) || this.func_94360_a(par1World, par2, par3, par4, par5, false, 0);
    174        boolean flag1 = false;
    175
    176        if (flag && (par5 & 8) == 0)
    177        {
    178            par1World.setBlockMetadataWithNotify(par2, par3, par4, par6 | 8, 3);
    179            flag1 = true;
    180        }
    181        else if (!flag && (par5 & 8) != 0)
    182        {
    183            par1World.setBlockMetadataWithNotify(par2, par3, par4, par6, 3);
    184            flag1 = true;
    185        }
    186
    187        if (flag1)
    188        {
    189            par1World.notifyBlocksOfNeighborChange(par2, par3 - 1, par4, this.blockID);
    190
    191            if (par6 == 2 || par6 == 3 || par6 == 4 || par6 == 5)
    192            {
    193                par1World.notifyBlocksOfNeighborChange(par2, par3 + 1, par4, this.blockID);
    194            }
    195        }
    196    }
    197}