mcCombat.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. package com.gmail.nossr50;
  2. import org.bukkit.ChatColor;
  3. import org.bukkit.Location;
  4. import org.bukkit.entity.Animals;
  5. import org.bukkit.entity.Creeper;
  6. import org.bukkit.entity.Entity;
  7. import org.bukkit.entity.Monster;
  8. import org.bukkit.entity.PigZombie;
  9. import org.bukkit.entity.Player;
  10. import org.bukkit.entity.Skeleton;
  11. import org.bukkit.entity.Spider;
  12. import org.bukkit.entity.Squid;
  13. import org.bukkit.entity.Zombie;
  14. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  15. import org.bukkit.event.entity.EntityDamageByProjectileEvent;
  16. import org.bukkit.event.entity.EntityDamageEvent;
  17. import org.bukkit.inventory.ItemStack;
  18. import org.bukkit.plugin.Plugin;
  19. public class mcCombat {
  20. private static mcMMO plugin;
  21. public mcCombat(mcMMO instance) {
  22. plugin = instance;
  23. }
  24. private static volatile mcCombat instance;
  25. public static mcCombat getInstance() {
  26. if (instance == null) {
  27. instance = new mcCombat(plugin);
  28. }
  29. return instance;
  30. }
  31. public void playerVersusPlayerChecks(Entity x, Player attacker, EntityDamageByEntityEvent event){
  32. if(x instanceof Player){
  33. if(mcLoadProperties.pvp == false){
  34. event.setCancelled(true);
  35. return;
  36. }
  37. Player defender = (Player)x;
  38. //This may help compatability with NPC mods
  39. if(mcUsers.getProfile(defender) == null)
  40. mcUsers.addUser(defender);
  41. if(attacker != null && defender != null && mcUsers.getProfile(attacker).inParty() && mcUsers.getProfile(defender).inParty()){
  42. if(mcParty.getInstance().inSameParty(defender, attacker)){
  43. event.setCancelled(true);
  44. return;
  45. }
  46. }
  47. /*
  48. * AXE CRITICAL CHECK
  49. */
  50. axeCriticalCheck(attacker, event, x);
  51. if(!mcConfig.getInstance().isBleedTracked(x)){
  52. bleedCheck(attacker, x);
  53. }
  54. if(defender != null && mcPermissions.getInstance().unarmed(attacker) && attacker.getItemInHand().getTypeId() == 0){
  55. //DMG MODIFIER
  56. if(mcUsers.getProfile(attacker).getUnarmedInt() >= 50 && mcUsers.getProfile(attacker).getUnarmedInt() < 100){
  57. event.setDamage(calculateDamage(event, 1));
  58. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 100 && mcUsers.getProfile(attacker).getUnarmedInt() < 200){
  59. event.setDamage(calculateDamage(event, 2));
  60. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 200 && mcUsers.getProfile(attacker).getUnarmedInt() < 325){
  61. event.setDamage(calculateDamage(event, 3));
  62. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 325 && mcUsers.getProfile(attacker).getUnarmedInt() < 475){
  63. event.setDamage(calculateDamage(event, 4));
  64. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 475 && mcUsers.getProfile(attacker).getUnarmedInt() < 600){
  65. event.setDamage(calculateDamage(event, 5));
  66. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 600 && mcUsers.getProfile(attacker).getUnarmedInt() < 775){
  67. event.setDamage(calculateDamage(event, 6));
  68. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 775 && mcUsers.getProfile(attacker).getUnarmedInt() < 950){
  69. event.setDamage(calculateDamage(event, 7));
  70. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 950){
  71. event.setDamage(calculateDamage(event, 8));
  72. }
  73. if(mcUsers.getProfile(defender).isDead())
  74. return;
  75. //PROC
  76. if(simulateUnarmedProc(attacker)){
  77. Location loc = defender.getLocation();
  78. if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0){
  79. attacker.sendMessage(ChatColor.DARK_RED+"You have hit with great force.");
  80. defender.sendMessage(ChatColor.DARK_RED+"You have been disarmed!");
  81. ItemStack item = defender.getItemInHand();
  82. if(item != null){
  83. loc.getWorld().dropItemNaturally(loc, item);
  84. ItemStack itemx = null;
  85. defender.setItemInHand(itemx);
  86. }
  87. }
  88. }
  89. }
  90. /*
  91. * PVP XP
  92. */
  93. if(attacker != null && defender != null && mcLoadProperties.pvpxp && !mcParty.getInstance().inSameParty(attacker, defender)){
  94. if(mcm.getInstance().isAxes(attacker.getItemInHand()))
  95. mcUsers.getProfile(attacker).addAxesGather((event.getDamage() * 3) * mcLoadProperties.pvpxprewardmodifier);
  96. if(mcm.getInstance().isSwords(attacker.getItemInHand()))
  97. mcUsers.getProfile(attacker).addSwordsGather((event.getDamage() * 3) * mcLoadProperties.pvpxprewardmodifier);
  98. if(attacker.getItemInHand().getTypeId() == 0)
  99. mcUsers.getProfile(attacker).addUnarmedGather((event.getDamage() * 3) * mcLoadProperties.pvpxprewardmodifier);
  100. }
  101. /*
  102. * CHECK FOR LEVEL UPS
  103. */
  104. mcSkills.getInstance().XpCheck(attacker);
  105. }
  106. }
  107. public void playerVersusSquidChecks(EntityDamageByEntityEvent event, Player attacker, Entity x, int type){
  108. if(x instanceof Squid){
  109. if(!mcConfig.getInstance().isBleedTracked(x)){
  110. bleedCheck(attacker, x);
  111. }
  112. Squid defender = (Squid)event.getEntity();
  113. if(mcm.getInstance().isSwords(attacker.getItemInHand()) && defender.getHealth() > 0 && mcPermissions.getInstance().swords(attacker)){
  114. mcUsers.getProfile(attacker).addSwordsGather(10);
  115. }
  116. mcSkills.getInstance().XpCheck(attacker);
  117. if(mcm.getInstance().isAxes(attacker.getItemInHand())
  118. && defender.getHealth() > 0
  119. && mcPermissions.getInstance().axes(attacker)){
  120. mcUsers.getProfile(attacker).addAxesGather(10);
  121. mcSkills.getInstance().XpCheck(attacker);
  122. }
  123. if(mcm.getInstance().isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
  124. if(mcUsers.getProfile(attacker).getAxesInt() >= 500){
  125. event.setDamage(calculateDamage(event, 4));
  126. }
  127. }
  128. /*
  129. * UNARMED VS SQUID
  130. */
  131. if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
  132. if(defender.getHealth() <= 0)
  133. return;
  134. if(mcUsers.getProfile(attacker).getUnarmedInt() >= 50 && mcUsers.getProfile(attacker).getUnarmedInt() < 100){
  135. event.setDamage(calculateDamage(event, 1));
  136. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 100 && mcUsers.getProfile(attacker).getUnarmedInt() < 200){
  137. event.setDamage(calculateDamage(event, 2));
  138. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 200 && mcUsers.getProfile(attacker).getUnarmedInt() < 325){
  139. event.setDamage(calculateDamage(event, 3));
  140. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 325 && mcUsers.getProfile(attacker).getUnarmedInt() < 475){
  141. event.setDamage(calculateDamage(event, 4));
  142. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 475 && mcUsers.getProfile(attacker).getUnarmedInt() < 600){
  143. event.setDamage(calculateDamage(event, 5));
  144. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 600 && mcUsers.getProfile(attacker).getUnarmedInt() < 775){
  145. event.setDamage(calculateDamage(event, 6));
  146. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 775 && mcUsers.getProfile(attacker).getUnarmedInt() < 950){
  147. event.setDamage(calculateDamage(event, 7));
  148. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 950){
  149. event.setDamage(calculateDamage(event, 8));
  150. }
  151. //XP
  152. if(defender.getHealth() != 0){
  153. mcUsers.getProfile(attacker).addUnarmedGather(10);
  154. mcSkills.getInstance().XpCheck(attacker);
  155. }
  156. }
  157. }
  158. }
  159. public void playerVersusAnimalsChecks(Entity x, Player attacker, EntityDamageByEntityEvent event, int type){
  160. if(x instanceof Animals){
  161. if(!mcConfig.getInstance().isBleedTracked(x)){
  162. bleedCheck(attacker, x);
  163. }
  164. Animals defender = (Animals)event.getEntity();
  165. if(mcm.getInstance().isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
  166. if(defender.getHealth() <= 0)
  167. return;
  168. if(mcUsers.getProfile(attacker).getAxesInt() >= 500){
  169. event.setDamage(calculateDamage(event, 4));
  170. }
  171. }
  172. if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
  173. if(mcUsers.getProfile(attacker).getUnarmedInt() >= 50 && mcUsers.getProfile(attacker).getUnarmedInt() < 100){
  174. event.setDamage(calculateDamage(event, 1));
  175. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 100 && mcUsers.getProfile(attacker).getUnarmedInt() < 200){
  176. event.setDamage(calculateDamage(event, 2));
  177. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 200 && mcUsers.getProfile(attacker).getUnarmedInt() < 325){
  178. event.setDamage(calculateDamage(event, 3));
  179. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 325 && mcUsers.getProfile(attacker).getUnarmedInt() < 475){
  180. event.setDamage(calculateDamage(event, 4));
  181. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 475 && mcUsers.getProfile(attacker).getUnarmedInt() < 600){
  182. event.setDamage(calculateDamage(event, 5));
  183. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 600 && mcUsers.getProfile(attacker).getUnarmedInt() < 775){
  184. event.setDamage(calculateDamage(event, 6));
  185. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 775 && mcUsers.getProfile(attacker).getUnarmedInt() < 950){
  186. event.setDamage(calculateDamage(event, 7));
  187. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 950){
  188. event.setDamage(calculateDamage(event, 8));
  189. }
  190. }
  191. }
  192. }
  193. public void playerVersusMonsterChecks(EntityDamageByEntityEvent event, Player attacker, Entity x, int type){
  194. if(x instanceof Monster){
  195. /*
  196. * AXE PROC CHECKS
  197. */
  198. axeCriticalCheck(attacker, event, x);
  199. if(!mcConfig.getInstance().isBleedTracked(x)){
  200. bleedCheck(attacker, x);
  201. }
  202. Monster defender = (Monster)event.getEntity();
  203. if(mcm.getInstance().isSwords(attacker.getItemInHand())
  204. && defender.getHealth() > 0
  205. && mcPermissions.getInstance().swords(attacker)){
  206. if(!mcConfig.getInstance().isMobSpawnTracked(x)){
  207. if(x instanceof Creeper)
  208. mcUsers.getProfile(attacker).addSwordsGather(10);
  209. if(x instanceof Spider)
  210. mcUsers.getProfile(attacker).addSwordsGather(7);
  211. if(x instanceof Skeleton)
  212. mcUsers.getProfile(attacker).addSwordsGather(5);
  213. if(x instanceof Zombie)
  214. mcUsers.getProfile(attacker).addSwordsGather(3);
  215. if(x instanceof PigZombie)
  216. mcUsers.getProfile(attacker).addSwordsGather(7);
  217. }
  218. mcSkills.getInstance().XpCheck(attacker);
  219. }
  220. if(mcm.getInstance().isAxes(attacker.getItemInHand())
  221. && defender.getHealth() > 0
  222. && mcPermissions.getInstance().axes(attacker)){
  223. if(!mcConfig.getInstance().isMobSpawnTracked(x)){
  224. mcUsers.getProfile(attacker).addAxesGather(1);
  225. if(x instanceof Creeper)
  226. mcUsers.getProfile(attacker).addAxesGather(10);
  227. if(x instanceof Spider)
  228. mcUsers.getProfile(attacker).addAxesGather(7);
  229. if(x instanceof Skeleton)
  230. mcUsers.getProfile(attacker).addAxesGather(5);
  231. if(x instanceof Zombie)
  232. mcUsers.getProfile(attacker).addAxesGather(3);
  233. if(x instanceof PigZombie)
  234. mcUsers.getProfile(attacker).addAxesGather(7);
  235. }
  236. mcSkills.getInstance().XpCheck(attacker);
  237. }
  238. /*
  239. * AXE DAMAGE SCALING && LOOT CHECKS
  240. */
  241. if(mcm.getInstance().isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
  242. if(mcUsers.getProfile(attacker).getAxesInt() >= 500){
  243. event.setDamage(calculateDamage(event, 4));
  244. }
  245. }
  246. if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
  247. if(defender.getHealth() <= 0)
  248. return;
  249. if(mcUsers.getProfile(attacker).getUnarmedInt() >= 50 && mcUsers.getProfile(attacker).getUnarmedInt() < 100){
  250. event.setDamage(calculateDamage(event, 1));
  251. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 100 && mcUsers.getProfile(attacker).getUnarmedInt() < 200){
  252. event.setDamage(calculateDamage(event, 2));
  253. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 200 && mcUsers.getProfile(attacker).getUnarmedInt() < 325){
  254. event.setDamage(calculateDamage(event, 3));
  255. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 325 && mcUsers.getProfile(attacker).getUnarmedInt() < 475){
  256. event.setDamage(calculateDamage(event, 4));
  257. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 475 && mcUsers.getProfile(attacker).getUnarmedInt() < 600){
  258. event.setDamage(calculateDamage(event, 5));
  259. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 600 && mcUsers.getProfile(attacker).getUnarmedInt() < 775){
  260. event.setDamage(calculateDamage(event, 6));
  261. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 775 && mcUsers.getProfile(attacker).getUnarmedInt() < 950){
  262. event.setDamage(calculateDamage(event, 7));
  263. } else if(mcUsers.getProfile(attacker).getUnarmedInt() >= 950){
  264. event.setDamage(calculateDamage(event, 8));
  265. }
  266. //XP
  267. if(!mcConfig.getInstance().isMobSpawnTracked(x)){
  268. if(x instanceof Creeper)
  269. mcUsers.getProfile(attacker).addUnarmedGather(20);
  270. if(x instanceof Spider)
  271. mcUsers.getProfile(attacker).addUnarmedGather(15);
  272. if(x instanceof Skeleton)
  273. mcUsers.getProfile(attacker).addUnarmedGather(10);
  274. if(x instanceof Zombie)
  275. mcUsers.getProfile(attacker).addUnarmedGather(5);
  276. if(x instanceof PigZombie)
  277. mcUsers.getProfile(attacker).addUnarmedGather(15);
  278. }
  279. mcSkills.getInstance().XpCheck(attacker);
  280. }
  281. }
  282. }
  283. public void archeryCheck(EntityDamageByProjectileEvent event){
  284. Entity y = event.getDamager();
  285. Entity x = event.getEntity();
  286. if(x instanceof Player){
  287. Player defender = (Player)x;
  288. if(mcUsers.getProfile(defender) == null)
  289. mcUsers.addUser(defender);
  290. if(mcPermissions.getInstance().unarmed(defender) && defender.getItemInHand().getTypeId() == 0){
  291. if(defender != null && mcUsers.getProfile(defender).getUnarmedInt() >= 1000){
  292. if(Math.random() * 1000 <= 500){
  293. event.setCancelled(true);
  294. defender.sendMessage(ChatColor.WHITE+"**ARROW DEFLECT**");
  295. return;
  296. }
  297. } else if(defender != null && Math.random() * 1000 <= (mcUsers.getProfile(defender).getUnarmedInt() / 2)){
  298. event.setCancelled(true);
  299. defender.sendMessage(ChatColor.WHITE+"**ARROW DEFLECT**");
  300. return;
  301. }
  302. }
  303. }
  304. /*
  305. * If attacker is player
  306. */
  307. if(y instanceof Player){
  308. Player attacker = (Player)y;
  309. if(event.getProjectile().toString().equals("CraftArrow") && mcPermissions.getInstance().archery(attacker)){
  310. if(!mcConfig.getInstance().isTracked(x) && event.getDamage() > 0){
  311. mcConfig.getInstance().addArrowTrack(x, 0);
  312. if(attacker != null){
  313. if(Math.random() * 1000 <= mcUsers.getProfile(attacker).getArcheryInt()){
  314. mcConfig.getInstance().addArrowCount(x, 1);
  315. }
  316. }
  317. } else {
  318. if(event.getDamage() > 0){
  319. if(attacker != null){
  320. if(Math.random() * 1000 <= mcUsers.getProfile(attacker).getArcheryInt()){
  321. mcConfig.getInstance().addArrowCount(x, 1);
  322. }
  323. }
  324. }
  325. }
  326. if(event.getDamage() > 0 && Math.random() * 1500 <= mcUsers.getProfile(attacker).getArcheryInt()){
  327. if(x instanceof Player){
  328. Player Defender = (Player)x;
  329. if(!mcParty.getInstance().inSameParty(attacker, Defender)){
  330. event.getEntity().setFireTicks(120);
  331. attacker.sendMessage(ChatColor.RED+"**IGNITION**");
  332. Defender.sendMessage(ChatColor.DARK_RED+"You were struck by a burning arrow!");
  333. }
  334. } else {
  335. event.getEntity().setFireTicks(160);
  336. attacker.sendMessage(ChatColor.RED+"**IGNITION**");
  337. }
  338. }
  339. /*
  340. * Defender is Monster
  341. */
  342. if(x instanceof Monster){
  343. /*
  344. * TRACK ARROWS USED AGAINST THE ENTITY
  345. */
  346. if(mcUsers.getProfile(attacker).getArcheryInt() >= 50 && mcUsers.getProfile(attacker).getArcheryInt() < 250)
  347. event.setDamage(calculateDamage(event, 1));
  348. if(mcUsers.getProfile(attacker).getArcheryInt() >= 250 && mcUsers.getProfile(attacker).getArcheryInt() < 575)
  349. event.setDamage(calculateDamage(event, 2));
  350. if(mcUsers.getProfile(attacker).getArcheryInt() >= 575 && mcUsers.getProfile(attacker).getArcheryInt() < 725)
  351. event.setDamage(calculateDamage(event, 3));
  352. if(mcUsers.getProfile(attacker).getArcheryInt() >= 725 && mcUsers.getProfile(attacker).getArcheryInt() < 1000)
  353. event.setDamage(calculateDamage(event, 4));
  354. if(mcUsers.getProfile(attacker).getArcheryInt() >= 1000)
  355. event.setDamage(calculateDamage(event, 5));
  356. //XP
  357. if(!mcConfig.getInstance().isMobSpawnTracked(x)){
  358. if(x instanceof Creeper)
  359. mcUsers.getProfile(attacker).addArcheryGather(10);
  360. if(x instanceof Spider)
  361. mcUsers.getProfile(attacker).addArcheryGather(7);
  362. if(x instanceof Skeleton)
  363. mcUsers.getProfile(attacker).addArcheryGather(5);
  364. if(x instanceof Zombie)
  365. mcUsers.getProfile(attacker).addArcheryGather(3);
  366. if(x instanceof PigZombie)
  367. mcUsers.getProfile(attacker).addArcheryGather(7);
  368. }
  369. }
  370. /*
  371. * Defender is Animals
  372. */
  373. if(x instanceof Animals){
  374. Animals defender = (Animals)x;
  375. if(mcUsers.getProfile(attacker).getArcheryInt() >= 50 && mcUsers.getProfile(attacker).getArcheryInt() < 250)
  376. event.setDamage(calculateDamage(event, 1));
  377. if(mcUsers.getProfile(attacker).getArcheryInt() >= 250 && mcUsers.getProfile(attacker).getArcheryInt() < 575)
  378. event.setDamage(calculateDamage(event, 2));
  379. if(mcUsers.getProfile(attacker).getArcheryInt() >= 575 && mcUsers.getProfile(attacker).getArcheryInt() < 725)
  380. event.setDamage(calculateDamage(event, 3));
  381. if(mcUsers.getProfile(attacker).getArcheryInt() >= 725 && mcUsers.getProfile(attacker).getArcheryInt() < 1000)
  382. event.setDamage(calculateDamage(event, 4));
  383. if(mcUsers.getProfile(attacker).getArcheryInt() >= 1000)
  384. event.setDamage(calculateDamage(event, 5));
  385. }
  386. /*
  387. * Defender is Squid
  388. */
  389. if(x instanceof Squid){
  390. if(mcUsers.getProfile(attacker).getArcheryInt() >= 50 && mcUsers.getProfile(attacker).getArcheryInt() < 250)
  391. event.setDamage(calculateDamage(event, 1));
  392. if(mcUsers.getProfile(attacker).getArcheryInt() >= 250 && mcUsers.getProfile(attacker).getArcheryInt() < 575)
  393. event.setDamage(calculateDamage(event, 2));
  394. if(mcUsers.getProfile(attacker).getArcheryInt() >= 575 && mcUsers.getProfile(attacker).getArcheryInt() < 725)
  395. event.setDamage(calculateDamage(event, 3));
  396. if(mcUsers.getProfile(attacker).getArcheryInt() >= 725 && mcUsers.getProfile(attacker).getArcheryInt() < 1000)
  397. event.setDamage(calculateDamage(event, 4));
  398. if(mcUsers.getProfile(attacker).getArcheryInt() >= 1000)
  399. event.setDamage(calculateDamage(event, 5));
  400. }
  401. /*
  402. * Attacker is Player
  403. */
  404. if(x instanceof Player){
  405. if(mcLoadProperties.pvp == false){
  406. event.setCancelled(true);
  407. return;
  408. }
  409. Player defender = (Player)x;
  410. /*
  411. * Stuff for the daze proc
  412. */
  413. if(mcUsers.getProfile(attacker).inParty() && mcUsers.getProfile(defender).inParty()){
  414. if(mcParty.getInstance().inSameParty(defender, attacker)){
  415. event.setCancelled(true);
  416. return;
  417. }
  418. }
  419. /*
  420. * PVP XP
  421. */
  422. if(mcLoadProperties.pvpxp && !mcParty.getInstance().inSameParty(attacker, defender)){
  423. mcUsers.getProfile(attacker).addArcheryGather((event.getDamage() * 3) * mcLoadProperties.pvpxprewardmodifier);
  424. }
  425. /*
  426. * DAZE PROC
  427. */
  428. Location loc = defender.getLocation();
  429. if(Math.random() * 10 > 5){
  430. loc.setPitch(90);
  431. } else {
  432. loc.setPitch(-90);
  433. }
  434. if(mcUsers.getProfile(attacker).getArcheryInt() >= 1000){
  435. if(Math.random() * 1000 <= 500){
  436. defender.teleportTo(loc);
  437. defender.sendMessage(ChatColor.DARK_RED+"Touched Fuzzy. Felt Dizzy.");
  438. attacker.sendMessage("Target was "+ChatColor.DARK_RED+"Dazed");
  439. }
  440. } else if(Math.random() * 2000 <= mcUsers.getProfile(attacker).getArcheryInt()){
  441. defender.teleportTo(loc);
  442. defender.sendMessage(ChatColor.DARK_RED+"Touched Fuzzy. Felt Dizzy.");
  443. attacker.sendMessage("Target was "+ChatColor.DARK_RED+"Dazed");
  444. }
  445. if(mcUsers.getProfile(attacker).getArcheryInt() >= 50 && mcUsers.getProfile(attacker).getArcheryInt() < 250)
  446. event.setDamage(calculateDamage(event, 1));
  447. if(mcUsers.getProfile(attacker).getArcheryInt() >= 250 && mcUsers.getProfile(attacker).getArcheryInt() < 575)
  448. event.setDamage(calculateDamage(event, 2));
  449. if(mcUsers.getProfile(attacker).getArcheryInt() >= 575 && mcUsers.getProfile(attacker).getArcheryInt() < 725)
  450. event.setDamage(calculateDamage(event, 3));
  451. if(mcUsers.getProfile(attacker).getArcheryInt() >= 725 && mcUsers.getProfile(attacker).getArcheryInt() < 1000)
  452. event.setDamage(calculateDamage(event, 4));
  453. if(mcUsers.getProfile(attacker).getArcheryInt() >= 1000)
  454. event.setDamage(calculateDamage(event, 5));
  455. }
  456. }
  457. mcSkills.getInstance().XpCheck(attacker);
  458. }
  459. }
  460. public boolean simulateUnarmedProc(Player player){
  461. if(mcUsers.getProfile(player).getUnarmedInt() >= 750){
  462. if(Math.random() * 1000 <= 750){
  463. return true;
  464. }
  465. } else {
  466. if(Math.random() * 1000 <= mcUsers.getProfile(player).getUnarmedInt()){
  467. return true;
  468. }
  469. }
  470. return false;
  471. }
  472. public void bleedCheck(Player attacker, Entity x){
  473. if(mcPermissions.getInstance().swords(attacker) && mcm.getInstance().isSwords(attacker.getItemInHand()) && !mcConfig.getInstance().isBleedTracked(x)){
  474. if(mcUsers.getProfile(attacker).getSwordsInt() >= 750){
  475. if(Math.random() * 1000 >= 750){
  476. mcConfig.getInstance().addBleedTrack(x);
  477. if(x instanceof Player){
  478. Player target = (Player)x;
  479. mcUsers.getProfile(target).setBleedTicks(6);
  480. }
  481. attacker.sendMessage(ChatColor.RED+"**Your target is bleeding**");
  482. }
  483. } else if (Math.random() * 1000 <= mcUsers.getProfile(attacker).getSwordsInt()){
  484. mcConfig.getInstance().addBleedTrack(x);
  485. if(x instanceof Player){
  486. Player target = (Player)x;
  487. mcUsers.getProfile(target).setBleedTicks(4);
  488. }
  489. attacker.sendMessage(ChatColor.RED+"**Your target is bleeding**");
  490. }
  491. }
  492. }
  493. public int calculateDamage(EntityDamageEvent event, int dmg){
  494. return event.getDamage() + dmg;
  495. }
  496. public void applyAoeDamage(Player attacker, EntityDamageByEntityEvent event, Entity x){
  497. int targets = 0;
  498. targets = mcm.getInstance().getTier(attacker);
  499. for(Entity derp : x.getWorld().getEntities()){
  500. if(mcm.getInstance().getDistance(x.getLocation(), derp.getLocation()) < 5){
  501. if(derp instanceof Player){
  502. Player target = (Player)derp;
  503. if(mcParty.getInstance().inSameParty(attacker, target))
  504. continue;
  505. if(!target.getName().equals(attacker.getName()) && targets >= 1){
  506. target.damage(event.getDamage() / 2);
  507. target.sendMessage(ChatColor.DARK_RED+"Struck by CLEAVE!");
  508. targets--;
  509. }
  510. }
  511. if(derp instanceof Monster && targets >= 1){
  512. Monster target = (Monster)derp;
  513. target.damage(event.getDamage() / 2);
  514. targets--;
  515. }
  516. if(derp instanceof Animals && targets >= 1){
  517. Animals target = (Animals)derp;
  518. target.damage(event.getDamage() / 2);
  519. targets--;
  520. }
  521. }
  522. }
  523. }
  524. public void applySerratedStrikes(Player attacker, EntityDamageByEntityEvent event, Entity x){
  525. int targets = 0;
  526. targets = mcm.getInstance().getTier(attacker);
  527. for(Entity derp : x.getWorld().getEntities()){
  528. if(mcm.getInstance().getDistance(x.getLocation(), derp.getLocation()) < 5){
  529. if(derp instanceof Player){
  530. Player target = (Player)derp;
  531. if(mcParty.getInstance().inSameParty(attacker, target))
  532. continue;
  533. if(!target.getName().equals(attacker.getName()) && targets >= 1){
  534. target.damage(event.getDamage() / 4);
  535. target.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!");
  536. if(!mcConfig.getInstance().isBleedTracked(derp)){
  537. mcConfig.getInstance().addBleedTrack(x);
  538. mcUsers.getProfile(target).setBleedTicks(12);
  539. }
  540. targets--;
  541. }
  542. }
  543. if(derp instanceof Monster && targets >= 1){
  544. if(!mcConfig.getInstance().isBleedTracked(derp))
  545. mcConfig.getInstance().addBleedTrack(x);
  546. Monster target = (Monster)derp;
  547. target.damage(event.getDamage() / 4);
  548. targets--;
  549. }
  550. if(derp instanceof Animals && targets >= 1){
  551. if(!mcConfig.getInstance().isBleedTracked(derp))
  552. mcConfig.getInstance().addBleedTrack(x);
  553. Animals target = (Animals)derp;
  554. target.damage(event.getDamage() / 4);
  555. targets--;
  556. }
  557. }
  558. }
  559. }
  560. public void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Entity x){
  561. if(mcm.getInstance().isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
  562. if(mcUsers.getProfile(attacker).getAxesInt() >= 750){
  563. if(Math.random() * 1000 <= 750){
  564. if(x instanceof Player){
  565. Player player = (Player)x;
  566. player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
  567. }
  568. if(x instanceof Player){
  569. event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
  570. } else {
  571. event.setDamage(event.getDamage() * 2);
  572. }
  573. attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
  574. }
  575. } else if(Math.random() * 1000 <= mcUsers.getProfile(attacker).getAxesInt()){
  576. if(x instanceof Player){
  577. Player player = (Player)x;
  578. player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
  579. }
  580. if(x instanceof Player){
  581. event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
  582. } else {
  583. event.setDamage(event.getDamage() * 2);
  584. }
  585. attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
  586. }
  587. }
  588. }
  589. public void parryCheck(Player defender, EntityDamageByEntityEvent event, Entity y){
  590. if(defender != null && mcm.getInstance().isSwords(defender.getItemInHand())
  591. && event.getDamage() > 0
  592. && mcPermissions.getInstance().swords(defender)){
  593. if(defender != null && mcUsers.getProfile(defender).getSwordsInt() >= 50 && mcUsers.getProfile(defender).getSwordsInt() < 250){
  594. if(Math.random() * 100 > 95){
  595. event.setCancelled(true);
  596. defender.sendMessage(ChatColor.YELLOW+"*CLANG* SUCCESSFUL PARRY *CLANG*");
  597. defender.getItemInHand().setDurability((short) (defender.getItemInHand().getDurability() + 1));
  598. if(y instanceof Player){
  599. Player attacker = (Player)y;
  600. attacker.sendMessage(ChatColor.DARK_RED+"**TARGET HAS PARRIED THAT ATTACK**");
  601. }
  602. return;
  603. }
  604. }
  605. if(defender != null && mcUsers.getProfile(defender).getSwordsInt() >= 250 && mcUsers.getProfile(defender).getSwordsInt() < 450){
  606. if(Math.random() * 100 > 90){
  607. event.setCancelled(true);
  608. defender.sendMessage(ChatColor.YELLOW+"*CLANG* SUCCESSFUL PARRY *CLANG*");
  609. defender.getItemInHand().setDurability((short) (defender.getItemInHand().getDurability() + 1));
  610. if(y instanceof Player){
  611. Player attacker = (Player)y;
  612. attacker.sendMessage(ChatColor.DARK_RED+"**TARGET HAS PARRIED THAT ATTACK**");
  613. }
  614. return;
  615. }
  616. }
  617. if(defender != null && mcUsers.getProfile(defender).getSwordsInt() >= 450 && mcUsers.getProfile(defender).getSwordsInt() < 775){
  618. if(Math.random() * 100 > 85){
  619. event.setCancelled(true);
  620. defender.sendMessage(ChatColor.YELLOW+"*CLANG* SUCCESSFUL PARRY *CLANG*");
  621. defender.getItemInHand().setDurability((short) (defender.getItemInHand().getDurability() + 1));
  622. if(y instanceof Player){
  623. Player attacker = (Player)y;
  624. attacker.sendMessage(ChatColor.DARK_RED+"**TARGET HAS PARRIED THAT ATTACK**");
  625. }
  626. return;
  627. }
  628. }
  629. if(defender != null && mcUsers.getProfile(defender).getSwordsInt() >= 775){
  630. if(Math.random() * 100 > 80){
  631. event.setCancelled(true);
  632. defender.sendMessage(ChatColor.YELLOW+"*CLANG* SUCCESSFUL PARRY *CLANG*");
  633. defender.getItemInHand().setDurability((short) (defender.getItemInHand().getDurability() + 1));
  634. if(y instanceof Player){
  635. Player attacker = (Player)y;
  636. attacker.sendMessage(ChatColor.DARK_RED+"**TARGET HAS PARRIED THAT ATTACK**");
  637. }
  638. return;
  639. }
  640. }
  641. }
  642. }
  643. public void bleedSimulate(){
  644. for(Entity x : mcConfig.getInstance().getBleedTracked()){
  645. if(x == null)
  646. continue;
  647. if(mcm.getInstance().getHealth(x) <= 0)
  648. continue;
  649. if(x instanceof Animals){
  650. Animals animals = (Animals)x;
  651. if(animals.getHealth() >= 1){
  652. animals.damage(1);
  653. }
  654. if(animals.getHealth() <= 0){
  655. animals.damage(1);
  656. }
  657. }
  658. if(x instanceof Monster){
  659. Monster monster = (Monster)x;
  660. if(monster.getHealth() >= 1){
  661. monster.damage(1);
  662. }
  663. if(monster.getHealth() <= 0){
  664. monster.damage(1);
  665. }
  666. }
  667. if(x instanceof Player){
  668. Player player = (Player)x;
  669. if(player.getHealth() >= 1 && mcUsers.getProfile(player).getBleedTicks() >= 1){
  670. player.damage(1);
  671. player.sendMessage(ChatColor.RED+"**BLEED**");
  672. if(player.getHealth() <= 0){
  673. mcUsers.getProfile(player).setBleedTicks(0);
  674. }
  675. if(mcUsers.getProfile(player).getBleedTicks() >= 1){
  676. mcUsers.getProfile(player).setBleedTicks(mcUsers.getProfile(player).getBleedTicks() - 1);
  677. }
  678. }
  679. }
  680. }
  681. }
  682. }