Bukkit - 如何检查玩家是否正在攻击
Bukkit - How to check if a player is attacking
如何检查玩家是否在 if() 语句中挥剑?
您可以监听 PlayerInteractEvent 并检查该玩家是否拿着剑。
此示例可用于 1.9:
if (p.getInventory().getItemInMainHand().getType() == Material.DIAMOND_SWORD)
对于 1.8 及以下版本,您可以简单地使用:player.getItemInHand().getType()
确保检查 Action 是 LeftClickBlock 还是 LeftClickAir(Attacking):
if (e.getAction() == Action.LEFT_CLICK_AIR && e.getAction() == Action.LEFT_CLICK_BLOCK)
您也可以使用 EntityDamageByEntityEvent
,如果您特别需要知道玩家何时在攻击某物。
@EventHandler
public void onEntityDamage(EntityDamageByEntityEvent event)
{
if (event.getDamager() instanceof Player){
//player is attacking someone
.......
}
}
要具体检查玩家是否被使用钻石剑的人伤害,您可以使用
@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!");
}
}
}
这将检查玩家是否被其他人使用钻石剑攻击。如果您只想检测是否有人用钻石剑击中某个实体,请将 "victim" part/checks 排除在外。
如何检查玩家是否在 if() 语句中挥剑?
您可以监听 PlayerInteractEvent 并检查该玩家是否拿着剑。
此示例可用于 1.9:
if (p.getInventory().getItemInMainHand().getType() == Material.DIAMOND_SWORD)
对于 1.8 及以下版本,您可以简单地使用:player.getItemInHand().getType()
确保检查 Action 是 LeftClickBlock 还是 LeftClickAir(Attacking):
if (e.getAction() == Action.LEFT_CLICK_AIR && e.getAction() == Action.LEFT_CLICK_BLOCK)
您也可以使用 EntityDamageByEntityEvent
,如果您特别需要知道玩家何时在攻击某物。
@EventHandler
public void onEntityDamage(EntityDamageByEntityEvent event)
{
if (event.getDamager() instanceof Player){
//player is attacking someone
.......
}
}
要具体检查玩家是否被使用钻石剑的人伤害,您可以使用
@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!");
}
}
}
这将检查玩家是否被其他人使用钻石剑攻击。如果您只想检测是否有人用钻石剑击中某个实体,请将 "victim" part/checks 排除在外。