Java 类org.bukkit.entity.Projectile 实例源码

项目:MagicAPI    文件:MagicMobDeathEvent.java   
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());
        }
    }
}
项目:Warzone    文件:ProjectileDamageResolver.java   
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;
}
项目:Warzone    文件:DispensedProjectileDamageResolver.java   
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;
}
项目:bskyblock    文件:IslandGuard1_9.java   
@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());
    }
}
项目:bskyblock    文件:IslandGuard.java   
@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);
            }
        }
    }
}
项目:AddGun    文件:StandardGun.java   
/**
 * 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;
}
项目:ProjectAres    文件:ProjectileTrailMatchModule.java   
@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
                 );
             }
         });
}
项目:KingdomFactions    文件:PvPManager.java   
@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;
    }
}
项目:scp    文件:PlayerInteractListener.java   
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);
}
项目:Kineticraft    文件:Toggles.java   
@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.
    }
}
项目:HCFCore    文件:EnderPearlTimer.java   
@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);
            }
        }
    }
}
项目:HCFCore    文件:EnderPearlTimer.java   
@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);
            }
        }
    }
}
项目:Recreator    文件:StructureTurret.java   
@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);
}
项目:Recreator    文件:StructureTurret.java   
@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);
    }
}
项目:Recreator    文件:ItemFatMan.java   
@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);
    }
}
项目:OMGPI    文件:BukkitEventHandler.java   
@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());
    }
}
项目:Sddls    文件:HorseListener.java   
@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);
            }
        }
    }
}
项目:GamePlate    文件:RespawnModule.java   
@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());
    }
}
项目:Duels    文件:SpectatorManager.java   
@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);
    }
}
项目:Skript    文件:ExprAttackerAlt.java   
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;
}
项目:Skript    文件:ProjectileUtils.java   
@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;
    }
}
项目:Skript    文件:ExprAttacker.java   
@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;
    }
项目: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;
    }
}
项目:GriefPreventionFlags    文件:FlagDef_InfiniteArrows.java   
@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));
}
项目:OldBukkit    文件:PlayerListener.java   
@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);
        }
    }
}
项目:ExilePearl    文件:EntityCombustEventWrapper.java   
/**
 * 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;
}
项目:ExilePearl    文件:EntityDamageEventWrapper.java   
/**
 * 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;
}
项目:BloodMoon    文件:FireArrowsListener.java   
@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);
            }
        }
    }
}
项目:MyiuLib    文件:MGListener.java   
@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));
        }
    }
}
项目:SupaCommons    文件:EventUtils.java   
/**
 * 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;
}
项目:uSkyBlock    文件:GriefEvents.java   
@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);
    }
}
项目:GameDispenser    文件:Events.java   
@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()));
        }
    }
}
项目:Creepocalypse    文件:Creepocalypse.java   
/**
 * 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())));
        }
    }
}
项目:Rixor    文件:PlayerEvents.java   
@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);
    }
}
项目:acidisland    文件:IslandGuard.java   
@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);
            }
        }
    }
}
项目:UltimateSurvivalGames    文件:SpectatorListener.java   
@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);
    }
}
项目:MGLib    文件:MGListener.java   
@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));
        }
    }
}
项目:StarQuestCode    文件:FireballTurret.java   
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);
    }
项目:StarQuestCode    文件:PlayerTriggerHandler.java   
@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());
        }
    }
}
项目:StarQuestCode    文件:DroneFighter.java   
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);
    }
}