Wie würde ich prüfen, ob ein Spieler in einer if() -Anweisung ein Schwert schwingt?Bukkit - Wie man überprüft, ob ein Spieler angreift
Antwort
Sie können PlayerInteractEvent abhören und prüfen, ob der Spieler ein Schwert hält.
if (p.getInventory().getItemInMainHand().getType() == Material.DIAMOND_SWORD)
Für 1,8 und unten kann man einfach nutzen:
Achten Sie darauf, zu prüfen, ob die Aktion LeftClickBlock oder LeftClickAir ist (Offensiv) player.getItemInHand().getType()
:
Dieses Beispiel für 1.9 verwendet werden if (e.getAction() == Action.LEFT_CLICK_AIR && e.getAction() == Action.LEFT_CLICK_BLOCK)
Sie können EntityDamageByEntityEvent
auch verwenden, wenn Sie speziell wissen müssen, wenn der Spieler etwas angreift.
@EventHandler
public void onEntityDamage(EntityDamageByEntityEvent event)
{
if (event.getDamager() instanceof Player){
//player is attacking someone
.......
}
}
Um speziell überprüfen, ob ein Spieler von jemandem mit einem Diamanten Schwert beschädigt wurde, können Sie
@EventHandler
public void onEntityDamage(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) {
Player attacker = (Player) event.getDamager();
if (attacker.getInventory().getItemInMainHand().getType() == Material.DIAMOND_SWORD) {
Player victim = (Player) event.getEntity();
//Do something
Bukkit.broadcastMessage(attacker.getName() + " hit " + victim.getName() + " with a diamond sword!");
}
}
}
Dies würde überprüfen, ob ein Spieler von jemandem anderem Schwert mit einem Diamanten angegriffen wurde verwenden können. Falls Sie nur feststellen wollen, ob jemand eine Entität mit einem Diamantschwert trifft, lassen Sie den "Opfer" Teil/checkt aus.