Exécuter commande à un joueur en tant que OP sans l'être



  • Salut, j'aimerais faire éxécuter une commande OP à un joueur non OP comment faire ? Passer par des packets ?

    Ps: Je sais que sur Bukkit c'est possible mais sur Forge je ne trouve pas…

    Merci d'avance !


  • Administrateurs

    Le plus simple est de faire directement la même action que cette de la commande.



  • Je comprends pas trop l'utilité. Mais tu as juste à utiliser les events pour savoir lorsqu'une commande est appelée et annuler l'event, puis ré-exécuter la commande voulue après sans regarder le niveau d'op qu'il a.



  • C'est par rapport à un plugin pour récolter l'information /money et éxécuté un /eco take Joueur Argent des idées ?



  • Ce serait plus simple si le dev du plugin utilisait les paquets, il faut regarder si c'est le cas. Mais sinon tu peux envoyer la commande au serveur, par contre pour savoir quand la réponse est reçue, çà risque d'être plus dur.


  • Correcteurs

    Je suis pleinement concerné par ce soucis, j'essaie de faire exécuter la commande:

    MinecraftServer.getServer().getCommandManager().executeCommand(MinecraftServer.getServer(), "eco give " + player.getDisplayName() + " 20");
    

    Et sur serveur ça ne fonctionne pas. J'ai cru lire dans un autre topic que Essantials pouvait empêcher la bonne exécution de la commande…

    Pas de solution à ça?



  • Essentials -> grosse daube
    Vu qu'il y a essential, ça veut dire Cauldron sponge ou quelque chose dans le genre -> grosse daube

    Donc oui le problème peut venir de là


  • Administrateurs

    les commandes bukkit ne fonctionnent pas avec cette méthode.



  • Je sors ce soir un tutoriel pour les intéressés qui ont ce genre de problèmes.

    EDIT: Tutoriel: https://www.minecraftforgefrance.fr/showthread.php?tid=3861


  • Correcteurs

    J'ai un p'tit crash sur EntityClientPlayerMP, tout à la fin du paste

    @SubscribeEvent
        public void onEntityKilled(LivingDeathEvent event)
        {
            Random rand = new Random();
            ItemStack stack1 = new ItemStack(ModPg2.itemRandomMunition, 1); //Munition
            ItemStack stack2 = new ItemStack(ModPg2.itemMetadata, 1, 0); //Insigne
            ItemStack stack3 = new ItemStack(ModPg2.itemMetadata, 1, 26);//Petit Butin  R1
            ItemStack stack4 = new ItemStack(ModPg2.itemMetadata, 1, 27);
            ItemStack stack5 = new ItemStack(ModPg2.itemMetadata, 1, 28);
            ItemStack stack6 = new ItemStack(ModPg2.itemMetadata, 1, 29);
            ItemStack stack7 = new ItemStack(ModPg2.itemMetadata, 1, 30);
            ItemStack stack8 = new ItemStack(ModPg2.itemMetadata, 1, 31);//Petit Butin  R6
            ItemStack stack9= new ItemStack(ModPg2.itemMetadata, 1, 32);//Butin  R1
            ItemStack stack10= new ItemStack(ModPg2.itemMetadata, 1, 33);
            ItemStack stack11= new ItemStack(ModPg2.itemMetadata, 1, 34);
            ItemStack stack12= new ItemStack(ModPg2.itemMetadata, 1, 35);
            ItemStack stack13= new ItemStack(ModPg2.itemMetadata, 1, 36);
            ItemStack stack14= new ItemStack(ModPg2.itemMetadata, 1, 37);//Butin  R6
            ItemStack stack15 = new ItemStack(ModPg2.itemRandomMunitionPlasma, 1); //Munition Plasma
            if (event.source.getEntity() instanceof EntityPlayer)
            {
                int randInt = rand.nextInt(100);
                EntityPlayer player = (EntityPlayer) event.source.getEntity();
                if(!event.entityLiving.worldObj.isRemote && !player.worldObj.isRemote && event.entityLiving instanceof EntityR1Cac || event.entityLiving instanceof EntityR1Ranged)
                {
                    if(event.entityLiving instanceof EntityR1Cac)
                    {
                        for(int j = 0 ; j < 2; ++j)
                        {
                            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)
                    {
                        for(int j = 0 ; j < 2; ++j)
                        {
                            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);
                            }
                        }
                    }
                    if(player != null)
                    {
                        int killR1 = player.getEntityData().getInteger("killR1");
                        if(!player.worldObj.isRemote)
                        {
                            killR1++;
                            player.getEntityData().setInteger("killR1", killR1);
                        }
                        if(killR1 == 10)
                        {
                            player.triggerAchievement(ModPg2.achievementKillR1a);
                            ByteArrayDataOutput out = ByteStreams.newDataOutput();
                            out.writeUTF("achievementKillR1a accomplis par " + player.getDisplayName());
                            ((EntityClientPlayerMP)player).sendQueue.addToSendQueue(new C17PacketCustomPayload("achievementKillR1a", out.toByteArray()));                    }
                      […]
    
    

    Le rapport:

    –-- Minecraft Crash Report ----
    // I bet Cylons wouldn't have this problem.

    Time: 27/08/16 12:01
    Description: Ticking entity

    java.lang.ClassCastException: net.minecraft.entity.player.EntityPlayerMP cannot be cast to net.minecraft.client.entity.EntityClientPlayerMP
        at fr.powergame.modpg2.common.LivingEventHandler.onEntityKilled(LivingEventHandler.java:114)
        at cpw.mods.fml.common.eventhandler.ASMEventHandler_9_LivingEventHandler_onEntityKilled_LivingDeathEvent.invoke(.dynamic)
        at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54)
        at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:138)
        at net.minecraftforge.common.ForgeHooks.onLivingDeath(ForgeHooks.java:305)
        at net.minecraft.entity.EntityLivingBase.onDeath(EntityLivingBase.java:982)
        at net.minecraft.entity.EntityLivingBase.attackEntityFrom(EntityLivingBase.java:940)
        at net.minecraft.entity.monster.EntityMob.attackEntityFrom(EntityMob.java:84)
        at fr.powergame.modpg2.common.EntityBulletPlasmaGun.onImpact(EntityBulletPlasmaGun.java:98)
        at net.minecraft.entity.projectile.EntityThrowable.onUpdate(EntityThrowable.java:229)
        at fr.powergame.modpg2.common.EntityBulletPlasmaGun.onUpdate(EntityBulletPlasmaGun.java:118)
        at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2298)
        at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:684)
        at net.minecraft.world.World.updateEntity(World.java:2258)
        at net.minecraft.world.World.updateEntities(World.java:2108)
        at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:515)
        at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703)
        at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)
        at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)
        at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)



  • Tu essayes de cast le joueur sur serveur au jouer client, mets un if(World.isRemote) à la dernière condition.


  • Correcteurs

    Sacré bordel dans mon esprit pour le Side…

    Voici ce qu'est devenu le code

    
    public class LivingEventHandler
    {
        @SubscribeEvent
        public void onEntityKilled(LivingDeathEvent event)
        {
            Random rand = new Random();
            ItemStack stack1 = new ItemStack(ModPg2.itemRandomMunition, 1); // Munition
            ItemStack stack2 = new ItemStack(ModPg2.itemMetadata, 1, 0); // Insigne
            ItemStack stack3 = new ItemStack(ModPg2.itemMetadata, 1, 26);// Petit Butin R1
            ItemStack stack4 = new ItemStack(ModPg2.itemMetadata, 1, 27);
            ItemStack stack5 = new ItemStack(ModPg2.itemMetadata, 1, 28);
            ItemStack stack6 = new ItemStack(ModPg2.itemMetadata, 1, 29);
            ItemStack stack7 = new ItemStack(ModPg2.itemMetadata, 1, 30);
            ItemStack stack8 = new ItemStack(ModPg2.itemMetadata, 1, 31);// Petit Butin R6
            ItemStack stack9 = new ItemStack(ModPg2.itemMetadata, 1, 32);// Butin R1
            ItemStack stack10 = new ItemStack(ModPg2.itemMetadata, 1, 33);
            ItemStack stack11 = new ItemStack(ModPg2.itemMetadata, 1, 34);
            ItemStack stack12 = new ItemStack(ModPg2.itemMetadata, 1, 35);
            ItemStack stack13 = new ItemStack(ModPg2.itemMetadata, 1, 36);
            ItemStack stack14 = new ItemStack(ModPg2.itemMetadata, 1, 37);// Butin R6
            ItemStack stack15 = new ItemStack(ModPg2.itemRandomMunitionPlasma, 1); // Munition Plasma
            if(event.source.getEntity() instanceof EntityPlayer)
            {
                EntityPlayer player = (EntityPlayer)event.source.getEntity();
                if(event.entityLiving instanceof EntityR1Cac || event.entityLiving instanceof EntityR1Ranged)
                {
                    for(int j = 0; j < 2; ++j)
                    {
                        if(event.entityLiving instanceof EntityR1Cac && !player.worldObj.isRemote) //Serveur
                        {
                            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) //Serveur
                        {
                            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);
                            }
    
                        }
                    }
                    if(player != null)
                    {
                        int killR1 = player.getEntityData().getInteger("killR1");
                        if(!player.worldObj.isRemote)  //Serveur
                        {
                            killR1++;
                            player.getEntityData().setInteger("killR1", killR1);
                        }
                        if(player.worldObj.isRemote)  //Client
                        {
                            if(killR1 == 10)
                            {
                                player.triggerAchievement(ModPg2.achievementKillR1a);
                                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);
                                ByteArrayDataOutput out = ByteStreams.newDataOutput();
                                out.writeUTF("achievementKillR1b accomplis par " + player.getDisplayName());
                                ((EntityClientPlayerMP)player).sendQueue.addToSendQueue(new C17PacketCustomPayload("achievementKillR1b", out.toByteArray()));   
                            }
                            if(killR1 == 300)
                            {
                                player.triggerAchievement(ModPg2.achievementKillR1c);
                                ByteArrayDataOutput out = ByteStreams.newDataOutput();
                                out.writeUTF("achievementKillR1c accomplis par " + player.getDisplayName());
                                ((EntityClientPlayerMP)player).sendQueue.addToSendQueue(new C17PacketCustomPayload("achievementKillR1c", out.toByteArray()));
                            }
                            if(killR1 == 1000)
                            {
                                player.triggerAchievement(ModPg2.achievementKillR1d);
                                ByteArrayDataOutput out = ByteStreams.newDataOutput();
                                out.writeUTF("achievementKillR1d accomplis par " + player.getDisplayName());
                                ((EntityClientPlayerMP)player).sendQueue.addToSendQueue(new C17PacketCustomPayload("achievementKillR1d", out.toByteArray()));
                            }
                        }
                    }
                }
    
    

    Le soucis c'est que l'achievement ne sera pas pris en compte il me semble. Je dois faire une nouvelle arborescence de if pour valider l'achievement?


  • Correcteurs

    ça ne crash plus mais ça n'a pas l'air d'être appelé car je n'ai pas le message en jeu

    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)
                        {
                            System.out.println("Test achievement");
                            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()));
                        }
                    }