Metadatas (block)" + "Multiple texture"



  • Salut à toutes et à tous;
    Je vous expose mon problème:

    Ça fais approximativement 3 ou 4 jour que je cherche sur les code de forge et sur internet et sans succés, le moyen de mélanger les "METADATAS (block)" et les "Multiple textures".

    Effectivement j’ai à peu près 15 bloc avec le même ID[m] mais tous avec des textures différente sur les face que je voudrai faire :(.

    J'arrive sans problème réussi à faire un bloc multiple texture avec deux texture différentes, et j'ai un peu plus de mal avec les metadatas "A dire vrais, en regardant les codes ou des exemple, je ne comprends pas le fonctionnement des metadatas";
    mais pas moyen de mélanger les deux.

    La classe de mon block "pour le moment";
    Et le code qui me permets d’avoirs les multiples texture:
    :::

    [CODE_java]
    package genetical_modifier.common;

    import java.util.List;

    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.client.renderer.texture.IconRegister;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.Icon;

    public class GreenMushroomBlock extends Block
    {

    @SideOnly(Side.CLIENT)
    private Icon GMside;

    public GreenMushroomBlock(int id, Material par2Material)
    {
    super(id, par2Material);
    this.setCreativeTab(CreativeTabs.tabBlock);

    }

    @SideOnly(Side.CLIENT)

    public Icon getIcon(int par1, int par2)
    {
    return (par1 == 1 || par1 == 2 || par1 == 4) ? this.GMside : this.blockIcon;
    }

    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister par1IconRegister)
    {
    this.blockIcon = par1IconRegister.registerIcon(genetical_modifier.common.Genetical_modifier.modid + ":" + this.getUnlocalizedName2());
    this.GMside = par1IconRegister.registerIcon(genetical_modifier.common.Genetical_modifier.modid + ":" + ("greenMushroomBlock_side"));
    }

    }[/CODE_java]

    :::

    les numéro après les "par1 == #" ici corresponde a une direction cardinale si on peu dire:
    0: en dessous
    1: au dessus
    2: au nord
    3: au sud
    4: a l'west
    5: a l'est

    Ha oui, depuis la 1.5, j'ai du quasiment tout réapprendre seul, alors dite moi ce qu'il ne va pas merci.

    Vous pouvais m'eclairai svp ?
    Merci d'avance.

    Cordialement.

    PS: Je compléterai se message si necesssaire.
    PS²: Vous inquiétez pas pour mon orthographe, je corrigerais au fur à mesure.


  • Moddeurs confirmés Rédacteurs Administrateurs

    J'ai éditer ton poste pour le rendre plus lisible ( code_java à la place de code, et quelques corrections de fautes)

    Il faut que tu regarde cette fonction :
    [code_java] public Icon getIcon(int par1, int par2)
    {
    return (par1 == 1 || par1 == 2 || par1 == 4) ? this.GMside : this.blockIcon;
    }[/code_java]
    par1 c'est donc les sides, et par2 les metadata. D'ailleurs moi j'utilise cette fonction comme ça, c'est plus simple pour ce repérer :
    [code_java] public Icon getIcon(int side, int metadata)
    {
    }[/code_java]
    Il faut donc que tu face un if(par2 == <n° de="" métadata="">)
    return <ton icon="">Pour éviter d'avoir 36 icon, utilise des tableaux. Je vais voir pour faire rapidement un tutoriel sur les blocs en metadata</ton></n°>



  • Je te remercie, Je vais rapidement regardai sa, mais le code que j'ai utiliser je savais comment l'utilisai, mais j’étais pas sur du tout se que signifier par2.
    J'ai hâte de ton tuto sur les mélange de c'est deux système car je me vois mal faire sa pour une 15ene de bloque x); mais je vais quand même testait, j’apprendrai comme sa.

    mais si tu veux j'avais déjà trouvai des codes qui simplifier la tache, mais je n'est pas réussit a les utiliser :
    :::

    http://www.minecraftforum.net/topic/1739959-forge151solved-blocks-w-metadata-and-different-textured-sides/

    :::
    Et j'ai eu des problème avec les "func_94245_a", malheureusement j'ai tout supprimai comme sa ne fonctionnais pas donc j'ai plus les log ou autre, en plus j'ai réinstallai forge a cause d'un petit bug, donc tout supprimer XD, sauf le dossier de mon mod.

    Cordialement.

    –----

    C'est bien comme sa que tu me disai de faire ? :
    :::

    [CODE_Java]
    public Icon getIcon(int par1, int par2)
    {
    if (par2 == 0);
    {
    if (par2 == 1);
    }
    return par2 == 0 && (par1 == 1 || par1 == 2) ? this.GMside : this.blockIcon;
    }[/CODE_Java]

    :::
    Sinon jusque la tout va bien;
    car quand j'essai d'en rajoutai d'autre sa me surligne en rouge la derniere ligne ou je site mon icon :(.



  • Dans ton code, tu mets des ; après les if.

    Ne JAMAIS faire ça.

    De plus, le return se trouve dans le if.

    Exemple :

    [CODE_Java]
    if(par2 == 0){
    return par2 == 0 && (par1 == 1 || par1 == 2) ? this.GMside : this.blockIcon;
    }

    if (par2 == 1){
    return TaTexture etc..
    }

    [/CODE_Java]

    Et ainsi de suite



  • HAaa ! Ok !
    Je te remercie je regarde sa tout de suite.

    Cordialement ^^.

    –----

    Bon sa fonctionne nickelle, j'ai juste un petit bug;
    le code du bloc -> classe principale :
    :::

    [CODE_Java]
    greenMushroomBlock = new GreenMushroomBlock(513).setLightValue(0.2F).setStepSound(Block.soundWoodFootstep).setHardness(0.5F).setUnlocalizedName("greenMushroomBlock");
    GameRegistry.registerBlock(greenMushroomBlock, ItemTest.class, modid + greenMushroomBlock.getUnlocalizedName2());
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 0), "greenMushroom1");
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 1), "greenMushroom2");
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 2), "greenMushroom3");
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 3), "greenMushroom4");
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 4), "greenMushroom5");
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 5), "greenMushroom6");
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 6), "greenMushroom7");
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 7), "greenMushroom8");
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 8), "greenMushroom9");
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 9), "greenMushroom10");
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 10), "greenMushroom11");
    LanguageRegistry.addName(new ItemStack(greenMushroomBlock, 1, 11), "greenMushroom12"); [/CODE_Java]
    :::
    La classe du bloc:
    :::

    [CODE_Java]
    package genetical_modifier.common;

    import java.util.List;

    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.client.renderer.texture.IconRegister;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.Icon;

    public class GreenMushroomBlock extends Block
    {

    @SideOnly(Side.CLIENT)
    private Icon GMside;
    private Icon GMbody;

    public GreenMushroomBlock(int id)
    {
    super(id, Material.wood);
    this.setCreativeTab(CreativeTabs.tabBlock);

    }

    @SideOnly(Side.CLIENT)

    public Icon getIcon(int par1, int par2)
    {
    if(par2 == 0){
    return par2 == 0 && (par1 == 1 || par1 == 2) ? this.GMside : this.blockIcon;
    }
    if(par2 == 1){
    return par2 == 1 && (par1 == 1 || par1 == 2 || par1 == 4) ? this.GMside : this.blockIcon;
    }
    if(par2 == 2){
    return par2 == 2 && (par1 == 1 || par1 == 4) ? this.GMside : this.blockIcon;
    }
    if(par2 == 3){
    return par2 == 3 && (par1 == 1 || par1 == 4 || par1 == 3) ? this.GMside : this.blockIcon;
    }
    if(par2 == 4){
    return par2 == 4 && (par1 == 1 || par1 == 3 ) ? this.GMside : this.blockIcon;
    }
    if(par2 == 5){
    return par2 == 5 && (par1 == 1 || par1 == 3 || par1 == 5) ? this.GMside : this.blockIcon;
    }
    if(par2 == 6){
    return par2 == 6 && (par1 == 1 || par1 == 5) ? this.GMside : this.blockIcon;
    }
    if(par2 == 7){
    return par2 == 7 && (par1 == 1 || par1 == 5 || par1 == 2) ? this.GMside : this.blockIcon;
    }
    if(par2 == 8){
    return par2 == 8 && (par1 == 1) ? this.GMside : this.blockIcon;
    }
    if(par2 == 9){
    return par2 == 9 && (par1 == 2 || par1 == 3 || par1 == 4 || par1 == 5) ? this.GMbody : this.blockIcon;
    }
    if(par2 == 10){
    return par2 == 10 && (par1 == 0 || par1 == 1 || par1 == 2 || par1 == 3 || par1 == 4 || par1 == 5) ? this.GMside : this.blockIcon;
    }
    if(par2 == 11){
    return par2 == 11 && (par1 == 0 || par1 == 1 || par1 == 2 || par1 == 3 || par1 == 4 || par1 == 5) ? this.GMbody : this.blockIcon;
    }
    return blockIcon;
    }

    public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
    {
    par3List.add(new ItemStack(par1, 1, 0));
    par3List.add(new ItemStack(par1, 1, 1));
    par3List.add(new ItemStack(par1, 1, 2));
    par3List.add(new ItemStack(par1, 1, 3));
    par3List.add(new ItemStack(par1, 1, 4));
    par3List.add(new ItemStack(par1, 1, 5));
    par3List.add(new ItemStack(par1, 1, 6));
    par3List.add(new ItemStack(par1, 1, 7));
    par3List.add(new ItemStack(par1, 1, 8));
    par3List.add(new ItemStack(par1, 1, 9));
    par3List.add(new ItemStack(par1, 1, 10));
    par3List.add(new ItemStack(par1, 1, 11));
    }

    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister par1IconRegister)
    {
    this.blockIcon = par1IconRegister.registerIcon(genetical_modifier.common.Genetical_modifier.modid + ":" + this.getUnlocalizedName2());
    this.GMside = par1IconRegister.registerIcon(genetical_modifier.common.Genetical_modifier.modid + ":" + ("greenMushroomBlock_side"));
    this.GMbody = par1IconRegister.registerIcon(genetical_modifier.common.Genetical_modifier.modid + ":" + ("greenMushroomBlock_body"));
    }

    }[/CODE_Java]
    :::
    Le petit bug est in game, j'ai nommé tout mes metadatas de 1 a 12, et pourtant, il y a que les deux premier qui se nomment comme il faut, sinon tout les autre se nomment comme le 12éme … une explication ?

    PS: je commence a fatiguer j'ai du oublier un petit code je pence, je continue de chercher^^'


    Bon je n'est pas trouvé de solution pour l'autre petit bug.

    Je sais que cela ne va pas trop avec le thème que j'ai donné au sujet, mais vu que ça a un rapport avec les blocs que j'ai fais plus haut:

    Je cherche a, quand on casse le bloc, sa drop un bloc et un item, mais le code que j'ai fais en drop qu´un seul sur les deux:
    :::

    [CODE_Java]
    public int idDropped(int par1, Random par2Random, int par3)
    {
    return par1 == 0 ? this.getGMBlock() : this.getGlowstoneItem();
    }

    protected int getGMBlock()
    {
    return (genetical_modifier.common.Genetical_modifier.greenMushroomBlock_N.blockID);
    }

    protected int getGlowstoneItem()
    {
    return Item.lightStoneDust.itemID;
    }[/CODE_Java]
    :::

    Que faire ?

    Merci d'avance.



  • Ton code est étrange. ( Pour le drop )

    Cherche dans le code du poulet, qui droppe deux objets, ou cherche un block qui en droppe deux ( Pas d'idée en tête ).



  • Bain disons le code du drop que j'ai utiliser, il est utiliser pour le blé qui drop deux ITEMS, mais pas un bloque et un items … x).
    Et j'ai toujours pas trouvai depuis, la sa prend la poussière XD.



  • Je vois vraiment pas. C'est pas compliqué, mais j'ai pas le code en tête.



  • Ok x), Et bien tu sais ou laisser un message si tu t'en souviens :), et si je trouve je fais les contes aussi XD.


Log in to reply