2015-10-26 11 views
0

如何讓雞蛋不被交易擊倒隊友?如何製作雞蛋不會對隊友造成撞擊?

當我使用這段代碼時,它不會傷害隊友的劍和其他東西,但我不知道如何讓蛋不會給隊友造成擊退。實際上,當我在比賽中時,我向隊友扔了一些雞蛋,看起來好像是從我的角度來看他損壞了他,但他沒有受到傷害。

@EventHandler 
public void onPlayerDamage(EntityDamageByEntityEvent event) { 
    if(faze.equals("game")){ 
     if (Team.getTeamType(event.getEntity()) == Team.getTeamType(event.getDamager())) { 
      event.setCancelled(true); 
      event.getEntity().setVelocity(event.getEntity().getLocation().getDirection().multiply(0)); 
     } 
    } 
} 

我會很感激,如果有人能幫助我解決這個問題

回答

3

舊的方式來取消擊退效果是損壞的實體的速度設置爲零(在三個方向)一個刻度(使用但是我相信你現在可以簡單地取消傷害事件,然後自己使用damage(double)方法來重新應用初始事件處理的最終傷害,除了這次沒有任何擊退事件。

由於使用​​來重新應用傷害只會返回發給實體的基本金額,而不考慮因裝甲等因素造成的傷害減少,因此使用第二種方法會更加難以執行,導致處理的傷害比經常預期的要多。將速度設置爲零的方法工作得很好,除非受損實體已經運動,否則速度仍將被取消,從而導致不需要的行爲。

現在有在EntityDamageEvent,您可以使用,以確保正確的傷害還是成交了getFinalDamage()方法(還沒有徹底測試這雖然看它是否有效以及在各種情況下)。

這裏是如何做到這一點看一個例子:

@EventHandler 
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { 
    if (event.getDamager() instanceof Egg && event.getEntity() instanceof LivingEntity) { // If damager is an egg and hurt entity is a living entity 
     LivingEntity hurt = (LivingEntity) event.getEntity(); // Cast living entity so we can use damage() method 
     event.setCancelled(true); // Cancel the event, removing any knockback/velocity changes 
     hurt.damage(event.getFinalDamage()); // Re-apply final/original damage 
    } 
} 

這裏是復位速度的舊方法:

@EventHandler 
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { 
    if (event.getDamager() instanceof Egg) { // If damager is an egg 
     final Entity hurt = event.getEntity(); // Declare entity final so that we can use it in future scheduling 
     Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { // Schedule a delayed task to run in one tick, plugin is main class 
      public void run() { 
       hurt.setVelocity(new Vector(0, 0, 0)); // Set velocity to zero vector, cancelling all motion 
      } 
     }); 
    } 
} 
+0

但它是一種方法,使知道扔的銷燬器蛋? – Mantak

+0

我不太清楚你在問什麼,請你詳細說明一下嗎? –

+0

@Vimikro你可以做event.getDamager(); – gogobebe2