Nom d'item en plusieurs morceau.



  • Bonjour tour le monde!
    Je veux faire un item qui a un nom aléatoire et donc en plusieurs morceau mais je ne sais pas comment l'afficher puisque ".setBlockName" ne le permet pas.
    Merci de m'aider.
    😄


  • Administrateurs

    Salut,
    C'est possible via la fonction getUnlocalizedName dans la classe du bloc ou item.



  • Oui ,mais comment?



  • En faites je crois que j'ai trouvé un truc mais ça marche que sur les items.
    Ducoup comment on fait pour modifier l'item du block?



  • Tien, une fonction pour générer un nom aléatoire (si j'ai bien compris ce que tu voulais)

    public String generate(int length)
    {
       String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; // Tu supprimes les lettres dont tu ne veux pas
       String pass = "";
       for(int x=0;x <length;x++)<br>{
          int i = (int)Math.floor(Math.random() * 62); // Si tu supprimes des lettres tu diminues ce nb
          pass += chars.charAt(i);
       }
       System.out.println(pass);
       return pass;
    }
    ```</length;x++)<br>


  • @'Loko_Liveh':

    Tien, une fonction pour générer un nom aléatoire (si j'ai bien compris ce que tu voulais)

    public String generate(int length)
    {
       String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; // Tu supprimes les lettres dont tu ne veux pas
       String pass = "";
       for(int x=0;x <length;x++)<br>{
          int i = (int)Math.floor(Math.random() * 62); // Si tu supprimes des lettres tu diminues ce nb
          pass += chars.charAt(i);
       }
       System.out.println(pass);
       return pass;
    }
    

    J'ai déja la fonction pour générer le nom.Mais je sais pas comment l'afficher en jeu.</length;x++)<br>



  • 
    public String getUnlocalizedName(ItemStack stack)
    {
    return this.generate(10);
    }
    
    


  • @'Plaigon':

    
    public String getUnlocalizedName(ItemStack stack)
    {
    return this.generate(10);
    }
    
    

    J'avais finalement mit:

    
    public String getUnlocalizedName()
    {
    return "Fleur";
    }
    
    

    Sa retirais le "tile." mais ça laisser le ".name"

    J'ai fait ce que tu as mit mais me met "tile.null.name" en jeu.
    J'ai bien remplacer le "generate",c'est pas à cause de ça.(J'avais déja fait kekchose pour générer les noms.)



  • Ce que j'ai mis, c'est ce dont tu as besoin.



  • @'Plaigon':

    Ce que j'ai mis, c'est ce dont tu as besoin.

    J'ai éditer mon message au dessus.
    Mais ducoup ça marche pas.  😞

    J'avais juste pas compris pour le "generate" j'aurais du faire plus attention.
    Je pense que getUnlocalizedNAme n'est pas adapté,il laisse le ".name"

    Au finale,j'ai trouvé:

    
        public String getItemStackDisplayName(ItemStack p_77653_1_)
        {
            return "Fleur";
        }
    
    

    Mais ça pense que je fais une déclaratin,je comprend pas.



  • Tu ne souhaites donc pas avoir le .name derrière, c'est bien ça ?



  • @'Plaigon':

    Tu ne souhaites donc pas avoir le .name derrière, c'est bien ça ?

    En gros,je veux pouvoir afficher un nom sans utiliser le fichier .lang



  • Alors ma solution (à voir avec les autres membres) serait de modifier la classe ItemStack, et + particulièrement la méthode getItemStackDisplayName, à l'aide d'un Class Transformer, afin de faire en sorte que si l'item de l'objet stack en paramètre égale ton item custom, alors tu return un string grâce à la méthode generate. Ainsi on contourne le système de base des noms de MC, et on évite les fichiers lang



  • @'Plaigon':

    Alors ma solution (à voir avec les autres membres) serait de modifier la classe ItemStack, et + particulièrement la méthode getItemStackDisplayName, à l'aide d'un Class Transformer, afin de faire en sorte que si l'item de l'obiet stack en paramètre égale ton item custom, alors tu retrun un string de la méthode generate. Ainsi on évite donc les résultats de base de MC avec les fichiers lang.

    J'ai pas vraiment compris.

    Et j'ai une erreur la,je sais pas comment la régler:

    
    public class BlockFlowerMod extends BlockFlower
    {
    public BlockFlowerMod(int p_i2173_1_,String nam1,String nam2,String nam3) 
    {
    super(p_i2173_1_);
    
       public String getUnlocalizedName()
       {
        return nam1+nam2+nam3;
       }
    }
    
    }
    
    

  • Administrateurs

    Beaucoup plus simple :

       public String getLocalizedName()
       {
           return "nom de l'item";
       }
    

    pas besoin de classe transformer.



  • @'robin4002':

    Beaucoup plus simple :

       public String getLocalizedName()
       {
           return "nom de l'item";
       }
    

    pas besoin de classe transformer.

    J'ai déja essayer et ça ne marche pas.___Et puis je n'arrive même pas à placer le getUnlocalizedName pour utiliser la méthode pour générer le nom.


  • Administrateurs

    Si tu utilises getLocalizedName tu n'as plus besoin de getUnlocalizedName.

    Envoies ton code.





  • Ducoup je sais pas comment faire pour mettre get-Localized/Unlocalized-Name dans la méthode du block.


  • Administrateurs

    package com.mod.infiniNature.Block;
    
    import com.mod.infiniNature.RandomCreate.Flower;
    import com.mod.infiniNature.init.BlockInit;
    
    import net.minecraft.block.BlockFlower;
    import net.minecraft.init.Items;
    import net.minecraft.util.StatCollector;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    
    public class BlockFlowerMod extends BlockFlower
    {
        private final String name1, name2, name3
        public BlockFlowerMod(int p_i2173_1_, String name1,String name2,String name3)
        {
            super(p_i2173_1_);
            this.name1 = name1;
            this.name2 = name2;
            this.name3 = name3;
        }
    
       public String getLocalizedName()
       {
            return this.name1 + this.name2 + this.name3;
       }
    
    }
    


  • @'robin4002':

    package com.mod.infiniNature.Block;
    
    import com.mod.infiniNature.RandomCreate.Flower;
    import com.mod.infiniNature.init.BlockInit;
    
    import net.minecraft.block.BlockFlower;
    import net.minecraft.init.Items;
    import net.minecraft.util.StatCollector;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    
    public class BlockFlowerMod extends BlockFlower
    {
        private final String name1, name2, name3
        public BlockFlowerMod(int p_i2173_1_, String name1,String name2,String name3)
        {
            super(p_i2173_1_);
            this.name1 = name1;
            this.name2 = name2;
            this.name3 = name3;
        }
    
       public String getLocalizedName()
       {
            return this.name1 + this.name2 + this.name3;
       }
    
    }
    

    Merci pour le code !;)
    Tu as réglé un problème mais le getLocalizedName ne marche toujours pas. 😞