ExcavationManager.java 4.3 KB

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