123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- package com.gmail.nossr50.skills.unarmed;
- import com.gmail.nossr50.api.ItemSpawnReason;
- import com.gmail.nossr50.config.AdvancedConfig;
- import com.gmail.nossr50.datatypes.interactions.NotificationType;
- import com.gmail.nossr50.datatypes.player.McMMOPlayer;
- import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
- import com.gmail.nossr50.datatypes.skills.SubSkillType;
- import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
- import com.gmail.nossr50.datatypes.skills.ToolType;
- import com.gmail.nossr50.mcMMO;
- import com.gmail.nossr50.skills.SkillManager;
- import com.gmail.nossr50.util.EventUtils;
- import com.gmail.nossr50.util.ItemUtils;
- import com.gmail.nossr50.util.Misc;
- import com.gmail.nossr50.util.Permissions;
- import com.gmail.nossr50.util.player.NotificationManager;
- import com.gmail.nossr50.util.player.UserManager;
- import com.gmail.nossr50.util.random.RandomChanceUtil;
- import com.gmail.nossr50.util.skills.RankUtils;
- import com.gmail.nossr50.util.skills.SkillActivationType;
- import org.bukkit.Material;
- import org.bukkit.block.BlockState;
- import org.bukkit.entity.Item;
- import org.bukkit.entity.LivingEntity;
- import org.bukkit.entity.Player;
- import org.bukkit.inventory.ItemStack;
- import org.jetbrains.annotations.NotNull;
- public class UnarmedManager extends SkillManager {
- public UnarmedManager(McMMOPlayer mcMMOPlayer) {
- super(mcMMOPlayer, PrimarySkillType.UNARMED);
- }
- public boolean canActivateAbility() {
- return mmoPlayer.getToolPreparationMode(ToolType.FISTS) && Permissions.berserk(getPlayer());
- }
- public boolean canUseSteelArm() {
- if(!RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.UNARMED_STEEL_ARM_STYLE))
- return false;
- return Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.UNARMED_STEEL_ARM_STYLE);
- }
- public boolean canUseBerserk() {
- return mmoPlayer.getAbilityMode(SuperAbilityType.BERSERK);
- }
- public boolean canDisarm(LivingEntity target) {
- if(!RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.UNARMED_DISARM))
- return false;
- return target instanceof Player && ((Player) target).getInventory().getItemInMainHand().getType() != Material.AIR && Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.UNARMED_DISARM);
- }
- public boolean canDeflect() {
- if(!RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.UNARMED_ARROW_DEFLECT))
- return false;
- Player player = getPlayer();
- return ItemUtils.isUnarmed(player.getInventory().getItemInMainHand()) && Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.UNARMED_ARROW_DEFLECT);
- }
- public boolean canUseBlockCracker() {
- if(!RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.UNARMED_BLOCK_CRACKER))
- return false;
- return Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.UNARMED_BLOCK_CRACKER);
- }
- public boolean blockCrackerCheck(@NotNull BlockState blockState) {
- if (!RandomChanceUtil.isActivationSuccessful(SkillActivationType.ALWAYS_FIRES, SubSkillType.UNARMED_BLOCK_CRACKER, getPlayer())) {
- return false;
- }
- switch (blockState.getType()) {
- case STONE_BRICKS:
- if (!Unarmed.blockCrackerSmoothBrick) {
- return false;
- }
- blockState.getBlock().setType(Material.CRACKED_STONE_BRICKS);
- return true;
- case INFESTED_STONE_BRICKS:
- if (!Unarmed.blockCrackerSmoothBrick) {
- return false;
- }
- blockState.getBlock().setType(Material.INFESTED_CRACKED_STONE_BRICKS);
- return true;
- default:
- return false;
- }
- }
- /**
- * Check for disarm.
- *
- * @param defender The defending player
- */
- public void disarmCheck(@NotNull Player defender) {
- if (RandomChanceUtil.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.UNARMED_DISARM, getPlayer()) && !hasIronGrip(defender)) {
- if (EventUtils.callDisarmEvent(defender).isCancelled()) {
- return;
- }
- if(UserManager.getPlayer(defender) == null)
- return;
- Item item = Misc.spawnItem(defender.getLocation(), defender.getInventory().getItemInMainHand(), ItemSpawnReason.UNARMED_DISARMED_ITEM);
- if (item != null && AdvancedConfig.getInstance().getDisarmProtected()) {
- item.setMetadata(mcMMO.disarmedItemKey, UserManager.getPlayer(defender).getPlayerMetadata());
- }
- defender.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
- NotificationManager.sendPlayerInformation(defender, NotificationType.SUBSKILL_MESSAGE, "Skills.Disarmed");
- }
- }
- /**
- * Check for arrow deflection.
- */
- public boolean deflectCheck() {
- if (RandomChanceUtil.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.UNARMED_ARROW_DEFLECT, getPlayer())) {
- NotificationManager.sendPlayerInformation(getPlayer(), NotificationType.SUBSKILL_MESSAGE, "Combat.ArrowDeflect");
- return true;
- }
- return false;
- }
- /**
- * Handle the effects of the Berserk ability
- *
- * @param damage The amount of damage initially dealt by the event
- */
- public double berserkDamage(double damage) {
- damage = ((damage * Unarmed.berserkDamageModifier) * mmoPlayer.getAttackStrength()) - damage;
- return damage;
- }
- /**
- * Handle the effects of the Iron Arm ability
- */
- public double calculateSteelArmStyleDamage() {
- if (!RandomChanceUtil.isActivationSuccessful(SkillActivationType.ALWAYS_FIRES, SubSkillType.UNARMED_STEEL_ARM_STYLE, getPlayer())) {
- return 0;
- }
- return getSteelArmStyleDamage();
- }
- public double getSteelArmStyleDamage() {
- double rank = RankUtils.getRank(getPlayer(), SubSkillType.UNARMED_STEEL_ARM_STYLE);
- double bonus = 0;
- if(rank >= 18)
- bonus = 1 + rank - 18;
- double finalBonus = bonus + 0.5 + (rank / 2);
- if(AdvancedConfig.getInstance().isSteelArmDamageCustom()) {
- return AdvancedConfig.getInstance().getSteelArmOverride(RankUtils.getRank(getPlayer(), SubSkillType.UNARMED_STEEL_ARM_STYLE), finalBonus);
- } else {
- return finalBonus;
- }
- }
- /**
- * Check Iron Grip ability success
- *
- * @param defender The defending player
- * @return true if the defender was not disarmed, false otherwise
- */
- private boolean hasIronGrip(@NotNull Player defender) {
- if (!Misc.isNPCEntityExcludingVillagers(defender)
- && Permissions.isSubSkillEnabled(defender, SubSkillType.UNARMED_IRON_GRIP)
- && RandomChanceUtil.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.UNARMED_IRON_GRIP, defender)) {
- NotificationManager.sendPlayerInformation(defender, NotificationType.SUBSKILL_MESSAGE, "Unarmed.Ability.IronGrip.Defender");
- NotificationManager.sendPlayerInformation(getPlayer(), NotificationType.SUBSKILL_MESSAGE, "Unarmed.Ability.IronGrip.Attacker");
- return true;
- }
- return false;
- }
- }
|