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

    Résolu Réparer un outil

    Anciennes versions
    1.6.4
    5
    18
    4460
    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.
    • T
      totos51 dernière édition par

      Salut, oui c’est encore et toujours moi… que voulez vous, j’aime bien cette section 😄
      Mon nouveau soucis est le suivant enfin si je peux appeller cela un soucis à vrai dire,
      j’ai créée des outils en obsidienne, ayant une résistance de 12457, comme le montre:

      static EnumToolMaterial Obsidian = EnumHelper.addToolMaterial("Obsidian", 3, 12457, 12.0F, 8, 15);
      

      Voici la classe de la pioche en obsidienne par exemple:

      package Gallad.Mineald;
      
      import net.minecraft.item.EnumToolMaterial;
      import net.minecraft.item.ItemPickaxe;
      import net.minecraft.item.ItemStack;
      
      public class BasicPickaxe extends ItemPickaxe
      {
      
      public BasicPickaxe(int par1, EnumToolMaterial par2EnumToolMaterial)
      {
      super(par1, par2EnumToolMaterial);
      }
      
      public boolean getIsRepairable(ItemStack stack, ItemStack outputstack)
      {
      if(outputstack.itemID == Import.ObsidianPlate.itemID)
      {
      return true;
      }
      else
      {
      return false;
      }
      }
      }
      

      Et voici l’image expliquant le “bug”:

      Ce qui est étrange c’est que cela marche en créatif, mais pas en survival!

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        À mon avis c’est le système de calcule vanilla qui provoque ce problème, comme ton pioche à beaucoup de coup, ça devient trop chère. Et comme en créative on peut tout réparer, ça passe.
        Je ne sais pas du tout comment changer ça 😕

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

          Solution deux:

          Tu met une résistance normal, genre 1.000, et grâce au TileEntity, tu fais en sorte que le “damageItem()” soit appliquer qu’un fois sur 12, par exemple, ce qui donnera une résistance de 12.000

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

            @‘Mugiwaxar’:

            Solution deux:

            Tu met une résistance normal, genre 1.000, et grâce au TileEntity, tu fais en sorte que le “damageItem()” soit appliquer qu’un fois sur 12, par exemple, ce qui donnera une résistance de 12.000

            O_O jamais je n’aurai imaginais sa, sa va me donnai un sacré coup de main dans mais mods merci ^^.
            [Juste un truc, vous voudrez bien faire un petit tuto sur comment faire sa par contre ? ^^’ merci d’avance :).]

            Auteur originale de Sevenno's Addons et de [url=http://www.minecraftfor…

            1 réponse Dernière réponse Répondre Citer 0
            • kevin_68
              kevin_68 Moddeurs confirmés dernière édition par

              grâce au TileEntity,

              Étant donné que les TileEntity sont uniquement pour les blocs, je veux bien voir comment tu vas l’appliquer à un item.


              Mettez à jours vers la dernière version stable (1.8.9 voir même…

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

                J’aurai bien une solution… recréer une forge en diminuant les coûts de réparation?

                Autre chose comment faire pour par exemple avoir une pioche au dessus du diamant, qui peut casser certains materieux que le minerai ne peux pas, j’avais essayé en mettant 4 au lieu de 3 et pareil dans l’harvest level, cela marchait bien mais étrangement je ne pouvais pas casser l’obsidienne

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

                  @‘kevin_68’:

                  grâce au TileEntity,

                  Étant donné que les TileEntity sont uniquement pour les blocs, je veux bien voir comment tu vas l’appliquer à un item.

                  :huh:
                  Chaque ItemStack a un tileEntity ^^

                  Edit: item.getTagCompound()

                  1 réponse Dernière réponse Répondre Citer 0
                  • robin4002
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                    Ça c’est un tag NBT, pas un tile entity. Ce n’est pas la même chose.

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

                      C’est vrai
                      Mais on peut quand même l’utiliser pour ma solution

                      1 réponse Dernière réponse Répondre Citer 0
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                        Oui.

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

                          Et donc, quel solution dois-je mieux utiliser?

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

                            @‘sevenno07’:

                            @‘Mugiwaxar’:

                            Solution deux:

                            Tu met une résistance normal, genre 1.000, et grâce au TileEntity, tu fais en sorte que le “damageItem()” soit appliquer qu’un fois sur 12, par exemple, ce qui donnera une résistance de 12.000

                            O_O jamais je n’aurai imaginais sa, sa va me donnai un sacré coup de main dans mais mods merci ^^.
                            [Juste un truc, vous voudrez bien faire un petit tuto sur comment faire sa par contre ? ^^’ merci d’avance :).]

                            Bon voila, c’est KDO:

                            
                            @Override
                            public boolean onItemUse(ItemStack item, EntityPlayer player, World world, int X, int Y, int Z, int side, float hitX, float hitY, float hitZ)
                            {
                            // –- Récupération du tag --- //
                            NBTTagCompound tag = item.getTagCompound();
                            if(tag == null)
                            return;
                            
                            // --- Récupération d la "durabilité" --- //
                            int durability = tag.getInteger("Durability");
                            
                            // --- Vérifie si les dommages doivent être appliqués --- //
                            if(durability >= 4)
                            {
                            item.damageItem(1, player);
                            durability = 0;
                            }
                            else
                            durability++;
                            
                            // --- Enregistrement du tag --- //
                            tag.setInteger("Durability", durability);
                            item.setTagCompound(tag);
                            
                            }
                            
                            

                            Sur un item simple, à toi de l’adapter

                            Ps: Par contre j’ai pas eu le temps de tester 😄

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

                              Merci :D, je regarderai sa un peu plus tard par contre ;).
                              Encor merci.

                              Auteur originale de Sevenno's Addons et de [url=http://www.minecraftfor…

                              1 réponse Dernière réponse Répondre Citer 0
                              • robin4002
                                robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                @‘Mugiwaxar’:

                                @‘sevenno07’:

                                @‘Mugiwaxar’:

                                Solution deux:

                                Tu met une résistance normal, genre 1.000, et grâce au TileEntity, tu fais en sorte que le “damageItem()” soit appliquer qu’un fois sur 12, par exemple, ce qui donnera une résistance de 12.000

                                O_O jamais je n’aurai imaginais sa, sa va me donnai un sacré coup de main dans mais mods merci ^^.
                                [Juste un truc, vous voudrez bien faire un petit tuto sur comment faire sa par contre ? ^^’ merci d’avance :).]

                                Bon voila, c’est KDO:

                                
                                @Override
                                public boolean onItemUse(ItemStack item, EntityPlayer player, World world, int X, int Y, int Z, int side, float hitX, float hitY, float hitZ)
                                {
                                // –- Récupération du tag --- //
                                NBTTagCompound tag = item.getTagCompound();
                                if(tag == null)
                                return;
                                
                                // --- Récupération d la "durabilité" --- //
                                int durability = tag.getInteger("Durability");
                                
                                // --- Vérifie si les dommages doivent être appliqués --- //
                                if(durability >= 4)
                                {
                                item.damageItem(1, player);
                                durability = 0;
                                }
                                else
                                durability++;
                                
                                // --- Enregistrement du tag --- //
                                tag.setInteger("Durability", durability);
                                item.setTagCompound(tag);
                                
                                }
                                
                                

                                Sur un item simple, à toi de l’adapter

                                Ps: Par contre j’ai pas eu le temps de tester 😄

                                C’est pas avec la fonction onItemUse, et ton return; ne fonctionnera jamais vu que la fonction est du type boolean. Il faudrait plutôt utiliser onBlockDestroyed. et hitEntity.
                                Et sinon à la place de :
                                NBTTagCompound tag = item.getTagCompound();
                                if(tag == null)
                                return;
                                J’utiliserai plutôt :
                                NBTTagCompound tag = item.hasTagCompound() ? item.getTagCompound() : new NBTTagCompound();

                                Et à la place de :
                                int durability = tag.getInteger(“Durability”);
                                J’utiliserai :
                                int durability = tag.hasKey(“Durability”) ? tag.getInteger(“Durability”) : 0;

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

                                  @‘robin4002’:

                                  C’est pas avec la fonction onItemUse, et ton return; ne fonctionnera jamais vu que la fonction est du type boolean. Il faudrait plutôt utiliser onBlockDestroyed. et hitEntity.

                                  Sa je sais bien, c’est pour ça que je lui est dit d’adapter suivant sont cas

                                  @‘robin4002’:

                                  Et sinon à la place de :
                                  NBTTagCompound tag = item.getTagCompound();
                                  if(tag == null)
                                  return;
                                  J’utiliserai plutôt :
                                  NBTTagCompound tag = item.hasTagCompound() ? item.getTagCompound() : new NBTTagCompound();

                                  Si l’itemStack na pas de NBTTagCompound , c’est qu’il y a un problème, donc autan arrêter la fonction, il se créée par défaut
                                  Edit: Quoique, maintenant j’ai un doute

                                  @‘robin4002’:

                                  Et à la place de :
                                  int durability = tag.getInteger(“Durability”);
                                  J’utiliserai :
                                  int durability = tag.hasKey(“Durability”) ? tag.getInteger(“Durability”) : 0;

                                  Lol, la fonction tag.getInteger() retourne 0 si la clée n’existe pas, alors pourquoi s’embêter 🙂

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

                                    Merci,
                                    en réalité oui, sans la modification de robin cela ne fonctionne pas
                                    ce qui me donne au final ce code la:

                                    
                                    NBTTagCompound tag = item.hasTagCompound() ? item.getTagCompound() : new NBTTagCompound();
                                    int durability = tag.hasKey("Durability") ? tag.getInteger("Durability") : 0;
                                    
                                    if(durability >= 12)
                                    {
                                    item.damageItem(1, player);
                                    durability = 0;
                                    }
                                    else
                                    durability++;
                                    
                                    tag.setInteger("Durability", durability);
                                    item.setTagCompound(tag);
                                    
                                    return true;
                                    
                                    

                                    A mettre dans soit hitEntity() pour une épée ou bien OnBlockDestroyed() pour un outil
                                    concernant les armures? quel est la fonction à utiliser?

                                    Quelqu’un a t’il une idée au sujet de l’obsidienne incassable en mettant un niveau de 4?

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • robin4002
                                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                      @‘Mugiwaxar’:

                                      @‘robin4002’:

                                      Et sinon à la place de :
                                      NBTTagCompound tag = item.getTagCompound();
                                      if(tag == null)
                                      return;
                                      J’utiliserai plutôt :
                                      NBTTagCompound tag = item.hasTagCompound() ? item.getTagCompound() : new NBTTagCompound();

                                      Si l’itemStack na pas de NBTTagCompound , c’est qu’il y a un problème, donc autan arrêter la fonction, il se créée par défaut
                                      Edit: Quoique, maintenant j’ai un doute

                                      Non, un itemstack n’a pas obligatoirement un tag NBT, par défaut il n’en a pas. Sans ce code, NPE.

                                      @‘Mugiwaxar’:

                                      @‘robin4002’:

                                      Et à la place de :
                                      int durability = tag.getInteger(“Durability”);
                                      J’utiliserai :
                                      int durability = tag.hasKey(“Durability”) ? tag.getInteger(“Durability”) : 0;

                                      Lol, la fonction tag.getInteger() retourne 0 si la clée n’existe pas, alors pourquoi s’embêter 🙂

                                      En effet, j’avais jamais fait gaffe, merci !

                                      @‘totos51’:

                                      concernant les armures? quel est la fonction à utiliser?

                                      Quelqu’un a t’il une idée au sujet de l’obsidienne incassable en mettant un niveau de 4?

                                      Je pense qu’il faut passer par l’event EntityHurt de forge, car il n’y a pas de fonction dans ItemArmor
                                      Pour la deuxième question, surement un bug de forge, ça fonctionnait bien en 1.4.7 quand j’avais fait enderOre.

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

                                        Merci :3
                                        Sujet résolu 😄

                                        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