123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- package com.gmail.nossr50.skills.unarmed;
- import com.gmail.nossr50.core.MetadataConstants;
- 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.Misc;
- 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;
- public class UnarmedManager extends SkillManager {
- private long lastAttacked;
- private long attackInterval;
- public UnarmedManager(mcMMO pluginRef, McMMOPlayer mcMMOPlayer) {
- super(pluginRef, mcMMOPlayer, PrimarySkillType.UNARMED);
- initUnarmedPerPlayerVars();
- }
- /**
- * Inits variables used for each player for unarmed
- */
- private void initUnarmedPerPlayerVars() {
- lastAttacked = 0;
- attackInterval = 750;
- }
- public boolean canActivateAbility() {
- return mcMMOPlayer.getToolPreparationMode(ToolType.FISTS) && pluginRef.getPermissionTools().berserk(getPlayer());
- }
- public boolean canUseIronArm() {
- if (!pluginRef.getRankTools().hasUnlockedSubskill(getPlayer(), SubSkillType.UNARMED_IRON_ARM_STYLE))
- return false;
- return pluginRef.getPermissionTools().isSubSkillEnabled(getPlayer(), SubSkillType.UNARMED_IRON_ARM_STYLE);
- }
- public boolean canUseBerserk() {
- return mcMMOPlayer.getSuperAbilityMode(SuperAbilityType.BERSERK);
- }
- public boolean canDisarm(LivingEntity target) {
- if (!pluginRef.getRankTools().hasUnlockedSubskill(getPlayer(), SubSkillType.UNARMED_DISARM))
- return false;
- return target instanceof Player && ((Player) target).getInventory().getItemInMainHand().getType() != Material.AIR && pluginRef.getPermissionTools().isSubSkillEnabled(getPlayer(), SubSkillType.UNARMED_DISARM);
- }
- public boolean canDeflect() {
- if (!pluginRef.getRankTools().hasUnlockedSubskill(getPlayer(), SubSkillType.UNARMED_ARROW_DEFLECT))
- return false;
- Player player = getPlayer();
- return pluginRef.getItemTools().isUnarmed(player.getInventory().getItemInMainHand()) && pluginRef.getPermissionTools().isSubSkillEnabled(getPlayer(), SubSkillType.UNARMED_ARROW_DEFLECT);
- }
- public boolean canUseBlockCracker() {
- if (!pluginRef.getRankTools().hasUnlockedSubskill(getPlayer(), SubSkillType.UNARMED_BLOCK_CRACKER))
- return false;
- return pluginRef.getPermissionTools().isSubSkillEnabled(getPlayer(), SubSkillType.UNARMED_BLOCK_CRACKER);
- }
- public boolean blockCrackerCheck(BlockState blockState) {
- if (!pluginRef.getRandomChanceTools().isActivationSuccessful(SkillActivationType.ALWAYS_FIRES, SubSkillType.UNARMED_BLOCK_CRACKER, getPlayer())) {
- return false;
- }
- switch (blockState.getType()) {
- case STONE_BRICKS:
- /*if (!Unarmed.blockCrackerSmoothBrick) {
- return false;
- }*/
- blockState.setType(Material.CRACKED_STONE_BRICKS);
- return true;
- default:
- return false;
- }
- }
- /**
- * Check for disarm.
- *
- * @param defender The defending player
- */
- public void disarmCheck(Player defender) {
- if (pluginRef.getRandomChanceTools().isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.UNARMED_DISARM, getPlayer()) && !hasIronGrip(defender)) {
- if (pluginRef.getEventManager().callDisarmEvent(defender).isCancelled()) {
- return;
- }
- if (pluginRef.getUserManager().getPlayer(defender) == null)
- return;
- Item item = Misc.dropItem(defender.getLocation(), defender.getInventory().getItemInMainHand());
- if (item != null && pluginRef.getConfigManager().getConfigUnarmed().doesDisarmPreventTheft()) {
- item.setMetadata(MetadataConstants.DISARMED_ITEM_METAKEY, pluginRef.getUserManager().getPlayer(defender).getPlayerMetadata());
- }
- defender.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
- pluginRef.getNotificationManager().sendPlayerInformation(defender, NotificationType.SUBSKILL_MESSAGE, "Skills.Disarmed");
- }
- }
- /**
- * Check for arrow deflection.
- */
- public boolean deflectCheck() {
- if (pluginRef.getRandomChanceTools().isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.UNARMED_ARROW_DEFLECT, getPlayer())) {
- pluginRef.getNotificationManager().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) - damage;
- return damage;
- }
- /**
- * Handle the effects of the Iron Arm ability
- */
- public double ironArm() {
- if (!pluginRef.getRandomChanceTools().isActivationSuccessful(SkillActivationType.ALWAYS_FIRES, SubSkillType.UNARMED_IRON_ARM_STYLE, getPlayer())) {
- return 0;
- }
- return getIronArmDamage();
- }
- public boolean isPunchingCooldownOver() {
- return (lastAttacked + attackInterval) <= System.currentTimeMillis();
- }
- public double getIronArmDamage() {
- int rank = pluginRef.getRankTools().getRank(getPlayer(), SubSkillType.UNARMED_IRON_ARM_STYLE);
- if (rank == 1) {
- return 4;
- } else {
- return 3 + (rank * 2);
- }
- }
- /**
- * Check Iron Grip ability success
- *
- * @param defender The defending player
- * @return true if the defender was not disarmed, false otherwise
- */
- private boolean hasIronGrip(Player defender) {
- if (!Misc.isNPCEntityExcludingVillagers(defender)
- && pluginRef.getPermissionTools().isSubSkillEnabled(defender, SubSkillType.UNARMED_IRON_GRIP)
- && pluginRef.getRandomChanceTools().isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.UNARMED_IRON_GRIP, defender)) {
- pluginRef.getNotificationManager().sendPlayerInformation(defender, NotificationType.SUBSKILL_MESSAGE, "Unarmed.Ability.IronGrip.Defender");
- pluginRef.getNotificationManager().sendPlayerInformation(getPlayer(), NotificationType.SUBSKILL_MESSAGE, "Unarmed.Ability.IronGrip.Attacker");
- return true;
- }
- return false;
- }
- public long getLastAttacked() {
- return lastAttacked;
- }
- public void setLastAttacked(long lastAttacked) {
- this.lastAttacked = lastAttacked;
- }
- public long getAttackInterval() {
- return attackInterval;
- }
- public void setAttackInterval(long attackInterval) {
- this.attackInterval = attackInterval;
- }
- }
|