ExcavationManager.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package com.gmail.nossr50.skills.excavation;
  2. import com.gmail.nossr50.config.Config;
  3. import com.gmail.nossr50.datatypes.experience.XPGainReason;
  4. import com.gmail.nossr50.datatypes.player.McMMOPlayer;
  5. import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
  6. import com.gmail.nossr50.datatypes.skills.SubSkillType;
  7. import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
  8. import com.gmail.nossr50.skills.SkillManager;
  9. import com.gmail.nossr50.util.Misc;
  10. import com.gmail.nossr50.util.Permissions;
  11. import com.gmail.nossr50.util.random.RandomChanceUtil;
  12. import com.gmail.nossr50.util.skills.SkillUtils;
  13. import com.gmail.nossr50.worldguard.WorldGuardManager;
  14. import com.gmail.nossr50.worldguard.WorldGuardUtils;
  15. import org.bukkit.Location;
  16. import org.bukkit.block.BlockState;
  17. import org.bukkit.entity.Player;
  18. import java.util.List;
  19. public class ExcavationManager extends SkillManager {
  20. public ExcavationManager(McMMOPlayer mcMMOPlayer) {
  21. super(mcMMOPlayer, PrimarySkillType.EXCAVATION);
  22. }
  23. /**
  24. * Process treasure drops & XP gain for Excavation.
  25. *
  26. * @param blockState The {@link BlockState} to check ability activation for
  27. */
  28. public void excavationBlockCheck(BlockState blockState) {
  29. int xp = Excavation.getBlockXP(blockState);
  30. if (Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.EXCAVATION_ARCHAEOLOGY)) {
  31. List<ExcavationTreasure> treasures = Excavation.getTreasures(blockState);
  32. if (!treasures.isEmpty()) {
  33. int skillLevel = getSkillLevel();
  34. Location location = Misc.getBlockCenter(blockState);
  35. for (ExcavationTreasure treasure : treasures) {
  36. if (skillLevel >= treasure.getDropLevel()
  37. && RandomChanceUtil.checkRandomChanceExecutionSuccess(treasure.getDropChance())) {
  38. xp += treasure.getXp();
  39. Misc.dropItem(location, treasure.getDrop());
  40. }
  41. }
  42. }
  43. }
  44. applyXpGain(xp, XPGainReason.PVE);
  45. }
  46. public void printExcavationDebug(Player player, BlockState blockState)
  47. {
  48. if (Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.EXCAVATION_ARCHAEOLOGY)) {
  49. List<ExcavationTreasure> treasures = Excavation.getTreasures(blockState);
  50. if (!treasures.isEmpty()) {
  51. for (ExcavationTreasure treasure : treasures) {
  52. player.sendMessage("|||||||||||||||||||||||||||||||||");
  53. player.sendMessage("[mcMMO DEBUG] Treasure found: ("+treasure.getDrop().getType().toString()+")");
  54. player.sendMessage("[mcMMO DEBUG] Drop Chance for Treasure: "+treasure.getDropChance());
  55. player.sendMessage("[mcMMO DEBUG] Skill Level Required: "+treasure.getDropLevel());
  56. player.sendMessage("[mcMMO DEBUG] XP for Treasure: "+treasure.getXp());
  57. if(WorldGuardUtils.isWorldGuardLoaded())
  58. {
  59. if(WorldGuardManager.getInstance().hasMainFlag(player))
  60. player.sendMessage("[mcMMO DEBUG] World Guard main flag is permitted for this player");
  61. else
  62. player.sendMessage("[mcMMO DEBUG] World Guard main flag is DENIED for this player");
  63. }
  64. }
  65. } else {
  66. player.sendMessage("[mcMMO DEBUG] No treasures found for this block.");
  67. }
  68. }
  69. }
  70. /**
  71. * Process the Giga Drill Breaker ability.
  72. *
  73. * @param blockState The {@link BlockState} to check ability activation for
  74. */
  75. public void gigaDrillBreaker(BlockState blockState) {
  76. excavationBlockCheck(blockState);
  77. excavationBlockCheck(blockState);
  78. SkillUtils.handleDurabilityChange(getPlayer().getInventory().getItemInMainHand(), Config.getInstance().getAbilityToolDamage());
  79. }
  80. }