舊的方式來取消擊退效果是損壞的實體的速度設置爲零(在三個方向)一個刻度(使用但是我相信你現在可以簡單地取消傷害事件,然後自己使用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
}
});
}
}
但它是一種方法,使知道扔的銷燬器蛋? – Mantak
我不太清楚你在問什麼,請你詳細說明一下嗎? –
@Vimikro你可以做event.getDamager(); – gogobebe2