类org.bukkit.event.entity.EntityDamageEvent.DamageCause源码实例Demo

下面列出了怎么用org.bukkit.event.entity.EntityDamageEvent.DamageCause的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: GriefDefender   文件: BlacklistCategory.java
public BlacklistCategory() {
    for (Flag flag : FlagRegistryModule.getInstance().getAll()) {
        this.flagIdBlacklist.put(flag.getName().toLowerCase(), new ArrayList<>());
    }
    this.flagIdBlacklist.put("block-pre", new ArrayList<>());
    this.entityDamageSourceBlacklist.add(DamageCause.CONTACT.name().toLowerCase());
    this.entityDamageSourceBlacklist.add("cramming");
    this.entityDamageSourceBlacklist.add(DamageCause.DROWNING.name().toLowerCase());
    this.entityDamageSourceBlacklist.add(DamageCause.FALLING_BLOCK.name().toLowerCase());
    this.entityDamageSourceBlacklist.add("flyintowall");
    this.entityDamageSourceBlacklist.add(DamageCause.POISON.name().toLowerCase());
    this.entityDamageSourceBlacklist.add(DamageCause.STARVATION.name().toLowerCase());
    this.entityDamageSourceBlacklist.add(DamageCause.SUFFOCATION.name().toLowerCase());
    this.entityDamageSourceBlacklist.add(DamageCause.SUICIDE.name().toLowerCase());
    this.entityDamageSourceBlacklist.add(DamageCause.VOID.name().toLowerCase());
}
 
源代码2 项目: Kettle   文件: CraftEventFactory.java
private static EntityDamageEvent callEntityDamageEvent(Entity damager, Entity damagee, DamageCause cause, Map<DamageModifier, Double> modifiers, Map<DamageModifier, Function<? super Double, Double>> modifierFunctions) {
    EntityDamageEvent event;
    if (damager != null) {
        event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, modifiers, modifierFunctions);
    } else {
        event = new EntityDamageEvent(damagee.getBukkitEntity(), cause, modifiers, modifierFunctions);
    }

    callEvent(event);

    if (!event.isCancelled()) {
        event.getEntity().setLastDamageCause(event);
    }

    return event;
}
 
源代码3 项目: Modern-LWC   文件: LWCPlayerListener.java
@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);
        }
    }
}
 
源代码4 项目: HeavySpleef   文件: FlagAnvilSpleef.java
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = false)
public void onEntityDamage(EntityDamageEvent e) {
	if (e.getCause() != DamageCause.FALLING_BLOCK) {
		return;
	}
	
	Entity damaged = e.getEntity();
	if (!(damaged instanceof Player)) {
		return;
	}
	
	SpleefPlayer player = getHeavySpleef().getSpleefPlayer(damaged);
	if (!game.isIngame(player)) {
		return;
	}
	
	e.setCancelled(false);
}
 
源代码5 项目: ProjectAres   文件: DisableDamageModule.java
public static DisableDamageModule parse(MapModuleContext context, Logger logger, Document doc) throws InvalidXMLException {
    SetMultimap<DamageCause, PlayerRelation> causes = HashMultimap.create();
    for(Element damageCauseElement : doc.getRootElement().getChildren("disabledamage")) {
        for(Element damageEl : damageCauseElement.getChildren("damage")) {
            DamageCause cause = XMLUtils.parseEnum(damageEl, DamageCause.class, "damage type");
            for(PlayerRelation damagerType : PlayerRelation.values()) {
                // Legacy syntax used "other" instead of "neutral"
                String attrName = damagerType.name().toLowerCase();
                Node attr = damagerType == PlayerRelation.NEUTRAL ? Node.fromAttr(damageEl, attrName, "other")
                                                                  : Node.fromAttr(damageEl, attrName);
                if(XMLUtils.parseBoolean(attr, true)) {
                    causes.put(cause, damagerType);

                    // Bukkit 1.7.10 changed TNT from BLOCK_EXPLOSION to ENTITY_EXPLOSION,
                    // so we include them both to keep old maps working.
                    if(cause == DamageCause.BLOCK_EXPLOSION) {
                        causes.put(DamageCause.ENTITY_EXPLOSION, damagerType);
                    }
                }
            }
        }
    }
    return new DisableDamageModule(causes);
}
 
源代码6 项目: AdditionsAPI   文件: ArmorDurability.java
/**
 * Calculates the damage that the armor will take for the specified damage.
 * This is according to the Vanilla Minecraft code, which divides the damage
 * by 4, increases it to at least 1 if it was less, and rounds it to an int.
 * There are also extra checks to prevent an armor piece to be damaged by a
 * forbidden {@link DamageCause} as well as calculations for adding extra
 * damage if the armor piece had Thorns.
 */
public int getArmorDamage(DamageCause cause, float damage, boolean hadThorns) {
	if (!damageCausesWithDurability.contains(cause))
		return 0;

	damage = damage / 4.0F;

	if (damage < 1.0F) {
		damage = 1.0F;
	}

	if (hadThorns)
		return thornsExtraDamage + (int) damage;
	else
		return (int) damage;
}
 
源代码7 项目: AdditionsAPI   文件: EntityDamage.java
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityDamage(EntityDamageEvent event) {
	if (event.isCancelled())
		return;

	DamageCause cause = event.getCause();
	Entity damagee = event.getEntity();
	EntityType damageeType = damagee.getType();
	// PlayerCustomArmorDamageEvent
	if (damageeType == EntityType.PLAYER) {
		Player player = (Player) damagee;
		PlayerInventory inv = player.getInventory();
		for (ItemStack armor : inv.getArmorContents())
			// TODO: Speed up
			if (armor != null && armor.getType() != Material.AIR && AdditionsAPI.isCustomItem(armor)
					&& new CustomItemStack(armor).getCustomItem() instanceof CustomArmor
					&& new CustomItemStack(armor).getCustomItem()
							.getDurabilityMechanics() instanceof ArmorDurability) {
				CustomArmor cArmor = (CustomArmor) new CustomItemStack(armor).getCustomItem();
				Bukkit.getServer().getPluginManager().callEvent(new PlayerCustomArmorDamageEvent(player, armor,
						cArmor, cause, (float) event.getDamage(), armor.containsEnchantment(Enchantment.THORNS)));
			}
	}
}
 
源代码8 项目: CardinalPGM   文件: DisableDamage.java
@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);
    }
}
 
源代码9 项目: Skript   文件: DefaultComparators.java
@Override
public Relation compare(final DamageCause dc, final EntityData e) {
	switch (dc) {
		case ENTITY_ATTACK:
			return Relation.get(e.isSupertypeOf(EntityData.fromClass(Entity.class)));
		case PROJECTILE:
			return Relation.get(e.isSupertypeOf(EntityData.fromClass(Projectile.class)));
		case WITHER:
			return Relation.get(e.isSupertypeOf(EntityData.fromClass(Wither.class)));
		case FALLING_BLOCK:
			return Relation.get(e.isSupertypeOf(EntityData.fromClass(FallingBlock.class)));
			//$CASES-OMITTED$
		default:
			return Relation.NOT_EQUAL;
	}
}
 
源代码10 项目: Skript   文件: EffHealth.java
@SuppressWarnings({"unchecked", "null"})
@Override
public boolean init(final Expression<?>[] vars, final int matchedPattern, final Kleenean isDelayed, final ParseResult parser) {
	damageables = vars[0];
	if (ItemStack.class.isAssignableFrom(damageables.getReturnType())) {
		if (!ChangerUtils.acceptsChange(damageables, ChangeMode.SET, ItemType.class)) {
			Skript.error(damageables + " cannot be changed, thus it cannot be damaged or repaired.");
			return false;
		}
	}
	damage = (Expression<Number>) vars[1];
	heal = (matchedPattern >= 1);
	
	if (vars.length >= 3) dmgCause = (Expression<DamageCause>) vars[2];
	return true;
}
 
源代码11 项目: AnnihilationPro   文件: Thor.java
@EventHandler(priority= EventPriority.NORMAL)
public void checkStrike(EntityDamageEvent event)
{
	if(event.getEntityType() == EntityType.PLAYER && event.getCause() == DamageCause.LIGHTNING)
	{
		AnniPlayer player = AnniPlayer.getPlayer(event.getEntity().getUniqueId());
		if(player != null && !player.getKit().equals(this))
		{
			Object obj = player.getData("LH");
			if(obj != null)
			{
				Long l = (Long)obj;
				if(System.currentTimeMillis()-l <= 30000)
				{
					event.setCancelled(true);
					player.setData("LH", null);
					return;
				}
			}
			event.setDamage(4);
			player.setData("LH", System.currentTimeMillis());
		}
	}
}
 
源代码12 项目: Thermos   文件: CraftEventFactory.java
private static EntityDamageEvent callEntityDamageEvent(Entity damager, Entity damagee, DamageCause cause, Map<DamageModifier, Double> modifiers, Map<DamageModifier, Function<? super Double, Double>> modifierFunctions) {
    EntityDamageEvent event;
    if (damager != null) {
        event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, modifiers, modifierFunctions);
    } else {
        event = new EntityDamageEvent(damagee.getBukkitEntity(), cause, modifiers, modifierFunctions);
    }

    callEvent(event);

    if (!event.isCancelled()) {
        event.getEntity().setLastDamageCause(event);
    }

    return event;
}
 
源代码13 项目: ProtocolSupport   文件: FeatureEmulation.java
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onEntityDamage(EntityDamageEvent event) {
	if (((event.getCause() == DamageCause.FIRE_TICK) || (event.getCause() == DamageCause.FIRE) || (event.getCause() == DamageCause.DROWNING))) {
		for (Player player : ServerPlatform.get().getMiscUtils().getNearbyPlayers(event.getEntity().getLocation(), 48, 128, 48)) {
			if (player != null) {
				Connection connection = ProtocolSupportAPI.getConnection(player);
				if (
					(connection != null) &&
					(connection.getVersion().getProtocolType() == ProtocolType.PC) &&
					connection.getVersion().isBefore(ProtocolVersion.MINECRAFT_1_12)
				) {
					connection.sendPacket(ServerPlatform.get().getPacketFactory().createEntityStatusPacket(event.getEntity(), 2));
				}
			}
		}
	}
}
 
源代码14 项目: SkyWarsReloaded   文件: SpectateListener.java
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onSpectatorDamaged(EntityDamageEvent e) {
	if (e.getEntity() instanceof Player) {
		final Player player = (Player) e.getEntity();
		final GameMap gameMap = MatchManager.get().getSpectatorMap(player);
		if (gameMap == null) {
			return;
		}
		e.setCancelled(true);
		if (e.getCause() == DamageCause.VOID) {
			World world = gameMap.getCurrentWorld();
			Location spectateSpawn = new Location(world, 0, 0, 0);
			player.teleport(spectateSpawn);
		}
	}
	
}
 
源代码15 项目: SkyWarsReloaded   文件: PlayerDeathListener.java
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
  public void onDeath2(final PlayerDeathEvent v2) {
      final GameMap gameMap = MatchManager.get().getPlayerMap(v2.getEntity());

      if (gameMap == null) {
          return;
      }
       
      final Player player = v2.getEntity();
      v2.getEntity().getInventory().clear();
      v2.getEntity().getInventory().setArmorContents(null);
      
      DamageCause damageCause = DamageCause.CUSTOM;
if (v2.getEntity().getLastDamageCause() != null) {
	damageCause = v2.getEntity().getLastDamageCause().getCause();
} 
final DamageCause dCause = damageCause;
v2.setDeathMessage("");

      MatchManager.get().playerLeave(player, dCause, false, true, true);
  }
 
源代码16 项目: SkyWarsReloaded   文件: ArenaDamageListener.java
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void playerDamaged(EntityDamageEvent event) {
	if (event.getEntity() instanceof Player) {
		Player player = (Player) event.getEntity();
		GameMap gameMap = MatchManager.get().getPlayerMap(player);
		if (gameMap != null) {
			if (gameMap.getMatchState() == MatchState.ENDING || gameMap.getMatchState() == MatchState.WAITINGSTART) {
				event.setCancelled(true);
				return;
			}
			if (!gameMap.allowFallDamage()) {
				if (event.getCause().equals(DamageCause.FALL)) {
					event.setCancelled(true);
				}
			}
		}
	}
}
 
源代码17 项目: Slimefun4   文件: SlimefunBootsListener.java
public SlimefunBootsListener(SlimefunPlugin plugin) {
    plugin.getServer().getPluginManager().registerEvents(this, plugin);

    cancelledEvents.put("ENDER_BOOTS", e -> e instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) e).getDamager() instanceof EnderPearl);

    cancelledEvents.put("BOOTS_OF_THE_STOMPER", e -> {
        if (e.getCause() == DamageCause.FALL) {
            stomp(e);
            return true;
        }

        return false;
    });

    cancelledEvents.put("SLIME_BOOTS", e -> e.getCause() == DamageCause.FALL);

    cancelledEvents.put("SLIME_STEEL_BOOTS", e -> e.getCause() == DamageCause.FALL);
}
 
源代码18 项目: Slimefun4   文件: SlimefunBootsListener.java
private void stomp(EntityDamageEvent e) {
    Player p = (Player) e.getEntity();
    p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ZOMBIE_BREAK_WOODEN_DOOR, 1F, 2F);
    p.setVelocity(new Vector(0.0, 0.7, 0.0));

    for (Entity n : p.getNearbyEntities(4, 4, 4)) {
        if (n instanceof LivingEntity && !n.getUniqueId().equals(p.getUniqueId())) {
            Vector velocity = n.getLocation().toVector().subtract(p.getLocation().toVector()).normalize().multiply(1.4);
            n.setVelocity(velocity);

            if (!(n instanceof Player) || (p.getWorld().getPVP() && SlimefunPlugin.getProtectionManager().hasPermission(p, n.getLocation(), ProtectableAction.PVP))) {
                EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(p, n, DamageCause.ENTITY_ATTACK, e.getDamage() / 2);
                Bukkit.getPluginManager().callEvent(event);
                if (!event.isCancelled()) ((LivingEntity) n).damage(e.getDamage() / 2);
            }
        }
    }

    for (BlockFace face : BlockFace.values()) {
        Block b = p.getLocation().getBlock().getRelative(BlockFace.DOWN).getRelative(face);
        p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
    }
}
 
源代码19 项目: GriefDefender   文件: EntityEventHandler.java
@EventHandler(priority = EventPriority.LOWEST)
public void onEntityDamage(EntityDamageByBlockEvent event) {
    if (event.getCause() == DamageCause.SUFFOCATION || event.getCause() == DamageCause.DROWNING) {
        return;
    }
    GDTimings.ENTITY_DAMAGE_EVENT.startTiming();
    if (protectEntity(event, event.getDamager() == null ? event.getCause() : event.getDamager(), event.getEntity())) {
        event.setCancelled(true);
    }
    GDTimings.ENTITY_DAMAGE_EVENT.stopTiming();
}
 
源代码20 项目: PGM   文件: DamageParser.java
public DamageCause parseDamageCause(Element el) throws InvalidXMLException {
  DamageCause cause = DamageCause.valueOf(el.getTextNormalize().toUpperCase().replace(" ", "_"));

  if (cause == null) {
    throw new InvalidXMLException("Invalid damage cause '" + el.getValue() + "'.", el);
  }
  return cause;
}
 
源代码21 项目: PGM   文件: DisableDamageModule.java
@Override
public DisableDamageModule parse(MapFactory factory, Logger logger, Document doc)
    throws InvalidXMLException {
  SetMultimap<DamageCause, PlayerRelation> causes = HashMultimap.create();
  DamageParser parser = new DamageParser();

  for (Element damageCauseElement : doc.getRootElement().getChildren("disabledamage")) {
    for (Element damageEl : damageCauseElement.getChildren("damage")) {
      DamageCause cause = parser.parseDamageCause(damageEl);
      for (PlayerRelation damagerType : PlayerRelation.values()) {
        // Legacy syntax used "other" instead of "neutral"
        String attrName = damagerType.name().toLowerCase();
        Node attr =
            damagerType == PlayerRelation.NEUTRAL
                ? Node.fromAttr(damageEl, attrName, "other")
                : Node.fromAttr(damageEl, attrName);
        if (XMLUtils.parseBoolean(attr, true)) {
          causes.put(cause, damagerType);

          // Bukkit 1.7.10 changed TNT from BLOCK_EXPLOSION to ENTITY_EXPLOSION,
          // so we include them both to keep old maps working.
          if (cause == DamageCause.BLOCK_EXPLOSION) {
            causes.put(DamageCause.ENTITY_EXPLOSION, damagerType);
          }
        }
      }
    }
  }
  // Always load due to misc damage handling
  return new DisableDamageModule(causes);
}
 
源代码22 项目: PGM   文件: DisableDamageMatchModule.java
private static DamageCause getBlockDamageCause(Block block) {
  switch (block.getType()) {
    case LAVA:
    case STATIONARY_LAVA:
      return DamageCause.LAVA;

    case FIRE:
      return DamageCause.FIRE;

    default:
      return DamageCause.CONTACT;
  }
}
 
源代码23 项目: ProjectAres   文件: DisableDamageMatchModule.java
@Override
public void load() {
    super.load();
    if(MutationMatchModule.check(match, Mutation.NO_FALL)) {
        this.causes.putAll(DamageCause.FALL, Sets.newHashSet(PlayerRelation.values()));
    }
}
 
源代码24 项目: ProjectAres   文件: DisableDamageMatchModule.java
private static DamageCause getBlockDamageCause(Block block) {
    switch(block.getType()) {
        case LAVA:
        case STATIONARY_LAVA:
            return DamageCause.LAVA;

        case FIRE:
            return DamageCause.FIRE;

        default:
            return DamageCause.CONTACT;
    }
}
 
源代码25 项目: Skript   文件: CondDamageCause.java
@SuppressWarnings({"unchecked", "null"})
@Override
public boolean init(final Expression<?>[] exprs, final int matchedPattern, final Kleenean isDelayed, final ParseResult parseResult) {
	cause = new EventValueExpression<>(DamageCause.class);
	expected = (Expression<DamageCause>) exprs[0];
	setNegated(parseResult.mark == 1);
	cause.setParserInstance(pi);
	return ((EventValueExpression<DamageCause>) cause).init();
}
 
源代码26 项目: CardinalPGM   文件: Projectiles.java
@EventHandler
public void onEntityHitByProjectile(EntityDamageByEntityEvent event) {
    if (event.isCancelled()) return;
    if (event.getCause().equals(DamageCause.PROJECTILE)) {
        ProjectileSource source = ((Projectile) event.getDamager()).getShooter();
        if (source instanceof Player) {
            ((Player) source).playSound(((Player) source).getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 0.2F, 0.5F);
        }
        if (event.getDamager().getType().equals(projectile) && event.getDamager().hasMetadata("custom")) {
            Entity arrow = event.getEntity().getWorld().spawnEntity(event.getDamager().getLocation(), EntityType.ARROW);
            ((Projectile) arrow).setShooter(source);
            arrow.setVelocity(event.getDamager().getVelocity());
            event.getDamager().remove();
            if (event.getEntity() instanceof LivingEntity) {
                for (PotionEffect effect : potionEffects) {
                    ((LivingEntity) event.getEntity()).addPotionEffect(effect);
                }
                final Entity entity = event.getEntity();
                Bukkit.getServer().getScheduler().runTaskLater(GameHandler.getGameHandler().getPlugin(), new Runnable() {
                    @Override
                    public void run() {
                        ((LivingEntity) entity).setArrowsStuck(((LivingEntity) entity).getArrowsStuck() - 1);
                    }
                }, 0);
            }
        }
    }
}
 
源代码27 项目: Skript   文件: HealthUtils.java
/** Apply damage to an entity
 * @param e Entity to apply damage to
 * @param d Amount of hearts to damage
 */
public static void damage(final Damageable e, final double d) {
	if (d < 0) {
		heal(e, -d);
		return;
	}
	EntityDamageEvent event = new EntityDamageEvent(e, DamageCause.CUSTOM, d * 2);
	Bukkit.getPluginManager().callEvent(event);
	if (event.isCancelled()) return;
	e.damage(event.getDamage());
}
 
源代码28 项目: Skript   文件: ExprLastDamageCause.java
@Override
protected DamageCause[] get(final Event e, final LivingEntity[] source) {
	return get(source, new Getter<DamageCause, LivingEntity>() {
		@SuppressWarnings("null")
		@Override
		public DamageCause get(final LivingEntity entity) {
			EntityDamageEvent dmgEvt = entity.getLastDamageCause();
			if (dmgEvt == null) return DamageCause.CUSTOM;
			return dmgEvt.getCause();
		}
	});
}
 
源代码29 项目: Skript   文件: ExprLastDamageCause.java
@Override
@Nullable
public Class<?>[] acceptChange(final ChangeMode mode) {
	if (mode == ChangeMode.REMOVE_ALL)
		return null;
	return CollectionUtils.array(DamageCause.class);
}
 
源代码30 项目: Skript   文件: DefaultComparators.java
@Override
public Relation compare(final DamageCause dc, final ItemType t) {
	switch (dc) {
		case FIRE:
			return Relation.get(t.isOfType(Material.LAVA));
		case LAVA:
			return Relation.get(t.equals(lava));
		case MAGIC:
			return Relation.get(t.isOfType(Material.POTION));
			//$CASES-OMITTED$
		default:
			return Relation.NOT_EQUAL;
	}
}
 
 类所在包
 同包方法