Excavation.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package com.gmail.nossr50.skills.gathering;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;
  5. import org.bukkit.Location;
  6. import org.bukkit.Material;
  7. import org.bukkit.block.Block;
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.inventory.ItemStack;
  10. import com.gmail.nossr50.spout.SpoutSounds;
  11. import com.gmail.nossr50.util.Misc;
  12. import com.gmail.nossr50.util.Permissions;
  13. import com.gmail.nossr50.util.Skills;
  14. import com.gmail.nossr50.util.Users;
  15. import com.gmail.nossr50.mcMMO;
  16. import com.gmail.nossr50.config.Config;
  17. import com.gmail.nossr50.config.LoadTreasures;
  18. import com.gmail.nossr50.datatypes.PlayerProfile;
  19. import com.gmail.nossr50.datatypes.SkillType;
  20. import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
  21. import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent;
  22. import org.getspout.spoutapi.sound.SoundEffect;
  23. public class Excavation {
  24. private static Random random = new Random();
  25. /**
  26. * Check to see if treasures were found.
  27. *
  28. * @param block The block to check
  29. * @param player The player who broke the block
  30. */
  31. public static void excavationProcCheck(Block block, Player player) {
  32. Material type = block.getType();
  33. Location loc = block.getLocation();
  34. PlayerProfile PP = Users.getProfile(player);
  35. int skillLevel = PP.getSkillLevel(SkillType.EXCAVATION);
  36. ArrayList<ItemStack> is = new ArrayList<ItemStack>();
  37. List<ExcavationTreasure> treasures = new ArrayList<ExcavationTreasure>();
  38. int xp = Config.getInstance().getExcavationBaseXP();
  39. if (Permissions.getInstance().excavationTreasures(player)) {
  40. switch (type) {
  41. case DIRT:
  42. treasures = LoadTreasures.getInstance().excavationFromDirt;
  43. break;
  44. case GRASS:
  45. treasures = LoadTreasures.getInstance().excavationFromGrass;
  46. break;
  47. case SAND:
  48. treasures = LoadTreasures.getInstance().excavationFromSand;
  49. break;
  50. case GRAVEL:
  51. treasures = LoadTreasures.getInstance().excavationFromGravel;
  52. break;
  53. case CLAY:
  54. treasures = LoadTreasures.getInstance().excavationFromClay;
  55. break;
  56. case MYCEL:
  57. treasures = LoadTreasures.getInstance().excavationFromMycel;
  58. break;
  59. case SOUL_SAND:
  60. treasures = LoadTreasures.getInstance().excavationFromSoulSand;
  61. break;
  62. default:
  63. break;
  64. }
  65. for (ExcavationTreasure treasure : treasures) {
  66. if (skillLevel >= treasure.getDropLevel()) {
  67. if (random.nextDouble() * 100 <= treasure.getDropChance()) {
  68. xp += treasure.getXp();
  69. is.add(treasure.getDrop());
  70. }
  71. }
  72. }
  73. //Drop items
  74. for (ItemStack x : is) {
  75. if (x != null) {
  76. Misc.mcDropItem(loc, x);
  77. }
  78. }
  79. }
  80. //Handle XP related tasks
  81. PP.addXP(player, SkillType.EXCAVATION, xp);
  82. Skills.XpCheckSkill(SkillType.EXCAVATION, player);
  83. }
  84. /**
  85. * Handle triple drops from Giga Drill Breaker.
  86. *
  87. * @param player The player using the ability
  88. * @param block The block to check
  89. */
  90. public static void gigaDrillBreaker(Player player, Block block) {
  91. Skills.abilityDurabilityLoss(player.getItemInHand(), Config.getInstance().getAbilityToolDamage());
  92. if (!mcMMO.placeStore.isTrue(block)) {
  93. FakePlayerAnimationEvent armswing = new FakePlayerAnimationEvent(player);
  94. mcMMO.p.getServer().getPluginManager().callEvent(armswing);
  95. Excavation.excavationProcCheck(block, player);
  96. Excavation.excavationProcCheck(block, player);
  97. }
  98. if (Config.getInstance().spoutEnabled) {
  99. SpoutSounds.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
  100. }
  101. }
  102. }