Faux rendu d'un Bloc avec Metadata



  • Bonjour, c'est encore moi pour un petit soucis dont je ne comprends pas la source.
    Elle concerne le rendu d'un bloc sous Metadata, je m'explique :
    ayant décidé de créer des planches munis de Metadata, j'ai donc créé une classe OldPlanksBlock comme celle-ci :

    package com.mvmc.mvmcmod.blocks;
    
    import java.util.List;
    
    import com.mvmc.mvmcmod.common.MVMCMod;
    
    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.IIconRegister;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.IIcon;
    
    public class BlockOldPlanks extends Block
    {
        public static String[] type = new String[] {"light", "dark", "peru", "bole", "white", "fawn", "ebony"};
    
        private IIcon Icon1, Icon2, Icon3, Icon4, Icon5, Icon6, Icon7;
    
        public BlockOldPlanks()
        {
            super(Material.wood);
            this.setHarvestLevel("axe",0);
            this.setHardness(2.0F);
            this.setStepSound(Block.soundTypeWood);    
            this.setCreativeTab(MVMCMod.mvmcTab);
        }
    
        public void registerBlockIcons(IIconRegister iconregister)
        {
            Icon1 = iconregister.registerIcon("mvmc:oldPlanks_"+"light");
            Icon2 = iconregister.registerIcon("mvmc:oldPlanks_"+"dark");
            Icon3 = iconregister.registerIcon("mvmc:oldPlanks_"+"peru");
            Icon4 = iconregister.registerIcon("mvmc:oldPlanks_"+"bole");
            Icon5 = iconregister.registerIcon("mvmc:oldPlanks_"+"white");
            Icon6 = iconregister.registerIcon("mvmc:oldPlanks_"+"fawn");
            Icon7 = iconregister.registerIcon("mvmc:oldPlanks_"+"ebony");
        }
    
        @SideOnly(Side.CLIENT)
        public void getSubBlocks(Item item, CreativeTabs creativeTabs, List list)
        {
            for(int metadata = 0; metadata < type.length; metadata++)
            {
                list.add(new ItemStack(item, 1, metadata));
            }
        }
    
        @SideOnly(Side.CLIENT)
        public IIcon getIcon(int side, int metadata)
        {
        switch(metadata)
            {
            case 0:
                return Icon1;
            case 1:
                return Icon2;
            case 2:
                return Icon3;
            case 3:
                return Icon4;
            case 4:
                return Icon5;
            case 5:
                return Icon6;
            case 6:
                return Icon7;
            default:
                return blockIcon;
            }
        }
    
        public int damageDropped(int metadata)
        {
            return metadata;
        }
    }
    

    après quoi j'ai bien évidement forgé le rendu d'item dans une nouvelle classe :

    
    package com.mvmc.mvmcmod.itemblocks;
    
    import com.mvmc.mvmcmod.blocks.BlockOldPlanks;
    
    import net.minecraft.block.Block;
    import net.minecraft.item.ItemBlock;
    import net.minecraft.item.ItemStack;
    
    public class ItemOldPlanks extends ItemBlock{
    
        public ItemOldPlanks(Block block)
        {
            super(block);
            this.setHasSubtypes(true);
        }
    
        public int getMetadata(int metadata)
        {
            return metadata;
        }
    
       // Il me manquait aussi cette fonction, mais ca n'a rien changé :
        @SideOnly(Side.CLIENT)
    
        public IIcon getIconFromDamage(int metadata)
        {
            return this.field_150939_a.getIcon(2, metadata);
        }
    
        public String getUnlocalizedName(ItemStack stack)
        {
            int metadata = stack.getItemDamage();
            if(metadata > BlockOldPlanks.type.length || metadata < 0)
            {
                metadata = 0;
            }
            return super.getUnlocalizedName() + "." + BlockOldPlanks.type[metadata];
        }
    }
    

    Sauf que voilà : In game, dans l'inventaire, mes blocs apparaissent bel et bien selon leur metadata avec les textures adéquates.
    Mais dès que je les pose, peu importe lequel, il devient le bloc de metadata 0. (même texture, drop le bloc metadata 0).
    J'ai donc décidé de checker le tutoriel disponible sur ce forum pour voir si le problème venait de mon code, mais même ayant suivi le tutoriel à la lettre et utilisé chaque fonctions et méthodes proposées : le problème persiste.

    Je ne comprends pas vraiment pourquoi.
    On dirait que cette ligne dans ItemOldPlanks est totalement négligée :

    
        public int getMetadata(int metadata)
    
        {
            return metadata;
        }
    
    

    Est-ce que vous connaissez une solution à ce problème ? Cela vient-il de la version que j'utilise ? (1.7.10)
    Je vous dis merci d'avance. 😊



  • Tu peux donner la classe ou sont enregistrer les blocs ?



  • Bah voilà, je suis encore trop distrait…
    Ca venait effectivement de ma classe principale.
    J'avais enregistré le block comme un block basique, sans le paramètre référant à "extends ItemBlocks" :

    
        oldPlanks = new BlockOldPlanks().setBlockName("oldPlanks").setResistance(10.0F).setCreativeTab(mvmcTab);
        GameRegistry.registerBlock(oldPlanks, ItemOldPlanks.class, "oldPlanks");
    

    Désormais ça fonctionne.
    Merci pour m'avoir éclairer ! 🙂



  • N'oublie pas de mettre la balise résoulu ^^



  • j'étais sur que tu comprendrais ^^.