Search in sources :

Example 86 with Player

use of org.bukkit.entity.Player in project Denizen-For-Bukkit by DenizenScript.

the class AssignmentTrait method onHit.

// <--[action]
// @Actions
// hit
// hit on <entity>
//
// @Triggers when the NPC hits an enemy.
//
// @Context
// None
//
// -->
// <--[action]
// @Actions
// kill
// kill of <entity>
//
// @Triggers when the NPC kills an enemy.
//
// @Context
// None
//
// -->
// Listen for this NPC's hits on entities
@EventHandler(priority = EventPriority.MONITOR)
public void onHit(EntityDamageByEntityEvent event) {
    // Check if the damager is this NPC
    if (event.getDamager() != npc.getEntity()) {
        // projectile shot by this NPC, in which case we want to continue
        if (event.getDamager() instanceof Projectile) {
            if (((Projectile) event.getDamager()).getShooter() != npc.getEntity()) {
                return;
            }
        } else {
            return;
        }
    }
    dPlayer player = null;
    // Check if the entity hit by this NPC is a player
    if (event.getEntity() instanceof Player) {
        player = dPlayer.mirrorBukkitPlayer((Player) event.getEntity());
    }
    // TODO: Context containing the entity hit
    DenizenAPI.getDenizenNPC(npc).action("hit", player);
    DenizenAPI.getDenizenNPC(npc).action("hit on " + event.getEntityType().name(), player);
    if (event.getEntity() instanceof LivingEntity) {
        if (((LivingEntity) event.getEntity()).getHealth() - event.getFinalDamage() <= 0) {
            DenizenAPI.getDenizenNPC(npc).action("kill", player);
            DenizenAPI.getDenizenNPC(npc).action("kill of " + event.getEntityType().name(), player);
        }
    }
// All done!
}
Also used : LivingEntity(org.bukkit.entity.LivingEntity) net.aufdemrand.denizen.objects.dPlayer(net.aufdemrand.denizen.objects.dPlayer) Player(org.bukkit.entity.Player) net.aufdemrand.denizen.objects.dPlayer(net.aufdemrand.denizen.objects.dPlayer) Projectile(org.bukkit.entity.Projectile) EventHandler(org.bukkit.event.EventHandler)

Example 87 with Player

use of org.bukkit.entity.Player in project Denizen-For-Bukkit by DenizenScript.

the class FishingTrait method cast.

// <--[action]
// @Actions
// cast fishing rod
//
// @Triggers when the NPC casts a fishing rod.
//
// @Context
// None
//
// -->
private void cast() {
    DenizenAPI.getDenizenNPC(npc).action("cast fishing rod", null);
    if (fishingLocation == null) {
        dB.echoError("Fishing location not found!");
        return;
    }
    double v = 34;
    double g = 20;
    Location from = npc.getEntity().getLocation();
    from = from.add(0, .33, 0);
    Location to = fishingLocation;
    Vector test = to.clone().subtract(from).toVector();
    Double elev = test.getY();
    Double testAngle = launchAngle(from, to, v, elev, g);
    if (testAngle == null) {
        return;
    }
    Double hangtime = hangtime(testAngle, v, elev, g);
    Vector victor = to.clone().subtract(from).toVector();
    Double dist = Math.sqrt(Math.pow(victor.getX(), 2) + Math.pow(victor.getZ(), 2));
    elev = victor.getY();
    if (dist == 0) {
        return;
    }
    Double launchAngle = launchAngle(from, to, v, elev, g);
    if (launchAngle == null) {
        return;
    }
    victor.setY(Math.tan(launchAngle) * dist);
    victor = normalizeVector(victor);
    v = v + (.5 * Math.pow(hangtime, 2));
    //Random rand = new Random(1234);
    v = v + (CoreUtilities.getRandom().nextDouble() - .8) / 2;
    victor = victor.multiply(v / 20.0);
    fishHook = NMSHandler.getInstance().getFishingHelper().spawnHook(from, (Player) npc.getEntity());
    fishHook.setShooter((ProjectileSource) npc.getEntity());
    fishHook.setVelocity(victor);
    PlayerAnimation.ARM_SWING.play((Player) npc.getEntity());
}
Also used : Player(org.bukkit.entity.Player) Vector(org.bukkit.util.Vector) Location(org.bukkit.Location)

Example 88 with Player

use of org.bukkit.entity.Player in project Denizen-For-Bukkit by DenizenScript.

the class HealthTrait method onDamage.

// <--[action]
// @Actions
// death
// death by entity
// death by <entity>
// death by block
// death by <cause>
//
// @Triggers when the NPC dies. (Requires Health Trait)
//
// @Context
// <context.killer> returns the entity that killed the NPC (if any)
// <context.shooter> returns the shooter of the killing projectile (if any)
//
// -->
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onDamage(EntityDamageEvent event) {
    // Check if the event pertains to this NPC
    if (event.getEntity() != npc.getEntity() || dying) {
        return;
    }
    // Make sure this is a killing blow
    if (this.getHealth() - event.getFinalDamage() > 0) {
        return;
    }
    dying = true;
    player = null;
    // Save entityId for EntityDeath event
    entityId = npc.getEntity().getEntityId();
    String deathCause = CoreUtilities.toLowerCase(event.getCause().toString()).replace('_', ' ');
    Map<String, dObject> context = new HashMap<String, dObject>();
    context.put("damage", new Element(event.getDamage()));
    context.put("death_cause", new Element(deathCause));
    // Check if the entity has been killed by another entity
    if (event instanceof EntityDamageByEntityEvent) {
        Entity killerEntity = ((EntityDamageByEntityEvent) event).getDamager();
        context.put("killer", new dEntity(killerEntity));
        // that player to the action's ScriptEntry
        if (killerEntity instanceof Player) {
            player = dPlayer.mirrorBukkitPlayer((Player) killerEntity);
        } else // account as well
        if (killerEntity instanceof Projectile) {
            ProjectileSource shooter = ((Projectile) killerEntity).getShooter();
            if (shooter != null && shooter instanceof LivingEntity) {
                context.put("shooter", new dEntity((LivingEntity) shooter));
                if (shooter instanceof Player) {
                    player = dPlayer.mirrorBukkitPlayer((Player) shooter);
                }
                DenizenAPI.getDenizenNPC(npc).action("death by " + ((LivingEntity) shooter).getType().toString(), player, context);
            }
        // TODO: Handle other shooter source thingy types
        }
        DenizenAPI.getDenizenNPC(npc).action("death by entity", player, context);
        DenizenAPI.getDenizenNPC(npc).action("death by " + killerEntity.getType().toString(), player, context);
    } else // If not, check if the entity has been killed by a block
    if (event instanceof EntityDamageByBlockEvent) {
        DenizenAPI.getDenizenNPC(npc).action("death by block", player, context);
    // TODO:
    // The line of code below should work, but a Bukkit bug makes the damager
    // return null. Uncomment it once the bug is fixed.
    // DenizenAPI.getDenizenNPC(npc).action("death by " +
    // ((EntityDamageByBlockEvent) event).getDamager().getType().name(), null);
    }
    DenizenAPI.getDenizenNPC(npc).action("death", player, context);
    DenizenAPI.getDenizenNPC(npc).action("death by " + deathCause, player, context);
    // NPC's entity still exists before proceeding
    if (npc.getEntity() == null) {
        return;
    }
    loc = dLocation.valueOf(// TODO: debug option?
    TagManager.tag(// TODO: debug option?
    respawnLocation, new BukkitTagContext(null, DenizenAPI.getDenizenNPC(npc), false, null, true, null)));
    if (loc == null) {
        loc = npc.getEntity().getLocation();
    }
    if (animatedeath) {
        // Cancel navigation to keep the NPC from damaging players
        // while the death animation is being carried out.
        npc.getNavigator().cancelNavigation();
    // Reset health now to avoid the death from happening instantly
    //setHealth();
    // Play animation (TODO)
    // playDeathAnimation(npc.getEntity());
    }
    die();
    if (respawn && (Duration.valueOf(respawnDelay).getTicks() > 0)) {
        Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(DenizenAPI.getCurrentInstance(), new Runnable() {

            public void run() {
                if (CitizensAPI.getNPCRegistry().getById(npc.getId()) == null || npc.isSpawned()) {
                    return;
                } else {
                    npc.spawn(loc);
                }
            }
        }, (Duration.valueOf(respawnDelay).getTicks()));
    }
}
Also used : net.aufdemrand.denizen.objects.dEntity(net.aufdemrand.denizen.objects.dEntity) Entity(org.bukkit.entity.Entity) LivingEntity(org.bukkit.entity.LivingEntity) Player(org.bukkit.entity.Player) net.aufdemrand.denizen.objects.dPlayer(net.aufdemrand.denizen.objects.dPlayer) HashMap(java.util.HashMap) EntityDamageByBlockEvent(org.bukkit.event.entity.EntityDamageByBlockEvent) Element(net.aufdemrand.denizencore.objects.Element) Projectile(org.bukkit.entity.Projectile) LivingEntity(org.bukkit.entity.LivingEntity) EntityDamageByEntityEvent(org.bukkit.event.entity.EntityDamageByEntityEvent) BukkitTagContext(net.aufdemrand.denizen.tags.BukkitTagContext) net.aufdemrand.denizen.objects.dEntity(net.aufdemrand.denizen.objects.dEntity) net.aufdemrand.denizencore.objects.dObject(net.aufdemrand.denizencore.objects.dObject) ProjectileSource(org.bukkit.projectiles.ProjectileSource) EventHandler(org.bukkit.event.EventHandler)

Example 89 with Player

use of org.bukkit.entity.Player in project Denizen-For-Bukkit by DenizenScript.

the class KillListenerInstance method listen.

@EventHandler
public void listen(EntityDeathEvent event) {
    // Only continue if the event is an event for the player that owns this listener.
    if (event.getEntity().getKiller() != player.getPlayerEntity()) {
        return;
    }
    // If REGION argument specified, check. If not in region, don't count kill!
    if (region != null) {
    //if (!WorldGuardUtilities.inRegion(player.getLocation(), region)) return;
    }
    // Same with the CUBOID argument...
    if (cuboid != null) {
        if (!cuboid.isInsideCuboid(player.getLocation())) {
            return;
        }
    }
    //
    if (type == KillType.ENTITY) {
        // Get entity killed
        dEntity ent = new dEntity(event.getEntity());
        boolean count_it = false;
        // Check targets, if any match entity killed, count_it!
        for (String target : targets) {
            if (dEntity.valueOf(target) != null) {
                if (ent.comparesTo(dEntity.valueOf(target)) == 1) {
                    count_it = true;
                }
            }
        }
        boolean right_name = false;
        for (String name : names) {
            if (ChatColor.stripColor(ent.getName()).contains(name)) {
                right_name = true;
            }
        }
        // kills_so_far
        if (count_it || targets.contains("*")) {
            if (right_name || names.contains("*")) {
                kills_so_far++;
                dB.log(player.getName() + " killed a " + ent.identify() + ". Current progress '" + kills_so_far + "/" + required + "'.");
                // Check the number of kills so far
                check();
            }
        }
    } else //
    if (type == KillType.NPC) {
        // If a NPC wasn't killed, return.
        if (!CitizensAPI.getNPCRegistry().isNPC(event.getEntity())) {
            return;
        }
        // Get the NPC killed
        dNPC npc = dNPC.mirrorCitizensNPC(CitizensAPI.getNPCRegistry().getNPC(event.getEntity()));
        boolean count_it = false;
        // Check targets, if any match entity killed, count_it!
        for (String target : targets) {
            // Check against a physical NPC object (n@7, n@18, etc.)
            if (dNPC.valueOf(target) != null) {
                if (dNPC.valueOf(target).getId() == npc.getId()) {
                    count_it = true;
                }
            }
            if (CoreUtilities.toLowerCase(npc.getName()).equals(CoreUtilities.toLowerCase(target).replace("n@", ""))) {
                count_it = true;
            }
        }
        // the kills so far.
        if (count_it || targets.contains("*")) {
            kills_so_far++;
            dB.log(player.getName() + " killed " + npc.toString() + ". Current progress '" + kills_so_far + "/" + required + "'.");
            // Check the number of kills so far
            check();
        }
    } else //
    if (type == KillType.PLAYER) {
        // Check to make sure entity is a Player, and not a NPC
        if (event.getEntityType() != EntityType.PLAYER) {
            return;
        }
        if (Depends.citizens != null && CitizensAPI.getNPCRegistry().isNPC(event.getEntity())) {
            return;
        }
        // Get player killed
        dPlayer player = dPlayer.mirrorBukkitPlayer((Player) event.getEntity());
        boolean count_it = false;
        // Check targets, if any match entity killed, count_it!
        for (String target : targets) {
            if (dPlayer.valueOf(target) != null) {
                if (dPlayer.valueOf(target).getName().equalsIgnoreCase(player.getName())) {
                    count_it = true;
                }
            }
        }
        // kills_so_far
        if (count_it || targets.contains("*")) {
            kills_so_far++;
            dB.log(player.getName() + " killed " + player.getName() + ". Current progress '" + kills_so_far + "/" + required + "'.");
            // Check the number of kills so far
            check();
        }
    } else //
    if (type == KillType.GROUP) {
        // Require the entity to be a Player
        if (event.getEntityType() == EntityType.PLAYER) // Iterate through groups on the Player
        {
            for (String group : Depends.permissions.getPlayerGroups((Player) event.getEntity())) // If a group matches, count it!
            {
                if (targets.contains(group.toUpperCase())) {
                    kills_so_far++;
                    dB.log(player.getName() + " killed " + ((Player) event.getEntity()).getName().toUpperCase() + " of group " + group + ".");
                    check();
                    break;
                }
            }
        }
    }
}
Also used : net.aufdemrand.denizen.objects.dPlayer(net.aufdemrand.denizen.objects.dPlayer) Player(org.bukkit.entity.Player) net.aufdemrand.denizen.objects.dNPC(net.aufdemrand.denizen.objects.dNPC) net.aufdemrand.denizen.objects.dEntity(net.aufdemrand.denizen.objects.dEntity) net.aufdemrand.denizen.objects.dPlayer(net.aufdemrand.denizen.objects.dPlayer) EventHandler(org.bukkit.event.EventHandler)

Example 90 with Player

use of org.bukkit.entity.Player in project Denizen-For-Bukkit by DenizenScript.

the class PlayerItemTakesDamageScriptEvent method onPlayerItemTakesDamage.

@EventHandler
public void onPlayerItemTakesDamage(PlayerItemDamageEvent event) {
    if (dEntity.isNPC(event.getPlayer())) {
        return;
    }
    item = new dItem(event.getItem());
    damage = new Element(event.getDamage());
    location = new dLocation(event.getPlayer().getLocation());
    cancelled = event.isCancelled();
    this.event = event;
    fire();
    event.setCancelled(cancelled);
    event.setDamage(damage.asInt());
    final Player p = event.getPlayer();
    if (cancelled) {
        Bukkit.getScheduler().scheduleSyncDelayedTask(DenizenAPI.getCurrentInstance(), new Runnable() {

            @Override
            public void run() {
                p.updateInventory();
            }
        }, 1);
    }
}
Also used : net.aufdemrand.denizen.objects.dPlayer(net.aufdemrand.denizen.objects.dPlayer) Player(org.bukkit.entity.Player) net.aufdemrand.denizen.objects.dItem(net.aufdemrand.denizen.objects.dItem) Element(net.aufdemrand.denizencore.objects.Element) net.aufdemrand.denizen.objects.dLocation(net.aufdemrand.denizen.objects.dLocation) EventHandler(org.bukkit.event.EventHandler)

Aggregations

Player (org.bukkit.entity.Player)2896 EventHandler (org.bukkit.event.EventHandler)795 Location (org.bukkit.Location)374 Test (org.junit.Test)318 ItemStack (org.bukkit.inventory.ItemStack)311 Entity (org.bukkit.entity.Entity)264 ArrayList (java.util.ArrayList)224 LivingEntity (org.bukkit.entity.LivingEntity)176 UUID (java.util.UUID)146 Block (org.bukkit.block.Block)146 OfflinePlayer (org.bukkit.OfflinePlayer)123 CoreStateInitException (com.solinia.solinia.Exceptions.CoreStateInitException)117 World (org.bukkit.World)115 MyPetPlayer (de.Keyle.MyPet.api.player.MyPetPlayer)106 CommandSender (org.bukkit.command.CommandSender)100 BukkitRunnable (org.bukkit.scheduler.BukkitRunnable)88 Inventory (org.bukkit.inventory.Inventory)81 List (java.util.List)80 ISoliniaPlayer (com.solinia.solinia.Interfaces.ISoliniaPlayer)79 Region (br.net.fabiozumbi12.RedProtect.Bukkit.Region)68