Excavation.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package com.gmail.nossr50.skills;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.bukkit.Bukkit;
  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 org.bukkit.event.player.PlayerAnimationEvent;
  11. import com.gmail.nossr50.spout.SpoutStuff;
  12. import com.gmail.nossr50.Users;
  13. import com.gmail.nossr50.m;
  14. import com.gmail.nossr50.mcPermissions;
  15. import com.gmail.nossr50.config.LoadProperties;
  16. import com.gmail.nossr50.config.LoadTreasures;
  17. import com.gmail.nossr50.datatypes.PlayerProfile;
  18. import com.gmail.nossr50.datatypes.SkillType;
  19. import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
  20. import org.getspout.spoutapi.sound.SoundEffect;
  21. public class Excavation {
  22. /**
  23. * Check to see if a block can be broken by Giga Drill Breaker.
  24. *
  25. * @param material The type of block to check
  26. * @return
  27. */
  28. public static boolean canBeGigaDrillBroken(Material type) {
  29. switch (type) {
  30. case CLAY:
  31. case DIRT:
  32. case GRASS:
  33. case GRAVEL:
  34. case MYCEL:
  35. case SAND:
  36. case SOUL_SAND:
  37. return true;
  38. default:
  39. return false;
  40. }
  41. }
  42. /**
  43. * Check to see if treasures were found.
  44. *
  45. * @param block The block to check
  46. * @param player The player who broke the block
  47. */
  48. public static void excavationProcCheck(Block block, Player player) {
  49. Material type = block.getType();
  50. Location loc = block.getLocation();
  51. PlayerProfile PP = Users.getProfile(player);
  52. int skillLevel = PP.getSkillLevel(SkillType.EXCAVATION);
  53. ArrayList<ItemStack> is = new ArrayList<ItemStack>();
  54. List<ExcavationTreasure> treasures = new ArrayList<ExcavationTreasure>();
  55. int xp = LoadProperties.mbase;
  56. if (mcPermissions.getInstance().excavationTreasures(player)) {
  57. switch (type) {
  58. case DIRT:
  59. treasures = LoadTreasures.excavationFromDirt;
  60. break;
  61. case GRASS:
  62. treasures = LoadTreasures.excavationFromGrass;
  63. break;
  64. case SAND:
  65. treasures = LoadTreasures.excavationFromSand;
  66. break;
  67. case GRAVEL:
  68. treasures = LoadTreasures.excavationFromGravel;
  69. break;
  70. case CLAY:
  71. treasures = LoadTreasures.excavationFromClay;
  72. break;
  73. case MYCEL:
  74. treasures = LoadTreasures.excavationFromMycel;
  75. break;
  76. case SOUL_SAND:
  77. treasures = LoadTreasures.excavationFromSoulSand;
  78. break;
  79. default:
  80. break;
  81. }
  82. for (ExcavationTreasure treasure : treasures) {
  83. if (skillLevel >= treasure.getDropLevel()) {
  84. if (Math.random() * 100 <= treasure.getDropChance()) {
  85. xp += treasure.getXp();
  86. is.add(treasure.getDrop());
  87. }
  88. }
  89. }
  90. //Drop items
  91. for (ItemStack x : is) {
  92. if (x != null) {
  93. m.mcDropItem(loc, x);
  94. }
  95. }
  96. }
  97. //Handle XP related tasks
  98. PP.addXP(SkillType.EXCAVATION, xp, player);
  99. Skills.XpCheckSkill(SkillType.EXCAVATION, player);
  100. }
  101. /**
  102. * Handle triple drops from Giga Drill Breaker.
  103. *
  104. * @param player The player using the ability
  105. * @param block The block to check
  106. */
  107. public static void gigaDrillBreaker(Player player, Block block) {
  108. Skills.abilityDurabilityLoss(player.getItemInHand(), LoadProperties.abilityDurabilityLoss);
  109. if (!block.hasMetadata("mcmmoPlacedBlock")) {
  110. PlayerAnimationEvent armswing = new PlayerAnimationEvent(player);
  111. Bukkit.getPluginManager().callEvent(armswing);
  112. Excavation.excavationProcCheck(block, player);
  113. Excavation.excavationProcCheck(block, player);
  114. }
  115. if (LoadProperties.spoutEnabled) {
  116. SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
  117. }
  118. }
  119. }