package org.halvors.electrometrics.common.block; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import org.halvors.electrometrics.client.render.DefaultIcon; import org.halvors.electrometrics.common.Reference; import org.halvors.electrometrics.common.base.tile.ITileActiveState; import org.halvors.electrometrics.common.base.tile.ITileRotatable; import org.halvors.electrometrics.common.tile.TileEntity; import org.halvors.electrometrics.common.util.render.Orientation; public abstract class BlockTextured extends BlockMetadata { protected final IIcon[][] iconMetadataList = new IIcon[16][16]; protected DefaultIcon defaultBlockIcon; protected BlockTextured(String name, Material material) { super(name, material); } @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister iconRegister) { blockIcon = iconRegister.registerIcon(Reference.PREFIX + name); defaultBlockIcon = DefaultIcon.getAll(blockIcon); } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { TileEntity tileEntity = TileEntity.getTileEntity(world, x, y, z); int metadata = tileEntity.getBlockMetadata(); boolean isActive = false; // Check if this implements ITileActiveState, if it do we get the state from it. if (tileEntity instanceof ITileActiveState) { ITileActiveState tileActiveState = (ITileActiveState) tileEntity; isActive = tileActiveState.isActive(); } // Check if this implements ITileRotatable. if (tileEntity instanceof ITileRotatable) { ITileRotatable tileRotatable = (ITileRotatable) tileEntity; return iconMetadataList[metadata][Orientation.getBaseOrientation(side, tileRotatable.getFacing()) + (isActive ? 6 : 0)]; } return iconMetadataList[metadata][side + (isActive ? 6 : 0)]; } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int metadata) { // Workaround to for when block is not rendered in world, by swapping the front and back sides. switch (side) { case 2: // Back side = 3; break; case 3: // Front side = 2; break; } return iconMetadataList[metadata][side]; } @Override @SideOnly(Side.CLIENT) public boolean isOpaqueCube() { return false; } }