Plugin [Développement] Block break event annulé si le block ne doit pas être détruit

Raphew

Massacreur de Mouton
10 Août 2018
46
0
21
20
Bonjour,

Je cherche un moyen pour savoir quand stoppé l'event, je m'explique. Je travaille avec l'event BlockBreakEvent, et j'aimerais que l'event se stop si le joueur casse le block alors qu'il n'est pas censé le casser, du type si le joueur casse un minerais d'or, le jeu ne drop pas le minerai d'or car il n'est pas censé le casser, et moi j'ai envie que l'event se stoppe si il n'est pas censé le casser. J'ai envie de stopper l'event, et pas de l'annulé !!

Je sais évidemment comment annulé un event, je connais le event.isCancelled(), pas besoin de me parler de ça, c'est pas ça que je veux. J'ai juste envie de vérifier si le joueur à casser le block, est-ce qu'il avait les bons outils pour casser ce block.

PS : J'avais penser à faire une vérification par xp drop, mais pour la stone, le bois ça marcherais pas, après je pourrais vérifier si ce qu'il a en main correspond à une pioche, ou a une hache mais trop de vérification...
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 129
162
461
247
21
Mìlhüsa
Bonjour,

Qu'entends-tu par arrêter l'évènement ?
Tu veux que ton plugin arrête de le traiter, que tous les plugins ne le traitent pas, ou simplement exécuter un code si un joueur casse un bloc sans le bon outil ?

Cordialement,
ShE3py.
 

Raphew

Massacreur de Mouton
10 Août 2018
46
0
21
20
Bonsoir,

Arrêter l'event je sais le faire, juste un return; .
Mais je sais pas quand le faire, il n'y a pas de fonctions, méthodes... pour exécuter un code dans ces cas la. (comme un event.isCancelled() si l'event est annulé...).
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 129
162
461
247
21
Mìlhüsa
Je ne comprends pas de quels cas tu parles.
Tu veux exécuter un code après avoir fait un return ?
 

Raphew

Massacreur de Mouton
10 Août 2018
46
0
21
20
Je veux arrêter l'event, donc un return.
Je ne sais juste pas comment le faire, avec quelles méthodes, quelles fonctions...

Exemple: Si je veux arrêter l'event si l’événement est annulé, j'ai juste à faire
Code:
if(e.isCancelled()) return;
sauf que la je veux faire un return, si le joueur casse un bloc avec le mauvais outils, et je ne trouve pas de fonctions qui va avec, du type
Code:
e.isBadTools()
, donc je cherche un moyen pour faire ça. J'ai enfin bien expliqué ?
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 129
162
461
247
21
Mìlhüsa
Donc tu veux juste vérifier si le joueur n'a pas le bon outils, vouloir return passe juste en second plan.
Tu peux récupérer les drops théoriques avec Block#getDrops(ItemStack).

Java:
public class BlockBreakHandler implements Listener {
   @EventHandler
   public void onBlockBreak(BlockBreakEvent e) {
      Player breaker = e.getPlayer();
      ItemStack tool = breaker.getInventory().getItemInMainHand();
      Block block = e.getBlock();
      
      if(block.getDrops(tool).isEmpty())
         // 0 drop
         return;
      
      // 1+ drops
   }
}
 

Raphew

Massacreur de Mouton
10 Août 2018
46
0
21
20
Re !

Merci tu viens de m'apprendre la fonction getDrops ^^, merci à toi !