Plugin Bug setCancelled(True)

  • Auteur de la discussion Auteur de la discussion Ruster_
  • Date de début Date de début

Ruster_

Mineur des cavernes
24 Avril 2017
53
1
28
23
J'ai eu exactement le même problème sauf que mon event.setCancelled(true); est bien à sa place. Voici mon code, aidez moi s'il vous plait. Merci beaucoup.

@EventHandler
public void onPlayerClick(InventoryClickEvent event) {
Inventory inv = event.getInventory();
Player player = (Player) event.getWhoClicked();
ItemStack current = event.getCurrentItem();

Location lobby = new Location(player.getWorld(), 0.5, 6.2, 0.5, 180f, 0f);
Location gunarea = new Location(player.getWorld(), 200.5, 6.2, 0.5, 180f, 0f);

if(current == null) {
return;
}

if(inv.getName().equalsIgnoreCase("§bMenu")) {
event.setCancelled(true);
player.closeInventory();

switch(current.getType()) {

case FIREWORK_CHARGE:
player.teleport(gunarea);
break;

case BED:
player.teleport(lobby);
break;

default:
break;
}
}
 
Salut,

Donc, pour récapituler, tu veux empêcher l’interaction avec un item lorsque l'inventaire "Menu" est ouvert. C'est bien ça ?
Et du coup, tu as des problèmes pour déplacer/sélectionner un item même quand ce n'est pas l'inventaire "menu". C'est toujours ça ?

Concernant ton code, ça aurait été cool d'utiliser des balises "Code":
PHP:
@EventHandler
public void onPlayerClick(InventoryClickEvent event) {
    final ItemStack current = event.getCurrentItem();
    if(current == null) {
        return;
    }

    final Inventory inv = event.getInventory();
    final Player player = (Player) event.getWhoClicked();

    if(inv.getName().equalsIgnoreCase("§bMenu")) {
        event.setCancelled(true);
        player.closeInventory();

        final Location lobby = new Location(player.getWorld(), 0.5, 6.2, 0.5, 180f, 0f);
        final Location gunarea = new Location(player.getWorld(), 200.5, 6.2, 0.5, 180f, 0f);

        switch(current.getType()) {
            case FIREWORK_CHARGE:
                player.teleport(gunarea);
                break;

            case BED:
                player.teleport(lobby);
                break;
         }
    }
}
Au passage, pour optimiser l'exécution, tu ferais mieux d'enregistrer les localisations "lobby" et "gunarea" dans des attributs de ta class. Histoire de pas les recréer à chaque fois...

Pour trouver d'où vient le soucis, n'hésites pas à mettre des messages de débug. Genre:
Code:
player.sendMessage("[DEBUG] setCancel pour l'inventaire: " + inv.getName());
juste après le "setCancelled"... Comme ça tu verra directement si c'est ton plugin et pourquoi ça arrive.


Cordialement,
Detobel36
 
Bug setCancelled(True)
Vous pouvez d'ailleurs utiliser la nouvelle API de Bukkit pour corriger tout type de bug :
Code:
@EventHandler
public static void onBugCatched(BugCatchedEvent bug) {
   bug.setCancelled(true);
}

Voilà c'est tout pour moi, pense à mettre la balise résolut et indique la solution car les « nvm I figured it out », c'est mal.