1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

Résolu NBT tags + condition "l'objet est tenu dans la main"

Discussion dans 'Aide à la création de mod' créé par Nolan-XX, 7 Juil 2015.

  1. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    Mmm... Déjà, tes fonctions set et get TransformationState n'ont pas besoin du joueur en paramètre, tu peux l'enlever. ;)
    Pour la NPE, c'est quand le NBTTag est nul. Du coup, il faudrait remplacer :
    Code (cpp):
    boolean is_transformed = item.stackTagCompound != null && item.stackTagCompound.getBoolean("is_transformed");
    par :
    Code (cpp):

    if(item.stackTagCompound == null)
    {
    item.stackTagCompound=new NBTTagCompound();
    item.stackTagCompound.setBoolean("is_transformed", false);
    }
    boolean is_transformed = item.stackTagCompound.getBoolean("is_transformed");
    Comme ça tu es sûr que le tag est créé.
     
    • J'approuve J'approuve x 1
  2. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 234
    Points:
    304
    Sexe:
    Homme
    ça marche pile poil. Je t'aime.
     
  3. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    Yeah ! o/
    Bon après, pour être totalement propre, il faudrait sûrement vérifier si la clé existe à chaque fois que tu récupères sa valeur, donc remplacer tous les :
    Code (cpp):
    item.stackTagCompound.getBoolean("is_transformed")
    par :
    Code (cpp):
    item.stackTagCompound.hasKey("is_transformed") && item.stackTagCompound.getBoolean("is_transformed")
    Car avec le code actuel, si le tag de l'ItemStack est créé mais que "is_transformed" n'est pas défini, ça risque de crasher. ^^
     
  4. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Non pas besoin, item.stackTagCompound.getBoolean("is_transformed") return false si is_transformed n'existe pas ^^
     
    • Informatif Informatif x 1
  5. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    Ah, intéressant ! J'en étais pas sûr justement. Du coup, avec les autres types de variables, genre Integer, Float, ça renvoie zéro ?
     
  6. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Code (cpp):
        public int getInteger(String key)
        {
            try
            {
                return !this.hasKey(key, 99) ? 0 : ((NBTBase.NBTPrimitive)this.tagMap.get(key)).getInt();
            }
            catch (ClassCastException classcastexception)
            {
                return 0;
            }
        }
    En effet.
     
    • Informatif Informatif x 1

Partager cette page