Esta es la clase para las texturas: (Sin imports)
public class Bridge_Icon
{
private IIcon[] icons;
private String[] sideName; //Nombre archivo
/** The index of the sideName array for side */
private int[][] sideText; //Archivo por cara referenciando sideName
/**
*
* @param n
* @param t Down, Up, North, South, West, East
*/
public Bridge_Icon(String[] n, int[][] t)
{
sideName = n;
sideText = t;
}
public Bridge_Icon(String[] n)
{
sideName = n;
int[][] aux = {{0, 0, 0, 0, 0, 0}}; //Todas la misma.
sideText = aux;
}
@SideOnly(Side.CLIENT)
public void makeIcons(IIconRegister iconRegister)
{
icons = new IIcon[sideName.length];
for (int i = 0; i < sideName.length; i++)
{
icons[i] = iconRegister.registerIcon(sideName[i]);
}
}
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int met)
{
try{
if(sideText.length <= met) //Por extranhos errores
{
return icons[sideText[sideText.length - 1][side]];
}
return icons[sideText[met][side]];
}catch(Exception e){ //Por errores en el debug.
System.out.println("Error de textura no controlada. Espero que sea modo debug.");
return icons[sideText[0][side]];
}
}
}
Luego, cuando voy a crear un bloque creo un bridge_icon. Dependiendo del bloque, tengo tres formas:
1ª.- Si el bloque usa una misma textura para todas sus caras:
brid = new Bridge_Icon(new String[] {"mod_Celtech:santEter"});
2º.- Si usa distintas texturas para sus caras:
brid = new Bridge_Icon(new String[] {"mod_Celtech:santFuego", "lava_still"}, new int[][] {{1, 1, 0, 0, 0, 0}});
Eso significa que el bloque usa dos texturas (el primer array) y que la segunda se usa en la cara de arriba y abajo y el resto usan la primera (segundo array).
3º.- Usa distintas texturas dependiendo del metadato (como la lana y sus colores):
brid = new Bridge_Icon(new String[] {"mod_Celtech:talladoUno", "mod_Celtech:talladoDos", "mod_Celtech:talladoTres", "mod_Celtech:talladoCuatro", "mod_Celtech:talladoCinco", "mod_Celtech:talladoSeis", "mod_Celtech:talladoSiete", "mod_Celtech:talladoOcho", "mod_Celtech:talladoNueve", "mod_Celtech:talladoDiez", "mod_Celtech:talladoOnce", "mod_Celtech:talladoDoce", "mod_Celtech:talladoTrece", "mod_Celtech:talladoCatorce", "mod_Celtech:talladoQuince", "mod_Celtech:talladoDieciseis"}, new int[][] {{0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1}, {2, 2, 2, 2, 2, 2}, {3, 3, 3, 3, 3, 3}, {4, 4, 4, 4, 4, 4}, {5, 5, 5, 5, 5, 5}, {6, 6, 6, 6, 6, 6}, {7, 7, 7, 7, 7, 7}, {8, 8, 8, 8, 8, 8}, {9, 9, 9, 9, 9, 9}, {10, 10, 10, 10, 10, 10}, {11, 11, 11, 11, 11, 11}, {12, 12, 12, 12, 12, 12}, {13, 13, 13, 13, 13, 13}, {14, 14, 14, 14, 14, 14}, {15, 15, 15, 15, 15, 15}});
En este caso cada metadato usa una textura única para todas sus caras, pero se podrían usar varias de igual forma que el punto 2.
Luego la clase que representa al bloque recibe este objeto y lo usa en dos métodos:
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister par1IconRegister)
{
icons.makeIcons(par1IconRegister);
}
@Override
public IIcon getIcon(int i, int m)
{
return icons.getIcon(i, m);
}
Siendo icons el objeto.
Pruébalo y si no te funciona hay un fallo en otra parte.