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

    Solved Multiple walls texturing // Textures de plusieurs murets

    1.7.x
    1.7.10
    2
    9
    1395
    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.
    • K
      kylian-1452 last edited by

      Bonsoir,
      Après des heures de recherches (actuellement 8h…) je n’arrive pas à définir les différentes textures sur le “wall”
      J’ai essayé en vain plusieurs méthodes notamment trouvées sur ce forum, celui anglophone ou autre recherches google mais rien ne m’aide, à vrai dire je suis débutant et donc je fais avec les moyens du bord malgré tout je m’en sors jusqu’ici
      Je n’arrive donc pas à différencier les deux wall que j’ai nommé:
      block_faintlightgreystonewall
      block_smallstonebrickwall

      package com.mod.trillium.blocks;
      
      import java.util.List;
      
      import com.mod.trillium.init.BlockMod;
      
      import net.minecraft.block.Block;
      import net.minecraft.block.BlockWall;
      import net.minecraft.block.material.Material;
      import net.minecraft.creativetab.CreativeTabs;
      import net.minecraft.init.Blocks;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemStack;
      import net.minecraft.world.IBlockAccess;
      import net.minecraft.world.World;
      
      public class BlockWallMod extends BlockWall {
      
      public BlockWallMod(Block p_i45435_1_)
      {
      super(p_i45435_1_);
      }
      
      @Override
      public boolean canConnectWallTo(IBlockAccess par1, int par2, int par3, int par4)
          {
      
      Block block = par1.getBlock(par2, par3, par4);
      int meta = par1.getBlockMetadata(par2, par3, par4);
      //int meta = par1.getBlockMetadata(par2, par3, par4);
      if(block==BlockMod.block_faintlightgreystonewall || block==BlockMod.block_smallstonebrickwall){
      return true;
      }
      
              return block != this && block != Blocks.fence_gate ? (block.getMaterial().isOpaque() && block.renderAsNormalBlock() ? block.getMaterial() != Material.gourd : false) : true;
          }
      
      public void getSubBlocks(Item p_149666_1_, CreativeTabs p_149666_2_, List p_149666_3_)
      {
          p_149666_3_.add(new ItemStack(p_149666_1_, 1, 0));
      }
      public boolean canPlaceTorchOnTop(World world, int x, int y, int z) {
      return true;
      }
      }
      

      Voilà ma class principale nommée BlockWallMod.java

              block_smallstonebrickwall = new BlockWallMod(block_smallstonebrick).setBlockName("block_smallstonebrickwall").setCreativeTab(TrilliumMod.tabWalls);
      
              block_faintlightgreystonewall = new BlockWallMod(block_faintlightgreystone).setBlockName("block_faintlightgreystonewall").setCreativeTab(TrilliumMod.tabWalls);
      

      Voici un extrait des blocs avec leur texture définie comme étant celle du bloc,
      je pense vous avoir donné les éléments permettant de m’éclairer, cependant si ce n’est le cas j’ajouterai ce qu’il faut, merci de m’aider en tant que débutant, j’accepte toutes vos remarques

      Bonne soirée

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

        Bonjour, je ne vois nulle part de “.setTextureName(Mod.ID + “:un nom”);” dans l’extrait de ta classe principale.

        EDIT: Avait pas fait gaffe au constructeur “spécial”, je regarde le code de BlockWall.

        EDIT 2 : Il faut toujours regarder le code pas logique de Minecraft.
        Le block passe dans le constructeur ne changera pas la texture du mur, juste sa résistance etc… Il faut donc que tu crées une variable de type Block dans ton block wall, sa valeur sera la block passé dans le constructeur. Ensuite il faut implémenter la fonction getIcon (commence à taper son nom puis CTRL+clic pour l’avoir), et mettre return tavariable.getBlockTextureFromSide(side); (side équivaut au premier paramètre de la fonction).

        Écrit sur portable c’est long [emoji14]

        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

        1 Reply Last reply Reply Quote 1
        • K
          kylian-1452 last edited by

          Voilà, j’ai lu votre message il y a un petit temps et je cherche depuis, maintenant je n’ai toujours pas trouvé la solution … je ne vois pas comment créer la variable du block (je suis vraiment dans mes tous débuts)…et les murets sont pas faciles 😞

          public BlockWallMod(Block p_i45435_1_)
          {
          super(p_i45435_1_);
          }
          
          @SideOnly(Side.CLIENT)
              public IIcon getIcon(int side)
              {
                  return BlockMod.variable.getBlockTextureFromSide(side);
              }
          
          

          Merci d’avoir pris le temps de me répondre en tous cas!
          Je vais me reposer mais je chercherai encore un peu, j’ai toujours trouvé ce que j’avais besoin par mes soins jusqu’ici mais je vous remercie vraiment pour votre investissement, bonne soirée !

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

            Je vous donnerai ce code mais complété pour que ça marche ce midi, même en étant débutant je pense que vous le comprendrez 😉

            Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

            AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

            Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
            Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

            1 Reply Last reply Reply Quote 0
            • K
              kylian-1452 last edited by

              Enfait j’y arrive mais alors tous les murets ont la même texture, ce qui, logiquement, ne m’intéresse pas, et oui, je n’arrive pas à ““créer””, mais je comprends ce que je fais, sinon j’aurais déjà baissé les bras depuis longtemps ^^ 
              Merci à vous, vraiment !

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

                
                private final Block textureBlock; //Le block qui servira de texture au muret, j'ai mis un final car sa valeur sera toujours fixe
                public BlockWallMod(Block p_i45435_1_)
                {
                super(p_i45435_1_);
                this.textureBlock = p_i45435_1_; //On fait correspondre au textureBlock le block passé au constructeur
                }
                
                @SideOnly(Side.CLIENT)
                @Override //Indique qu'on remplace la méthode de la classe parente, utile pour voir quand son nom ou ses paramètres changent (quand on met Minecraft à jour par exemple)
                   public IIcon getIcon(int side, int meta)
                   {
                       return textureBlock.getBlockTextureFromSide(side); //Et on retourne la bonne texture
                   }
                
                

                Avec ce code, chaque muret aura la texture du block passé au constructeur, et tu connaîtras un peu le "final"et le “@Override” 🙂

                Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                1 Reply Last reply Reply Quote 0
                • K
                  kylian-1452 last edited by

                  Me revoilà, mon problème n’étant pas encore résolu, donc soit je n’ai vraiment pas compris (à mon avis c’est ça^^) 
                  soit j’ai peut-être mal formulé mon souci, donc je vais le mettre en image :
                  https://www.noelshack.com/2017-11-1489751984-murets.png

                  En fait, ce que j’ai compris c’est que le ‘return’ va appliquer la texture à tous les murets que je vais créer, or j’essaie justement de les différencier car je veux en créer un bon gros nombre (à mon avis plus de 100) et je ne vois pas comment faire pour dire: ““Cette texture va avec ce muret””

                  Enfin voilà, je pense que je me perds un peu dans mes idées mais j’ai ‘quasiment’ tout essayé (je vais pas dire tout sinon j’aurais trouvé la solution ^^) et c’est vraiment une class qui me rend fou

                  Ceci dit, encore une fois un grand merci pour votre soutien !

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

                    Ça j’ai compris mais avec ce que j’ai donné, comme la variable textureBlock est spécifique à chaque wall que tu instanciés dans ta classe principale, chaque mur aura la texture du block que tu veux, celui que tu mets dans la classe principale.

                    Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                    AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                    Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                    Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                    1 Reply Last reply Reply Quote 0
                    • K
                      kylian-1452 last edited by

                      Autant pour moi, j’ai cru que je devais encore remplacer “textureBlock”, tout fonctionne, merci beaucoup ! 😄

                      Pour éviter des heures de recherches à beaucoup de gens, voici:

                      package com.mod.trillium.blocks;
                      
                      import java.util.List;
                      
                      import com.mod.trillium.init.BlockMod;
                      
                      import cpw.mods.fml.relauncher.Side;
                      import cpw.mods.fml.relauncher.SideOnly;
                      import net.minecraft.block.Block;
                      import net.minecraft.block.BlockWall;
                      import net.minecraft.block.material.Material;
                      import net.minecraft.creativetab.CreativeTabs;
                      import net.minecraft.init.Blocks;
                      import net.minecraft.item.Item;
                      import net.minecraft.item.ItemStack;
                      import net.minecraft.util.IIcon;
                      import net.minecraft.world.IBlockAccess;
                      import net.minecraft.world.World;
                      
                      public class BlockWallMod extends BlockWall {
                      
                      private final Block textureBlock; //Le block qui servira de texture au muret, j'ai mis un final car sa valeur sera toujours fixe
                      public BlockWallMod(Block p_i45435_1_)
                      {
                      super(p_i45435_1_);
                      this.textureBlock = p_i45435_1_; //On fait correspondre au textureBlock le block passé au constructeur
                      }
                      
                      @SideOnly(Side.CLIENT)
                      @Override //Indique qu'on remplace la méthode de la classe parente, utile pour voir quand son nom ou ses paramètres changent (quand on met Minecraft à jour par exemple)
                        public IIcon getIcon(int side, int meta)
                        {
                            return textureBlock.getBlockTextureFromSide(side); //Et on retourne la bonne texture
                        }
                      
                      @Override
                      public boolean canConnectWallTo(IBlockAccess par1, int par2, int par3, int par4)
                          {
                      
                      Block block = par1.getBlock(par2, par3, par4);
                      int meta = par1.getBlockMetadata(par2, par3, par4);
                      //int meta = par1.getBlockMetadata(par2, par3, par4);
                      if(block==BlockMod.block_blockwall1 || block==BlockMod.block_wall2){ //Pour que vos murets murets se connectent entre eux (ne fonctionne pas avec les murets vanilla)
                      return true;
                      }
                      
                              return block != this && block != Blocks.fence_gate ? (block.getMaterial().isOpaque() && block.renderAsNormalBlock() ? block.getMaterial() != Material.gourd : false) : true;
                          }
                      
                      public void getSubBlocks(Item p_149666_1_, CreativeTabs p_149666_2_, List p_149666_3_)
                      {
                          p_149666_3_.add(new ItemStack(p_149666_1_, 1, 0));   // Evite d'avoir deux fois le bloc dans le creativeTab
                      }
                      public boolean canPlaceTorchOnTop(World world, int x, int y, int z) { //On peut placer les torches sur le muret
                      return true;
                      }
                      }
                      
                      

                      Voilà, merci à vous !

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

                      MINECRAFT FORGE FRANCE © 2018

                      Powered by NodeBB