Fishing.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723
  1. package com.gmail.nossr50.skills;
  2. import org.bukkit.Material;
  3. import org.bukkit.World;
  4. import org.bukkit.craftbukkit.entity.CraftItem;
  5. import org.bukkit.enchantments.Enchantment;
  6. import org.bukkit.entity.Chicken;
  7. import org.bukkit.entity.Cow;
  8. import org.bukkit.entity.Creeper;
  9. import org.bukkit.entity.LivingEntity;
  10. import org.bukkit.entity.Pig;
  11. import org.bukkit.entity.Player;
  12. import org.bukkit.entity.Sheep;
  13. import org.bukkit.entity.Skeleton;
  14. import org.bukkit.entity.Spider;
  15. import org.bukkit.event.player.PlayerFishEvent;
  16. import org.bukkit.inventory.ItemStack;
  17. import org.bukkit.material.Wool;
  18. import com.gmail.nossr50.Users;
  19. import com.gmail.nossr50.config.LoadProperties;
  20. import com.gmail.nossr50.datatypes.PlayerProfile;
  21. import com.gmail.nossr50.datatypes.SkillType;
  22. import com.gmail.nossr50.locale.mcLocale;
  23. public class Fishing {
  24. //Return the fishing tier for the player
  25. public static int getFishingLootTier(PlayerProfile PP)
  26. {
  27. int lvl = PP.getSkillLevel(SkillType.FISHING);
  28. if(lvl < 100)
  29. {
  30. return 1;
  31. } else if (lvl >= 100 && lvl < 300)
  32. {
  33. return 2;
  34. } else if (lvl >= 300 && lvl < 600)
  35. {
  36. return 3;
  37. } else if (lvl >= 600 && lvl < 900)
  38. {
  39. return 4;
  40. } else
  41. {
  42. return 5;
  43. }
  44. }
  45. public static void getFishingResults(Player player, PlayerFishEvent event)
  46. {
  47. switch(getFishingLootTier(Users.getProfile(player)))
  48. {
  49. case 1:
  50. getFishingResultsTier1(player, event);
  51. break;
  52. case 2:
  53. getFishingResultsTier2(player, event);
  54. break;
  55. case 3:
  56. getFishingResultsTier3(player, event);
  57. break;
  58. case 4:
  59. getFishingResultsTier4(player, event);
  60. break;
  61. case 5:
  62. getFishingResultsTier5(player, event);
  63. break;
  64. }
  65. player.getWorld().dropItem(player.getLocation(), new ItemStack(Material.RAW_FISH, 1));
  66. Users.getProfile(player).addXP(SkillType.FISHING, LoadProperties.mfishing, player);
  67. Skills.XpCheckSkill(SkillType.FISHING, player);
  68. }
  69. private static void getFishingResultsTier1(Player player, PlayerFishEvent event)
  70. {
  71. int randomNum = (int)(Math.random() * 15);
  72. CraftItem theCatch = (CraftItem)event.getCaught();
  73. if(Math.random() * 100 < 20)
  74. {
  75. switch(randomNum)
  76. {
  77. case 1:
  78. theCatch.setItemStack(new ItemStack(Material.LEATHER_BOOTS, 1));
  79. break;
  80. case 2:
  81. theCatch.setItemStack(new ItemStack(Material.LEATHER_HELMET, 1));
  82. break;
  83. case 3:
  84. theCatch.setItemStack(new ItemStack(Material.LEATHER_LEGGINGS, 1));
  85. break;
  86. case 4:
  87. theCatch.setItemStack(new ItemStack(Material.LEATHER_CHESTPLATE, 1));
  88. break;
  89. case 5:
  90. theCatch.setItemStack(new ItemStack(Material.WOOD_AXE, 1));
  91. break;
  92. case 6:
  93. theCatch.setItemStack(new ItemStack(Material.WOOD_PICKAXE, 1));
  94. break;
  95. case 7:
  96. theCatch.setItemStack(new ItemStack(Material.WOOD_SWORD, 1));
  97. break;
  98. case 8:
  99. theCatch.setItemStack(new ItemStack(Material.WOOD_HOE, 1));
  100. break;
  101. case 9:
  102. theCatch.setItemStack(new ItemStack(Material.WOOD_SPADE, 1));
  103. break;
  104. case 10:
  105. theCatch.setItemStack(new ItemStack(Material.STONE_AXE, 1));
  106. break;
  107. case 11:
  108. theCatch.setItemStack(new ItemStack(Material.STONE_PICKAXE, 1));
  109. break;
  110. case 12:
  111. theCatch.setItemStack(new ItemStack(Material.STONE_SWORD, 1));
  112. break;
  113. case 13:
  114. theCatch.setItemStack(new ItemStack(Material.STONE_HOE, 1));
  115. break;
  116. case 14:
  117. theCatch.setItemStack(new ItemStack(Material.STONE_SPADE, 1));
  118. break;
  119. }
  120. } else
  121. {
  122. theCatch.setItemStack(new ItemStack(Material.RAW_FISH));
  123. }
  124. //Change durability to random value
  125. theCatch.getItemStack().setDurability((short) (Math.random() * theCatch.getItemStack().getType().getMaxDurability())); //Change the damage value
  126. }
  127. private static void getFishingResultsTier2(Player player, PlayerFishEvent event)
  128. {
  129. int randomNum = (int)(Math.random() * 20);
  130. CraftItem theCatch = (CraftItem)event.getCaught();
  131. if(Math.random() * 100 < 25)
  132. {
  133. switch(randomNum)
  134. {
  135. case 1:
  136. theCatch.setItemStack(new ItemStack(Material.LEATHER_BOOTS, 1));
  137. break;
  138. case 2:
  139. theCatch.setItemStack(new ItemStack(Material.LEATHER_HELMET, 1));
  140. break;
  141. case 3:
  142. theCatch.setItemStack(new ItemStack(Material.LEATHER_LEGGINGS, 1));
  143. break;
  144. case 4:
  145. theCatch.setItemStack(new ItemStack(Material.LEATHER_CHESTPLATE, 1));
  146. break;
  147. case 5:
  148. theCatch.setItemStack(new ItemStack(Material.IRON_AXE, 1));
  149. break;
  150. case 6:
  151. theCatch.setItemStack(new ItemStack(Material.IRON_PICKAXE, 1));
  152. break;
  153. case 7:
  154. theCatch.setItemStack(new ItemStack(Material.IRON_SWORD, 1));
  155. break;
  156. case 8:
  157. theCatch.setItemStack(new ItemStack(Material.IRON_HOE, 1));
  158. break;
  159. case 9:
  160. theCatch.setItemStack(new ItemStack(Material.IRON_SPADE, 1));
  161. break;
  162. case 10:
  163. theCatch.setItemStack(new ItemStack(Material.STONE_AXE, 1));
  164. break;
  165. case 11:
  166. theCatch.setItemStack(new ItemStack(Material.STONE_PICKAXE, 1));
  167. break;
  168. case 12:
  169. theCatch.setItemStack(new ItemStack(Material.STONE_SWORD, 1));
  170. break;
  171. case 13:
  172. theCatch.setItemStack(new ItemStack(Material.STONE_HOE, 1));
  173. break;
  174. case 14:
  175. theCatch.setItemStack(new ItemStack(Material.STONE_SPADE, 1));
  176. break;
  177. case 15:
  178. theCatch.setItemStack(new ItemStack(Material.IRON_BOOTS, 1));
  179. break;
  180. case 16:
  181. theCatch.setItemStack(new ItemStack(Material.IRON_LEGGINGS, 1));
  182. break;
  183. case 17:
  184. theCatch.setItemStack(new ItemStack(Material.IRON_CHESTPLATE, 1));
  185. break;
  186. case 18:
  187. theCatch.setItemStack(new ItemStack(Material.IRON_HELMET, 1));
  188. break;
  189. case 19:
  190. theCatch.setItemStack(new ItemStack(Material.ENDER_PEARL, 1));
  191. break;
  192. }
  193. } else
  194. {
  195. theCatch.setItemStack(new ItemStack(Material.RAW_FISH, 1));
  196. }
  197. //Change durability to random value
  198. theCatch.getItemStack().setDurability((short) (Math.random() * theCatch.getItemStack().getType().getMaxDurability())); //Change the damage value
  199. }
  200. private static void getFishingResultsTier3(Player player, PlayerFishEvent event)
  201. {
  202. int randomNum = (int)(Math.random() * 24);
  203. CraftItem theCatch = (CraftItem)event.getCaught();
  204. if(Math.random() * 100 < 30)
  205. {
  206. switch(randomNum)
  207. {
  208. case 1:
  209. theCatch.setItemStack(new ItemStack(Material.GOLD_BOOTS, 1));
  210. break;
  211. case 2:
  212. theCatch.setItemStack(new ItemStack(Material.GOLD_HELMET, 1));
  213. break;
  214. case 3:
  215. theCatch.setItemStack(new ItemStack(Material.GOLD_LEGGINGS, 1));
  216. break;
  217. case 4:
  218. theCatch.setItemStack(new ItemStack(Material.GOLD_CHESTPLATE, 1));
  219. break;
  220. case 5:
  221. theCatch.setItemStack(new ItemStack(Material.IRON_AXE, 1));
  222. break;
  223. case 6:
  224. theCatch.setItemStack(new ItemStack(Material.IRON_PICKAXE, 1));
  225. break;
  226. case 7:
  227. theCatch.setItemStack(new ItemStack(Material.IRON_SWORD, 1));
  228. break;
  229. case 8:
  230. theCatch.setItemStack(new ItemStack(Material.IRON_HOE, 1));
  231. break;
  232. case 9:
  233. theCatch.setItemStack(new ItemStack(Material.IRON_SPADE, 1));
  234. break;
  235. case 10:
  236. theCatch.setItemStack(new ItemStack(Material.GOLD_AXE, 1));
  237. break;
  238. case 11:
  239. theCatch.setItemStack(new ItemStack(Material.GOLD_PICKAXE, 1));
  240. break;
  241. case 12:
  242. theCatch.setItemStack(new ItemStack(Material.GOLD_SWORD, 1));
  243. break;
  244. case 13:
  245. theCatch.setItemStack(new ItemStack(Material.GOLD_HOE, 1));
  246. break;
  247. case 14:
  248. theCatch.setItemStack(new ItemStack(Material.GOLD_SPADE, 1));
  249. break;
  250. case 15:
  251. theCatch.setItemStack(new ItemStack(Material.IRON_BOOTS, 1));
  252. break;
  253. case 16:
  254. theCatch.setItemStack(new ItemStack(Material.IRON_LEGGINGS, 1));
  255. break;
  256. case 17:
  257. theCatch.setItemStack(new ItemStack(Material.IRON_CHESTPLATE, 1));
  258. break;
  259. case 18:
  260. theCatch.setItemStack(new ItemStack(Material.IRON_HELMET, 1));
  261. break;
  262. case 19:
  263. theCatch.setItemStack(new ItemStack(Material.ENDER_PEARL, 1));
  264. break;
  265. case 20:
  266. theCatch.setItemStack(new ItemStack(Material.BLAZE_ROD, 1));
  267. break;
  268. case 21:
  269. theCatch.setItemStack(new ItemStack(Material.RECORD_3, 1));
  270. break;
  271. case 22:
  272. theCatch.setItemStack(new ItemStack(Material.RECORD_4, 1));
  273. break;
  274. case 23:
  275. theCatch.setItemStack(new ItemStack(Material.RECORD_5, 1));
  276. break;
  277. }
  278. }
  279. else
  280. {
  281. theCatch.setItemStack(new ItemStack(Material.RAW_FISH, 1));
  282. }
  283. //Change durability to random value
  284. theCatch.getItemStack().setDurability((short) (Math.random() * theCatch.getItemStack().getType().getMaxDurability())); //Change the damage value
  285. }
  286. private static void getFishingResultsTier4(Player player, PlayerFishEvent event)
  287. {
  288. int randomNum = (int)(Math.random() * 41);
  289. CraftItem theCatch = (CraftItem)event.getCaught();
  290. if(Math.random() * 100 < 35)
  291. {
  292. switch(randomNum)
  293. {
  294. case 1:
  295. theCatch.setItemStack(new ItemStack(Material.GOLD_BOOTS, 1));
  296. break;
  297. case 2:
  298. theCatch.setItemStack(new ItemStack(Material.GOLD_HELMET, 1));
  299. break;
  300. case 3:
  301. theCatch.setItemStack(new ItemStack(Material.GOLD_LEGGINGS, 1));
  302. break;
  303. case 4:
  304. theCatch.setItemStack(new ItemStack(Material.GOLD_CHESTPLATE, 1));
  305. break;
  306. case 5:
  307. theCatch.setItemStack(new ItemStack(Material.IRON_AXE, 1));
  308. break;
  309. case 6:
  310. theCatch.setItemStack(new ItemStack(Material.IRON_PICKAXE, 1));
  311. break;
  312. case 7:
  313. theCatch.setItemStack(new ItemStack(Material.IRON_SWORD, 1));
  314. break;
  315. case 8:
  316. theCatch.setItemStack(new ItemStack(Material.IRON_HOE, 1));
  317. break;
  318. case 9:
  319. theCatch.setItemStack(new ItemStack(Material.IRON_SPADE, 1));
  320. break;
  321. case 10:
  322. theCatch.setItemStack(new ItemStack(Material.GOLD_AXE, 1));
  323. break;
  324. case 11:
  325. theCatch.setItemStack(new ItemStack(Material.GOLD_PICKAXE, 1));
  326. break;
  327. case 12:
  328. theCatch.setItemStack(new ItemStack(Material.GOLD_SWORD, 1));
  329. break;
  330. case 13:
  331. theCatch.setItemStack(new ItemStack(Material.GOLD_HOE, 1));
  332. break;
  333. case 14:
  334. theCatch.setItemStack(new ItemStack(Material.GOLD_SPADE, 1));
  335. break;
  336. case 15:
  337. theCatch.setItemStack(new ItemStack(Material.IRON_BOOTS, 1));
  338. break;
  339. case 16:
  340. theCatch.setItemStack(new ItemStack(Material.IRON_LEGGINGS, 1));
  341. break;
  342. case 17:
  343. theCatch.setItemStack(new ItemStack(Material.IRON_CHESTPLATE, 1));
  344. break;
  345. case 18:
  346. theCatch.setItemStack(new ItemStack(Material.IRON_HELMET, 1));
  347. break;
  348. case 19:
  349. theCatch.setItemStack(new ItemStack(Material.ENDER_PEARL, 1));
  350. break;
  351. case 20:
  352. theCatch.setItemStack(new ItemStack(Material.BLAZE_ROD, 1));
  353. break;
  354. case 21:
  355. theCatch.setItemStack(new ItemStack(Material.RECORD_3, 1));
  356. break;
  357. case 22:
  358. theCatch.setItemStack(new ItemStack(Material.RECORD_4, 1));
  359. break;
  360. case 23:
  361. theCatch.setItemStack(new ItemStack(Material.RECORD_5, 1));
  362. break;
  363. case 24:
  364. theCatch.setItemStack(new ItemStack(Material.DIAMOND_BOOTS, 1));
  365. break;
  366. case 25:
  367. theCatch.setItemStack(new ItemStack(Material.DIAMOND_HELMET, 1));
  368. break;
  369. case 26:
  370. theCatch.setItemStack(new ItemStack(Material.DIAMOND_LEGGINGS, 1));
  371. break;
  372. case 27:
  373. theCatch.setItemStack(new ItemStack(Material.DIAMOND_CHESTPLATE, 1));
  374. break;
  375. case 28:
  376. theCatch.setItemStack(new ItemStack(Material.DIAMOND_AXE, 1));
  377. break;
  378. case 29:
  379. theCatch.setItemStack(new ItemStack(Material.DIAMOND_PICKAXE, 1));
  380. break;
  381. case 30:
  382. theCatch.setItemStack(new ItemStack(Material.DIAMOND_SWORD, 1));
  383. break;
  384. case 31:
  385. theCatch.setItemStack(new ItemStack(Material.DIAMOND_HOE, 1));
  386. break;
  387. case 32:
  388. theCatch.setItemStack(new ItemStack(Material.DIAMOND_SPADE, 1));
  389. break;
  390. case 33:
  391. theCatch.setItemStack(new ItemStack(Material.RECORD_6, 1));
  392. break;
  393. case 34:
  394. theCatch.setItemStack(new ItemStack(Material.RECORD_7, 1));
  395. break;
  396. case 35:
  397. theCatch.setItemStack(new ItemStack(Material.RECORD_8, 1));
  398. break;
  399. case 36:
  400. theCatch.setItemStack(new ItemStack(Material.RECORD_9, 1));
  401. break;
  402. case 37:
  403. theCatch.setItemStack(new ItemStack(Material.RECORD_10, 1));
  404. break;
  405. case 38:
  406. theCatch.setItemStack(new ItemStack(Material.RECORD_11, 1));
  407. break;
  408. case 39:
  409. theCatch.setItemStack(new ItemStack(Material.REDSTONE_WIRE, 64));
  410. break;
  411. case 40:
  412. theCatch.setItemStack(new ItemStack(Material.DIAMOND, (int)(Math.random() * 10)));
  413. break;
  414. }
  415. } else
  416. {
  417. theCatch.setItemStack(new ItemStack(Material.RAW_FISH, 1));
  418. }
  419. //Change durability to random value
  420. theCatch.getItemStack().setDurability((short) (Math.random() * theCatch.getItemStack().getType().getMaxDurability())); //Change the damage value
  421. }
  422. private static void getFishingResultsTier5(Player player, PlayerFishEvent event)
  423. {
  424. int randomNum = (int)(Math.random() * 50);
  425. CraftItem theCatch = (CraftItem)event.getCaught();
  426. if(Math.random() * 100 < 40)
  427. {
  428. switch(randomNum)
  429. {
  430. case 1:
  431. theCatch.setItemStack(new ItemStack(Material.GOLD_BOOTS, 1));
  432. break;
  433. case 2:
  434. theCatch.setItemStack(new ItemStack(Material.GOLD_HELMET, 1));
  435. break;
  436. case 3:
  437. theCatch.setItemStack(new ItemStack(Material.GOLD_LEGGINGS, 1));
  438. break;
  439. case 4:
  440. theCatch.setItemStack(new ItemStack(Material.GOLD_CHESTPLATE, 1));
  441. break;
  442. case 5:
  443. theCatch.setItemStack(new ItemStack(Material.IRON_AXE, 1));
  444. break;
  445. case 6:
  446. theCatch.setItemStack(new ItemStack(Material.IRON_PICKAXE, 1));
  447. break;
  448. case 7:
  449. theCatch.setItemStack(new ItemStack(Material.IRON_SWORD, 1));
  450. break;
  451. case 8:
  452. theCatch.setItemStack(new ItemStack(Material.IRON_HOE, 1));
  453. break;
  454. case 9:
  455. theCatch.setItemStack(new ItemStack(Material.IRON_SPADE, 1));
  456. break;
  457. case 10:
  458. theCatch.setItemStack(new ItemStack(Material.GOLD_AXE, 1));
  459. break;
  460. case 11:
  461. theCatch.setItemStack(new ItemStack(Material.GOLD_PICKAXE, 1));
  462. break;
  463. case 12:
  464. theCatch.setItemStack(new ItemStack(Material.GOLD_SWORD, 1));
  465. break;
  466. case 13:
  467. theCatch.setItemStack(new ItemStack(Material.GOLD_HOE, 1));
  468. break;
  469. case 14:
  470. theCatch.setItemStack(new ItemStack(Material.GOLD_SPADE, 1));
  471. break;
  472. case 15:
  473. theCatch.setItemStack(new ItemStack(Material.IRON_BOOTS, 1));
  474. break;
  475. case 16:
  476. theCatch.setItemStack(new ItemStack(Material.IRON_LEGGINGS, 1));
  477. break;
  478. case 17:
  479. theCatch.setItemStack(new ItemStack(Material.IRON_CHESTPLATE, 1));
  480. break;
  481. case 18:
  482. theCatch.setItemStack(new ItemStack(Material.IRON_HELMET, 1));
  483. break;
  484. case 19:
  485. theCatch.setItemStack(new ItemStack(Material.ENDER_PEARL, 1));
  486. break;
  487. case 20:
  488. theCatch.setItemStack(new ItemStack(Material.BLAZE_ROD, 1));
  489. break;
  490. case 21:
  491. theCatch.setItemStack(new ItemStack(Material.RECORD_3, 1));
  492. break;
  493. case 22:
  494. theCatch.setItemStack(new ItemStack(Material.RECORD_4, 1));
  495. break;
  496. case 23:
  497. theCatch.setItemStack(new ItemStack(Material.RECORD_5, 1));
  498. break;
  499. case 24:
  500. theCatch.setItemStack(new ItemStack(Material.DIAMOND_BOOTS, 1));
  501. break;
  502. case 25:
  503. theCatch.setItemStack(new ItemStack(Material.DIAMOND_HELMET, 1));
  504. break;
  505. case 26:
  506. theCatch.setItemStack(new ItemStack(Material.DIAMOND_LEGGINGS, 1));
  507. break;
  508. case 27:
  509. theCatch.setItemStack(new ItemStack(Material.DIAMOND_CHESTPLATE, 1));
  510. break;
  511. case 28:
  512. theCatch.setItemStack(new ItemStack(Material.DIAMOND_AXE, 1));
  513. break;
  514. case 29:
  515. theCatch.setItemStack(new ItemStack(Material.DIAMOND_PICKAXE, 1));
  516. break;
  517. case 30:
  518. theCatch.setItemStack(new ItemStack(Material.DIAMOND_SWORD, 1));
  519. break;
  520. case 31:
  521. theCatch.setItemStack(new ItemStack(Material.DIAMOND_HOE, 1));
  522. break;
  523. case 32:
  524. theCatch.setItemStack(new ItemStack(Material.DIAMOND_SPADE, 1));
  525. break;
  526. case 33:
  527. theCatch.setItemStack(new ItemStack(Material.RECORD_6, 1));
  528. break;
  529. case 34:
  530. theCatch.setItemStack(new ItemStack(Material.RECORD_7, 1));
  531. break;
  532. case 35:
  533. theCatch.setItemStack(new ItemStack(Material.RECORD_8, 1));
  534. break;
  535. case 36:
  536. theCatch.setItemStack(new ItemStack(Material.RECORD_9, 1));
  537. break;
  538. case 37:
  539. theCatch.setItemStack(new ItemStack(Material.RECORD_10, 1));
  540. break;
  541. case 38:
  542. theCatch.setItemStack(new ItemStack(Material.RECORD_11, 1));
  543. break;
  544. case 39:
  545. theCatch.setItemStack(new ItemStack(Material.REDSTONE_WIRE, 64));
  546. break;
  547. case 40:
  548. theCatch.setItemStack(new ItemStack(Material.DIAMOND, (int)(Math.random() * 20)));
  549. break;
  550. case 41:
  551. theCatch.setItemStack(new ItemStack(Material.DIAMOND_BOOTS, 1));
  552. break;
  553. case 42:
  554. theCatch.setItemStack(new ItemStack(Material.DIAMOND_HELMET, 1));
  555. break;
  556. case 43:
  557. theCatch.setItemStack(new ItemStack(Material.DIAMOND_LEGGINGS, 1));
  558. break;
  559. case 44:
  560. theCatch.setItemStack(new ItemStack(Material.DIAMOND_CHESTPLATE, 1));
  561. break;
  562. case 45:
  563. theCatch.setItemStack(new ItemStack(Material.DIAMOND_AXE, 1));
  564. break;
  565. case 46:
  566. theCatch.setItemStack(new ItemStack(Material.DIAMOND_PICKAXE, 1));
  567. break;
  568. case 47:
  569. theCatch.setItemStack(new ItemStack(Material.DIAMOND_SWORD, 1));
  570. break;
  571. case 48:
  572. theCatch.setItemStack(new ItemStack(Material.DIAMOND_HOE, 1));
  573. break;
  574. case 49:
  575. theCatch.setItemStack(new ItemStack(Material.DIAMOND_SPADE, 1));
  576. break;
  577. }
  578. } else {
  579. theCatch.setItemStack(new ItemStack(Material.RAW_FISH, 1));
  580. }
  581. //Change durability to random value
  582. theCatch.getItemStack().setDurability((short) (Math.random() * theCatch.getItemStack().getType().getMaxDurability())); //Change the damage value
  583. }
  584. public static void processResults(PlayerFishEvent event)
  585. {
  586. Player player = event.getPlayer();
  587. PlayerProfile PP = Users.getProfile(player);
  588. Fishing.getFishingResults(player, event);
  589. CraftItem theCatch = (CraftItem)event.getCaught();
  590. if(theCatch.getItemStack().getType() != Material.RAW_FISH)
  591. {
  592. //Inform the player they retrieved a treasure...
  593. player.sendMessage(mcLocale.getString("Fishing.ItemFound"));
  594. //Keep track of whether or not the treasure is enchanted
  595. boolean enchanted = false;
  596. ItemStack fishingResults = theCatch.getItemStack();
  597. if(Repair.isArmor(fishingResults) || Repair.isTools(fishingResults))
  598. {
  599. //Fishing up items will have a 10% chance to enter them into random enchantment lottery
  600. if(Math.random() * 100 < 10)
  601. {
  602. for(Enchantment x : Enchantment.values())
  603. {
  604. if(x.canEnchantItem(fishingResults))
  605. {
  606. //Prevent impossible enchantment combinations
  607. if((fishingResults.containsEnchantment(PROTECTION_ENVIRONMENTAL) || fishingResults.containsEnchantment(PROTECTION_EXPLOSIONS) ||
  608. fishingResults.containsEnchantment(PROTECTION_FIRE) || fishingResults.containsEnchantment(PROTECTION_PROJECTILE)) &&
  609. (x.equals(PROTECTION_EXPLOSIONS) || x.equals(PROTECTION_PROJECTILE) || x.equals(PROTECTION_FIRE) || x.equals(PROTECTION_ENVIRONMENTAL))){
  610. return;
  611. }
  612. //More impossible enchantment combinations
  613. else if((fishingResults.containsEnchantment(DAMAGE_ALL) || fishingResults.containsEnchantment(DAMAGE_ARTHROPODS) || fishingResults.containsEnchantment(DAMAGE_UNDEAD)) &&
  614. (x.equals(DAMAGE_ALL) || x.equals(DAMAGE_ARTHROPODS) || x.equals(DAMAGE_UNDEAD))){
  615. return;
  616. }
  617. //Even more impossible enchantment combinations
  618. else if((fishingResults.containsEnchantment(SILK_TOUCH) || fishingResults.containsEnchantment(LOOT_BONUS_BLOCKS)) &&
  619. (x.equals(SILK_TOUCH) || x.equals(LOOT_BONUS_BLOCKS))){
  620. return;
  621. }
  622. else{
  623. //Actual chance to have an enchantment is related to your fishing skill
  624. if(Math.random() * 15 < Fishing.getFishingLootTier(PP))
  625. {
  626. enchanted = true;
  627. int randomEnchantLevel = (int)(Math.random() * x.getMaxLevel());
  628. if(randomEnchantLevel == 0)
  629. randomEnchantLevel = 1;
  630. if(randomEnchantLevel > x.getMaxLevel())
  631. randomEnchantLevel = x.getMaxLevel();
  632. fishingResults.addEnchantment(x, randomEnchantLevel);
  633. }
  634. }
  635. }
  636. }
  637. }
  638. }
  639. //Inform the player of magical properties
  640. if(enchanted)
  641. {
  642. player.sendMessage(mcLocale.getString("Fishing.MagicFound"));
  643. }
  644. }
  645. }
  646. public static void shakeMob(PlayerFishEvent event)
  647. {
  648. LivingEntity le = (LivingEntity)event.getCaught();
  649. if(le instanceof Player)
  650. return;
  651. le.damage(1);
  652. World world = le.getWorld();
  653. if(le instanceof Sheep)
  654. {
  655. Sheep sheep = (Sheep)le;
  656. if(!sheep.isSheared())
  657. {
  658. Wool wool = new Wool();
  659. wool.setColor(sheep.getColor());
  660. ItemStack theWool = wool.toItemStack();
  661. theWool.setAmount((int)(Math.random() * 6));
  662. world.dropItemNaturally(le.getLocation(), theWool);
  663. sheep.setSheared(true);
  664. }
  665. } else if(le instanceof Pig)
  666. {
  667. world.dropItemNaturally(le.getLocation(), new ItemStack(Material.PORK, 1));
  668. } else if(le instanceof Skeleton)
  669. {
  670. if(Math.random() * 10 < 5)
  671. world.dropItemNaturally(le.getLocation(), new ItemStack(Material.BONE, 1));
  672. else
  673. world.dropItemNaturally(le.getLocation(), new ItemStack(Material.ARROW, 3));
  674. } else if(le instanceof Cow)
  675. {
  676. world.dropItemNaturally(le.getLocation(), new ItemStack(Material.LEATHER, 1));
  677. } else if(le instanceof Spider)
  678. {
  679. if(Math.random() * 10 < 5)
  680. world.dropItemNaturally(le.getLocation(), new ItemStack(Material.SPIDER_EYE, 1));
  681. else
  682. world.dropItemNaturally(le.getLocation(), new ItemStack(Material.STRING, 1));
  683. } else if(le instanceof Chicken)
  684. {
  685. if(Math.random() * 10 < 5)
  686. world.dropItemNaturally(le.getLocation(), new ItemStack(Material.FEATHER, 1));
  687. else
  688. world.dropItemNaturally(le.getLocation(), new ItemStack(Material.EGG, 1));
  689. } else if(le instanceof Creeper)
  690. {
  691. world.dropItemNaturally(le.getLocation(), new ItemStack(Material.SULPHUR, 1));
  692. }
  693. }
  694. }