Résolu Détecter si un item moddé est dans la main gauche
-
Bonjour,
ça fait déjà plusieurs jours que je fais face à un problème: je n’arrive pas à trouver un moyen de détecter si un item moddé est dans la main gauche,
en fait je voudrais faire en sorte que lorsque l’item est dans la main gauche, le joueur ait un effet permanent, et quand il l’enlève, l’effet disparaît.
Pour faire ça, j’ai tenté d’utiliser les events mais je n’ai pas trouvé d’event fonctionnel pour ça…
Du coup aujourd’hui je vous demande de l’aide.Merci beaucoup à ceux qui tenteraient de m’aider, ne serait-ce que pour me donner une piste !
-
Bonsoir,
Regardes du côté de PlayerTickEvent.
Tu peux ensuite utiliserevent.getPlayer().inventory.getItem(Hand.OFF_HAND)
pour avoir l’item stack dans la main secondaire (j’ai donnée le code de tête, probable qu’il soit pas 100% juste) -
@robin4002 Bonsoir, merci beaucoup pour l’aide ! Cependant, tout fonctionne sauf un point…(J’ai dû pas mal modifier le code pour récupérer l’item)
En fait je n’arrive pas à entrer le paramètre de la main, j’ai tenté de chercher un peu, et rien…
Voici ce que j’ai tenté:@SubscribeEvent public static void onItemLeftHand(TickEvent.PlayerTickEvent event) { System.out.println(event.player.inventory.getCurrentItem(Hand.OFF_HAND)); }
Mais malheureusement le paramètre “Hand.OFF_HAND” ne semble pas autorisé…
Une idée ?EDIT:
J’ai trouvé quelque chose de concluant:@SubscribeEvent public static void onItemLeftHand(TickEvent.PlayerTickEvent event) { System.out.println(event.player.inventory.offHandInventory); }
-
Bon j’ai réussi à chopper l’item, mais je ne trouve pas comment checker si c’en est un en particulier…
J’ai tenté == et .equals(), mais aucun des deux ne fonctionnent
Ça marche pas car c’est un itemstack qui est retourné… -
event.player.inventory.offHandInventory.getItem() == ClasseItem.NOM
-
@robin4002 Le soucis avec ça, c’est que getItem() ne fonctionnait pas, du coup j’ai trouvé quelque chose d’encore mieux…
@SubscribeEvent public static void onItemLeftHand(TickEvent.PlayerTickEvent event) { if(event.player.getHeldItem(Hand.OFF_HAND).getItem() == ModItems.FAST_HIT_BOOK.get()) { // Encore du code par ici... } }
Juste petite question, j’ai mis ça dans la classe de mon Item, et du coup j’ai rajouté “@Mod.EventBusSubscriber(modid = VanillaPlus.MODID)” avant le code de la classe, est-ce une bonne pratique ? Ou je devrais faire autrement ?
-
La bonne pratique en général c’est plutôt d’avoir des classes dédiés aux events et ne pas éparpiller les events partout.
-
@robin4002 Ok, très bien, merci beaucoup pour toute l’aide