Résolu Problème de consumeInventoryItem
-
Bonjour, je suis entrain de faire un petit système qui doit retirer un item de l’inventaire du joueur et en donner un autre.
Le problème c’est que quand je reçois le nouvelle item dés que je click dessus il se transforme en item qui était censé être retiré. Quelqu’un peut m’aider ? -
Tu ne peux pas utiliser
Minecraft.getMinecraft().thePlayer
dans l’handler d’un paquet qui arrive sur le serveur.Minecraft.getMinecraft()
= client seulement.Il faut utiliser ctx.getServerHandler().getPlayer() pour avoir le joueur ayant envoyé le paquet côté serveur.
-
Bonsoir,
Tu retires comment l’item de l’inventaire ?
-
@robin4002 p.inventory.consumeInventoryItem(ItemMod.burger);
p c’est le player -
J’aurai aimé le contexte complet dans lequel tu le fais.
Notamment pour voir si tu exécute ça côté client ou côté serveur.
-
@SideOnly(Side.CLIENT) protected void actionPerformed(GuiButton button) { switch(button.id) { case 0: if(p.inventory.hasItem(ItemMod.burger)) { p.inventory.consumeInventoryItem(ItemMod.burger); p.inventory.addItemStackToInventory(new ItemStack(ItemMod.meth)); } break; } }
j’ai testé sans le side only toujours le même effet.
-
Ah oui si tu fais ça dans un gui c’est normal d’avoir ce souci, il faut passer un paquet pour que le code soit exécuté sur le serveur.
-
@robin4002 C’est bon mais je l’envoi comment le packet ? network.sendtoAll ou network.sendto ?
-
sendToServer
C’est la seule fonction pour le sens client vers serveur.
Les autres c’est pour aller du serveur vers le client ou du serveur vers plusieurs clients. -
@robin4002 Et dans mon PacketHandler j’ai mis ça
@Override public IMessage onMessage(Packet1 message, MessageContext ctx) { EntityPlayer p = Minecraft.getMinecraft().thePlayer; p.inventory.consumeInventoryItem(ItemMod.burger); p.inventory.addItemStackToInventory(new ItemStack(ItemMod.meth)); return null; }
ça ne fais rien quand je click sur mon bouton
-
Tu ne peux pas utiliser
Minecraft.getMinecraft().thePlayer
dans l’handler d’un paquet qui arrive sur le serveur.Minecraft.getMinecraft()
= client seulement.Il faut utiliser ctx.getServerHandler().getPlayer() pour avoir le joueur ayant envoyé le paquet côté serveur.
-
@robin4002 a dit dans Problème de consumeInventoryItem :
ctx.getServerHandler().getPlayer()
-
getPlayerMP ? ou autre ? Regardes ce que ton ide propose.
-
@robin4002 j’ai juste add cast to receiver mais ça change rien
-
Non mais si tu mets
ctx.getServerHandler().getPlayer()
au milieu de nulle part c’est normal que ça fait une erreur.C’est juste la fonction pour récupérer le joueur ça, il faut ensuite l’utiliser, soit en appelant directement une fonction ensuite soit en l’assignant à une variable …
-
Ce message a été supprimé ! -
@robin4002 C’est bon enfaite j’avais juste mis que mon network était côté client à la place de serveur. Merci Beacoup