Résolu 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 !
-
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.
-
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 daubeDonc oui le problème peut venir de là
-
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
-
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 entityjava.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.
-
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?
-
ç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())); } }