下面列出了org.bukkit.event.entity.EntityDamageEvent.DamageCause#ENTITY_EXPLOSION 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@EventHandler
public void onEntityDamage(EntityDamageEvent e) {
if (e instanceof EntityDamageByEntityEvent
&& !(e.getCause() == DamageCause.BLOCK_EXPLOSION || e.getCause() == DamageCause.ENTITY_EXPLOSION))
return;
Entity entity = e.getEntity();
if (plugin.getLWC().isProtectable(e.getEntity().getType())) {
int A = 50000 + entity.getUniqueId().hashCode();
LWC lwc = LWC.getInstance();
Protection protection = lwc.getPhysicalDatabase().loadProtection(entity.getWorld().getName(), A, A, A);
if (protection != null) {
if (e.getCause() != DamageCause.CONTACT)
e.setCancelled(true);
}
}
}
@EventHandler
public void onEntityDamage(EntityDamageEvent event) {
if (damageTypes.contains(event.getCause()) && (event.getCause() != DamageCause.BLOCK_EXPLOSION || event.getCause() != DamageCause.ENTITY_EXPLOSION)) {
event.setCancelled(true);
} else if (event.getCause() == DamageCause.BLOCK_EXPLOSION || event.getCause() == DamageCause.ENTITY_EXPLOSION) {
if (event instanceof EntityDamageByEntityEvent) {
if (event.getEntity() instanceof Player && TntTracker.getWhoPlaced(((EntityDamageByEntityEvent) event).getDamager()) != null) {
Player player = (Player) event.getEntity();
UUID source = TntTracker.getWhoPlaced(((EntityDamageByEntityEvent) event).getDamager());
Match match = GameHandler.getGameHandler().getMatch();
if (Bukkit.getOfflinePlayer(source).isOnline()) {
if (Bukkit.getPlayer(source).equals(player)) {
event.setCancelled(!blockExplosionSelf);
} else if (Teams.getTeamByPlayer(Bukkit.getPlayer(source)) == Teams.getTeamByPlayer(player)) {
event.setCancelled(!blockExplosionAlly);
} else if (Teams.getTeamByPlayer(Bukkit.getPlayer(source)) != Teams.getTeamByPlayer(player)) {
event.setCancelled(!blockExplosionEnemy);
} else {
event.setCancelled(!blockExplosionOther);
}
}
}
} else if (damageTypes.contains(DamageCause.BLOCK_EXPLOSION)) event.setCancelled(true);
}
}
@Test
public void testFireworkDamage() {
Player player = server.addPlayer();
Firework firework = Mockito.mock(Firework.class);
FireworkMeta meta = new FireworkMetaMock();
meta.setDisplayName(ChatColor.GREEN + "Slimefun Research");
Mockito.when(firework.getType()).thenReturn(EntityType.FIREWORK);
Mockito.when(firework.getFireworkMeta()).thenReturn(meta);
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(firework, player, DamageCause.ENTITY_EXPLOSION, 6.0);
server.getPluginManager().callEvent(event);
Assertions.assertTrue(event.isCancelled());
}