Java 如何使用Bukkit中的事件代码声明射弹并取消其造成的伤害
我需要知道如何使用getCause条件在if语句中声明投射 然后,我需要知道,如果玩家在同一个帮派中,如何抵消抛射造成的伤害 请给我一个关于如何做的解释与一些示例代码请 这是我的活动Java 如何使用Bukkit中的事件代码声明射弹并取消其造成的伤害,java,minecraft,bukkit,projectile,eventhandler,Java,Minecraft,Bukkit,Projectile,Eventhandler,我需要知道如何使用getCause条件在if语句中声明投射 然后,我需要知道,如果玩家在同一个帮派中,如何抵消抛射造成的伤害 请给我一个关于如何做的解释与一些示例代码请 这是我的活动 @EventHandler public void onEntityDamage(EntityDamageByEntityEvent event){ if(event.getEntity() instanceof Player){ Player damaged = (Player) even
@EventHandler
public void onEntityDamage(EntityDamageByEntityEvent event){
if(event.getEntity() instanceof Player){
Player damaged = (Player) event.getEntity();
String DUUID = damaged.getUniqueId().toString().toLowerCase();
if(event.getCause() == DamageCause.PROJECTILE){
//I NEED THE CODE TO PUT IN HERE
}
if(event.getDamager() instanceof Player){
Player damager = (Player) event.getDamager();
String DRUUID = damager.getUniqueId().toString().toLowerCase();
if(MinecraftGTA.config.getString(DRUUID + ".Gang").equalsIgnoreCase(MinecraftGTA.config.getString(DUUID + ".Gang"))){
event.setCancelled(true);
}
}
}
}
有一个方法,有一个,我可以想象,当原因是DamageCause.sparket时调用getDamager将是投射实体
至于取消它,我不确定,但有一些方法听起来很有希望,或event.setcanceledtrue;正如您稍后在代码中使用的一样。当您发射射弹时,应该将其UUID保存在HashMap中。 例如,我们将使用雪球作为投射物:
public Map<String, String> projectileUUID = new HashMap<String, String>
public void launch(Player p){//call this to launch the projectile
String uuid = p.launchProjectile(Snowball.class).getUniqueId().toString(); //launch a snowball & get the UUID
projectileUUID.put(uuid, p.getName());//put the UUID of the projectile in the map
}
你可以把雪球换成箭头之类的东西。。。只需确保将所有与滚雪球相关的代码更改为您正在使用的投射物。不确定更改了多少,但是如果您想要玩家,您应该能够从实体对象获取它 即。
@EventHandler
public void entityDamage(EntityDamageByEntityEvent e){
if(e.getDamager() instanceof SnowBall && e.getEntity() instanceof Player){//make sure the damager is a snowball & the damaged entity is a Player
String uuid = ((SnowBall) e.getDamager()).getUniqueId().toString(); //get the UUID of the snowball
if(projectileUUID.contains(uuid)){//check if our HashMap contains the UUID
String damaged = ((Player) e.getEntity()).getName(); //get the damaged player's name
String shooter = projectileUUID.get(uuid); //get the shooter's name
if(getGang(shooter).equals(getGang(damaged)){//check if the two player's gangs are the same here
e.setCancelled(true); //cancel the event
}
}
}
}
@EventHandler
public void entityDamage(EntityDamageByEntityEvent e){
if(e.getDamager() instanceof Projectile && e.getEntity() instanceof Player){
//make sure the damager is a snowball & the damaged entity is a Player
ProjectileSource shooter = ((Projectile) event.getDamager()).getShooter();
if (!(shooter instanceof Player)) {
return;
}
// compare shooter and entity here...
if (isSameGang((Player) shooter, (Player) e.getEntity()) {
e.setCancelled(true); // cancel damage
}
}
}