Résolu Colorer un layer d'un bloc?
-
Salut,
Dans l’optique de réduire au maximum le poids de mes textures, je cherche à savoir s’il est possible de changer la teinte d’un layer sur un bloc.
Je m’explique. J’ai fait un bloc qui est composé de deux models de block basique (taille standard), un bloc avec la texture de base et un bloc qui n’a qu’une texture transparente sur la face du dessus. En jeu ça donne ça (le bloc avec la ligne blanche):
http://imgur.com/BM8aNjW (si la prévisualisation ne marche pas, imgur a tendance à ne pas aimer le hotlinking maintenant…)
La ligne blanche est une texture à part, appliquée sur un layer différent (en gros il y a 2 blocks dans le json du model).
De la sorte, j’ai juste besoin de faire la texture du matériau de base et les lignes une fois, plutôt que de répéter à chaque type de matériau toutes les variations de lignes qu’il y aura. Ca m’économise des centaines de textures.
Maintenant, je veux faire des lignes de différente couleurs, et plutôt que de dupliquer chaque motif de ligne pour chaque couleur, je voudrais savoir s’il y avait moyen de colorer le layer de la ligne. Je pense que ça serait un peu comme le bloc d’herbe qui est coloré en fonction du biome, mais je n’ai pas trouvé dans les sources comment Mojang fait ça (et ça utilise un système avec les biomes, là où moi je veux jute appliquer une couleur spécifique). Dans le json on peut avoir un paramètre “tintindex” mais je n’ai pas trouvé comment s’en servir malgré des heures de recherches.
Le json du model:
:::
{ “parent”: “block/block”,
“elements”: [
{ “from”: [ 0, 0, 0 ],
“to”: [ 16, 16, 16 ],
“faces”: {
“down”: { “uv”: [ 0, 0, 16, 16 ], “texture”: “#base”, “cullface”: “down” },
“up”: { “uv”: [ 0, 0, 16, 16 ], “texture”: “#base”, “cullface”: “up” },
“north”: { “uv”: [ 0, 0, 16, 16 ], “texture”: “#base”, “cullface”: “north” },
“south”: { “uv”: [ 0, 0, 16, 16 ], “texture”: “#base”, “cullface”: “south” },
“west”: { “uv”: [ 0, 0, 16, 16 ], “texture”: “#base”, “cullface”: “west” },
“east”: { “uv”: [ 0, 0, 16, 16 ], “texture”: “#base”, “cullface”: “east” }
}
},
{ “from”: [ 0, 0, 0 ],
“to”: [ 16, 16, 16 ],
“faces”: {
“up”: { “uv”: [ 0, 0, 16, 16 ], “texture”: “#overlay”, “tintindex”: 0, “cullface”: “up” }
}
}
]
}
:::En espérant que ça soit faisable, et si oui que quelqu’un aie une idée de comment ça se passe
-
Je vais m’y pencher dessus si personne ne répond d’ici ce soir
-
Je ne sais pas si c’est son cas mais regardes Carpenter’s Mod Bonne chance c’est très recherché !
-
J’ai trouvé une solution, grâce à cet example sur le GitHub de Choonster (un membre habitué du forum officiel de Forge).
Je peux maintenant définir la couleur de la ligne en fonction du bloc, du state etc c’est parfait
Là j’applique une couleur jaune quand le bloc est tourné, et blanche quand il ne l’est pas. La classe que j’ai adapté pour cet exemple:
:::
package net.killermapper.testmod.util;import net.killermapper.testmod.Reference;
import net.killermapper.testmod.blocks.BooleanBlock;
import net.killermapper.testmod.init.InitBlocks;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.color.BlockColors;
import net.minecraft.client.renderer.color.IBlockColor;public class ModColorHandler
{
private static final Minecraft minecraft = Minecraft.getMinecraft();public static void registerColorHandlers()
{
final BlockColors blockColors = minecraft.getBlockColors();
registerBlockColorHandlers(blockColors);
}private static void registerBlockColorHandlers(final BlockColors blockColors)
{
final IBlockColor lineColorHandler = (state, blockAccess, pos, tintIndex) ->
{
if(blockAccess != null && pos != null)
if(state == InitBlocks.booleanBlock.getDefaultState().withProperty(BooleanBlock.IS_ROTATED, true) )
return Reference.YELLOWCOLOR;
return Reference.WHITECOLOR;
};blockColors.registerBlockColorHandler(lineColorHandler, InitBlocks.booleanBlock);
}
}
:::(à initialiser dans le Init, côté client)