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 field_94362_b; 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 getBlockTextureFromSideAndMetadata(int par1, int par2) 025 { 026 return (par2 & 8) == 0 ? this.field_94336_cN : this.field_94362_b; 027 } 028 029 @SideOnly(Side.CLIENT) 030 public void func_94332_a(IconRegister par1IconRegister) 031 { 032 super.func_94332_a(par1IconRegister); 033 this.field_94362_b = par1IconRegister.func_94245_a(this.func_94330_A() + "_powered"); 034 } 035 036 protected boolean func_94360_a(World par1World, int par2, int par3, int par4, int par5, boolean par6, int par7) 037 { 038 if (par7 >= 8) 039 { 040 return false; 041 } 042 else 043 { 044 int j1 = par5 & 7; 045 boolean flag1 = true; 046 047 switch (j1) 048 { 049 case 0: 050 if (par6) 051 { 052 ++par4; 053 } 054 else 055 { 056 --par4; 057 } 058 059 break; 060 case 1: 061 if (par6) 062 { 063 --par2; 064 } 065 else 066 { 067 ++par2; 068 } 069 070 break; 071 case 2: 072 if (par6) 073 { 074 --par2; 075 } 076 else 077 { 078 ++par2; 079 ++par3; 080 flag1 = false; 081 } 082 083 j1 = 1; 084 break; 085 case 3: 086 if (par6) 087 { 088 --par2; 089 ++par3; 090 flag1 = false; 091 } 092 else 093 { 094 ++par2; 095 } 096 097 j1 = 1; 098 break; 099 case 4: 100 if (par6) 101 { 102 ++par4; 103 } 104 else 105 { 106 --par4; 107 ++par3; 108 flag1 = false; 109 } 110 111 j1 = 0; 112 break; 113 case 5: 114 if (par6) 115 { 116 ++par4; 117 ++par3; 118 flag1 = false; 119 } 120 else 121 { 122 --par4; 123 } 124 125 j1 = 0; 126 } 127 128 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); 129 } 130 } 131 132 protected boolean func_94361_a(World par1World, int par2, int par3, int par4, boolean par5, int par6, int par7) 133 { 134 int j1 = par1World.getBlockId(par2, par3, par4); 135 136 if (j1 == this.blockID) 137 { 138 int k1 = par1World.getBlockMetadata(par2, par3, par4); 139 int l1 = k1 & 7; 140 141 if (par7 == 1 && (l1 == 0 || l1 == 4 || l1 == 5)) 142 { 143 return false; 144 } 145 146 if (par7 == 0 && (l1 == 1 || l1 == 2 || l1 == 3)) 147 { 148 return false; 149 } 150 151 if ((k1 & 8) != 0) 152 { 153 if (par1World.isBlockIndirectlyGettingPowered(par2, par3, par4)) 154 { 155 return true; 156 } 157 158 return this.func_94360_a(par1World, par2, par3, par4, k1, par5, par6 + 1); 159 } 160 } 161 162 return false; 163 } 164 165 protected void func_94358_a(World par1World, int par2, int par3, int par4, int par5, int par6, int par7) 166 { 167 boolean flag = par1World.isBlockIndirectlyGettingPowered(par2, par3, par4); 168 flag = flag || this.func_94360_a(par1World, par2, par3, par4, par5, true, 0) || this.func_94360_a(par1World, par2, par3, par4, par5, false, 0); 169 boolean flag1 = false; 170 171 if (flag && (par5 & 8) == 0) 172 { 173 par1World.setBlockMetadataWithNotify(par2, par3, par4, par6 | 8, 3); 174 flag1 = true; 175 } 176 else if (!flag && (par5 & 8) != 0) 177 { 178 par1World.setBlockMetadataWithNotify(par2, par3, par4, par6, 3); 179 flag1 = true; 180 } 181 182 if (flag1) 183 { 184 par1World.notifyBlocksOfNeighborChange(par2, par3 - 1, par4, this.blockID); 185 186 if (par6 == 2 || par6 == 3 || par6 == 4 || par6 == 5) 187 { 188 par1World.notifyBlocksOfNeighborChange(par2, par3 + 1, par4, this.blockID); 189 } 190 } 191 } 192}