Swords.java 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. /*
  2. This file is part of mcMMO.
  3. mcMMO is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 3 of the License, or
  6. (at your option) any later version.
  7. mcMMO is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with mcMMO. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. package com.gmail.nossr50.skills;
  15. import org.bukkit.ChatColor;
  16. import org.bukkit.entity.Entity;
  17. import org.bukkit.entity.LivingEntity;
  18. import org.bukkit.entity.Player;
  19. import org.bukkit.entity.Wolf;
  20. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  21. import com.gmail.nossr50.Combat;
  22. import com.gmail.nossr50.Users;
  23. import com.gmail.nossr50.m;
  24. import com.gmail.nossr50.mcMMO;
  25. import com.gmail.nossr50.mcPermissions;
  26. import com.gmail.nossr50.datatypes.PlayerProfile;
  27. import com.gmail.nossr50.datatypes.SkillType;
  28. import com.gmail.nossr50.party.Party;
  29. public class Swords
  30. {
  31. public static void bleedCheck(Player attacker, LivingEntity x, mcMMO pluginx)
  32. {
  33. PlayerProfile PPa = Users.getProfile(attacker);
  34. if(x instanceof Wolf)
  35. {
  36. Wolf wolf = (Wolf)x;
  37. if(wolf.getOwner() instanceof Player)
  38. {
  39. Player owner = (Player) wolf.getOwner();
  40. if(owner == attacker)
  41. return;
  42. if(Party.getInstance().inSameParty(attacker, owner))
  43. return;
  44. }
  45. }
  46. if(mcPermissions.getInstance().swords(attacker) && m.isSwords(attacker.getItemInHand())){
  47. if(PPa.getSkillLevel(SkillType.SWORDS) >= 750)
  48. {
  49. if(Math.random() * 1000 <= 750)
  50. {
  51. if(!(x instanceof Player))
  52. pluginx.misc.addToBleedQue(x);
  53. if(x instanceof Player)
  54. {
  55. Player target = (Player)x;
  56. Users.getProfile(target).addBleedTicks(3);
  57. }
  58. attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
  59. }
  60. }
  61. else if (Math.random() * 1000 <= PPa.getSkillLevel(SkillType.SWORDS))
  62. {
  63. if(!(x instanceof Player))
  64. pluginx.misc.addToBleedQue(x);
  65. if(x instanceof Player)
  66. {
  67. Player target = (Player)x;
  68. Users.getProfile(target).addBleedTicks(2);
  69. }
  70. attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
  71. }
  72. }
  73. }
  74. public static void applySerratedStrikes(Player attacker, EntityDamageByEntityEvent event, mcMMO pluginx)
  75. {
  76. int targets = 0;
  77. int dmgAmount = (event.getDamage()/4);
  78. //Setup minimum damage
  79. if(dmgAmount < 1)
  80. dmgAmount = 1;
  81. if(event.getEntity() instanceof LivingEntity)
  82. {
  83. LivingEntity x = (LivingEntity) event.getEntity();
  84. targets = m.getTier(attacker);
  85. for(Entity derp : x.getNearbyEntities(2.5, 2.5, 2.5))
  86. {
  87. //Make sure the Wolf is not friendly
  88. if(derp instanceof Wolf)
  89. {
  90. Wolf hurrDurr = (Wolf)derp;
  91. if(hurrDurr.getOwner() instanceof Player)
  92. {
  93. Player owner = (Player) hurrDurr.getOwner();
  94. if(owner == attacker)
  95. return;
  96. if(Party.getInstance().inSameParty(attacker, owner))
  97. return;
  98. }
  99. }
  100. //Damage nearby LivingEntities
  101. if(derp instanceof LivingEntity && targets >= 1)
  102. {
  103. if(derp instanceof Player)
  104. {
  105. Player target = (Player)derp;
  106. if(target.getName().equals(attacker.getName()))
  107. continue;
  108. if(Users.getProfile(target).getGodMode())
  109. continue;
  110. if(Party.getInstance().inSameParty(attacker, target))
  111. continue;
  112. if(targets >= 1 && derp.getWorld().getPVP())
  113. {
  114. Combat.dealDamage(target, dmgAmount, attacker);
  115. target.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!");
  116. Users.getProfile(target).addBleedTicks(5);
  117. targets--;
  118. continue;
  119. }
  120. }
  121. else
  122. {
  123. if(!pluginx.misc.bleedTracker.contains(derp))
  124. pluginx.misc.addToBleedQue((LivingEntity)derp);
  125. LivingEntity target = (LivingEntity)derp;
  126. Combat.dealDamage(target, dmgAmount, attacker);
  127. targets--;
  128. }
  129. }
  130. }
  131. }
  132. }
  133. public static void counterAttackChecks(EntityDamageByEntityEvent event)
  134. {
  135. //Don't want to counter attack stuff not alive
  136. if(!(event.getDamager() instanceof LivingEntity))
  137. return;
  138. if(event instanceof EntityDamageByEntityEvent)
  139. {
  140. Entity f = ((EntityDamageByEntityEvent) event).getDamager();
  141. if(event.getEntity() instanceof Player)
  142. {
  143. Player defender = (Player)event.getEntity();
  144. PlayerProfile PPd = Users.getProfile(defender);
  145. if(m.isSwords(defender.getItemInHand()) && mcPermissions.getInstance().swords(defender))
  146. {
  147. if(PPd.getSkillLevel(SkillType.SWORDS) >= 600)
  148. {
  149. if(Math.random() * 2000 <= 600)
  150. {
  151. Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
  152. defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
  153. if(f instanceof Player)
  154. ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
  155. }
  156. }
  157. else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS))
  158. {
  159. Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
  160. defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
  161. if(f instanceof Player)
  162. ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
  163. }
  164. }
  165. }
  166. }
  167. }
  168. public static void bleedSimulate(mcMMO plugin)
  169. {
  170. //Add items from Que list to BleedTrack list
  171. for(LivingEntity x : plugin.misc.bleedQue)
  172. {
  173. plugin.misc.bleedTracker.add(x);
  174. }
  175. //Clear list
  176. plugin.misc.bleedQue = new LivingEntity[plugin.misc.bleedQue.length];
  177. plugin.misc.bleedQuePos = 0;
  178. //Cleanup any dead entities from the list
  179. for(LivingEntity x : plugin.misc.bleedRemovalQue)
  180. {
  181. plugin.misc.bleedTracker.remove(x);
  182. }
  183. //Clear bleed removal list
  184. plugin.misc.bleedRemovalQue = new LivingEntity[plugin.misc.bleedRemovalQue.length];
  185. plugin.misc.bleedRemovalQuePos = 0;
  186. //Bleed monsters/animals
  187. for(LivingEntity x : plugin.misc.bleedTracker)
  188. {
  189. if(x == null || x.isDead())
  190. {
  191. plugin.misc.addToBleedRemovalQue(x);
  192. continue;
  193. }
  194. else
  195. {
  196. Combat.dealDamage(x, 2);
  197. }
  198. }
  199. }
  200. }