如何检测主手的自定义十字弓?
How to detect a custom Crossbow in mainhand?
我正在尝试检测玩家手中的弩(这是一个自定义物品),但只有弓(也是一个自定义物品)似乎按照我现在设置的方式工作。当我测试每个项目时,只有弓会显示“fire”(并且 运行 代码正确)。
@EventHandler
public void playerBowShoot(EntityShootBowEvent e) {
Entity entity = e.getEntity();
Entity arrow = e.getProjectile();
if (entity.getType().equals(EntityType.PLAYER)) {
Player p = (Player) entity;
if (p.getInventory().getItemInMainHand().getItemMeta().equals(Weapons.crossbow.getItemMeta())) {
Bukkit.broadcastMessage("fire");
arrow.setVelocity(p.getLocation().getDirection().multiply(100.0D));
}
if (p.getInventory().getItemInMainHand().getItemMeta().equals(Weapons.bow.getItemMeta())) {
Bukkit.broadcastMessage("fire");
arrow.setVelocity(p.getLocation().getDirection().multiply(100.0D));
}
}
}
你不应该使用项目元来检查类型,但是 getType()
:
@EventHandler
public void playerBowShoot(EntityShootBowEvent e) {
Entity entity = e.getEntity();
Entity arrow = e.getProjectile();
if (entity instanceof Player) {
Player p = (Player) entity;
ItemStack hand = p.getInventory().getItemInMainHand();
if(hand == null) { // nothing in hand
} else if (hand.getType().equals(Material.CROSSBOW) && hand.getItemMeta().getDisplayName().equals(theNameOfTheCrossbow)) { // it's a crossbow
Bukkit.broadcastMessage("fire");
arrow.setVelocity(p.getLocation().getDirection().multiply(100.0D));
}
}
}
要检查它是否是好货,您可以:
- 如果要应用于所有项目,只需检查类型
- 检查自定义 names/lores/enchants 等...
- 检查类似。如果物品可能会损坏(例如带有耐久度的剑)则不能使用,或者你应该复制物品,设置相同的耐久度以检查两者
firstItem.isSimilar(secondItem)
我正在尝试检测玩家手中的弩(这是一个自定义物品),但只有弓(也是一个自定义物品)似乎按照我现在设置的方式工作。当我测试每个项目时,只有弓会显示“fire”(并且 运行 代码正确)。
@EventHandler
public void playerBowShoot(EntityShootBowEvent e) {
Entity entity = e.getEntity();
Entity arrow = e.getProjectile();
if (entity.getType().equals(EntityType.PLAYER)) {
Player p = (Player) entity;
if (p.getInventory().getItemInMainHand().getItemMeta().equals(Weapons.crossbow.getItemMeta())) {
Bukkit.broadcastMessage("fire");
arrow.setVelocity(p.getLocation().getDirection().multiply(100.0D));
}
if (p.getInventory().getItemInMainHand().getItemMeta().equals(Weapons.bow.getItemMeta())) {
Bukkit.broadcastMessage("fire");
arrow.setVelocity(p.getLocation().getDirection().multiply(100.0D));
}
}
}
你不应该使用项目元来检查类型,但是 getType()
:
@EventHandler
public void playerBowShoot(EntityShootBowEvent e) {
Entity entity = e.getEntity();
Entity arrow = e.getProjectile();
if (entity instanceof Player) {
Player p = (Player) entity;
ItemStack hand = p.getInventory().getItemInMainHand();
if(hand == null) { // nothing in hand
} else if (hand.getType().equals(Material.CROSSBOW) && hand.getItemMeta().getDisplayName().equals(theNameOfTheCrossbow)) { // it's a crossbow
Bukkit.broadcastMessage("fire");
arrow.setVelocity(p.getLocation().getDirection().multiply(100.0D));
}
}
}
要检查它是否是好货,您可以:
- 如果要应用于所有项目,只需检查类型
- 检查自定义 names/lores/enchants 等...
- 检查类似。如果物品可能会损坏(例如带有耐久度的剑)则不能使用,或者你应该复制物品,设置相同的耐久度以检查两者
firstItem.isSimilar(secondItem)