/** * Gets the set damage for the given damage type, as defined in config.yml. * * @param player The player to check damage for. * @param dCause The cause of the incurred damage. * @param defaultDamage The default value to return if no option is set for the given damage type. * @return The damage to deal to the player. */ public int getDamage(String player, DamageCause dCause, int defaultDamage) { String job = getJob(player); List<String> damages = config.getKeys("config.all.damages"); int damage = defaultDamage; if (damages != null) { for (String item : damages) { if (item.equalsIgnoreCase(dCause.name())) { damage = config.getInt("config.all.damages." + item, defaultDamage); break; } } } damages = config.getKeys("config.jobs." + job + ".damages"); if (damages != null) { for (String item : damages) { if (item.equalsIgnoreCase(dCause.name())) { damage = config.getInt("config.jobs." + job + ".damages." + item, defaultDamage); break; } } } return damage; }
@EventHandler(priority = EventPriority.HIGH) public void hurtVoid(EntityDamageEvent e) { DamageCause cause = e.getCause(); Entity entity = e.getEntity(); if (cause.equals(EntityDamageEvent.DamageCause.VOID)) { if (entity instanceof Player) { Player player = (Player) entity; if (player.hasPermission("kitpvp.coal")) { player.setHealth(20.0); player.setFallDistance(0.0F); player.teleport(Bukkit.getServer().getWorld("world").getSpawnLocation()); Main.getKSC().put(player.getName(), 0); Util.msg(player, "You have fell off the map!"); Util.ksm(player, "Your KillStreak was reset!"); return; } } } else if (entity instanceof Player && cause == DamageCause.FALL) e.setCancelled(true); }
public PainSpell(MagicConfig config, String spellName) { super(config, spellName); damage = getConfigFloat("damage", 4); spellDamageType = getConfigString("spell-damage-type", ""); ignoreArmor = getConfigBoolean("ignore-armor", false); checkPlugins = getConfigBoolean("check-plugins", true); String type = getConfigString("damage-type", "ENTITY_ATTACK"); for (DamageCause cause : DamageCause.values()) { if (cause.name().equalsIgnoreCase(type)) { damageType = cause; break; } } if (damageType == null) { damageType = DamageCause.ENTITY_ATTACK; } }
public ResistSpell(MagicConfig config, String spellName) { super(config, spellName); spellDamageTypes = getConfigStringList("spell-damage-types", null); List<String> list = getConfigStringList("normal-damage-types", null); multiplier = getConfigFloat("multiplier", 0.5F); if (list != null) { normalDamageTypes = new ArrayList<DamageCause>(); for (String s : list) { for (DamageCause cause : DamageCause.values()) { if (cause.name().equalsIgnoreCase(s)) { normalDamageTypes.add(cause); break; } } } if (normalDamageTypes.size() == 0) normalDamageTypes = null; } }
public void onEntityDamage(EntityDamageEvent event) { DamageCause cause = event.getCause(); ArrayList<Integer> ids = iCoLand.landMgr.getLandIds(event.getEntity().getLocation()); if (cause.equals(DamageCause.FIRE) || cause.equals(DamageCause.FIRE_TICK)) { for (Integer id : ids) { Land land = iCoLand.landMgr.getLandById(id); if (land.hasAddon("nofire")) { event.setCancelled(true); } } if (ids.size() == 0 && !Config.unclaimedLandCanBurn) { event.setCancelled(true); } } else if (cause.equals(DamageCause.BLOCK_EXPLOSION) || cause.equals(DamageCause.ENTITY_EXPLOSION)) { for (Integer id : ids) { Land land = iCoLand.landMgr.getLandById(id); if (land.hasAddon("noboom")) { event.setCancelled(true); } } if (ids.size() == 0 && !Config.unclaimedLandCanBoom) { event.setCancelled(true); } } else if (event instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent castEvent = (EntityDamageByEntityEvent) event; if ((castEvent.getDamager() instanceof Player) && (castEvent.getEntity() instanceof Player)) { for (Integer id : ids) { if (iCoLand.landMgr.getLandById(id).hasAddon("nopvp")) event.setCancelled(true); } } } }
@EventHandler(priority = EventPriority.HIGHEST) public void onEntityDeath(EntityDeathEvent event) { Entity died = event.getEntity(); if (died instanceof Player) { Player pdied = (Player) died; if (plugin.isInArena(pdied)) { event.getDrops().clear(); plugin.getArena(pdied).onPlayerDeath(plugin.getArenaPlayer(pdied)); } } EntityDamageEvent dev = event.getEntity().getLastDamageCause(); if (dev != null) { if (dev.getEntity() != null) { if (dev.getEntity() instanceof Player) { Player dead = (Player) event.getEntity(); if (dev.getCause() != null) { DamageCause dc = dev.getCause(); if (dc.equals(DamageCause.ENTITY_ATTACK)) { Entity damager = ((EntityDamageByEntityEvent) dev).getDamager(); if (plugin.isInArena(dead)) { String attackerName = damager.getType().getName(); if (damager instanceof Player) { attackerName = ((Player) damager).getName(); } event.getDrops().clear(); ArenaPlayer dp = plugin.getArenaPlayer(dead); dp.killstreak = 0; dp.deaths++; String line1 = ChatColor.GREEN + attackerName + ChatColor.WHITE + " 杀死了 " + ChatColor.RED + dead.getName(); String line2 = ChatColor.RED + dead.getName() + " 你已被 " + attackerName + " 击杀"; String line3 = ChatColor.RED + "----------------------------"; String line4 = ChatColor.RED + "杀敌: " + dp.kills; String line5 = ChatColor.RED + "死亡: " + dp.deaths; String line6 = ChatColor.RED + "----------------------------"; dead.sendMessage(line1); dead.sendMessage(line2); dead.sendMessage(line3); dead.sendMessage(line4); dead.sendMessage(line5); dead.sendMessage(line6); if (damager instanceof Player) { Player attacker = (Player) ((EntityDamageByEntityEvent) dev).getDamager(); if (plugin.isInArena(attacker)) { ArenaPlayer ap = plugin.getArenaPlayer(attacker); ap.kills++; ap.killstreak++; ap.XP += 100; line2 = ChatColor.RED + "杀死了 " + dead.getName() + " +100 XP"; line4 = ChatColor.RED + "杀敌: " + plugin.getArenaPlayer(attacker).kills; line5 = ChatColor.RED + "死亡: " + plugin.getArenaPlayer(attacker).deaths; attacker.sendMessage(line1); attacker.sendMessage(line2); attacker.sendMessage(line3); attacker.sendMessage(line4); attacker.sendMessage(line5); attacker.sendMessage(line6); Arena ar = plugin.getArena(attacker); ar.doKillStreak(plugin.getArenaPlayer(attacker)); // Call kill event UltimateArenaKillEvent killEvent = new UltimateArenaKillEvent(dp, ap, ar); plugin.getServer().getPluginManager().callEvent(killEvent); } } } return; } else if (dc.equals(DamageCause.PROJECTILE)) { if (((EntityDamageByEntityEvent) dev) .getDamager() .getType() .toString() .toLowerCase() .equals("snowball")) { Entity bullet = ((EntityDamageByEntityEvent) dev).getDamager(); if (bullet instanceof Snowball) { if (((Snowball) ((EntityDamageByEntityEvent) dev).getDamager()).getShooter() instanceof Player) { Player gunner = (Player) ((Snowball) ((EntityDamageByEntityEvent) dev).getDamager()) .getShooter(); if (gunner != null && plugin.isInArena(gunner)) { String gunnerp = gunner.getName(); event.getDrops().clear(); // Dead player if (dead instanceof Player) { if (plugin.isInArena(dead.getLocation())) { Player deadplayer = (Player) dead; ArenaPlayer dp = plugin.getArenaPlayer(deadplayer); dp.killstreak = 0; dp.deaths++; String line1 = ChatColor.GREEN + deadplayer.getName() + ChatColor.WHITE + " 已被 " + ChatColor.RED + gunnerp + ChatColor.WHITE + " 杀死"; String line2 = ChatColor.RED + "----------------------------"; String line3 = ChatColor.RED + "杀敌: " + plugin.getArenaPlayer(deadplayer).kills; String line4 = ChatColor.RED + "死亡: " + plugin.getArenaPlayer(deadplayer).deaths; String line5 = ChatColor.RED + "----------------------------"; deadplayer.sendMessage(line1); deadplayer.sendMessage(line2); deadplayer.sendMessage(line3); deadplayer.sendMessage(line4); deadplayer.sendMessage(line5); } } // Killer if (gunner instanceof Player) { if (plugin.isInArena(gunner)) { plugin.getArenaPlayer(gunner).killstreak++; plugin.getArenaPlayer(gunner).kills++; plugin.getArenaPlayer(gunner).XP += 25; String line1 = ChatColor.GREEN + gunnerp + ChatColor.WHITE + " 杀死了 " + ChatColor.RED + dead.getType().getName(); String line2 = ChatColor.RED + "----------------------------"; String line3 = ChatColor.RED + "杀敌: " + plugin.getArenaPlayer(gunner).kills; String line4 = ChatColor.RED + "死亡: " + plugin.getArenaPlayer(gunner).deaths; String line5 = ChatColor.RED + "----------------------------"; gunner.sendMessage(line1); gunner.sendMessage(line2); gunner.sendMessage(line3); gunner.sendMessage(line4); gunner.sendMessage(line5); } } } } } } return; } else { if (plugin.isInArena(dead)) { event.getDrops().clear(); plugin.getArenaPlayer(dead).killstreak = 0; plugin.getArenaPlayer(dead).deaths++; String line2 = ChatColor.RED + dead.getName() + " 你已被 " + dc.toString() + " 杀死"; String line3 = ChatColor.RED + "----------------------------"; String line4 = ChatColor.RED + "杀敌: " + plugin.getArenaPlayer(dead).kills; String line5 = ChatColor.RED + "死亡: " + plugin.getArenaPlayer(dead).deaths; String line6 = ChatColor.RED + "----------------------------"; dead.sendMessage(line2); dead.sendMessage(line3); dead.sendMessage(line4); dead.sendMessage(line5); dead.sendMessage(line6); } return; } } } else { LivingEntity dead = (LivingEntity) event.getEntity(); if (dev.getCause() != null) { DamageCause dc = dev.getCause(); if (dc.equals(DamageCause.PROJECTILE)) { if (((EntityDamageByEntityEvent) dev) .getDamager() .getType() .toString() .equalsIgnoreCase("snowball")) { Entity bullet = ((EntityDamageByEntityEvent) dev).getDamager(); if (bullet instanceof Snowball) { if (((Snowball) ((EntityDamageByEntityEvent) dev).getDamager()).getShooter() instanceof Player) { Player gunner = (Player) ((Snowball) ((EntityDamageByEntityEvent) dev).getDamager()) .getShooter(); if (gunner != null) { String gunnerp = gunner.getName(); event.getDrops().clear(); // Dead player if (dead instanceof Player) { if (plugin.isInArena(dead.getLocation())) { Player deadplayer = (Player) dead; plugin.getArenaPlayer(deadplayer).killstreak = 0; plugin.getArenaPlayer(deadplayer).deaths++; String line1 = ChatColor.GREEN + deadplayer.getName() + ChatColor.WHITE + " 已被 " + ChatColor.RED + gunnerp + ChatColor.WHITE + " 杀死"; String line2 = ChatColor.RED + "----------------------------"; String line3 = ChatColor.RED + "杀敌: " + plugin.getArenaPlayer(deadplayer).kills; String line4 = ChatColor.RED + "死亡: " + plugin.getArenaPlayer(deadplayer).deaths; String line5 = ChatColor.RED + "----------------------------"; deadplayer.sendMessage(line1); deadplayer.sendMessage(line2); deadplayer.sendMessage(line3); deadplayer.sendMessage(line4); deadplayer.sendMessage(line5); } } // Killer if (gunner instanceof Player) { if (plugin.isInArena(gunner)) { plugin.getArenaPlayer(gunner).killstreak++; plugin.getArenaPlayer(gunner).kills++; plugin.getArenaPlayer(gunner).XP += 25; String line1 = ChatColor.GREEN + gunnerp + ChatColor.WHITE + " 杀死了 " + ChatColor.RED + dead.getType().getName(); String line2 = ChatColor.RED + "----------------------------"; String line3 = ChatColor.RED + "杀敌: " + plugin.getArenaPlayer(gunner).kills; String line4 = ChatColor.RED + "死亡: " + plugin.getArenaPlayer(gunner).deaths; String line5 = ChatColor.RED + "----------------------------"; gunner.sendMessage(line1); gunner.sendMessage(line2); gunner.sendMessage(line3); gunner.sendMessage(line4); gunner.sendMessage(line5); } } if ((gunner instanceof Player) && (dead instanceof Player)) { if ((gunner != null) && (dead != null)) { ArenaPlayer ag = plugin.getArenaPlayer(gunner); ArenaPlayer ad = plugin.getArenaPlayer((Player) dead); Arena ar = plugin.getArena(gunner); UltimateArenaKillEvent killEvent = new UltimateArenaKillEvent(ad, ag, ar); plugin.getServer().getPluginManager().callEvent(killEvent); } } } } } } return; } else if (dc.equals(DamageCause.ENTITY_ATTACK)) { Entity damager = ((EntityDamageByEntityEvent) dev).getDamager(); if (damager instanceof Player) { Player attacker = (Player) ((EntityDamageByEntityEvent) dev).getDamager(); if (plugin.isInArena(attacker)) { event.getDrops().clear(); if (plugin.isInArena(attacker.getLocation())) { plugin.getArenaPlayer(attacker).kills++; plugin.getArenaPlayer(attacker).killstreak++; plugin.getArenaPlayer(attacker).XP += 25; String attstr = dead.getType().getName(); String line1 = ChatColor.GREEN + attacker.getName() + ChatColor.WHITE + " 杀死了 " + ChatColor.RED + attstr; String line2 = ChatColor.RED + "杀死了 " + attstr + " +25 XP"; String line3 = ChatColor.RED + "----------------------------"; String line4 = ChatColor.RED + "杀敌: " + plugin.getArenaPlayer(attacker).kills; String line5 = ChatColor.RED + "死亡: " + plugin.getArenaPlayer(attacker).deaths; String line6 = ChatColor.RED + "----------------------------"; attacker.sendMessage(line1); attacker.sendMessage(line2); attacker.sendMessage(line3); attacker.sendMessage(line4); attacker.sendMessage(line5); attacker.sendMessage(line6); Arena ar = plugin.getArena(attacker); ar.doKillStreak(plugin.getArenaPlayer(attacker)); } } } return; } else if (dc.equals(DamageCause.PROJECTILE)) { Entity damager = ((EntityDamageByEntityEvent) dev).getDamager(); if (damager instanceof Arrow) { if (((Arrow) ((EntityDamageByEntityEvent) dev).getDamager()).getShooter() instanceof Player) { Player attacker = (Player) ((Arrow) ((EntityDamageByEntityEvent) dev).getDamager()).getShooter(); if (plugin.isInArena(attacker)) { event.getDrops().clear(); if (plugin.isInArena(attacker.getLocation())) { plugin.getArenaPlayer(attacker).kills++; plugin.getArenaPlayer(attacker).killstreak++; plugin.getArenaPlayer(attacker).XP += 25; String attstr = dead.getType().getName(); String line1 = ChatColor.GREEN + attacker.getName() + ChatColor.WHITE + " 杀死了 " + ChatColor.RED + attstr; String line2 = ChatColor.RED + "杀死了 " + attstr + " +25 XP"; String line3 = ChatColor.RED + "----------------------------"; String line4 = ChatColor.RED + "杀敌: " + plugin.getArenaPlayer(attacker).kills; String line5 = ChatColor.RED + "死亡: " + plugin.getArenaPlayer(attacker).deaths; String line6 = ChatColor.RED + "----------------------------"; attacker.sendMessage(line1); attacker.sendMessage(line2); attacker.sendMessage(line3); attacker.sendMessage(line4); attacker.sendMessage(line5); attacker.sendMessage(line6); Arena ar = plugin.getArena(attacker); ar.doKillStreak(plugin.getArenaPlayer(attacker)); } } } } } } } } } }
@EventHandler(priority = EventPriority.MONITOR) public void onEntityDamage(EntityDamageEvent event) { if (event.isCancelled() == false && !worlds.contains(event.getEntity().getWorld().getName())) { Entity attacker = null; Projectile projectile = null; if (event instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent ed = (EntityDamageByEntityEvent) event; attacker = ed.getDamager(); // handle arrow attacks if (ed.getDamager() instanceof Projectile) { projectile = ((Projectile) attacker); attacker = projectile.getShooter(); } } Entity entity = event.getEntity(); if (entity instanceof ComplexEntityPart) { entity = ((ComplexEntityPart) entity).getParent(); } int damage = event.getDamage(); DamageCause cause = event.getCause(); // if the player gets attacked if (entity instanceof Player) { // global damage count playerStatManager .getPlayerBlob(((Player) entity).getName()) .getStat("damagetaken", "total") .incrementStat(damage); // handle projectiles if (projectile != null) { playerStatManager .getPlayerBlob(((Player) entity).getName()) .getStat( "damagetaken", projectile.getType().toString().toLowerCase().replace("_", "")) .incrementStat(damage); } playerStatManager .getPlayerBlob(((Player) entity).getName()) .getStat("damagetaken", cause.toString().toLowerCase().replace("_", "")) .incrementStat(damage); // pvp damage if (attacker instanceof Player) { playerStatManager .getPlayerBlob(((Player) entity).getName()) .getStat("damagetaken", "player") .incrementStat(damage); playerStatManager .getPlayerBlob(((Player) attacker).getName()) .getStat("damagedealt", "player") .incrementStat(damage); // mob damage } else if (attacker != null) { playerStatManager .getPlayerBlob(((Player) entity).getName()) .getStat("damagetaken", attacker.getType().toString().toLowerCase().replace("_", "")) .incrementStat(damage); } } else { if (attacker instanceof Player) { // global damage dealt playerStatManager .getPlayerBlob(((Player) attacker).getName()) .getStat("damagedealt", "total") .incrementStat(damage); playerStatManager .getPlayerBlob(((Player) attacker).getName()) .getStat("damagedealt", cause.toString().toLowerCase().replace("_", "")) .incrementStat(damage); playerStatManager .getPlayerBlob(((Player) attacker).getName()) .getStat("damagedealt", entity.getType().toString().toLowerCase().replace("_", "")) .incrementStat(damage); } } } }
@EventHandler(priority = EventPriority.MONITOR) public void onEntityDeath(EntityDeathEvent event) { EntityDamageEvent lastCause = event.getEntity().getLastDamageCause(); DamageCause cause = null; if (lastCause != null) { cause = lastCause.getCause(); } Entity attacker = null; Projectile projectile = null; if (lastCause instanceof EntityDamageByEntityEvent) { attacker = ((EntityDamageByEntityEvent) lastCause).getDamager(); BeardStat.printDebugCon("attack ID'd Fired"); // Type.ENTITY_DEATH if (attacker instanceof Projectile) { projectile = ((Projectile) attacker); attacker = projectile.getShooter(); } } Entity entity = event.getEntity(); // set attacker and entity total k/d accordingly if (entity instanceof Player) { playerStatManager .getPlayerBlob(((Player) entity).getName()) .getStat("deaths", "total") .incrementStat(1); if (cause != null) { playerStatManager .getPlayerBlob(((Player) entity).getName()) .getStat("deaths", cause.toString().toLowerCase().replace("_", "")) .incrementStat(1); } if (projectile != null) { playerStatManager .getPlayerBlob(((Player) entity).getName()) .getStat("deaths", projectile.getType().toString().toLowerCase().replace("_", "")) .incrementStat(1); } } if (attacker instanceof Player) { playerStatManager .getPlayerBlob(((Player) attacker).getName()) .getStat("kills", "total") .incrementStat(1); if (cause != null) { playerStatManager .getPlayerBlob(((Player) attacker).getName()) .getStat("kills", cause.toString().toLowerCase().replace("_", "")) .incrementStat(1); } if (projectile != null) { playerStatManager .getPlayerBlob(((Player) attacker).getName()) .getStat("kills", projectile.getType().toString().toLowerCase().replace("_", "")) .incrementStat(1); } } // PVP if (entity instanceof Player && attacker instanceof Player) { playerStatManager .getPlayerBlob(((Player) entity).getName()) .getStat("deaths", "player") .incrementStat(1); playerStatManager .getPlayerBlob(((Player) attacker).getName()) .getStat("kills", "player") .incrementStat(1); } // global damage count // PLAYER KILLS ENTITY if ((entity instanceof Player) == false && attacker instanceof Player) { // global damage dealt // playerStatManager.getPlayerBlob(((Player)attacker).getName()).getStat("kill_by_"+ // cause.toString().toLowerCase()).incrementStat(1); playerStatManager .getPlayerBlob(((Player) attacker).getName()) .getStat("kills", entity.getType().toString().replace("_", "").toLowerCase()) .incrementStat(1); } // ENTITY KILLS PLAYER if ((entity instanceof Player) && !(attacker instanceof Player) && attacker != null) { playerStatManager .getPlayerBlob(((Player) entity).getName()) .getStat("deaths", attacker.getType().toString().replace("_", "")) .incrementStat(1); } }
/* * * ################################################ * * HANDLE PLAYER DEATH * * PLAYERS DIE A REAL DEATH WHICH IS HANDLED HERE * * ################################################ * * */ public void playerDeath(PlayerDeathEvent e) { final Player p = e.getEntity(); if (!activePlayers.contains(p)) return; sm.playerDied(p, activePlayers.size(), gameID, new Date().getTime() - startTime); scoreBoard.playerDead(p); activePlayers.remove(p); inactivePlayers.add(p); for (Object in : spawns.keySet().toArray()) { if (spawns.get(in) == p) spawns.remove(in); } PlayerKilledEvent pk = null; if (mode != GameMode.WAITING && p.getLastDamageCause() != null && p.getLastDamageCause().getCause() != null) { DamageCause cause = p.getLastDamageCause().getCause(); switch (cause) { case ENTITY_ATTACK: if (p.getLastDamageCause().getEntityType() == EntityType.PLAYER) { EntityType enttype = p.getLastDamageCause().getEntityType(); Player killer = p.getKiller(); String killername = "Unknown"; if (killer != null) { killername = killer.getName(); } String itemname = "Unknown Item"; if (killer != null) { itemname = ItemReader.getFriendlyItemName(killer.getItemInHand().getType()); } msgFall( PrefixType.INFO, "death." + enttype, "player-" + p.getName(), "killer-" + killername, "item-" + itemname); if (killer != null && p != null) { sm.addKill(killer, p, gameID); scoreBoard.incScore(killer); } pk = new PlayerKilledEvent(p, this, killer, cause); } else { msgFall( PrefixType.INFO, "death." + p.getLastDamageCause().getEntityType(), "player-" + p.getName(), "killer-" + p.getLastDamageCause().getEntityType()); pk = new PlayerKilledEvent(p, this, null, cause); } break; default: msgFall( PrefixType.INFO, "death." + cause.name(), "player-" + p.getName(), "killer-" + cause); pk = new PlayerKilledEvent(p, this, null, cause); break; } Bukkit.getServer().getPluginManager().callEvent(pk); if (getActivePlayers() > 1) { for (Player pl : getAllPlayers()) { msgmgr.sendMessage( PrefixType.INFO, ChatColor.DARK_AQUA + "There are " + ChatColor.YELLOW + "" + getActivePlayers() + ChatColor.DARK_AQUA + " players remaining!", pl); } } } for (Player pe : activePlayers) { Location l = pe.getLocation(); l.setY(l.getWorld().getMaxHeight()); l.getWorld().strikeLightningEffect(l); } if (getActivePlayers() <= config.getInt("endgame.players") && config.getBoolean("endgame.fire-lighting.enabled") && !endgameRunning) { tasks.add( Bukkit.getScheduler() .scheduleSyncRepeatingTask( GameManager.getInstance().getPlugin(), new EndgameManager(), 0, config.getInt("endgame.fire-lighting.interval") * 20)); } if (activePlayers.size() < 2 && mode == GameMode.INGAME) { mode = GameMode.FINISHING; LobbyManager.getInstance().updateWall(gameID); tasks.add( Bukkit.getScheduler() .scheduleSyncDelayedTask( GameManager.getInstance().getPlugin(), new Runnable() { public void run() { playerWin(p); endGame(); } }, 10L)); } LobbyManager.getInstance().updateWall(gameID); }