Swords.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  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.Arrow;
  17. import org.bukkit.entity.Entity;
  18. import org.bukkit.entity.LivingEntity;
  19. import org.bukkit.entity.Player;
  20. import org.bukkit.entity.Wolf;
  21. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  22. import com.gmail.nossr50.Combat;
  23. import com.gmail.nossr50.Users;
  24. import com.gmail.nossr50.m;
  25. import com.gmail.nossr50.mcMMO;
  26. import com.gmail.nossr50.mcPermissions;
  27. import com.gmail.nossr50.datatypes.PlayerProfile;
  28. import com.gmail.nossr50.datatypes.SkillType;
  29. import com.gmail.nossr50.locale.mcLocale;
  30. import com.gmail.nossr50.party.Party;
  31. public class Swords
  32. {
  33. public static void serratedStrikesActivationCheck(Player player){
  34. PlayerProfile PP = Users.getProfile(player);
  35. if(m.isSwords(player.getItemInHand()))
  36. {
  37. if(PP.getSwordsPreparationMode())
  38. {
  39. PP.setSwordsPreparationMode(false);
  40. }
  41. int ticks = 2;
  42. int x = PP.getSkillLevel(SkillType.SWORDS);
  43. while(x >= 50)
  44. {
  45. x-=50;
  46. ticks++;
  47. }
  48. if(!PP.getSerratedStrikesMode() && PP.getSerratedStrikesDeactivatedTimeStamp() < System.currentTimeMillis())
  49. {
  50. player.sendMessage(mcLocale.getString("Skills.SerratedStrikesOn"));
  51. for(Player y : player.getWorld().getPlayers())
  52. {
  53. if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
  54. y.sendMessage(mcLocale.getString("Skills.SerratedStrikesPlayer", new Object[] {player.getName()}));
  55. }
  56. PP.setSerratedStrikesActivatedTimeStamp(System.currentTimeMillis());
  57. PP.setSerratedStrikesDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
  58. PP.setSerratedStrikesMode(true);
  59. }
  60. }
  61. }
  62. public static void bleedCheck(Player attacker, LivingEntity x, mcMMO pluginx)
  63. {
  64. PlayerProfile PPa = Users.getProfile(attacker);
  65. if(x instanceof Wolf)
  66. {
  67. Wolf wolf = (Wolf)x;
  68. if(Taming.getOwner(wolf, pluginx) != null)
  69. {
  70. if(Taming.getOwner(wolf, pluginx) == attacker)
  71. return;
  72. if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
  73. return;
  74. }
  75. }
  76. if(mcPermissions.getInstance().swords(attacker) && m.isSwords(attacker.getItemInHand())){
  77. if(PPa.getSkillLevel(SkillType.SWORDS) >= 750)
  78. {
  79. if(Math.random() * 1000 >= 750)
  80. {
  81. if(!(x instanceof Player))
  82. pluginx.misc.addToBleedQue(x);
  83. if(x instanceof Player)
  84. {
  85. Player target = (Player)x;
  86. Users.getProfile(target).addBleedTicks(3);
  87. }
  88. attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
  89. }
  90. }
  91. else if (Math.random() * 1000 <= PPa.getSkillLevel(SkillType.SWORDS))
  92. {
  93. if(!(x instanceof Player))
  94. pluginx.misc.addToBleedQue(x);
  95. if(x instanceof Player)
  96. {
  97. Player target = (Player)x;
  98. Users.getProfile(target).addBleedTicks(2);
  99. }
  100. attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
  101. }
  102. }
  103. }
  104. public static void applySerratedStrikes(Player attacker, EntityDamageByEntityEvent event, mcMMO pluginx)
  105. {
  106. int targets = 0;
  107. if(event.getEntity() instanceof LivingEntity)
  108. {
  109. LivingEntity x = (LivingEntity) event.getEntity();
  110. targets = m.getTier(attacker);
  111. for(Entity derp : x.getWorld().getEntities())
  112. {
  113. if(m.getDistance(x.getLocation(), derp.getLocation()) < 5)
  114. {
  115. //Make sure the Wolf is not friendly
  116. if(derp instanceof Wolf)
  117. {
  118. Wolf hurrDurr = (Wolf)derp;
  119. if(Taming.getOwner(hurrDurr, pluginx) == attacker)
  120. continue;
  121. if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
  122. continue;
  123. }
  124. //Damage nearby LivingEntities
  125. if(derp instanceof LivingEntity && targets >= 1)
  126. {
  127. if(derp instanceof Player)
  128. {
  129. Player target = (Player)derp;
  130. if(target.getName().equals(attacker.getName()))
  131. continue;
  132. if(Users.getProfile(target).getGodMode())
  133. continue;
  134. if(Party.getInstance().inSameParty(attacker, target))
  135. continue;
  136. if(targets >= 1 && derp.getWorld().getPVP())
  137. {
  138. Combat.dealDamage(target, event.getDamage() / 4, attacker);
  139. target.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!");
  140. Users.getProfile(target).addBleedTicks(5);
  141. targets--;
  142. continue;
  143. }
  144. }
  145. else
  146. {
  147. if(!pluginx.misc.bleedTracker.contains(derp))
  148. pluginx.misc.addToBleedQue((LivingEntity)derp);
  149. LivingEntity target = (LivingEntity)derp;
  150. Combat.dealDamage(target, event.getDamage() / 4, attacker);
  151. targets--;
  152. }
  153. }
  154. }
  155. }
  156. }
  157. }
  158. public static void counterAttackChecks(EntityDamageByEntityEvent event)
  159. {
  160. //Don't want to counter attack arrows
  161. if(event.getDamager() instanceof Arrow)
  162. return;
  163. if(event instanceof EntityDamageByEntityEvent)
  164. {
  165. Entity f = ((EntityDamageByEntityEvent) event).getDamager();
  166. if(event.getEntity() instanceof Player)
  167. {
  168. Player defender = (Player)event.getEntity();
  169. PlayerProfile PPd = Users.getProfile(defender);
  170. if(m.isSwords(defender.getItemInHand()) && mcPermissions.getInstance().swords(defender))
  171. {
  172. if(PPd.getSkillLevel(SkillType.SWORDS) >= 600)
  173. {
  174. if(Math.random() * 2000 <= 600)
  175. {
  176. Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
  177. defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
  178. if(f instanceof Player)
  179. ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
  180. }
  181. }
  182. else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS))
  183. {
  184. Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
  185. defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
  186. if(f instanceof Player)
  187. ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
  188. }
  189. }
  190. }
  191. }
  192. }
  193. public static void bleedSimulate(mcMMO plugin)
  194. {
  195. //Add items from Que list to BleedTrack list
  196. for(LivingEntity x : plugin.misc.bleedQue)
  197. {
  198. plugin.misc.bleedTracker.add(x);
  199. }
  200. //Clear list
  201. plugin.misc.bleedQue = new LivingEntity[plugin.misc.bleedQue.length];
  202. plugin.misc.bleedQuePos = 0;
  203. //Cleanup any dead entities from the list
  204. for(LivingEntity x : plugin.misc.bleedRemovalQue)
  205. {
  206. plugin.misc.bleedTracker.remove(x);
  207. }
  208. //Clear bleed removal list
  209. plugin.misc.bleedRemovalQue = new LivingEntity[plugin.misc.bleedRemovalQue.length];
  210. plugin.misc.bleedRemovalQuePos = 0;
  211. //Bleed monsters/animals
  212. for(LivingEntity x : plugin.misc.bleedTracker)
  213. {
  214. if(x == null){continue;}
  215. if(x.getHealth() <= 0)
  216. {
  217. plugin.misc.addToBleedRemovalQue(x);
  218. continue;
  219. }
  220. else
  221. {
  222. Combat.dealDamage(x, 2);
  223. }
  224. }
  225. }
  226. }