27 août 2016, 17:08

Oui bonjour, je viens sur le tuto légitime concernant les packets entre Forge et Bukkit (trololo inside, mais Benjamin Loison m’a bien aidé tout de même en ayant un exemple précis et identique au sujet qui me fait venir ici, bref)

Je voudrais qu’à l’accomplissement d’un succès en jeu (ou achievement), une commande soit exécutée, plus précisément le fameux /eco give player amount.

Je vous montre ma classe un peu allégée car rébarbative et je vous indique que mon soucis réside dans le fait que la méthode n’est pas appelée. L’achievement a bien lieu et les loots sont bien drop, le reste c’est du vent. Je me trompe simplement peut-être, le plugin n’est pas encore fait, mais si le system.out n’est pas appelé sur le mod… Autant résoudre ce soucis en premier.

J’ai essayé à deux endroits clés dans le code pourtant.

Voici ma classe event:

@SubscribeEvent
    public void onEntityKilled(LivingDeathEvent event)
    {
        EntityPlayer player = (EntityPlayer)event.source.getEntity();

        Random rand = new Random();
//[…]
//[Liste des loots possibles]
//[…]
        if(event.source.getEntity() instanceof EntityPlayer && player != null)
        {
            int killR1 = player.getEntityData().getInteger("killR1");
            int killR2 = player.getEntityData().getInteger("killR2");
            int killR3 = player.getEntityData().getInteger("killR3");
            int killR4 = player.getEntityData().getInteger("killR4");
            int killR5 = player.getEntityData().getInteger("killR5");
            int killR6 = player.getEntityData().getInteger("killR6");

            if(event.entityLiving instanceof EntityR1Cac || event.entityLiving instanceof EntityR1Ranged)
            {
                killR1++;
                player.getEntityData().setInteger("killR1", killR1);
                if(killR1 == 10)
                {
                    player.triggerAchievement(ModPg2.achievementKillR1a);
                    if(player.worldObj.isRemote) //Tout ceci est non appelé
                    {
                        System.out.println("WAOW ENFIN");
                        player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.DARK_AQUA + "Power Game"));

                        ByteArrayDataOutput out = ByteStreams.newDataOutput();
                        out.writeUTF("achievementKillR1a accomplis par " + player.getDisplayName());
                        ((EntityClientPlayerMP)player).sendQueue.addToSendQueue(new C17PacketCustomPayload("achievementKillR1a", out.toByteArray()));
                    }
                }
                if(killR1 == 100)
                {
                    player.triggerAchievement(ModPg2.achievementKillR1b);
                }
                if(killR1 == 300)
                {
                    player.triggerAchievement(ModPg2.achievementKillR1c);
                }
                if(killR1 == 1000)
                {
                    player.triggerAchievement(ModPg2.achievementKillR1d);
                }

                for(int j = 0; j < 2; ++j)  //Les loots de certains mobs
                {
                    if(event.entityLiving instanceof EntityR1Cac && !player.worldObj.isRemote)
                    {
                        int randInt = rand.nextInt(100);
                        if(randInt <= 5)
                        {   // 5/100
                            event.entityLiving.entityDropItem(stack9, 1);
                        }
                        if(randInt > 5 && randInt <= 40)
                        {   // 35/100
                            event.entityLiving.entityDropItem(stack3, 1);
                        }
                        if(randInt > 40 && randInt <= 50)
                        {   // 10/100
                            event.entityLiving.entityDropItem(stack2, 1);
                        }
                        if(randInt > 50)
                        {   // 50/100
                            event.entityLiving.entityDropItem(stack1, 1);
                        }
                    }
                    if(event.entityLiving instanceof EntityR1Ranged && !player.worldObj.isRemote)
                    {
                        int randInt = rand.nextInt(100);
                        if(randInt <= 10)
                        {   // 10/100
                            event.entityLiving.entityDropItem(stack9, 1);
                        }
                        if(randInt > 10 && randInt <= 30)
                        {   // 20/100
                            event.entityLiving.entityDropItem(stack3, 1);
                        }
                        if(randInt > 30 && randInt <= 50)
                        {   // 20/100
                            event.entityLiving.entityDropItem(stack2, 1);
                        }
                        if(randInt > 50)
                        {   // 50/100
                            event.entityLiving.entityDropItem(stack1, 1);
                        }
                    }
                }
            }
//[…]
//[Plein d'autres loots et achievements]
//[…]

            if(player != null && player.worldObj.isRemote)  //Tout ceci est non appelé
            { 
                if(killR1 == 10)
                {
                    System.out.println("Test concluant ou non");

                    player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.DARK_AQUA + "Power Game"));

                    ByteArrayDataOutput out = ByteStreams.newDataOutput();
                    out.writeUTF("achievementKillR1a accomplis par " + player.getDisplayName());
                    ((EntityClientPlayerMP)player).sendQueue.addToSendQueue(new C17PacketCustomPayload("achievementKillR1a", out.toByteArray()));
                }
[…]
            }
        }
    }