Mining.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  1. package com.gmail.nossr50.skills;
  2. import org.bukkit.Location;
  3. import org.bukkit.Material;
  4. import org.bukkit.Statistic;
  5. import org.bukkit.block.Block;
  6. import org.bukkit.entity.Player;
  7. import org.bukkit.inventory.ItemStack;
  8. import org.getspout.spoutapi.sound.SoundEffect;
  9. import com.gmail.nossr50.Users;
  10. import com.gmail.nossr50.m;
  11. import com.gmail.nossr50.mcMMO;
  12. import com.gmail.nossr50.config.LoadProperties;
  13. import com.gmail.nossr50.spout.SpoutStuff;
  14. import com.gmail.nossr50.datatypes.PlayerProfile;
  15. import com.gmail.nossr50.datatypes.SkillType;
  16. import com.gmail.nossr50.locale.mcLocale;
  17. public class Mining
  18. {
  19. public static void superBreakerCheck(Player player, Block block)
  20. {
  21. PlayerProfile PP = Users.getProfile(player);
  22. if(m.isMiningPick(player.getItemInHand()))
  23. {
  24. if(block != null)
  25. {
  26. if(!m.abilityBlockCheck(block))
  27. return;
  28. }
  29. if(PP.getPickaxePreparationMode())
  30. {
  31. PP.setPickaxePreparationMode(false);
  32. }
  33. int ticks = 2;
  34. int x = PP.getSkillLevel(SkillType.MINING);
  35. while(x >= 50)
  36. {
  37. x-=50;
  38. ticks++;
  39. }
  40. if(!PP.getSuperBreakerMode() && Skills.cooldownOver(player, PP.getSuperBreakerDeactivatedTimeStamp(), LoadProperties.superBreakerCooldown)){
  41. player.sendMessage(mcLocale.getString("Skills.SuperBreakerOn"));
  42. for(Player y : player.getWorld().getPlayers())
  43. {
  44. if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10)
  45. y.sendMessage(mcLocale.getString("Skills.SuperBreakerPlayer", new Object[] {player.getName()}));
  46. }
  47. PP.setSuperBreakerActivatedTimeStamp(System.currentTimeMillis());
  48. PP.setSuperBreakerDeactivatedTimeStamp(System.currentTimeMillis() + (ticks * 1000));
  49. PP.setSuperBreakerMode(true);
  50. }
  51. }
  52. }
  53. public static void blockProcSimulate(Block block)
  54. {
  55. Location loc = block.getLocation();
  56. Material mat = Material.getMaterial(block.getTypeId());
  57. byte damage = 0;
  58. ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
  59. if(block.getTypeId() != 89 && block.getTypeId() != 73 && block.getTypeId() != 74 && block.getTypeId() != 56
  60. && block.getTypeId() != 21 && block.getTypeId() != 1 && block.getTypeId() != 16)
  61. loc.getWorld().dropItemNaturally(loc, item);
  62. if(block.getTypeId() == 89)
  63. {
  64. mat = Material.getMaterial(348);
  65. item = new ItemStack(mat, 1, (byte)0, damage);
  66. loc.getWorld().dropItemNaturally(loc, item);
  67. }
  68. if(block.getTypeId() == 73 || block.getTypeId() == 74)
  69. {
  70. mat = Material.getMaterial(331);
  71. item = new ItemStack(mat, 1, (byte)0, damage);
  72. loc.getWorld().dropItemNaturally(loc, item);
  73. loc.getWorld().dropItemNaturally(loc, item);
  74. loc.getWorld().dropItemNaturally(loc, item);
  75. if(Math.random() * 10 > 5){
  76. loc.getWorld().dropItemNaturally(loc, item);
  77. }
  78. }
  79. if(block.getTypeId() == 21)
  80. {
  81. mat = Material.getMaterial(351);
  82. item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
  83. loc.getWorld().dropItemNaturally(loc, item);
  84. loc.getWorld().dropItemNaturally(loc, item);
  85. loc.getWorld().dropItemNaturally(loc, item);
  86. loc.getWorld().dropItemNaturally(loc, item);
  87. }
  88. if(block.getTypeId() == 56)
  89. {
  90. mat = Material.getMaterial(264);
  91. item = new ItemStack(mat, 1, (byte)0, damage);
  92. loc.getWorld().dropItemNaturally(loc, item);
  93. }
  94. if(block.getTypeId() == 1)
  95. {
  96. mat = Material.getMaterial(4);
  97. item = new ItemStack(mat, 1, (byte)0, damage);
  98. loc.getWorld().dropItemNaturally(loc, item);
  99. }
  100. if(block.getTypeId() == 16)
  101. {
  102. mat = Material.getMaterial(263);
  103. item = new ItemStack(mat, 1, (byte)0, damage);
  104. loc.getWorld().dropItemNaturally(loc, item);
  105. }
  106. }
  107. public static void blockProcCheck(Block block, Player player)
  108. {
  109. PlayerProfile PP = Users.getProfile(player);
  110. if(Math.random() * 1000 <= PP.getSkillLevel(SkillType.MINING))
  111. {
  112. blockProcSimulate(block);
  113. return;
  114. }
  115. }
  116. public static void miningBlockCheck(Boolean smelt, Player player, Block block, mcMMO plugin)
  117. {
  118. PlayerProfile PP = Users.getProfile(player);
  119. if(plugin.misc.blockWatchList.contains(block) || block.getData() == (byte) 5)
  120. return;
  121. int xp = 0;
  122. if(block.getTypeId() == 1 || block.getTypeId() == 24)
  123. {
  124. xp += LoadProperties.mstone;
  125. if(smelt = false)
  126. blockProcCheck(block, player);
  127. else
  128. blockProcCheck(block, player);
  129. }
  130. //OBSIDIAN
  131. if(block.getTypeId() == 49)
  132. {
  133. xp += LoadProperties.mobsidian;
  134. if(smelt = false)
  135. blockProcCheck(block, player);
  136. else
  137. blockProcCheck(block, player);
  138. }
  139. //NETHERRACK
  140. if(block.getTypeId() == 87)
  141. {
  142. xp += LoadProperties.mnetherrack;
  143. if(smelt = false)
  144. blockProcCheck(block, player);
  145. else
  146. blockProcCheck(block, player);
  147. }
  148. //GLOWSTONE
  149. if(block.getTypeId() == 89)
  150. {
  151. xp += LoadProperties.mglowstone;
  152. if(smelt = false)
  153. blockProcCheck(block, player);
  154. else
  155. blockProcCheck(block, player);
  156. }
  157. //COAL
  158. if(block.getTypeId() == 16)
  159. {
  160. xp += LoadProperties.mcoal;
  161. if(smelt = false)
  162. blockProcCheck(block, player);
  163. else
  164. blockProcCheck(block, player);
  165. }
  166. //GOLD
  167. if(block.getTypeId() == 14)
  168. {
  169. xp += LoadProperties.mgold;
  170. if(smelt = false)
  171. blockProcCheck(block, player);
  172. else
  173. blockProcCheck(block, player);
  174. }
  175. //DIAMOND
  176. if(block.getTypeId() == 56){
  177. xp += LoadProperties.mdiamond;
  178. if(smelt = false)
  179. blockProcCheck(block, player);
  180. else
  181. blockProcCheck(block, player);
  182. }
  183. //IRON
  184. if(block.getTypeId() == 15)
  185. {
  186. xp += LoadProperties.miron;
  187. if(smelt = false)
  188. blockProcCheck(block, player);
  189. else
  190. blockProcCheck(block, player);
  191. }
  192. //REDSTONE
  193. if(block.getTypeId() == 73 || block.getTypeId() == 74)
  194. {
  195. xp += LoadProperties.mredstone;
  196. if(smelt = false)
  197. blockProcCheck(block, player);
  198. else
  199. blockProcCheck(block, player);
  200. }
  201. //LAPUS
  202. if(block.getTypeId() == 21)
  203. {
  204. xp += LoadProperties.mlapis;
  205. if(smelt = false)
  206. blockProcCheck(block, player);
  207. else
  208. blockProcCheck(block, player);
  209. }
  210. PP.addXP(SkillType.MINING, xp);
  211. Skills.XpCheckSkill(SkillType.MINING, player);
  212. }
  213. /*
  214. * Handling SuperBreaker stuff
  215. */
  216. public static Boolean canBeSuperBroken(Block block)
  217. {
  218. int t = block.getTypeId();
  219. if(t == 49 || t == 87 || t == 89 || t == 73 || t == 74 || t == 56 || t == 21 || t == 1 || t == 16 || t == 14 || t == 15)
  220. {
  221. return true;
  222. } else {
  223. return false;
  224. }
  225. }
  226. public static void SuperBreakerBlockCheck(Player player, Block block, mcMMO plugin)
  227. {
  228. PlayerProfile PP = Users.getProfile(player);
  229. if(LoadProperties.toolsLoseDurabilityFromAbilities)
  230. m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
  231. Location loc = block.getLocation();
  232. Material mat = Material.getMaterial(block.getTypeId());
  233. int xp = 0;
  234. byte damage = 0;
  235. ItemStack item = new ItemStack(mat, 1, (byte)0, damage);
  236. if(block.getTypeId() == 1 || block.getTypeId() == 24)
  237. {
  238. if(block.getTypeId() == 1)
  239. {
  240. mat = Material.COBBLESTONE;
  241. if(!plugin.misc.blockWatchList.contains(block) && block.getData() != (byte) 5)
  242. {
  243. xp += LoadProperties.mstone;
  244. blockProcCheck(block, player);
  245. blockProcCheck(block, player);
  246. }
  247. } else
  248. {
  249. mat = Material.SANDSTONE;
  250. if(!plugin.misc.blockWatchList.contains(block) && block.getData() != (byte) 5)
  251. {
  252. xp += LoadProperties.msandstone;
  253. blockProcCheck(block, player);
  254. blockProcCheck(block, player);
  255. }
  256. }
  257. item = new ItemStack(mat, 1, (byte)0, damage);
  258. loc.getWorld().dropItemNaturally(loc, item);
  259. player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
  260. block.setType(Material.AIR);
  261. }
  262. //NETHERRACK
  263. if(block.getTypeId() == 87)
  264. {
  265. if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
  266. xp += LoadProperties.mnetherrack;
  267. blockProcCheck(block, player);
  268. blockProcCheck(block, player);
  269. }
  270. mat = Material.getMaterial(87);
  271. item = new ItemStack(mat, 1, (byte)0, damage);
  272. loc.getWorld().dropItemNaturally(loc, item);
  273. player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
  274. block.setType(Material.AIR);
  275. }
  276. //GLOWSTONE
  277. if(block.getTypeId() == 89)
  278. {
  279. if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
  280. xp += LoadProperties.mglowstone;
  281. blockProcCheck(block, player);
  282. blockProcCheck(block, player);
  283. }
  284. mat = Material.getMaterial(348);
  285. item = new ItemStack(mat, 1, (byte)0, damage);
  286. loc.getWorld().dropItemNaturally(loc, item);
  287. player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
  288. block.setType(Material.AIR);
  289. }
  290. //COAL
  291. if(block.getTypeId() == 16)
  292. {
  293. if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
  294. xp += LoadProperties.mcoal;
  295. blockProcCheck(block, player);
  296. blockProcCheck(block, player);
  297. }
  298. mat = Material.getMaterial(263);
  299. item = new ItemStack(mat, 1, (byte)0, damage);
  300. loc.getWorld().dropItemNaturally(loc, item);
  301. player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
  302. block.setType(Material.AIR);
  303. }
  304. //GOLD
  305. if(block.getTypeId() == 14 && m.getTier(player) >= 3)
  306. {
  307. if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
  308. xp += LoadProperties.mgold;
  309. blockProcCheck(block, player);
  310. blockProcCheck(block, player);
  311. }
  312. item = new ItemStack(mat, 1, (byte)0, damage);
  313. loc.getWorld().dropItemNaturally(loc, item);
  314. player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
  315. block.setType(Material.AIR);
  316. }
  317. //OBSIDIAN
  318. if(block.getTypeId() == 49 && m.getTier(player) >= 4)
  319. {
  320. if(LoadProperties.toolsLoseDurabilityFromAbilities)
  321. m.damageTool(player, (short) LoadProperties.abilityDurabilityLoss);
  322. if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
  323. xp += LoadProperties.mobsidian;
  324. blockProcCheck(block, player);
  325. blockProcCheck(block, player);
  326. }
  327. mat = Material.getMaterial(49);
  328. item = new ItemStack(mat, 1, (byte)0, damage);
  329. loc.getWorld().dropItemNaturally(loc, item);
  330. player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
  331. block.setType(Material.AIR);
  332. }
  333. //DIAMOND
  334. if(block.getTypeId() == 56 && m.getTier(player) >= 3)
  335. {
  336. if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
  337. xp += LoadProperties.mdiamond;
  338. blockProcCheck(block, player);
  339. blockProcCheck(block, player);
  340. }
  341. mat = Material.getMaterial(264);
  342. item = new ItemStack(mat, 1, (byte)0, damage);
  343. loc.getWorld().dropItemNaturally(loc, item);
  344. player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
  345. block.setType(Material.AIR);
  346. }
  347. //IRON
  348. if(block.getTypeId() == 15 && m.getTier(player) >= 2)
  349. {
  350. if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
  351. xp += LoadProperties.miron;
  352. blockProcCheck(block, player);
  353. blockProcCheck(block, player);
  354. }
  355. item = new ItemStack(mat, 1, (byte)0, damage);
  356. loc.getWorld().dropItemNaturally(loc, item);
  357. player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
  358. block.setType(Material.AIR);
  359. }
  360. //REDSTONE
  361. if((block.getTypeId() == 73 || block.getTypeId() == 74) && m.getTier(player) >= 4)
  362. {
  363. if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5)
  364. {
  365. xp += LoadProperties.mredstone;
  366. blockProcCheck(block, player);
  367. blockProcCheck(block, player);
  368. }
  369. mat = Material.getMaterial(331);
  370. item = new ItemStack(mat, 1, (byte)0, damage);
  371. loc.getWorld().dropItemNaturally(loc, item);
  372. loc.getWorld().dropItemNaturally(loc, item);
  373. loc.getWorld().dropItemNaturally(loc, item);
  374. if(Math.random() * 10 > 5)
  375. {
  376. loc.getWorld().dropItemNaturally(loc, item);
  377. }
  378. player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
  379. block.setType(Material.AIR);
  380. }
  381. //LAPUS
  382. if(block.getTypeId() == 21 && m.getTier(player) >= 3){
  383. if(!plugin.misc.blockWatchList.contains(block)&& block.getData() != (byte) 5){
  384. xp += LoadProperties.mlapis;
  385. blockProcCheck(block, player);
  386. blockProcCheck(block, player);
  387. }
  388. mat = Material.getMaterial(351);
  389. item = new ItemStack(mat, 1, (byte)0,(byte)0x4);
  390. loc.getWorld().dropItemNaturally(loc, item);
  391. loc.getWorld().dropItemNaturally(loc, item);
  392. loc.getWorld().dropItemNaturally(loc, item);
  393. loc.getWorld().dropItemNaturally(loc, item);
  394. player.incrementStatistic(Statistic.MINE_BLOCK, block.getType());
  395. block.setType(Material.AIR);
  396. }
  397. if(block.getData() != (byte) 5)
  398. PP.addXP(SkillType.MINING, xp);
  399. if(LoadProperties.spoutEnabled)
  400. SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
  401. Skills.XpCheckSkill(SkillType.MINING, player);
  402. }
  403. }