Fishing.java 25 KB

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