Swords.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package com.gmail.nossr50.skills;
  2. import org.bukkit.entity.AnimalTamer;
  3. import org.bukkit.entity.Entity;
  4. import org.bukkit.entity.LivingEntity;
  5. import org.bukkit.entity.Player;
  6. import org.bukkit.entity.Wolf;
  7. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  8. import com.gmail.nossr50.Combat;
  9. import com.gmail.nossr50.ItemChecks;
  10. import com.gmail.nossr50.Users;
  11. import com.gmail.nossr50.m;
  12. import com.gmail.nossr50.mcMMO;
  13. import com.gmail.nossr50.mcPermissions;
  14. import com.gmail.nossr50.datatypes.PlayerProfile;
  15. import com.gmail.nossr50.datatypes.SkillType;
  16. import com.gmail.nossr50.locale.mcLocale;
  17. import com.gmail.nossr50.party.Party;
  18. public class Swords {
  19. /**
  20. * Check for Bleed effect.
  21. *
  22. * @param attacker The attacking player
  23. * @param entity The defending entity
  24. * @param plugin mcMMO plugin instance
  25. */
  26. public static void bleedCheck(Player attacker, LivingEntity entity, mcMMO plugin) {
  27. if (entity instanceof Wolf) {
  28. Wolf wolf = (Wolf) entity;
  29. if (wolf.isTamed()) {
  30. AnimalTamer tamer = wolf.getOwner();
  31. if (tamer instanceof Player) {
  32. Player owner = (Player) tamer;
  33. if (owner == attacker || Party.getInstance().inSameParty(attacker, owner)) {
  34. return;
  35. }
  36. }
  37. }
  38. }
  39. final int MAX_BONUS_LEVEL = 750;
  40. PlayerProfile PPa = Users.getProfile(attacker);
  41. int skillLevel = PPa.getSkillLevel(SkillType.SWORDS);
  42. int skillCheck = m.skillCheck(skillLevel, MAX_BONUS_LEVEL);
  43. if (Math.random() * 1000 <= skillCheck && !entity.isDead()) {
  44. if (entity instanceof Player) {
  45. Player target = (Player) entity;
  46. int bleedTicks;
  47. if (skillLevel >= 750) {
  48. bleedTicks = 3;
  49. }
  50. else {
  51. bleedTicks = 2;
  52. }
  53. Users.getProfile(target).addBleedTicks(bleedTicks);
  54. }
  55. else {
  56. plugin.misc.bleedQue.add(entity);
  57. }
  58. attacker.sendMessage(mcLocale.getString("Swords.EnemyBleeding"));
  59. }
  60. }
  61. /**
  62. * Counter-attack entities.
  63. *
  64. * @param event The event to modify
  65. */
  66. public static void counterAttackChecks(EntityDamageByEntityEvent event) {
  67. Entity attacker = event.getDamager();
  68. if (!(attacker instanceof LivingEntity)) {
  69. return;
  70. }
  71. Entity target = event.getEntity();
  72. if (target instanceof Player) {
  73. Player defender = (Player) target;
  74. PlayerProfile PPd = Users.getProfile(defender);
  75. if (ItemChecks.isSword(defender.getItemInHand()) && mcPermissions.getInstance().swords(defender)) {
  76. final int MAX_BONUS_LEVEL = 600;
  77. final int COUNTER_ATTACK_MODIFIER = 2;
  78. int skillLevel = PPd.getSkillLevel(SkillType.SWORDS);
  79. int skillCheck = m.skillCheck(skillLevel, MAX_BONUS_LEVEL);
  80. if (Math.random() * 2000 <= skillCheck) {
  81. Combat.dealDamage((LivingEntity) attacker, event.getDamage() / COUNTER_ATTACK_MODIFIER);
  82. defender.sendMessage(mcLocale.getString("Swords.CounterAttacked"));
  83. if (attacker instanceof Player) {
  84. ((Player) attacker).sendMessage(mcLocale.getString("Swords.HitByCounterAttack"));
  85. }
  86. }
  87. }
  88. }
  89. }
  90. }