UnarmedManager.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package com.gmail.nossr50.skills.unarmed;
  2. import org.bukkit.Material;
  3. import org.bukkit.block.BlockState;
  4. import org.bukkit.entity.LivingEntity;
  5. import org.bukkit.entity.Player;
  6. import org.bukkit.inventory.ItemStack;
  7. import com.gmail.nossr50.mcMMO;
  8. import com.gmail.nossr50.datatypes.player.McMMOPlayer;
  9. import com.gmail.nossr50.datatypes.skills.AbilityType;
  10. import com.gmail.nossr50.datatypes.skills.SkillType;
  11. import com.gmail.nossr50.datatypes.skills.ToolType;
  12. import com.gmail.nossr50.events.skills.unarmed.McMMOPlayerDisarmEvent;
  13. import com.gmail.nossr50.locale.LocaleLoader;
  14. import com.gmail.nossr50.skills.SkillManager;
  15. import com.gmail.nossr50.util.Misc;
  16. import com.gmail.nossr50.util.Permissions;
  17. import com.gmail.nossr50.util.skills.SkillUtils;
  18. public class UnarmedManager extends SkillManager {
  19. public UnarmedManager(McMMOPlayer mcMMOPlayer) {
  20. super(mcMMOPlayer, SkillType.UNARMED);
  21. }
  22. public boolean canActivateAbility() {
  23. return mcMMOPlayer.getToolPreparationMode(ToolType.FISTS) && Permissions.berserk(getPlayer());
  24. }
  25. public boolean canUseIronArm() {
  26. return Permissions.bonusDamage(getPlayer(), skill);
  27. }
  28. public boolean canUseBerserk() {
  29. return mcMMOPlayer.getAbilityMode(AbilityType.BERSERK) && Permissions.berserk(getPlayer());
  30. }
  31. public boolean canDisarm(LivingEntity target) {
  32. return target instanceof Player && ((Player) target).getItemInHand().getType() != Material.AIR && Permissions.disarm(getPlayer());
  33. }
  34. public boolean canDeflect() {
  35. Player player = getPlayer();
  36. return player.getItemInHand().getType() == Material.AIR && Permissions.arrowDeflect(player);
  37. }
  38. public boolean canUseBlockCracker() {
  39. return Permissions.blockCracker(getPlayer());
  40. }
  41. public boolean blockCrackerCheck(BlockState blockState) {
  42. Material type = blockState.getType();
  43. switch (type) {
  44. case SMOOTH_BRICK:
  45. if (Unarmed.blockCrackerSmoothBrick && blockState.getRawData() == (byte) 0x0) {
  46. blockState.setRawData((byte) 0x2);
  47. }
  48. return true;
  49. default:
  50. return false;
  51. }
  52. }
  53. /**
  54. * Check for disarm.
  55. *
  56. * @param defender The defending player
  57. */
  58. public void disarmCheck(Player defender) {
  59. if (SkillUtils.activationSuccessful(getSkillLevel(), getActivationChance(), Unarmed.disarmMaxChance, Unarmed.disarmMaxBonusLevel) && !hasIronGrip(defender)) {
  60. McMMOPlayerDisarmEvent disarmEvent = new McMMOPlayerDisarmEvent(defender);
  61. mcMMO.p.getServer().getPluginManager().callEvent(disarmEvent);
  62. if (!disarmEvent.isCancelled()) {
  63. Misc.dropItem(defender.getLocation(), defender.getItemInHand());
  64. defender.setItemInHand(new ItemStack(Material.AIR));
  65. defender.sendMessage(LocaleLoader.getString("Skills.Disarmed"));
  66. }
  67. }
  68. }
  69. /**
  70. * Check for arrow deflection.
  71. */
  72. public boolean deflectCheck() {
  73. if (SkillUtils.activationSuccessful(getSkillLevel(), getActivationChance(), Unarmed.deflectMaxChance, Unarmed.deflectMaxBonusLevel)) {
  74. getPlayer().sendMessage(LocaleLoader.getString("Combat.ArrowDeflect"));
  75. return true;
  76. }
  77. return false;
  78. }
  79. public double berserkDamage(double damage) {
  80. return damage * Unarmed.berserkDamageModifier;
  81. }
  82. /**
  83. * Handle the effects of the Iron Arm ability
  84. *
  85. * @param damage The amount of damage initially dealt by the event
  86. * @return the modified event damage
  87. */
  88. public double ironArmCheck(double damage) {
  89. int unarmedBonus = Math.min(Unarmed.ironArmMinBonusDamage + (getSkillLevel() / Unarmed.ironArmIncreaseLevel), Unarmed.ironArmMaxBonusDamage);
  90. return damage + unarmedBonus;
  91. }
  92. /**
  93. * Check Iron Grip ability success
  94. *
  95. * @param defender The defending player
  96. * @return true if the defender was not disarmed, false otherwise
  97. */
  98. private boolean hasIronGrip(Player defender) {
  99. if (!Misc.isNPCEntity(defender) && Permissions.ironGrip(defender) && SkillUtils.activationSuccessful(defender, skill, Unarmed.ironGripMaxChance, Unarmed.ironGripMaxBonusLevel)) {
  100. defender.sendMessage(LocaleLoader.getString("Unarmed.Ability.IronGrip.Defender"));
  101. getPlayer().sendMessage(LocaleLoader.getString("Unarmed.Ability.IronGrip.Attacker"));
  102. return true;
  103. }
  104. return false;
  105. }
  106. }