mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-25 06:36:45 +01:00
Fix double drops for mining
This commit is contained in:
parent
43ca43cc48
commit
a1e3bb18a4
@ -55,7 +55,7 @@ public class AxesCommand extends SkillCommand {
|
|||||||
|
|
||||||
// SKULL SPLITTER
|
// SKULL SPLITTER
|
||||||
if (canSkullSplitter) {
|
if (canSkullSplitter) {
|
||||||
String[] skullSplitterStrings = calculateLengthDisplayValues(player, skillValue);
|
String[] skullSplitterStrings = formatLengthDisplayValues(player, skillValue);
|
||||||
skullSplitterLength = skullSplitterStrings[0];
|
skullSplitterLength = skullSplitterStrings[0];
|
||||||
skullSplitterLengthEndurance = skullSplitterStrings[1];
|
skullSplitterLengthEndurance = skullSplitterStrings[1];
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ public class ExcavationCommand extends SkillCommand {
|
|||||||
protected void dataCalculations(Player player, double skillValue) {
|
protected void dataCalculations(Player player, double skillValue) {
|
||||||
// GIGA DRILL BREAKER
|
// GIGA DRILL BREAKER
|
||||||
if (canGigaDrill) {
|
if (canGigaDrill) {
|
||||||
String[] gigaDrillStrings = calculateLengthDisplayValues(player, skillValue);
|
String[] gigaDrillStrings = formatLengthDisplayValues(player, skillValue);
|
||||||
gigaDrillBreakerLength = gigaDrillStrings[0];
|
gigaDrillBreakerLength = gigaDrillStrings[0];
|
||||||
gigaDrillBreakerLengthEndurance = gigaDrillStrings[1];
|
gigaDrillBreakerLengthEndurance = gigaDrillStrings[1];
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ public class HerbalismCommand extends SkillCommand {
|
|||||||
|
|
||||||
// GREEN TERRA
|
// GREEN TERRA
|
||||||
if (canGreenTerra) {
|
if (canGreenTerra) {
|
||||||
String[] greenTerraStrings = calculateLengthDisplayValues(player, skillValue);
|
String[] greenTerraStrings = formatLengthDisplayValues(player, skillValue);
|
||||||
greenTerraLength = greenTerraStrings[0];
|
greenTerraLength = greenTerraStrings[0];
|
||||||
greenTerraLengthEndurance = greenTerraStrings[1];
|
greenTerraLengthEndurance = greenTerraStrings[1];
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ public class MiningCommand extends SkillCommand {
|
|||||||
|
|
||||||
// SUPER BREAKER
|
// SUPER BREAKER
|
||||||
if (canSuperBreaker) {
|
if (canSuperBreaker) {
|
||||||
String[] superBreakerStrings = calculateLengthDisplayValues(player, skillValue);
|
String[] superBreakerStrings = formatLengthDisplayValues(player, skillValue);
|
||||||
superBreakerLength = superBreakerStrings[0];
|
superBreakerLength = superBreakerStrings[0];
|
||||||
superBreakerLengthEndurance = superBreakerStrings[1];
|
superBreakerLengthEndurance = superBreakerStrings[1];
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.gmail.nossr50.commands.skills;
|
package com.gmail.nossr50.commands.skills;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.AdvancedConfig;
|
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||||
@ -14,9 +13,9 @@ import com.gmail.nossr50.util.commands.CommandUtils;
|
|||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import com.gmail.nossr50.util.random.RandomChanceUtil;
|
import com.gmail.nossr50.util.random.RandomChanceUtil;
|
||||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
import com.gmail.nossr50.util.skills.PerksUtils;
|
|
||||||
import com.gmail.nossr50.util.skills.RankUtils;
|
import com.gmail.nossr50.util.skills.RankUtils;
|
||||||
import com.gmail.nossr50.util.skills.SkillActivationType;
|
import com.gmail.nossr50.util.skills.SkillActivationType;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
@ -74,7 +73,7 @@ public abstract class SkillCommand implements TabExecutor {
|
|||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
|
|
||||||
boolean isLucky = Permissions.lucky(player, skill);
|
boolean isLucky = Permissions.lucky(player, skill);
|
||||||
boolean hasEndurance = (PerksUtils.handleActivationPerks(player, 0, 0) != 0);
|
boolean hasEndurance = SkillUtils.getEnduranceLength(player) > 0;
|
||||||
double skillValue = mcMMOPlayer.getSkillLevel(skill);
|
double skillValue = mcMMOPlayer.getSkillLevel(skill);
|
||||||
|
|
||||||
//Send the players a few blank lines to make finding the top of the skill command easier
|
//Send the players a few blank lines to make finding the top of the skill command easier
|
||||||
@ -193,24 +192,6 @@ public abstract class SkillCommand implements TabExecutor {
|
|||||||
//player.sendMessage(LocaleLoader.getString("Effects.Child.Overhaul", skillValue, skillValue));
|
//player.sendMessage(LocaleLoader.getString("Effects.Child.Overhaul", skillValue, skillValue));
|
||||||
|
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if (!skill.isChildSkill()) {
|
|
||||||
player.sendMessage(LocaleLoader.getString("Skills.Header", skillName));
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.XPGain", LocaleLoader.getString("Commands.XPGain." + StringUtils.getCapitalized(skill.toString()))));
|
|
||||||
player.sendMessage(LocaleLoader.getString("Effects.Level", skillValue, mcMMOPlayer.getSkillXpLevel(skill), mcMMOPlayer.getXpToLevel(skill)));
|
|
||||||
} else {
|
|
||||||
player.sendMessage(LocaleLoader.getString("Skills.Header", skillName + " " + LocaleLoader.getString("Skills.Child")));
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.XPGain", LocaleLoader.getString("Commands.XPGain.Child")));
|
|
||||||
player.sendMessage(LocaleLoader.getString("Effects.Child", skillValue));
|
|
||||||
|
|
||||||
player.sendMessage(LocaleLoader.getString("Skills.Header", LocaleLoader.getString("Skills.Parents")));
|
|
||||||
Set<PrimarySkillType> parents = FamilyTree.getParents(skill);
|
|
||||||
|
|
||||||
for (PrimarySkillType parent : parents) {
|
|
||||||
player.sendMessage(parent.getName() + " - " + LocaleLoader.getString("Effects.Level", mcMMOPlayer.getSkillLevel(parent), mcMMOPlayer.getSkillXpLevel(parent), mcMMOPlayer.getXpToLevel(parent)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -231,24 +212,11 @@ public abstract class SkillCommand implements TabExecutor {
|
|||||||
return RandomChanceUtil.calculateAbilityDisplayValues(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, player, subSkill);
|
return RandomChanceUtil.calculateAbilityDisplayValues(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, player, subSkill);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String[] calculateLengthDisplayValues(Player player, double skillValue) {
|
protected String[] formatLengthDisplayValues(Player player, double skillValue) {
|
||||||
int maxLength = skill.getAbility().getMaxLength();
|
|
||||||
int abilityLengthVar = AdvancedConfig.getInstance().getAbilityLength();
|
|
||||||
int abilityLengthCap = AdvancedConfig.getInstance().getAbilityLengthCap();
|
|
||||||
|
|
||||||
int length;
|
int length = SkillUtils.calculateAbilityLength(UserManager.getPlayer(player), skill, skill.getSuperAbility());
|
||||||
|
|
||||||
if (abilityLengthCap <= 0) {
|
int enduranceLength = SkillUtils.calculateAbilityLengthPerks(UserManager.getPlayer(player), skill, skill.getSuperAbility());
|
||||||
length = 2 + (int) (skillValue / abilityLengthVar);
|
|
||||||
} else {
|
|
||||||
length = 2 + (int) (Math.min(abilityLengthCap, skillValue) / abilityLengthVar);
|
|
||||||
}
|
|
||||||
|
|
||||||
int enduranceLength = PerksUtils.handleActivationPerks(player, length, maxLength);
|
|
||||||
|
|
||||||
if (maxLength != 0) {
|
|
||||||
length = Math.min(length, maxLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new String[]{String.valueOf(length), String.valueOf(enduranceLength)};
|
return new String[]{String.valueOf(length), String.valueOf(enduranceLength)};
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ public class SwordsCommand extends SkillCommand {
|
|||||||
|
|
||||||
// SERRATED STRIKES
|
// SERRATED STRIKES
|
||||||
if (canSerratedStrike) {
|
if (canSerratedStrike) {
|
||||||
String[] serratedStrikesStrings = calculateLengthDisplayValues(player, skillValue);
|
String[] serratedStrikesStrings = formatLengthDisplayValues(player, skillValue);
|
||||||
serratedStrikesLength = serratedStrikesStrings[0];
|
serratedStrikesLength = serratedStrikesStrings[0];
|
||||||
serratedStrikesLengthEndurance = serratedStrikesStrings[1];
|
serratedStrikesLengthEndurance = serratedStrikesStrings[1];
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ public class UnarmedCommand extends SkillCommand {
|
|||||||
|
|
||||||
// BERSERK
|
// BERSERK
|
||||||
if (canBerserk) {
|
if (canBerserk) {
|
||||||
String[] berserkStrings = calculateLengthDisplayValues(player, skillValue);
|
String[] berserkStrings = formatLengthDisplayValues(player, skillValue);
|
||||||
berserkLength = berserkStrings[0];
|
berserkLength = berserkStrings[0];
|
||||||
berserkLengthEndurance = berserkStrings[1];
|
berserkLengthEndurance = berserkStrings[1];
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@ public class WoodcuttingCommand extends SkillCommand {
|
|||||||
|
|
||||||
// TREE FELLER
|
// TREE FELLER
|
||||||
if (canTreeFell) {
|
if (canTreeFell) {
|
||||||
String[] treeFellerStrings = calculateLengthDisplayValues(player, skillValue);
|
String[] treeFellerStrings = formatLengthDisplayValues(player, skillValue);
|
||||||
treeFellerLength = treeFellerStrings[0];
|
treeFellerLength = treeFellerStrings[0];
|
||||||
treeFellerLengthEndurance = treeFellerStrings[1];
|
treeFellerLengthEndurance = treeFellerStrings[1];
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,7 @@
|
|||||||
package com.gmail.nossr50.config;
|
package com.gmail.nossr50.config;
|
||||||
|
|
||||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
|
||||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
|
||||||
import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -192,120 +188,8 @@ public class AdvancedConfig extends ConfigValidated {
|
|||||||
return getIntValue(SKILLS, GENERAL, ABILITY, ENCHANT_BUFF);
|
return getIntValue(SKILLS, GENERAL, ABILITY, ENCHANT_BUFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Grabs the max bonus level for a skill used in RNG calculations
|
|
||||||
* All max level values in the config are multiplied by 10 if the server is in retro mode as the values in the config are based around the new 1-100 skill system scaling
|
|
||||||
* A value of 10 in the file will be returned as 100 for retro mode servers to accommodate the change in scaling
|
|
||||||
*
|
|
||||||
* @param subSkillType target subskill
|
|
||||||
* @return the level at which this skills max benefits will be reached on the curve
|
|
||||||
*/
|
|
||||||
public int getMaxBonusLevel(SubSkillType subSkillType) {
|
|
||||||
String[] category = subSkillType.getAdvConfigAddress();
|
|
||||||
|
|
||||||
if (!mcMMO.isRetroModeEnabled())
|
|
||||||
return getIntValue(category[0], category[1], category[2], MAX_BONUS_LEVEL, STANDARD);
|
|
||||||
else
|
|
||||||
return getIntValue(category[0], category[1], category[2], MAX_BONUS_LEVEL, RETRO_MODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMaxBonusLevel(AbstractSubSkill abstractSubSkill) {
|
|
||||||
return getMaxBonusLevel(abstractSubSkill.getSubSkillType());
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getMaximumProbability(SubSkillType subSkillType) {
|
|
||||||
String[] category = subSkillType.getAdvConfigAddress();
|
|
||||||
|
|
||||||
double maximumProbability = getDoubleValue(category[0], category[1], category[2], CHANCE_MAX);
|
|
||||||
|
|
||||||
return maximumProbability;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getMaximumProbability(AbstractSubSkill abstractSubSkill) {
|
|
||||||
return getMaximumProbability(abstractSubSkill.getSubSkillType());
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Notification Settings */
|
/* Notification Settings */
|
||||||
|
|
||||||
public boolean doesSkillCommandSendBlankLines() {
|
|
||||||
return getBooleanValue(FEEDBACK, SKILL_COMMAND, BLANK_LINES_ABOVE_HEADER);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean doesNotificationUseActionBar(NotificationType notificationType) {
|
|
||||||
return getBooleanValue(FEEDBACK, ACTION_BAR_NOTIFICATIONS, notificationType.toString(), ENABLED);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean doesNotificationSendCopyToChat(NotificationType notificationType) {
|
|
||||||
return getBooleanValue(FEEDBACK, ACTION_BAR_NOTIFICATIONS, notificationType.toString(), SEND_COPY_OF_MESSAGE_TO_CHAT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean useTitlesForXPEvent() {
|
|
||||||
return getBooleanValue(FEEDBACK, EVENTS, XP, SEND_TITLES);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ChatColor getChatColorFromKey(String keyLocation) {
|
|
||||||
String colorName = getStringValue(keyLocation);
|
|
||||||
|
|
||||||
return getChatColor(colorName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ChatColor getChatColor(String configColor) {
|
|
||||||
for (ChatColor chatColor : ChatColor.values()) {
|
|
||||||
if (configColor.equalsIgnoreCase(chatColor.toString()))
|
|
||||||
return chatColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Invalid Color
|
|
||||||
System.out.println("[mcMMO] " + configColor + " is an invalid color value");
|
|
||||||
return ChatColor.WHITE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ACROBATICS */
|
|
||||||
public double getDodgeDamageModifier() {
|
|
||||||
return getDoubleValue(SKILLS, ACROBATICS, DODGE, DAMAGE_MODIFIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getRollDamageThreshold() {
|
|
||||||
return getDoubleValue(SKILLS, ACROBATICS, ROLL, DAMAGE_THRESHOLD);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getGracefulRollDamageThreshold() {
|
|
||||||
return getDoubleValue(SKILLS, ACROBATICS, GRACEFUL_ROLL, DAMAGE_THRESHOLD);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ALCHEMY */
|
|
||||||
public int getCatalysisMaxBonusLevel() {
|
|
||||||
return getIntValue(SKILLS, ALCHEMY, CATALYSIS, MAX_BONUS_LEVEL);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getCatalysisMinSpeed() {
|
|
||||||
return getDoubleValue(SKILLS, ALCHEMY, CATALYSIS, MIN_SPEED);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getCatalysisMaxSpeed() {
|
|
||||||
return getDoubleValue(SKILLS, ALCHEMY, CATALYSIS, MAX_SPEED);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ARCHERY */
|
|
||||||
public double getSkillShotRankDamageMultiplier() {
|
|
||||||
return getDoubleValue(SKILLS, ARCHERY, SKILL_SHOT, RANK_DAMAGE_MULTIPLIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getSkillShotDamageMax() {
|
|
||||||
return getDoubleValue(SKILLS, ARCHERY, SKILL_SHOT, MAX_DAMAGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getDazeBonusDamage() {
|
|
||||||
return getDoubleValue(SKILLS, ARCHERY, DAZE, BONUS_DAMAGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getForceMultiplier() {
|
|
||||||
return getDoubleValue(SKILLS, ARCHERY, FORCE_MULTIPLIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* EXCAVATION */
|
|
||||||
//Nothing to configure, everything is already configurable in config.yml
|
|
||||||
|
|
||||||
/* FISHING */
|
/* FISHING */
|
||||||
public double getShakeChance(int rank) {
|
public double getShakeChance(int rank) {
|
||||||
return getDoubleValue(SKILLS, FISHING, SHAKE, CHANCE, RANK, String.valueOf(rank));
|
return getDoubleValue(SKILLS, FISHING, SHAKE, CHANCE, RANK, String.valueOf(rank));
|
||||||
@ -319,20 +203,11 @@ public class AdvancedConfig extends ConfigValidated {
|
|||||||
return getDoubleValue(SKILLS, FISHING, MASTER_ANGLER, BIOME_MODIFIER);
|
return getDoubleValue(SKILLS, FISHING, MASTER_ANGLER, BIOME_MODIFIER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HERBALISM */
|
|
||||||
//public int getFarmerDietRankChange() { return getIntValue(SKILLS, ".Herbalism.FarmersDiet.RankChange"); }
|
|
||||||
|
|
||||||
//public int getGreenThumbStageChange() { return getIntValue(SKILLS, ".Herbalism.GreenThumb.StageChange"); }
|
|
||||||
|
|
||||||
/* MINING */
|
/* MINING */
|
||||||
public boolean getDoubleDropSilkTouchEnabled() {
|
public boolean getDoubleDropSilkTouchEnabled() {
|
||||||
return getBooleanValue(SKILLS, MINING, "DoubleDrops", "SilkTouch");
|
return getBooleanValue(SKILLS, MINING, "DoubleDrops", "SilkTouch");
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getBlastMiningRankLevel(int rank) {
|
|
||||||
return getIntValue(SKILLS, MINING, BLAST_MINING, RANK, LEVELS, RANK, String.valueOf(rank));
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getBlastDamageDecrease(int rank) {
|
public double getBlastDamageDecrease(int rank) {
|
||||||
return getDoubleValue(SKILLS, MINING, BLAST_MINING, BLAST_DAMAGE_DECREASE, RANK, String.valueOf(rank));
|
return getDoubleValue(SKILLS, MINING, BLAST_MINING, BLAST_DAMAGE_DECREASE, RANK, String.valueOf(rank));
|
||||||
}
|
}
|
||||||
@ -353,39 +228,6 @@ public class AdvancedConfig extends ConfigValidated {
|
|||||||
return getDoubleValue(SKILLS, MINING, BLAST_MINING, BLAST_RADIUS, MODIFIER, RANK, String.valueOf(rank));
|
return getDoubleValue(SKILLS, MINING, BLAST_MINING, BLAST_RADIUS, MODIFIER, RANK, String.valueOf(rank));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* REPAIR */
|
|
||||||
public double getRepairMasteryMaxBonus() {
|
|
||||||
return getDoubleValue(SKILLS, REPAIR, REPAIR_MASTERY, MAX_BONUS_PERCENTAGE);
|
|
||||||
}
|
|
||||||
//public int getRepairMasteryMaxLevel() { return getIntValue(SKILLS, REPAIR, REPAIR_MASTERY, MAX_BONUS_LEVEL); }
|
|
||||||
|
|
||||||
/* Arcane Forging */
|
|
||||||
public boolean getArcaneForgingEnchantLossEnabled() {
|
|
||||||
return getBooleanValue(SKILLS, REPAIR, ARCANE_FORGING, MAY_LOSE_ENCHANTS);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getArcaneForgingKeepEnchantsChance(int rank) {
|
|
||||||
return getDoubleValue(SKILLS, REPAIR, ARCANE_FORGING, KEEP_ENCHANTS, CHANCE, RANK, String.valueOf(rank));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getArcaneForgingDowngradeEnabled() {
|
|
||||||
return getBooleanValue(SKILLS, REPAIR, ARCANE_FORGING, DOWNGRADES_ENABLED);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getArcaneForgingDowngradeChance(int rank) {
|
|
||||||
return getDoubleValue(SKILLS, REPAIR, ARCANE_FORGING, DOWNGRADES, CHANCE, RANK, String.valueOf(rank));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SALVAGE */
|
|
||||||
|
|
||||||
public boolean getArcaneSalvageEnchantDowngradeEnabled() {
|
|
||||||
return getBooleanValue(SKILLS, SALVAGE, ARCANE_SALVAGE, ENCHANT_DOWNGRADE_ENABLED);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getArcaneSalvageEnchantLossEnabled() {
|
|
||||||
return getBooleanValue(SKILLS, SALVAGE, ARCANE_SALVAGE, ENCHANT_LOSS_ENABLED);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getArcaneSalvageExtractFullEnchantsChance(int rank) {
|
public double getArcaneSalvageExtractFullEnchantsChance(int rank) {
|
||||||
return getDoubleValue(SKILLS, SALVAGE, ARCANE_SALVAGE, EXTRACT_FULL_ENCHANT, RANK, String.valueOf(rank));
|
return getDoubleValue(SKILLS, SALVAGE, ARCANE_SALVAGE, EXTRACT_FULL_ENCHANT, RANK, String.valueOf(rank));
|
||||||
}
|
}
|
||||||
@ -394,20 +236,6 @@ public class AdvancedConfig extends ConfigValidated {
|
|||||||
return getDoubleValue(SKILLS, SALVAGE, ARCANE_SALVAGE, EXTRACT_PARTIAL_ENCHANT, RANK, String.valueOf(rank));
|
return getDoubleValue(SKILLS, SALVAGE, ARCANE_SALVAGE, EXTRACT_PARTIAL_ENCHANT, RANK, String.valueOf(rank));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SMELTING */
|
|
||||||
//public int getBurnModifierMaxLevel() { return getIntValue(SKILLS, SMELTING, FUEL_EFFICIENCY, MAX_BONUS_LEVEL); }
|
|
||||||
public double getBurnTimeMultiplier() {
|
|
||||||
return getDoubleValue(SKILLS, SMELTING, FUEL_EFFICIENCY, MULTIPLIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSmeltingRankLevel(int rank) {
|
|
||||||
return getIntValue(SKILLS, SMELTING, RANK, LEVELS, RANK, String.valueOf(rank));
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSmeltingVanillaXPBoostMultiplier(int rank) {
|
|
||||||
return getIntValue(SKILLS, SMELTING, VANILLA_XPMULTIPLIER, RANK, String.valueOf(rank));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SWORDS */
|
/* SWORDS */
|
||||||
public double getRuptureDamagePlayer() {
|
public double getRuptureDamagePlayer() {
|
||||||
return getDoubleValue(SKILLS, SWORDS, RUPTURE, DAMAGE_PLAYER);
|
return getDoubleValue(SKILLS, SWORDS, RUPTURE, DAMAGE_PLAYER);
|
||||||
@ -421,10 +249,6 @@ public class AdvancedConfig extends ConfigValidated {
|
|||||||
return getIntValue(SKILLS, SWORDS, RUPTURE, MAX_TICKS);
|
return getIntValue(SKILLS, SWORDS, RUPTURE, MAX_TICKS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getRuptureBaseTicks() {
|
|
||||||
return getIntValue(SKILLS, SWORDS, RUPTURE, BASE_TICKS);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getCounterAttackModifier() {
|
public double getCounterAttackModifier() {
|
||||||
return getDoubleValue(SKILLS, SWORDS, COUNTER_ATTACK, DAMAGE_MODIFIER);
|
return getDoubleValue(SKILLS, SWORDS, COUNTER_ATTACK, DAMAGE_MODIFIER);
|
||||||
}
|
}
|
||||||
@ -432,7 +256,6 @@ public class AdvancedConfig extends ConfigValidated {
|
|||||||
public double getSerratedStrikesModifier() {
|
public double getSerratedStrikesModifier() {
|
||||||
return getDoubleValue(SKILLS, SWORDS, SERRATED_STRIKES, DAMAGE_MODIFIER);
|
return getDoubleValue(SKILLS, SWORDS, SERRATED_STRIKES, DAMAGE_MODIFIER);
|
||||||
}
|
}
|
||||||
//public int getSerratedStrikesTicks() { return getIntValue(SKILLS, SWORDS, SERRATED_STRIKES, RUPTURE, TICKS); }
|
|
||||||
|
|
||||||
/* TAMING */
|
/* TAMING */
|
||||||
public double getGoreModifier() {
|
public double getGoreModifier() {
|
||||||
@ -466,11 +289,4 @@ public class AdvancedConfig extends ConfigValidated {
|
|||||||
public double getMaxHorseJumpStrength() {
|
public double getMaxHorseJumpStrength() {
|
||||||
return getDoubleValue(SKILLS, TAMING, CALL_OF_THE_WILD, MAX_HORSE_JUMP_STRENGTH);
|
return getDoubleValue(SKILLS, TAMING, CALL_OF_THE_WILD, MAX_HORSE_JUMP_STRENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* UNARMED */
|
|
||||||
public boolean getDisarmProtected() {
|
|
||||||
return getBooleanValue(SKILLS, UNARMED, DISARM, ANTI_THEFT);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* WOODCUTTING */
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.gmail.nossr50.config.hocon.skills.mining;
|
package com.gmail.nossr50.config.hocon.skills.mining;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.ConfigConstants;
|
||||||
import ninja.leaping.configurate.objectmapping.Setting;
|
import ninja.leaping.configurate.objectmapping.Setting;
|
||||||
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
||||||
|
|
||||||
@ -49,7 +50,7 @@ public class ConfigMining {
|
|||||||
"\nUse Minecraft friendly names for entries, not Bukkit material names.")
|
"\nUse Minecraft friendly names for entries, not Bukkit material names.")
|
||||||
private HashSet<String> bonusDrops = DEFAULT_BONUS_DROPS;
|
private HashSet<String> bonusDrops = DEFAULT_BONUS_DROPS;
|
||||||
|
|
||||||
@Setting(value = "Sub-Skills")
|
@Setting(value = ConfigConstants.SUB_SKILL_NODE)
|
||||||
private ConfigMiningSubskills miningSubskills = new ConfigMiningSubskills();
|
private ConfigMiningSubskills miningSubskills = new ConfigMiningSubskills();
|
||||||
|
|
||||||
public ConfigMiningSubskills getMiningSubskills() {
|
public ConfigMiningSubskills getMiningSubskills() {
|
||||||
|
@ -11,6 +11,12 @@ public class ConfigSuperAbilities {
|
|||||||
public static final boolean SUPER_ABILITY_DEFAULT = true;
|
public static final boolean SUPER_ABILITY_DEFAULT = true;
|
||||||
public static final boolean MUST_SNEAK_TO_ACTIVATE_DEFAULT = false;
|
public static final boolean MUST_SNEAK_TO_ACTIVATE_DEFAULT = false;
|
||||||
|
|
||||||
|
@Setting(value = "Base-Time-In-Seconds", comment = "The minimum duration of time based super abilities in seconds.")
|
||||||
|
private int superAbilityStartingSeconds = 4;
|
||||||
|
|
||||||
|
@Setting(value = "Super-Ability-Length-Increment", comment = "How many seconds to add to a super ability as it reaches now scaling milestones")
|
||||||
|
private int superAbilityLengthIncrease = 1;
|
||||||
|
|
||||||
@Setting(value = "Enable-Super-Abilities",
|
@Setting(value = "Enable-Super-Abilities",
|
||||||
comment = "Turn this off to disable all super abilities." +
|
comment = "Turn this off to disable all super abilities." +
|
||||||
"\nDefault value: " + SUPER_ABILITY_DEFAULT)
|
"\nDefault value: " + SUPER_ABILITY_DEFAULT)
|
||||||
@ -98,4 +104,12 @@ public class ConfigSuperAbilities {
|
|||||||
return 60;
|
return 60;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSuperAbilityStartingSeconds() {
|
||||||
|
return superAbilityStartingSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSuperAbilityLengthIncrease() {
|
||||||
|
return superAbilityLengthIncrease;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.gmail.nossr50.datatypes.player;
|
package com.gmail.nossr50.datatypes.player;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.AdvancedConfig;
|
|
||||||
import com.gmail.nossr50.config.MainConfig;
|
import com.gmail.nossr50.config.MainConfig;
|
||||||
import com.gmail.nossr50.config.WorldBlacklist;
|
import com.gmail.nossr50.config.WorldBlacklist;
|
||||||
import com.gmail.nossr50.datatypes.chat.ChatMode;
|
import com.gmail.nossr50.datatypes.chat.ChatMode;
|
||||||
@ -808,17 +807,16 @@ public class McMMOPlayer {
|
|||||||
*/
|
*/
|
||||||
public void checkAbilityActivation(PrimarySkillType skill) {
|
public void checkAbilityActivation(PrimarySkillType skill) {
|
||||||
ToolType tool = skill.getTool();
|
ToolType tool = skill.getTool();
|
||||||
SuperAbilityType ability = skill.getAbility();
|
SuperAbilityType ability = skill.getSuperAbility();
|
||||||
|
|
||||||
if (getAbilityMode(ability) || !ability.getPermissions(player)) {
|
if (getAbilityMode(ability) || !ability.getPermissions(player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//TODO: This is hacky and temporary solution until skills are move to the new system
|
//TODO: This is hacky and temporary solution until skills are move to the new system
|
||||||
//Potential problems with this include skills with two super abilities (ie mining)
|
//Potential problems with this include skills with two super abilities (ie mining)
|
||||||
if (!skill.isSuperAbilityUnlocked(getPlayer())) {
|
if (!skill.isSuperAbilityUnlocked(getPlayer())) {
|
||||||
int diff = RankUtils.getSuperAbilityUnlockRequirement(skill.getAbility()) - getSkillLevel(skill);
|
int diff = RankUtils.getSuperAbilityUnlockRequirement(skill.getSuperAbility()) - getSkillLevel(skill);
|
||||||
|
|
||||||
//Inform the player they are not yet skilled enough
|
//Inform the player they are not yet skilled enough
|
||||||
mcMMO.getNotificationManager().sendPlayerInformation(player, NotificationType.ABILITY_COOLDOWN, "Skills.AbilityGateRequirementFail", String.valueOf(diff), skill.getName());
|
mcMMO.getNotificationManager().sendPlayerInformation(player, NotificationType.ABILITY_COOLDOWN, "Skills.AbilityGateRequirementFail", String.valueOf(diff), skill.getName());
|
||||||
@ -844,19 +842,6 @@ public class McMMOPlayer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//These values change depending on whether or not the server is in retro mode
|
|
||||||
int abilityLengthVar = AdvancedConfig.getInstance().getAbilityLength();
|
|
||||||
int abilityLengthCap = AdvancedConfig.getInstance().getAbilityLengthCap();
|
|
||||||
|
|
||||||
int ticks;
|
|
||||||
|
|
||||||
//Ability cap of 0 or below means no cap
|
|
||||||
if (abilityLengthCap > 0) {
|
|
||||||
ticks = PerksUtils.handleActivationPerks(player, 2 + (Math.min(abilityLengthCap, getSkillLevel(skill)) / abilityLengthVar), ability.getMaxLength());
|
|
||||||
} else {
|
|
||||||
ticks = PerksUtils.handleActivationPerks(player, 2 + (getSkillLevel(skill) / abilityLengthVar), ability.getMaxLength());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notify people that ability has been activated
|
// Notify people that ability has been activated
|
||||||
ParticleEffectUtils.playAbilityEnabledEffect(player);
|
ParticleEffectUtils.playAbilityEnabledEffect(player);
|
||||||
|
|
||||||
@ -870,9 +855,10 @@ public class McMMOPlayer {
|
|||||||
//Sounds
|
//Sounds
|
||||||
SoundManager.worldSendSound(player.getWorld(), player.getLocation(), SoundType.ABILITY_ACTIVATED_GENERIC);
|
SoundManager.worldSendSound(player.getWorld(), player.getLocation(), SoundType.ABILITY_ACTIVATED_GENERIC);
|
||||||
|
|
||||||
|
int abilityLength = SkillUtils.calculateAbilityLengthPerks(this, skill, ability);
|
||||||
|
|
||||||
// Enable the ability
|
// Enable the ability
|
||||||
profile.setAbilityDATS(ability, System.currentTimeMillis() + (ticks * Misc.TIME_CONVERSION_FACTOR));
|
profile.setAbilityDATS(ability, System.currentTimeMillis() + (abilityLength * Misc.TIME_CONVERSION_FACTOR));
|
||||||
setAbilityMode(ability, true);
|
setAbilityMode(ability, true);
|
||||||
|
|
||||||
if (ability == SuperAbilityType.SUPER_BREAKER || ability == SuperAbilityType.GIGA_DRILL_BREAKER) {
|
if (ability == SuperAbilityType.SUPER_BREAKER || ability == SuperAbilityType.GIGA_DRILL_BREAKER) {
|
||||||
@ -880,7 +866,7 @@ public class McMMOPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setToolPreparationMode(tool, false);
|
setToolPreparationMode(tool, false);
|
||||||
new AbilityDisableTask(this, ability).runTaskLater(mcMMO.p, ticks * Misc.TICK_CONVERSION_FACTOR);
|
new AbilityDisableTask(this, ability).runTaskLater(mcMMO.p, abilityLength * Misc.TICK_CONVERSION_FACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void processAbilityActivation(PrimarySkillType skill) {
|
public void processAbilityActivation(PrimarySkillType skill) {
|
||||||
@ -904,7 +890,7 @@ public class McMMOPlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SuperAbilityType ability = skill.getAbility();
|
SuperAbilityType ability = skill.getSuperAbility();
|
||||||
ToolType tool = skill.getTool();
|
ToolType tool = skill.getTool();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -157,7 +157,7 @@ public enum PrimarySkillType {
|
|||||||
|
|
||||||
public static PrimarySkillType byAbility(SuperAbilityType ability) {
|
public static PrimarySkillType byAbility(SuperAbilityType ability) {
|
||||||
for (PrimarySkillType type : values()) {
|
for (PrimarySkillType type : values()) {
|
||||||
if (type.getAbility() == ability) {
|
if (type.getSuperAbility() == ability) {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -169,7 +169,7 @@ public enum PrimarySkillType {
|
|||||||
return managerClass;
|
return managerClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SuperAbilityType getAbility() {
|
public SuperAbilityType getSuperAbility() {
|
||||||
return ability;
|
return ability;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,7 +187,7 @@ public enum PrimarySkillType {
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
public boolean isSuperAbilityUnlocked(Player player) {
|
public boolean isSuperAbilityUnlocked(Player player) {
|
||||||
return RankUtils.getRank(player, getAbility().getSubSkillTypeDefinition()) >= 1;
|
return RankUtils.getRank(player, getSuperAbility().getSubSkillTypeDefinition()) >= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public void setHardcoreStatLossEnabled(boolean enable) {
|
/*public void setHardcoreStatLossEnabled(boolean enable) {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.gmail.nossr50.datatypes.skills.subskills.acrobatics;
|
package com.gmail.nossr50.datatypes.skills.subskills.acrobatics;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.AdvancedConfig;
|
|
||||||
import com.gmail.nossr50.datatypes.experience.XPGainReason;
|
import com.gmail.nossr50.datatypes.experience.XPGainReason;
|
||||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
@ -238,7 +237,7 @@ public class Roll extends AcrobaticsSubSkill {
|
|||||||
* @return the modified event damage if the ability was successful, the original event damage otherwise
|
* @return the modified event damage if the ability was successful, the original event damage otherwise
|
||||||
*/
|
*/
|
||||||
private double gracefulRollCheck(Player player, McMMOPlayer mcMMOPlayer, double damage, int skillLevel) {
|
private double gracefulRollCheck(Player player, McMMOPlayer mcMMOPlayer, double damage, int skillLevel) {
|
||||||
double modifiedDamage = calculateModifiedRollDamage(damage, AdvancedConfig.getInstance().getRollDamageThreshold() * 2);
|
double modifiedDamage = calculateModifiedRollDamage(damage, mcMMO.getConfigManager().getConfigAcrobatics().getRollDamageTheshold() * 2);
|
||||||
|
|
||||||
RandomChanceSkill rcs = new RandomChanceSkill(player, subSkillType);
|
RandomChanceSkill rcs = new RandomChanceSkill(player, subSkillType);
|
||||||
rcs.setSkillLevel(rcs.getSkillLevel() * 2); //Double the effective odds
|
rcs.setSkillLevel(rcs.getSkillLevel() * 2); //Double the effective odds
|
||||||
@ -378,11 +377,11 @@ public class Roll extends AcrobaticsSubSkill {
|
|||||||
//Chance Stat Calculations
|
//Chance Stat Calculations
|
||||||
rollChanceHalfMax = RandomChanceUtil.getRandomChanceExecutionChance(rollHalfMaxSkill);
|
rollChanceHalfMax = RandomChanceUtil.getRandomChanceExecutionChance(rollHalfMaxSkill);
|
||||||
graceChanceHalfMax = RandomChanceUtil.getRandomChanceExecutionChance(rollGraceHalfMaxSkill);
|
graceChanceHalfMax = RandomChanceUtil.getRandomChanceExecutionChance(rollGraceHalfMaxSkill);
|
||||||
damageThreshold = AdvancedConfig.getInstance().getRollDamageThreshold();
|
damageThreshold = mcMMO.getConfigManager().getConfigAcrobatics().getRollDamageTheshold();
|
||||||
|
|
||||||
chancePerLevel = RandomChanceUtil.getRandomChanceExecutionChance(rollOneSkillLevel);
|
chancePerLevel = RandomChanceUtil.getRandomChanceExecutionChance(rollOneSkillLevel);
|
||||||
|
|
||||||
double maxLevel = AdvancedConfig.getInstance().getMaxBonusLevel(SubSkillType.ACROBATICS_ROLL);
|
double maxLevel = mcMMO.getDynamicSettingsManager().getSkillMaxBonusLevel(SubSkillType.ACROBATICS_ROLL);
|
||||||
|
|
||||||
return LocaleLoader.getString("Acrobatics.SubSkill.Roll.Mechanics", rollChanceHalfMax, graceChanceHalfMax, maxLevel, chancePerLevel, damageThreshold, damageThreshold * 2);
|
return LocaleLoader.getString("Acrobatics.SubSkill.Roll.Mechanics", rollChanceHalfMax, graceChanceHalfMax, maxLevel, chancePerLevel, damageThreshold, damageThreshold * 2);
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ public class McMMOPlayerAbilityEvent extends McMMOPlayerSkillEvent {
|
|||||||
|
|
||||||
protected McMMOPlayerAbilityEvent(Player player, PrimarySkillType skill) {
|
protected McMMOPlayerAbilityEvent(Player player, PrimarySkillType skill) {
|
||||||
super(player, skill);
|
super(player, skill);
|
||||||
ability = skill.getAbility();
|
ability = skill.getSuperAbility();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SuperAbilityType getAbility() {
|
public SuperAbilityType getAbility() {
|
||||||
|
@ -136,7 +136,7 @@ public class HerbalismManager extends SkillManager {
|
|||||||
|
|
||||||
int amount;
|
int amount;
|
||||||
int xp;
|
int xp;
|
||||||
boolean greenTerra = mcMMOPlayer.getAbilityMode(skill.getAbility());
|
boolean greenTerra = mcMMOPlayer.getAbilityMode(skill.getSuperAbility());
|
||||||
|
|
||||||
// if (mcMMO.getModManager().isCustomHerbalismBlock(blockState)) {
|
// if (mcMMO.getModManager().isCustomHerbalismBlock(blockState)) {
|
||||||
// CustomBlock customBlock = mcMMO.getModManager().getBlock(blockState);
|
// CustomBlock customBlock = mcMMO.getModManager().getBlock(blockState);
|
||||||
@ -317,7 +317,7 @@ public class HerbalismManager extends SkillManager {
|
|||||||
|
|
||||||
ItemStack seedStack = new ItemStack(seed);
|
ItemStack seedStack = new ItemStack(seed);
|
||||||
|
|
||||||
if (!greenTerra && !RandomChanceUtil.checkRandomChanceExecutionSuccess(player, SubSkillType.HERBALISM_GREEN_THUMB, true)) {
|
if (!greenTerra && !RandomChanceUtil.checkRandomChanceExecutionSuccess(player, SubSkillType.HERBALISM_GREEN_THUMB)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ public class MiningManager extends SkillManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mcMMOPlayer.getAbilityMode(skill.getAbility())) {
|
if (mcMMOPlayer.getAbilityMode(skill.getSuperAbility())) {
|
||||||
SkillUtils.handleDurabilityChange(getPlayer().getInventory().getItemInMainHand(), mcMMO.getConfigManager().getConfigSuperAbilities().getSuperAbilityLimits().getToolDurabilityDamage());
|
SkillUtils.handleDurabilityChange(getPlayer().getInventory().getItemInMainHand(), mcMMO.getConfigManager().getConfigSuperAbilities().getSuperAbilityLimits().getToolDurabilityDamage());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,8 +101,8 @@ public class MiningManager extends SkillManager {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
//TODO: Make this readable
|
//TODO: Make this readable
|
||||||
if (RandomChanceUtil.checkRandomChanceExecutionSuccess(getPlayer(), SubSkillType.MINING_DOUBLE_DROPS, true)) {
|
if (RandomChanceUtil.checkRandomChanceExecutionSuccess(getPlayer(), SubSkillType.MINING_DOUBLE_DROPS)) {
|
||||||
BlockUtils.markDropsAsBonus(blockState, mcMMOPlayer.getAbilityMode(skill.getAbility()));
|
BlockUtils.markDropsAsBonus(blockState, mcMMOPlayer.getAbilityMode(skill.getSuperAbility()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
|||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.util.skills.PerksUtils;
|
import com.gmail.nossr50.util.skills.PerksUtils;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.PluginDescriptionFile;
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
|
|
||||||
@ -112,7 +113,7 @@ public final class Motd {
|
|||||||
* @param player Target player
|
* @param player Target player
|
||||||
*/
|
*/
|
||||||
public static void displayActivationPerks(Player player) {
|
public static void displayActivationPerks(Player player) {
|
||||||
int perkAmount = PerksUtils.handleActivationPerks(player, 0, 0);
|
int perkAmount = SkillUtils.getEnduranceLength(player);
|
||||||
|
|
||||||
if (perkAmount > 0) {
|
if (perkAmount > 0) {
|
||||||
player.sendMessage(PERK_PREFIX + LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Perks.ActivationTime.Name"), LocaleLoader.getString("Perks.ActivationTime.Desc", perkAmount)));
|
player.sendMessage(PERK_PREFIX + LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Perks.ActivationTime.Name"), LocaleLoader.getString("Perks.ActivationTime.Desc", perkAmount)));
|
||||||
|
@ -32,7 +32,7 @@ public class RandomChanceUtil {
|
|||||||
public static boolean isActivationSuccessful(SkillActivationType skillActivationType, SubSkillType subSkillType, Player player) {
|
public static boolean isActivationSuccessful(SkillActivationType skillActivationType, SubSkillType subSkillType, Player player) {
|
||||||
switch (skillActivationType) {
|
switch (skillActivationType) {
|
||||||
case RANDOM_LINEAR_100_SCALE_WITH_CAP:
|
case RANDOM_LINEAR_100_SCALE_WITH_CAP:
|
||||||
return checkRandomChanceExecutionSuccess(player, subSkillType, true);
|
return checkRandomChanceExecutionSuccess(player, subSkillType);
|
||||||
case RANDOM_STATIC_CHANCE:
|
case RANDOM_STATIC_CHANCE:
|
||||||
return checkRandomStaticChanceExecutionSuccess(player, subSkillType);
|
return checkRandomStaticChanceExecutionSuccess(player, subSkillType);
|
||||||
case ALWAYS_FIRES:
|
case ALWAYS_FIRES:
|
||||||
@ -97,8 +97,6 @@ public class RandomChanceUtil {
|
|||||||
public static boolean checkRandomChanceExecutionSuccess(RandomChanceSkill randomChance) {
|
public static boolean checkRandomChanceExecutionSuccess(RandomChanceSkill randomChance) {
|
||||||
double chanceOfSuccess = calculateChanceOfSuccess(randomChance);
|
double chanceOfSuccess = calculateChanceOfSuccess(randomChance);
|
||||||
|
|
||||||
Random random = new Random();
|
|
||||||
|
|
||||||
//Check the odds
|
//Check the odds
|
||||||
return rollDice(chanceOfSuccess, 100);
|
return rollDice(chanceOfSuccess, 100);
|
||||||
}
|
}
|
||||||
@ -135,10 +133,10 @@ public class RandomChanceUtil {
|
|||||||
return chanceOfSuccess;
|
return chanceOfSuccess;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
private static double calculateChanceOfSuccess(RandomChanceSkill randomChance) {
|
private static double calculateChanceOfSuccess(RandomChanceSkill randomChanceSkill) {
|
||||||
double skillLevel = randomChance.getSkillLevel();
|
double skillLevel = randomChanceSkill.getSkillLevel();
|
||||||
double maximumProbability = randomChance.getProbabilityCap();
|
double maximumProbability = randomChanceSkill.getProbabilityCap();
|
||||||
double maximumBonusLevel = randomChance.getMaximumBonusLevelCap();
|
double maximumBonusLevel = randomChanceSkill.getMaximumBonusLevelCap();
|
||||||
|
|
||||||
double chanceOfSuccess;
|
double chanceOfSuccess;
|
||||||
|
|
||||||
@ -147,11 +145,11 @@ public class RandomChanceUtil {
|
|||||||
chanceOfSuccess = maximumProbability;
|
chanceOfSuccess = maximumProbability;
|
||||||
} else {
|
} else {
|
||||||
//Get chance of success
|
//Get chance of success
|
||||||
chanceOfSuccess = getChanceOfSuccess(randomChance.getXPos(), maximumProbability, maximumBonusLevel);
|
chanceOfSuccess = getChanceOfSuccess(randomChanceSkill.getXPos(), maximumProbability, maximumBonusLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Add Luck
|
//Add Luck
|
||||||
chanceOfSuccess = addLuck(randomChance.isLucky(), chanceOfSuccess);
|
chanceOfSuccess = addLuck(randomChanceSkill.isLucky(), chanceOfSuccess);
|
||||||
|
|
||||||
return chanceOfSuccess;
|
return chanceOfSuccess;
|
||||||
}
|
}
|
||||||
@ -198,10 +196,6 @@ public class RandomChanceUtil {
|
|||||||
return 0.1337; //Puts on shades
|
return 0.1337; //Puts on shades
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean checkRandomChanceExecutionSuccess(Player player, SubSkillType subSkillType, boolean hasCap) {
|
|
||||||
return checkRandomChanceExecutionSuccess(new RandomChanceSkill(player, subSkillType, hasCap));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean checkRandomChanceExecutionSuccess(Player player, SubSkillType subSkillType) {
|
public static boolean checkRandomChanceExecutionSuccess(Player player, SubSkillType subSkillType) {
|
||||||
return checkRandomChanceExecutionSuccess(new RandomChanceSkill(player, subSkillType));
|
return checkRandomChanceExecutionSuccess(new RandomChanceSkill(player, subSkillType));
|
||||||
}
|
}
|
||||||
|
@ -88,8 +88,8 @@ public class ScoreboardManager {
|
|||||||
// Include child skills
|
// Include child skills
|
||||||
skillLabelBuilder.put(type, getShortenedName(colors.get(i) + type.getName(), false));
|
skillLabelBuilder.put(type, getShortenedName(colors.get(i) + type.getName(), false));
|
||||||
|
|
||||||
if (type.getAbility() != null) {
|
if (type.getSuperAbility() != null) {
|
||||||
abilityLabelBuilder.put(type.getAbility(), getShortenedName(colors.get(i) + type.getAbility().getName()));
|
abilityLabelBuilder.put(type.getSuperAbility(), getShortenedName(colors.get(i) + type.getSuperAbility().getName()));
|
||||||
|
|
||||||
if (type == PrimarySkillType.MINING) {
|
if (type == PrimarySkillType.MINING) {
|
||||||
abilityLabelBuilder.put(SuperAbilityType.BLAST_MINING, getShortenedName(colors.get(i) + SuperAbilityType.BLAST_MINING.getName()));
|
abilityLabelBuilder.put(SuperAbilityType.BLAST_MINING, getShortenedName(colors.get(i) + SuperAbilityType.BLAST_MINING.getName()));
|
||||||
@ -110,8 +110,8 @@ public class ScoreboardManager {
|
|||||||
// Include child skills
|
// Include child skills
|
||||||
skillLabelBuilder.put(type, getShortenedName(ChatColor.GREEN + type.getName()));
|
skillLabelBuilder.put(type, getShortenedName(ChatColor.GREEN + type.getName()));
|
||||||
|
|
||||||
if (type.getAbility() != null) {
|
if (type.getSuperAbility() != null) {
|
||||||
abilityLabelBuilder.put(type.getAbility(), formatAbility(type.getAbility().getName()));
|
abilityLabelBuilder.put(type.getSuperAbility(), formatAbility(type.getSuperAbility().getName()));
|
||||||
|
|
||||||
if (type == PrimarySkillType.MINING) {
|
if (type == PrimarySkillType.MINING) {
|
||||||
abilityLabelBuilder.put(SuperAbilityType.BLAST_MINING, formatAbility(SuperAbilityType.BLAST_MINING.getName()));
|
abilityLabelBuilder.put(SuperAbilityType.BLAST_MINING, formatAbility(SuperAbilityType.BLAST_MINING.getName()));
|
||||||
|
@ -418,7 +418,7 @@ public class ScoreboardWrapper {
|
|||||||
|
|
||||||
sidebarObjective.getScore(ScoreboardManager.LABEL_LEVEL).setScore(mcMMOPlayer.getSkillLevel(targetSkill));
|
sidebarObjective.getScore(ScoreboardManager.LABEL_LEVEL).setScore(mcMMOPlayer.getSkillLevel(targetSkill));
|
||||||
|
|
||||||
if (targetSkill.getAbility() != null) {
|
if (targetSkill.getSuperAbility() != null) {
|
||||||
boolean stopUpdating;
|
boolean stopUpdating;
|
||||||
|
|
||||||
if (targetSkill == PrimarySkillType.MINING) {
|
if (targetSkill == PrimarySkillType.MINING) {
|
||||||
@ -433,7 +433,7 @@ public class ScoreboardWrapper {
|
|||||||
|
|
||||||
stopUpdating = (secondsSB == 0 && secondsBM == 0);
|
stopUpdating = (secondsSB == 0 && secondsBM == 0);
|
||||||
} else {
|
} else {
|
||||||
SuperAbilityType ability = targetSkill.getAbility();
|
SuperAbilityType ability = targetSkill.getSuperAbility();
|
||||||
Score cooldown = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(ability));
|
Score cooldown = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(ability));
|
||||||
int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
|
int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
|
||||||
|
|
||||||
|
@ -23,22 +23,6 @@ public final class PerksUtils {
|
|||||||
return cooldown;
|
return cooldown;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int handleActivationPerks(Player player, int ticks, int maxTicks) {
|
|
||||||
if (maxTicks != 0) {
|
|
||||||
ticks = Math.min(ticks, maxTicks);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Permissions.twelveSecondActivationBoost(player)) {
|
|
||||||
ticks += 12;
|
|
||||||
} else if (Permissions.eightSecondActivationBoost(player)) {
|
|
||||||
ticks += 8;
|
|
||||||
} else if (Permissions.fourSecondActivationBoost(player)) {
|
|
||||||
ticks += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ticks;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate activation chance for a skill.
|
* Calculate activation chance for a skill.
|
||||||
*
|
*
|
||||||
|
@ -7,10 +7,12 @@ import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
|||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.util.ItemUtils;
|
import com.gmail.nossr50.util.ItemUtils;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -37,35 +39,57 @@ public class SkillUtils {
|
|||||||
mcMMOPlayer.beginXpGain(skill, xp, xpGainReason, xpGainSource);
|
mcMMOPlayer.beginXpGain(skill, xp, xpGainReason, xpGainSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Skill Stat Calculations
|
* Calculates how long a given ability should last in seconds
|
||||||
|
* Does not factor in perks
|
||||||
|
* @param mcMMOPlayer target mcMMO Player
|
||||||
|
* @param skill target skill
|
||||||
|
* @param superAbilityType target Super Ability
|
||||||
|
* @return how long an ability should last in seconds
|
||||||
*/
|
*/
|
||||||
|
public static int calculateAbilityLength(McMMOPlayer mcMMOPlayer, PrimarySkillType skill, SuperAbilityType superAbilityType) {
|
||||||
|
//These values change depending on whether or not the server is in retro mode
|
||||||
|
int abilityLengthVar = mcMMO.getConfigManager().getConfigSuperAbilities().getSuperAbilityStartingSeconds();
|
||||||
|
|
||||||
public static String[] calculateLengthDisplayValues(Player player, float skillValue, PrimarySkillType skill) {
|
int maxLength = mcMMO.getConfigManager().getConfigSuperAbilities().getMaxLengthForSuper(superAbilityType);
|
||||||
int maxLength = skill.getAbility().getMaxLength();
|
|
||||||
int abilityLengthVar = AdvancedConfig.getInstance().getAbilityLength();
|
|
||||||
int abilityLengthCap = AdvancedConfig.getInstance().getAbilityLengthCap();
|
|
||||||
|
|
||||||
int length;
|
int skillLevel = mcMMOPlayer.getSkillLevel(skill);
|
||||||
|
|
||||||
if (abilityLengthCap > 0) {
|
int ticks;
|
||||||
length = (int) Math.min(abilityLengthCap, 2 + (skillValue / abilityLengthVar));
|
|
||||||
|
//Ability cap of 0 or below means no cap
|
||||||
|
if (maxLength > 0) {
|
||||||
|
ticks = Math.min(2 + (Math.min(maxLength, skillLevel) / abilityLengthVar), maxLength);
|
||||||
} else {
|
} else {
|
||||||
length = 2 + (int) (skillValue / abilityLengthVar);
|
ticks = Math.min(2 + (Math.min(maxLength, skillLevel) / abilityLengthVar), maxLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
int enduranceLength = PerksUtils.handleActivationPerks(player, length, maxLength);
|
return ticks;
|
||||||
|
|
||||||
if (maxLength != 0) {
|
|
||||||
length = Math.min(length, maxLength);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return new String[]{String.valueOf(length), String.valueOf(enduranceLength)};
|
/**
|
||||||
}
|
* Calculates how long a given ability should last in seconds
|
||||||
|
* Adds in perks if the player has any
|
||||||
/*
|
* @param mcMMOPlayer target mcMMO Player
|
||||||
* Others
|
* @param skill target skill
|
||||||
|
* @param superAbilityType target Super Ability
|
||||||
|
* @return how long an ability should last in seconds
|
||||||
*/
|
*/
|
||||||
|
public static int calculateAbilityLengthPerks(McMMOPlayer mcMMOPlayer, PrimarySkillType skill, SuperAbilityType superAbilityType) {
|
||||||
|
return getEnduranceLength(mcMMOPlayer.getPlayer()) + calculateAbilityLength(mcMMOPlayer, skill, superAbilityType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getEnduranceLength(Player player) {
|
||||||
|
if (Permissions.twelveSecondActivationBoost(player)) {
|
||||||
|
return 12;
|
||||||
|
} else if (Permissions.eightSecondActivationBoost(player)) {
|
||||||
|
return 8;
|
||||||
|
} else if (Permissions.fourSecondActivationBoost(player)) {
|
||||||
|
return 4;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static int handleFoodSkills(Player player, int eventFoodLevel, SubSkillType subSkillType) {
|
public static int handleFoodSkills(Player player, int eventFoodLevel, SubSkillType subSkillType) {
|
||||||
int curRank = RankUtils.getRank(player, subSkillType);
|
int curRank = RankUtils.getRank(player, subSkillType);
|
||||||
@ -172,11 +196,11 @@ public class SkillUtils {
|
|||||||
|
|
||||||
if(abilityLengthCap > 0)
|
if(abilityLengthCap > 0)
|
||||||
{
|
{
|
||||||
ticks = PerksUtils.handleActivationPerks(player, Math.min(abilityLengthCap, 2 + (mcMMOPlayer.getSkillLevel(skill) / abilityLengthVar)),
|
ticks = PerksUtils.calculateAbilityLength(player, Math.min(abilityLengthCap, 2 + (mcMMOPlayer.getSkillLevel(skill) / abilityLengthVar)),
|
||||||
skill.getAbility().getMaxLength()) * Misc.TICK_CONVERSION_FACTOR;
|
skill.getSuperAbility().getMaxLength()) * Misc.TICK_CONVERSION_FACTOR;
|
||||||
} else {
|
} else {
|
||||||
ticks = PerksUtils.handleActivationPerks(player, 2 + ((mcMMOPlayer.getSkillLevel(skill)) / abilityLengthVar),
|
ticks = PerksUtils.calculateAbilityLength(player, 2 + ((mcMMOPlayer.getSkillLevel(skill)) / abilityLengthVar),
|
||||||
skill.getAbility().getMaxLength()) * Misc.TICK_CONVERSION_FACTOR;
|
skill.getSuperAbility().getMaxLength()) * Misc.TICK_CONVERSION_FACTOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
PotionEffect abilityBuff = new PotionEffect(PotionEffectType.FAST_DIGGING, duration + ticks, amplifier + 10);
|
PotionEffect abilityBuff = new PotionEffect(PotionEffectType.FAST_DIGGING, duration + ticks, amplifier + 10);
|
||||||
|
Loading…
Reference in New Issue
Block a user