Faire apparaître une tête de joueur avec la texture lors de sa mort



  • Sommaire

    Introduction

    Vous sûrement déjà vu dans des Hunger Games, ou bien dans KTP, des têtes de joueurs qui tombent lors de leur mort et qui comporte la texture de sa tête, et bien voilà ce qu'on va faire.

    Pré-requis

    Code

    Dans la classe où sont enregistrés vos événements :

    package VotrePackage;
    
    public class VotreClasse
    {
        @SubscribeEvent
        public void onLivingDeathEvent(LivingDeathEvent event)
        {
            if(event.entityLiving instanceof EntityPlayer)
            { // EntityPlayer ou EntityPlayerMP si vous êtes sur un serveur (c'est pas très important)
                // On récupère le joueur
                EntityPlayer player = (EntityPlayer)event.entityLiving; // Ou EntityPlayerMP
                // On créer la tête
                Item item = Items.skull;
                ItemStack stack = new ItemStack(item, 1, 3);
    
                // On créer 2 NBTTagCompound pour ensuite ajouter le 2ème au 1er
                NBTTagCompound compound = new NBTTagCompound();
                NBTTagCompound compound1 = new NBTTagCompound();
    
                // On associe le NBTTagCompound au stack pour éviter de faire des erreurs
                stack.writeToNBT(compound);
    
                // On ajoute le nom du joueur au 2ème NBTTagCompound
                compound1.setString("SkullOwner", player.getName());
    
                // On demande à Mojang d'aller récupérer le UUID et tout le tralala pour nous
                ((ItemSkull)item).updateItemStackNBT(compound1);
    
                // On ajouter le tag créer par le code de Mojang à l'ItemStack
                compound.setTag("tag", compound1);
    
                // On recréer l'ItemStack à partir du NBTTagCompound
                stack.readFromNBT(compound);
    
                // Et pour finir on le fait apparaître à la position du joueur
                player.worldObj.spawnEntityInWorld(new EntityItem(player.worldObj, player.posX, player.posY, player.posZ, stack));
            }
        }
    }
    

    Résultat

    Une tête sur le sol.

    Crédits

    Rédaction :

    Correction :

    Creative Commons
    Ce tutoriel de SCAREX publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

    retourRetour vers le sommaire des tutoriels



  • du devrait peut être un peut plus détailler les méthodes, a quoi elle servent etc… car le tu file juste un code comme ca



  • @'isador34':

    du devrait peut être un peut plus détailler les méthodes, a quoi elle servent etc… car le tu file juste un code comme ca

    Il me semble avoir tout commenter correctement, quel fonction n'est pas bien expliquée ?



  • A oui j'avais pas regarder les commentaire du code excuse moi



  • Le tutoriel ne marche pas pour la 1.7.10 aparemment , j'ai une erreur sur "((ItemSkull) item).updateItemStackNBT(compound1);" , eclipse me dit The method updateItemStackNBT(NBTTagCompound) is undefined for the type ItemSkull

    voila , help !



  • Si tu regardes le code de l'item en 1.7.10 tu pourras voir que cette fonction est remplacée par ```java
    NBTUtil.func_152459_a(letag);

    ```java
    // On ajoute le nom du joueur au 2ème NBTTagCompound
    compound1.setString("SkullOwner", player.getName());
    //ET
    // On ajouter le tag créer par le code de Mojang à l'ItemStack
    compound.setTag("tag", compound1);
    

    "SkullOwner" devient "Name" et "tag" devient "SkullOwner".



  • J’ai essayé de implémenté se tuto dans mon mod en 1.12.2 mais le stack.readFromNBT et player.worldObj n'existe plus et je n'ai pas trouver autre chose pour le remplacer


  • Administrateurs

    Salut,
    C'est player.world tout simplement.
    Pour stack.readFromNBT je ne sais pas de tête, mais il y a surement une fonction similaire. (cherches tout ce qui contient read)



  • Pour stack.readFromNBT, il y as un constructeur à la place (il faut faire new ItemStack(nbt))



  • @'LeBossMax2':

    Pour stack.readFromNBT, il y as un constructeur à la place (il faut faire new ItemStack(nbt))

    J’ai cherché le constructeur, aussi je vois pas comment fait pour remplacer stack.readFromNBT avec new ItemStack(nbt)


  • Rédacteurs

    En gros :

    
    ItemStack stack = new ItemStack(Blocks.AIR);
    stack.readFromNBT(nbt);
    

    Devient:

    
    ItemStack stack = new ItemStack(nbt);