public void processAbilityActivation(SkillType skill) { if (Config.getInstance().getAbilitiesOnlyActivateWhenSneaking() && !player.isSneaking()) { return; } ItemStack inHand = player.getItemInHand(); if (mcMMO.getModManager().isCustomTool(inHand) && !mcMMO.getModManager().getTool(inHand).isAbilityEnabled()) { return; } if (!getAbilityUse()) { return; } for (AbilityType abilityType : AbilityType.values()) { if (getAbilityMode(abilityType)) { return; } } AbilityType ability = skill.getAbility(); ToolType tool = skill.getTool(); /* * Woodcutting & Axes need to be treated differently. * Basically the tool always needs to ready and we check to see if the cooldown is over when the user takes action */ if (ability.getPermissions(player) && tool.inHand(inHand) && !getToolPreparationMode(tool)) { if (skill != SkillType.WOODCUTTING && skill != SkillType.AXES) { int timeRemaining = calculateTimeRemaining(ability); if (!getAbilityMode(ability) && timeRemaining > 0) { player.sendMessage(LocaleLoader.getString("Skills.TooTired", timeRemaining)); return; } } if (Config.getInstance().getAbilityMessagesEnabled()) { player.sendMessage(tool.getRaiseTool()); } setToolPreparationMode(tool, true); new ToolLowerTask(this, tool) .runTaskLaterAsynchronously(mcMMO.p, 4 * Misc.TICK_CONVERSION_FACTOR); } }
public McMMOPlayer(Player player, PlayerProfile profile) { String playerName = player.getName(); UUID uuid = player.getUniqueId(); this.player = player; playerMetadata = new FixedMetadataValue(mcMMO.p, playerName); this.profile = profile; if (profile.getUniqueId() == null) { profile.setUniqueId(uuid); } /* * I'm using this method because it makes code shorter and safer (we don't have to add all SkillTypes manually), * but I actually have no idea about the performance impact, if there is any. * If in the future someone wants to remove this, don't forget to also remove what is in the SkillType enum. - bm01 */ try { for (SkillType skillType : SkillType.values()) { skillManagers.put( skillType, skillType.getManagerClass().getConstructor(McMMOPlayer.class).newInstance(this)); } } catch (Exception e) { e.printStackTrace(); mcMMO.p.getPluginLoader().disablePlugin(mcMMO.p); } for (AbilityType abilityType : AbilityType.values()) { abilityMode.put(abilityType, false); abilityInformed.put(abilityType, true); // This is intended } for (ToolType toolType : ToolType.values()) { toolMode.put(toolType, false); } }
/** Reset the prep modes of all tools. */ public void resetToolPrepMode() { for (ToolType tool : ToolType.values()) { setToolPreparationMode(tool, false); } }