mcCombat.java 25 KB

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