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
Können Sie den Stacktrace schreiben, die nach der Meldung kommt „Could not Ereignis PlayerInteractEvent Apocalypse v1.0 passieren“? – Pokechu22