Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    SOLVED Faux rendu d'un Bloc avec Metadata

    1.7.x
    1.7.10
    3
    5
    1154
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      Noxon last edited by

      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 Reply Last reply Reply Quote 0
      • Diangle
        Diangle last edited by

        Tu peux donner la classe ou sont enregistrer les blocs ?

        1 Reply Last reply Reply Quote 0
        • N
          Noxon last edited by

          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 Reply Last reply Reply Quote 0
          • mindany2
            mindany2 last edited by

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

            1 Reply Last reply Reply Quote 0
            • Diangle
              Diangle last edited by

              j’étais sur que tu comprendrais ^^.

              1 Reply Last reply Reply Quote 0
              • 1 / 1
              • First post
                Last post
              Design by Woryk
              Contact / Mentions Légales / Faire un don

              MINECRAFT FORGE FRANCE © 2018

              Powered by NodeBB