• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Faux rendu d'un Bloc avec Metadata

    1.7.x
    1.7.10
    3
    5
    1279
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • N
      Noxon dernière édition par

      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. 😊

      1 réponse Dernière réponse Répondre Citer 0
      • Diangle
        Diangle dernière édition par

        Tu peux donner la classe ou sont enregistrer les blocs ?

        1 réponse Dernière réponse Répondre Citer 0
        • N
          Noxon dernière édition par

          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 ! 🙂

          1 réponse Dernière réponse Répondre Citer 0
          • mindany2
            mindany2 dernière édition par

            N’oublie pas de mettre la balise résoulu ^^

            ^^

            1 réponse Dernière réponse Répondre Citer 0
            • Diangle
              Diangle dernière édition par

              j’étais sur que tu comprendrais ^^.

              1 réponse Dernière réponse Répondre Citer 0
              • 1 / 1
              • Premier message
                Dernier message
              Design by Woryk
              Contact / Mentions Légales

              MINECRAFT FORGE FRANCE © 2018

              Powered by NodeBB