2016-12-06 2 views
0

Zur Erinnerung, dieses Plugin selbst funktioniert, gibt nur Fehler beim Schlagen.PlayerInteractEvent bricht beim Schlagen auf Spigot

Ich versuche komplett zu ändern, wie Truhen in Minecraft arbeiten. In meinem Plugin, wenn du sie öffnest, geben sie dir einen Gegenstand und verschwinden dann, was funktioniert hat, aber es gibt ein Problem.

Ich rufe den PlayerInteractEvent und benutze eine if-Anweisung, um zu sehen, ob der Blocktyp eine Truhe ist. Wenn es dann ist, wird das Ereignis abgebrochen, die Truhe verschwinden lassen und dem Spieler einen Gegenstand geben. Aber da die Hauptklasse die Ereignisse an die ChestRewards-Klasse weiterleitet, scheint sie auch das zu erwartende Schlagereignis oder eine Aktion des Stanzens von PlayerInteractEvent zu bestehen, aber deshalb verwendete ich eine if-Anweisung, um nur das Ereignis zu verwenden, das der Block bestanden hat Typ ist eine Truhe. Aber es scheint, dass es Fehler in der Konsole als Ereignis nicht passieren kann, bitte helfen!

@EventHandler 
    public void catchChestOpen(PlayerInteractEvent event) { 

    Entity p = event.getPlayer(); 
    Player player = (Player) p; 

    if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.PHYSICAL || event.getAction() == Action.LEFT_CLICK_BLOCK){ 
     // TODO: 2016-12-06 Nothing 
    } 

    if (event.getClickedBlock().getType() == Material.CHEST) { 


     event.getClickedBlock().setType(Material.AIR); 

     event.setCancelled(true); 

     int rando = (int) (Math.random() * 10); 


     //--------------------------------------------------------------------------------- 
     if (rando == 1) { 
      ItemStack Axe = new ItemStack(Material.DIAMOND_AXE, 1); 
      ItemMeta meta = Axe.getItemMeta(); 
      List<String> lores = new ArrayList<String>(); 
      lores.add(ChatColor.DARK_PURPLE + "The axe of a long lost survivor"); 

      meta.setDisplayName(ChatColor.DARK_RED + "Survivor Axe"); 
      meta.addEnchant(Enchantment.DAMAGE_ALL, 2, true); 
      meta.addEnchant(Enchantment.DURABILITY, 2, true); 
      meta.setLore(lores); 
      Axe.setItemMeta(meta); 
      Axe.setDurability((short) 800); 
      player.getInventory().addItem(Axe); 
      player.sendMessage(ChatColor.GOLD + "You opened a" + ChatColor.AQUA + " RARE " + ChatColor.GOLD + "loot chest!"); 
     } 
     //--------------------------------------------------------------------------------- 
     if (rando > 1) { 
      ItemStack IronSword = new ItemStack(Material.IRON_SWORD, 1); 
      ItemMeta meta2 = IronSword.getItemMeta(); 
      List<String> lores2 = new ArrayList<String>(); 
      lores2.add(ChatColor.DARK_PURPLE + "A reliable iron sword"); 

      meta2.setDisplayName(ChatColor.DARK_RED + "Reliable Iron Sword"); 
      meta2.addEnchant(Enchantment.DURABILITY, 3, true); 
      meta2.setLore(lores2); 
      IronSword.setItemMeta(meta2); 
      IronSword.setDurability((short) 800); 
      player.getInventory().addItem(IronSword); 
      player.sendMessage(ChatColor.GOLD + "You opened a loot chest!"); 
     } 
     //--------------------------------------------------------------------------------- 



    } 
} 

Dies ist der Fehler selbst

[09:32:00 ERROR]: Could not pass event PlayerInteractEvent to Apocalypse v1.0 
+1

Können Sie den Stacktrace schreiben, die nach der Meldung kommt „Could not Ereignis PlayerInteractEvent Apocalypse v1.0 passieren“? – Pokechu22

Antwort

0

Da Sie nicht die Ausführung des Codes zu stoppen, wenn die Action kein RIGHT_CLICK_BLOCK oder LEFT_CLICK_BLOCK ist, dann wird die event.getClickedBlock() null sein, wenn Sie block.getType() rufen Um es mit einer Truhe zu vergleichen, wenn der Spieler links oder rechts auf Luft klickte.

Ich schlage vor, Sie fügen eine Überprüfung hinzu, um zu sehen, ob die Aktion etwas mit einem Block zu tun hat. Das folgende Snippet wird überprüfen, ob der Spieler entweder links oder rechts eine Brust angeklickt:

if ((event.getAction() == Action.RIGHT_CLICK_BLOCK || 
    event.getAction() == Action.LEFT_CLICK_BLOCK) && 
    event.getClickedBlock().getType() == Material.CHEST) { 
+0

Okay, danke für die Info! –

+0

Hat super funktioniert! Vielen Dank! –

Verwandte Themen