public MagicMobDeathEvent(MageController controller, EntityData entityData, EntityDeathEvent deathEvent) { this.controller = controller; this.entityData = entityData; this.deathEvent = deathEvent; LivingEntity killed = deathEvent.getEntity(); EntityDamageEvent damageEvent = killed.getLastDamageCause(); if (damageEvent instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent damageByEvent = (EntityDamageByEntityEvent)damageEvent; Entity damagingEntity = damageByEvent.getDamager(); if (damagingEntity instanceof Projectile) { Projectile projectile = (Projectile)damagingEntity; damagingEntity = (LivingEntity)projectile.getShooter(); } if (damagingEntity != null && damagingEntity instanceof Player) { player = (Player)damagingEntity; mage = controller.getRegisteredMage(player.getUniqueId().toString()); } } }
public @Nullable DamageInfo resolve(@Nonnull LivingEntity entity, @Nonnull Lifetime lifetime, @Nonnull EntityDamageEvent damageEvent) { if(damageEvent instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) damageEvent; if(event.getDamager() instanceof Projectile) { Projectile projectile = (Projectile) event.getDamager(); Location launchLocation = this.projectileDistanceTracker.getLaunchLocation(projectile); Double projectileDistance = null; if(launchLocation != null) projectileDistance = event.getEntity().getLocation().distance(launchLocation); if(projectile.getShooter() instanceof LivingEntity) { return new ProjectileDamageInfo(projectile, (LivingEntity) projectile.getShooter(), projectileDistance); } } } return null; }
public @Nullable DamageInfo resolve(@Nonnull LivingEntity entity, @Nonnull Lifetime lifetime, @Nonnull EntityDamageEvent damageEvent) { if(damageEvent instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) damageEvent; if(event.getDamager() instanceof Projectile) { Projectile projectile = (Projectile) event.getDamager(); Location launchLocation = this.projectileDistanceTracker.getLaunchLocation(projectile); Double projectileDistance = null; OfflinePlayer dispenserOwner = dispenserTracker.getOwner(projectile); if(launchLocation != null) projectileDistance = event.getEntity().getLocation().distance(launchLocation); if(projectile.getShooter() instanceof LivingEntity) { return new DispensedProjectileDamageInfo(projectile, (LivingEntity) projectile.getShooter(), projectileDistance, dispenserOwner); } } } return null; }
@EventHandler(priority = EventPriority.LOW, ignoreCancelled=true) public void onLingeringPotionSplash(final LingeringPotionSplashEvent e) { if (DEBUG) { plugin.getLogger().info("1.9 " + e.getEventName()); plugin.getLogger().info("1.9 entity = " + e.getEntity()); plugin.getLogger().info("1.9 entity type = " + e.getEntityType()); plugin.getLogger().info("1.9 radius = " + e.getAreaEffectCloud().getRadius()); plugin.getLogger().info("1.9 id = " + e.getAreaEffectCloud().getEntityId()); plugin.getLogger().info("1.9 hit entity = " + e.getHitEntity()); } if (!Util.inWorld(e.getEntity().getLocation())) { return; } // Try to get the shooter Projectile projectile = e.getEntity(); plugin.getLogger().info("shooter = " + projectile.getShooter()); if (projectile.getShooter() != null && projectile.getShooter() instanceof Player) { UUID uuid = ((Player)projectile.getShooter()).getUniqueId(); // Store it and remove it when the effect is gone thrownPotions.put(e.getAreaEffectCloud().getEntityId(), uuid); plugin.getServer().getScheduler().runTaskLater(plugin, () -> thrownPotions.remove(e.getAreaEffectCloud().getEntityId()), e.getAreaEffectCloud().getDuration()); } }
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onItemFrameDamage(final EntityDamageByEntityEvent e) { // Check world if (!Util.inWorld(e.getEntity()) || !(e.getEntity() instanceof ItemFrame)) { return; } if (e.getDamager() instanceof Projectile) { if (DEBUG) plugin.getLogger().info("DEBUG: Projectile damage to itemframe"); // Find out who fired the arrow Projectile p = (Projectile) e.getDamager(); if (DEBUG) plugin.getLogger().info("DEBUG: Shooter is " + p.getShooter().toString()); if (p.getShooter() instanceof Skeleton || p.getShooter() instanceof Golem) { if (DEBUG) plugin.getLogger().info("DEBUG: Shooter is mob"); if (!Settings.allowMobDamageToItemFrames) { if (DEBUG) plugin.getLogger().info("DEBUG: Damage not allowed, cancelling"); e.setCancelled(true); } } } }
/** * A basic shoot method, it _can_ be overridden but take care. * Handles passing the bullet to its BulletType for configuration, sets shooter, velocity, etc. * * @param begin The location to shoot from * @param bulletType the Bullet type of this bullet * @param shooter the entity shooting * @param velocity the velocity to use as base for this shooting, if any * @param overrideVelocity if true, use the passed velocity and override anything set up by the bullet type. * @return the new Projectile that has been unleashed. */ public Projectile shoot(Location begin, Bullet bulletType, ProjectileSource shooter, Vector velocity, boolean overrideVelocity) { World world = begin.getWorld(); begin = begin.clone(); begin.setDirection(velocity); Projectile newBullet = world.spawn(begin, bulletType.getProjectileType() ); newBullet.setCustomName(this.bulletTag); newBullet.setBounce(false); newBullet.setGravity(true); newBullet.setShooter(shooter); bulletType.configureBullet(newBullet, world, shooter, velocity); if (overrideVelocity) { newBullet.setVelocity(velocity); } return newBullet; }
@Repeatable(scope = MatchScope.RUNNING) public void tick() { EntityUtils.entities(match.getWorld(), Projectile.class) .filter(projectile -> projectile.hasMetadata(TRAIL_META)) .forEach(projectile -> { if(projectile.isDead() || projectile.isOnGround()) { projectile.removeMetadata(TRAIL_META, PGM.get()); } else { final Color color = (Color) projectile.getMetadata(TRAIL_META, PGM.get()).value(); // Certain particles can have a specific color if: // - Count is 0 // - Speed is 1 // - Delta vectors are RGB values from (0,1] match.getWorld().spawnParticle( Particle.REDSTONE, projectile.getLocation(), 0, rgbToParticle(color.getRed()), rgbToParticle(color.getGreen()), rgbToParticle(color.getBlue()), 1 ); } }); }
@EventHandler public void onAttack(EntityDamageByEntityEvent e) { if(!(e.getEntity() instanceof Player)) return; if(e.getDamager() instanceof Player || e.getDamager() instanceof Projectile) { if(mayPvP) { if(e.getDamager() instanceof Projectile) { handleShooting(e); } else { handleMelee(e); } } else { e.setCancelled(true); return; } } else { return; } }
private void fireGun(final Player shooter, final Class<? extends Projectile> projectile, final int count) { // 枪械射击 new MoonLakeRunnable() { private int currentCount = count; @Override public void run() { if(currentCount <= 0) { cancel(); return; } shooter.launchProjectile(projectile, shooter.getLocation().getDirection().normalize().multiply(3d)); shooter.playSound(shooter.getLocation(), Sound.ENTITY_IRONGOLEM_ATTACK, 0.5f, 2f); shooter.playSound(shooter.getLocation(), Sound.ENTITY_SKELETON_HURT, 0.5f, 2f); shooter.playSound(shooter.getLocation(), Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, 0.5f, 2f); currentCount--; } }.runTaskTimer(getMain(), 0L, 2L); }
@EventHandler(ignoreCancelled = true) public void onPvP(EntityDamageByEntityEvent evt) { if (Parties.isParty(evt.getDamager())) return; Player attacker = evt.getDamager() instanceof Player ? (Player) evt.getDamager() : (evt.getDamager() instanceof Projectile && ((Projectile) evt.getDamager()).getShooter() instanceof Player ? (Player) ((Projectile) evt.getDamager()).getShooter() : null); // Yuck, maybe we can make a method for this later. if (attacker == null || !(evt.getEntity() instanceof Player)) return; // One or both of the combatants isn't a player. boolean outgoingFail = !getToggle(attacker, Toggle.PVP); boolean incomingFail = !getToggle(evt.getEntity(), Toggle.PVP); if (outgoingFail || incomingFail) { attacker.sendMessage(ChatColor.RED + (outgoingFail ? "You have PvP disabled. (/togglepvp)" : evt.getEntity().getName() + " has PvP disabled.")); evt.setCancelled(true); evt.getEntity().setFireTicks(-1); // Disable fire damage. } }
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onProjectileLaunch(ProjectileLaunchEvent event) { Projectile projectile = event.getEntity(); if (projectile instanceof EnderPearl) { EnderPearl enderPearl = (EnderPearl) projectile; ProjectileSource source = enderPearl.getShooter(); if (source instanceof Player) { Player shooter = (Player) source; long remaining = getRemaining(shooter); if (remaining > 0L) { shooter.sendMessage(ChatColor.RED + "You are still on " + ChatColor.LIGHT_PURPLE + getName() + ChatColor.RED + " cooldown for another " + ChatColor.BOLD + DurationFormatter.getRemaining(remaining, true, false) + ChatColor.RED + '.'); event.setCancelled(true); return; } if (setCooldown(shooter, shooter.getUniqueId(), defaultCooldown, true)) { startDisplaying(shooter); } } } }
@Override public void notify(Player player, Object extra) { Location eye = player.getEyeLocation(); Vector direction = eye.getDirection().multiply(2); Block source = (Block) extra; Projectile projectile = player.getWorld().spawn(source.getRelative(BlockFace.UP).getLocation().setDirection(direction), LargeFireball.class); projectile.setShooter(player); projectile.setVelocity(direction); Inventory inv = player.getInventory(); if (inv.contains(Material.TNT)) { int slot = inv.first(Material.TNT); ItemStack ammo = inv.getItem(slot); int amount = ammo.getAmount(); if (amount > 1) { ammo.setAmount(amount - 1); inv.setItem(slot, ammo); } else { inv.setItem(slot, null); } projectile.setCustomName("recreator.structure.turret.tnt"); } AzureAPI.playSound(player, Sound.ITEM_FIRECHARGE_USE, true); }
@EventHandler public void onHit(ProjectileHitEvent evt) { Projectile projectile = evt.getEntity(); String customId = projectile.getCustomName(); if (customId == null || !customId.equals("recreator.structure.turret.tnt")) return; Location loc; Block block = evt.getHitBlock(); if (block != null) { loc = block.getLocation(); block.getWorld().createExplosion(loc.getX(), loc.getY(), loc.getZ(), 1.8F, true, true); return; } Entity entity = evt.getEntity(); if (entity != null) { loc = entity.getLocation(); entity.getWorld().createExplosion(loc.getX(), loc.getY(), loc.getZ(), 1.8F, true, true); } }
@EventHandler public void onHit(ProjectileHitEvent evt) { Projectile projectile = evt.getEntity(); String customId = projectile.getCustomName(); if (customId == null || !customId.equals("recreator.item.fatman")) return; Location loc; Block block = evt.getHitBlock(); if (block != null) { loc = block.getLocation(); block.getWorld().createExplosion(loc.getX(), loc.getY(), loc.getZ(), 50F, true, true); return; } Entity entity = evt.getEntity(); if (entity != null) { loc = entity.getLocation(); entity.getWorld().createExplosion(loc.getX(), loc.getY(), loc.getZ(), 50F, true, true); } }
@EventHandler public void event(EntityDamageByEntityEvent e) { if (e.getEntity() instanceof Player) { OMGPlayer damaged = get((Player) e.getEntity()); if (g.state != GameState.INGAME || damaged.team == g.spectatorTeam || damaged.invulnerable || (Area.registeredAreas.values().stream().anyMatch(a -> a.isInside(e.getEntity().getLocation().getBlock().getLocation()) && (!a.cancelDamage.containsKey(damaged.team) || a.cancelDamage.get(damaged.team).contains(OMGDamageCause.getByBukkit(e.getCause())))))) { e.setCancelled(true); return; } if (e.getDamager() instanceof Projectile) damaged.lastProjectileShotBy = (Projectile) e.getDamager(); if (e.getDamager() instanceof Player || (e.getDamager() instanceof Projectile && ((Projectile) e.getDamager()).getShooter() instanceof Player)) { OMGPlayer damager = e.getDamager() instanceof Player ? get((Player) e.getDamager()) : get((Player) ((Projectile) e.getDamager()).getShooter()); if (damaged.team == damager.team && !damaged.team.allowFriendlyFire) { e.setCancelled(true); e.setDamage(0); return; } damaged.lastDamager = damager; } new OMGDamageEvent(e, get((Player) e.getEntity()), e.getDamager(), OMGDamageCause.getByBukkit(e.getCause()), (float) e.getDamage()); } }
@EventHandler public void onHorseDamage(final EntityDamageEvent event) { if (Sddls.isHorse(event.getEntity())) { final ItemStack saddle = Sddls.getSaddle(event.getEntity()); if (saddle!=null && Sddls.isSigned(saddle)) { Entity damager = null; if (event instanceof EntityDamageByEntityEvent) { damager = ((EntityDamageByEntityEvent) event).getDamager(); if (damager instanceof Projectile) if (((Projectile)damager).getShooter() instanceof Player) damager = (Player) ((Projectile) damager).getShooter(); if (!(damager instanceof Player)) damager = null; } if (damager!=null) { if (!Sddls.hasAccess(saddle, damager)) event.setCancelled(true); } else { if (event.getEntity().getPassenger()==null) event.setCancelled(true); } } } }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onEntityDamage(EntityDamageByEntityEvent event) { if (!(event.getEntity() instanceof Player)) return; Player player = (Player) event.getEntity(); double finalHealth = player.getHealth() - event.getFinalDamage(); if (finalHealth > 0.01) return; event.setCancelled(true); player.setMaxHealth(20); player.setHealth(player.getMaxHealth()); event.setDamage(1); player.setLastDamageCause(event); if (event.getDamager() instanceof Player) { killPlayer(player, (Player)event.getDamager(), event.getCause()); } else if (event.getDamager() instanceof Projectile && ((Projectile) event.getDamager()).getShooter() instanceof Player) { killPlayer(player, (Player)((Projectile) event.getDamager()).getShooter(), event.getCause()); } else { killPlayer(player, null, event.getCause()); } }
@EventHandler (ignoreCancelled = true) public void on(EntityDamageByEntityEvent event) { if (event.getDamager() instanceof Player) { Player damager = (Player) event.getDamager(); if (!isSpectating(damager)) { return; } Helper.pm(damager, "Errors.cannot-use-while-spectating", true); event.setCancelled(true); } else if (event.getDamager() instanceof Projectile && event.getEntity() instanceof Player) { Player player = (Player) event.getEntity(); if (!isSpectating(player)) { return; } event.setCancelled(true); } }
private static Object getAttacker(final Event e) { if (e instanceof EntityDamageByEntityEvent) { if (((EntityDamageByEntityEvent) e).getDamager() instanceof Projectile) { return ((Projectile) ((EntityDamageByEntityEvent) e).getDamager()).getShooter(); } return ((EntityDamageByEntityEvent) e).getDamager(); } else if (e instanceof EntityDamageByBlockEvent) { return ((EntityDamageByBlockEvent) e).getDamager(); } else if (e instanceof EntityDeathEvent) { return getAttacker(((EntityDeathEvent) e).getEntity().getLastDamageCause()); } else if (e instanceof VehicleDamageEvent) { return ((VehicleDamageEvent) e).getAttacker(); } else if (e instanceof VehicleDestroyEvent) { return ((VehicleDestroyEvent) e).getAttacker(); } return null; }
@Nullable public final static Object getShooter(final @Nullable Projectile p) { if (p == null) return null; try { return getShooter.invoke(p); } catch (final IllegalAccessException e) { assert false; return null; } catch (final IllegalArgumentException e) { assert false; return null; } catch (final InvocationTargetException e) { Skript.exception(e); return null; } }
@Nullable private static Entity getAttacker(final @Nullable Event e) { if (e == null) return null; if (e instanceof EntityDamageByEntityEvent) { if (((EntityDamageByEntityEvent) e).getDamager() instanceof Projectile) { final Object o = ProjectileUtils.getShooter((Projectile) ((EntityDamageByEntityEvent) e).getDamager()); if (o instanceof Entity) return (Entity) o; return null; } return ((EntityDamageByEntityEvent) e).getDamager(); // } else if (e instanceof EntityDamageByBlockEvent) { // return ((EntityDamageByBlockEvent) e).getDamager(); } else if (e instanceof EntityDeathEvent) { return getAttacker(((EntityDeathEvent) e).getEntity().getLastDamageCause()); } else if (e instanceof VehicleDamageEvent) { return ((VehicleDamageEvent) e).getAttacker(); } else if (e instanceof VehicleDestroyEvent) { return ((VehicleDestroyEvent) e).getAttacker(); } return null; }
@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; } }
@EventHandler(priority = EventPriority.LOW) public void onProjectileHit(ProjectileHitEvent event) { if(event.getEntityType() != EntityType.ARROW && event.getEntityType() != EntityType.SNOWBALL) return; Projectile arrow = event.getEntity(); ProjectileSource source = arrow.getShooter(); if(source == null || !(source instanceof Player)) return; Player player = (Player)source; if(player.getGameMode() == GameMode.CREATIVE) return; Flag flag = this.GetFlagInstanceAtLocation(arrow.getLocation(), player); if(flag == null) return; PlayerInventory inventory = player.getInventory(); ItemMeta meta = inventory.getItemInMainHand().getItemMeta(); if(meta != null && meta.hasEnchant(Enchantment.ARROW_INFINITE)) return; arrow.remove(); inventory.addItem(new ItemStack(Material.ARROW)); }
@EventHandler void antiPvP(EntityDamageByEntityEvent e) { if (e.getDamager() instanceof Player && e.getEntity() instanceof Player) { if ((isLutando((Player)e.getDamager()) || isLutando((Player)e.getEntity())) || (isLutando((Player)e.getDamager()) && isLutando((Player)e.getEntity()))) { return; } if (isParticipando((Player)e.getEntity()) || isParticipando((Player)e.getDamager())){ e.setCancelled(true); } } else if (e.getDamager() instanceof Projectile && ((Projectile)e.getDamager()).getShooter() instanceof Player && e.getEntity() instanceof Player){ Projectile pj = (Projectile)e.getDamager(); if (isParticipando((Player)pj.getShooter()) || isParticipando((Player)e.getEntity())){ e.setCancelled(true); } } }
/** * Gets the damager or indirect damager from any projectile. * @return The damager player */ public Player getPlayerDamager() { Player damager = null; if (event.getCombuster() instanceof Player) { damager = (Player) event.getCombuster(); } else if (event.getCombuster() instanceof Wolf) { Wolf wolf = (Wolf) event.getCombuster(); if (wolf.getOwner() instanceof Player) { damager = (Player) wolf.getOwner(); } } else if (event.getCombuster() instanceof Projectile) { Projectile projectile = (Projectile) event.getCombuster(); if (projectile.getShooter() instanceof Player) { damager = (Player) projectile.getShooter(); } } return damager; }
/** * Gets the damager or indirect damager from any projectile. * @return The damager player */ public Player getPlayerDamager() { Player damager = null; if (event.getDamager() instanceof Player) { damager = (Player) event.getDamager(); } else if (event.getDamager() instanceof Wolf) { Wolf wolf = (Wolf) event.getDamager(); if (wolf.getOwner() instanceof Player) { damager = (Player) wolf.getOwner(); } } else if (event.getDamager() instanceof Projectile) { Projectile projectile = (Projectile) event.getDamager(); if (projectile.getShooter() instanceof Player) { damager = (Player) projectile.getShooter(); } } return damager; }
@EventHandler(priority = EventPriority.NORMAL) public void onProjectileHit(ProjectileHitEvent event) { Projectile projectile = event.getEntity(); World world = projectile.getWorld(); PluginConfig worldConfig = plugin.getConfig(world); if (plugin.isActive(world) && plugin.isFeatureEnabled(world, Feature.FIRE_ARROWS) && worldConfig.getBoolean(Config.FEATURE_FIRE_ARROWS_IGNITE_TARGET)) { LivingEntity shooter = (LivingEntity) projectile.getShooter(); if (shooter.getType() == EntityType.SKELETON) { //Not sure why this is here, or why fire arrows even work with it here return; } if (((CraftEntity) shooter).getHandle() instanceof EntitySkeleton && projectile.getFireTicks() > 0) { //if (shooter != null && ((CraftEntity)shooter).getHandle() instanceof EntitySkeleton && projectile.getFireTicks() > 0){ Block block = projectile.getWorld().getBlockAt(projectile.getLocation()); if (block.getType() == Material.AIR) { block.setType(Material.FIRE); } } } }
@SuppressWarnings("unchecked") @EventHandler public void onPlayerDeath(PlayerDeathEvent e) { for (Minigame mg : Minigame.getMinigameInstances()) { if (mg.getConfigManager().isOverrideDeathEvent() && mg.isPlayer(e.getEntity().getName())) { e.setDeathMessage(null); e.setKeepLevel(true); e.getDrops().clear(); try { NmsUtil.sendRespawnPacket(e.getEntity()); } catch (Exception ex) { ex.printStackTrace(); } EntityDamageEvent ed = e.getEntity().getLastDamageCause(); MGUtil.callEvent(new MGPlayerDeathEvent(mg.getMGPlayer(e.getEntity().getName()), ed.getCause(), ed instanceof EntityDamageByEntityEvent ? ((EntityDamageByEntityEvent)ed).getDamager() instanceof Projectile ? (Entity)((Projectile)((EntityDamageByEntityEvent)ed).getDamager()) .getShooter() : ((EntityDamageByEntityEvent)ed).getDamager() : null)); } } }
/** * Gets the {@link LivingEntity} from a {@link EntityDamageByEntityEvent}. If the {@link * EntityDamageByEntityEvent#getDamager()} is a LivingEntity, then that instance is returned. * Otherwise, if the damager is a projectile and it's shooter is a LivingEntity, that * LivingEntity * shooter instance is returned. * * @param event event to get LivingEntity from * * @return instance of {@link LivingEntity}, nullable */ public static LivingEntity getLivingEntityDamager(@Nonnull EntityDamageByEntityEvent event) { checkNotNull(event, "event cannot be null."); // This is the living entity if (event.getDamager() instanceof LivingEntity) { return ((LivingEntity) event.getDamager()); } // Check for projectile's shooter if (event.getDamager() instanceof Projectile) { ProjectileSource shooter = ((Projectile) event.getDamager()).getShooter(); if (shooter != null && shooter instanceof LivingEntity) { return ((LivingEntity) shooter); } } return null; }
@EventHandler public void onEntityDamage(EntityDamageByEntityEvent event) { if ((!killAnimalsEnabled && !killMonstersEnabled) || !plugin.isSkyAssociatedWorld(event.getDamager().getWorld())) { return; } if (!(event.getEntity() instanceof Creature)) { return; } if (event.getDamager() instanceof Player && !plugin.playerIsOnIsland((Player)event.getDamager())) { if (hasPermission(event.getDamager(), "usb.mod.bypassprotection")) { return; } cancelMobDamage(event); } else if (event.getDamager() instanceof Projectile) { ProjectileSource shooter = ((Projectile) event.getDamager()).getShooter(); if (!(shooter instanceof Player)) { return; } Player player = (Player) shooter; if (hasPermission(player, "usb.mod.bypassprotection") || plugin.playerIsOnIsland(player)) { return; } cancelMobDamage(event); } }
@EventHandler private void onEntityDamage(EntityDamageByEntityEvent event) { Entity damager = event.getDamager(); Entity damagee = event.getEntity(); if (damager instanceof Player && damagee instanceof Player) { Bukkit.getPluginManager().callEvent(new PlayerDamagePlayerEvent((Player) damager, (Player) damagee, event.getDamage())); } else if (damager instanceof Player && damagee instanceof LivingEntity) { Bukkit.getPluginManager().callEvent(new PlayerDamageEntityEvent((Player) damager, (LivingEntity) damagee, event.getDamage())); } else if (damagee instanceof Player) { if (damager instanceof LivingEntity) { Bukkit.getPluginManager().callEvent(new EntityDamagePlayerEvent((LivingEntity) damager, (Player) damagee, event.getDamage())); } else if (damager instanceof Projectile) { Bukkit.getPluginManager().callEvent(new EntityDamagePlayerEvent((LivingEntity) ((Projectile) damager).getShooter(), (Player) damagee, event.getDamage())); } } }
/** * Tag creepers hurt by players. * * Only those creepers hurt recently by players will have special drops. */ @EventHandler(ignoreCancelled = true) public void onCreeperDamage(EntityDamageByEntityEvent event) { if (!CONFIG.isAffectedWorld(event)) { return; } if (event.getEntityType() == EntityType.CREEPER) { boolean isPlayerAttack = false; if (event.getDamager() instanceof Player) { isPlayerAttack = true; } else if (event.getDamager() instanceof Projectile) { Projectile projectile = (Projectile) event.getDamager(); if (projectile.getShooter() instanceof Player) { isPlayerAttack = true; } } // Tag creepers hurt by players with the damage time stamp. if (isPlayerAttack) { Entity creeper = event.getEntity(); creeper.setMetadata(PLAYER_DAMAGE_TIME_KEY, new FixedMetadataValue(this, new Long(creeper.getWorld().getFullTime()))); } } }
@EventHandler public void onEntityDamageEvent(EntityDamageByEntityEvent event) { if(event.getDamager() instanceof Player == false && event.getDamager() instanceof Projectile == false) return; if(event.getEntity() instanceof Player == false) return; Client damaged = Client.getClient((Player) event.getEntity()); Player attackerPlayer = null; if(event.getDamager() instanceof Projectile) { Projectile proj = (Projectile) event.getDamager(); if(proj.getShooter() instanceof Player == false) return; attackerPlayer = (Player) proj.getShooter(); } else { attackerPlayer = (Player) event.getDamager(); Client attacker = Client.getClient(attackerPlayer); if(attacker.getTeam() == damaged.getTeam() || attacker.getTeam().isObserver() || damaged.getTeam().isObserver()) event.setCancelled(true); } }
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onItemFrameDamage(final EntityDamageByEntityEvent e) { // Check world if (!inWorld(e.getEntity()) || !(e.getEntity() instanceof ItemFrame)) { return; } if (e.getDamager() instanceof Projectile) { if (DEBUG) plugin.getLogger().info("DEBUG: Projectile damage to itemframe"); // Find out who fired the arrow Projectile p = (Projectile) e.getDamager(); if (DEBUG) plugin.getLogger().info("DEBUG: Shooter is " + p.getShooter().toString()); if (p.getShooter() instanceof Skeleton || p.getShooter() instanceof Golem) { if (DEBUG) plugin.getLogger().info("DEBUG: Shooter is mob"); if (!Settings.allowMobDamageToItemFrames) { if (DEBUG) plugin.getLogger().info("DEBUG: Damage not allowed, cancelling"); e.setCancelled(true); } } } }
@EventHandler public void onEntityDamage(EntityDamageByEntityEvent event) { Player damager = null; if(event.getDamager() instanceof Player) { damager = (Player) event.getDamager(); } else if(event.getDamager() instanceof Projectile) { Projectile pro = (Projectile) event.getDamager(); if(pro.getShooter() instanceof Player) { damager = (Player) pro.getShooter(); } } if(damager != null) { if(um.isSpectator(damager.getName())) event.setCancelled(true); } }
public void shoot(final Player p) { // First create a vector Vector v = new Vector(getVelocity(), getVelocity(), getVelocity()); Vector pVec = p.getLocation().getDirection(); Vector finalVec = new Vector(v.getX() * pVec.getX(), v.getY() * pVec.getY(), v.getZ() * pVec.getZ()); Location eye = p.getEyeLocation(); Location oneUp = eye.add(0.0D, 1.0D, 0.0D); Location loc = oneUp.toVector().add(p.getLocation().getDirection().multiply(2)) .toLocation(p.getWorld(), p.getLocation().getYaw(), p.getLocation().getPitch()); // then launch the projectile Projectile proj = (Projectile) p.getWorld().spawnEntity(loc, EntityType.FIREBALL); // launchProjectile(this.projectileClass, finalVec); // finally, set the shooter proj.setVelocity(finalVec); /*if (!(proj instanceof Egg) || !(proj instanceof Snowball)) { proj.setShooter((ProjectileSource) p); }*/ proj.setShooter(p); // play sounds p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_SHOOT, 2.0F, 1.0F); }
@EventHandler(priority = EventPriority.MONITOR) public void onPlayerHit(EntityDamageByEntityEvent event){ if(event.isCancelled()) return; //System.out.println("Entity hit"); if(event.getDamager() instanceof Player && event.getEntity() instanceof Player && event.getDamager() != event.getEntity()){ //System.out.println("Player hit!"); //it's pvp triggerCheck((Player) event.getDamager(), (Player) event.getEntity(), event, event.getDamage()); } else if(event.getDamager() instanceof Projectile && event.getEntity() instanceof Player){ Projectile p = (Projectile) event.getDamager(); if(p.getShooter() instanceof Player && event.getEntity() instanceof Player && p.getShooter() != event.getEntity()){ triggerCheck((Player) p.getShooter(), (Player) event.getEntity(), event, event.getDamage()); } } }
public void fireOnTarget(){ lastFired = System.currentTimeMillis(); Vector target = toTarget(); Vector target2 = target.clone().multiply(5); //System.out.println("addition: " + target2); //System.out.println("SOUND"); //myGhast.getWorld().playSound(myGhast.getLocation(), Sound.GHAST_DEATH, 2.0f, (float) (Math.random() * 3.0f)); Location fireLoc = myGhast.getLocation().clone().add(target2); //System.out.println("fireloc: " + fireLoc); //Fireball f = (Fireball) myGhast.getWorld().spawnEntity(fireLoc, EntityType.FIREBALL); //f.setDirection(target); Projectile proj = myGhast.getWorld().spawn(fireLoc, Fireball.class); // launchProjectile(this.projectileClass, finalVec); // finally, set the shooter proj.setVelocity(target); Fireball f = (Fireball) proj; if(myGhast.getWorld().getName().startsWith("Trinitos_")){ f.setIsIncendiary(false); f.setYield(2.0F); } else { f.setIsIncendiary(true); f.setYield(1.5F); } }