From 54cf356b7185544bf4b7920e7f88740d60287cb5 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Thu, 3 Jan 2019 04:32:46 -0800 Subject: [PATCH] converting more SubSkills to be JSON friendly AxeMaster & SkillShot --- Changelog.txt | 8 ++++-- .../commands/skills/ArcheryCommand.java | 2 +- .../nossr50/commands/skills/AxesCommand.java | 4 ++- .../gmail/nossr50/config/AdvancedConfig.java | 23 +++++---------- .../nossr50/datatypes/skills/SubSkill.java | 4 ++- .../gmail/nossr50/skills/archery/Archery.java | 21 ++++++++++++-- .../skills/archery/ArcheryManager.java | 18 ++++-------- .../com/gmail/nossr50/skills/axes/Axes.java | 17 +++++++++-- .../nossr50/skills/axes/AxesManager.java | 7 ++--- src/main/resources/advanced.yml | 28 +++++++++---------- 10 files changed, 73 insertions(+), 59 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 4f57087e7..8ac61423f 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -17,11 +17,13 @@ Version 2.1.0 + (Commands) Added toggle command /mcchatspy + (Permissions) Added permission node mcmmo.commands.mcchatspy & mcmmo.commands.mcchatspy.others + (Permissions) Added permission nodes for Harvest Lumber, Splinter, Nature's Bounty, and Bark Surgeon - - (Config) Removed Skills.Archery.SkillShot.IncreaseLevel & Skills.Archery.SkillShot.IncreasePercentage + - (Config) Removed SkillShot's IncreaseLevel & IncreasePercentage (replaced by RankDamageMultiplier) + - (Config) Removed AxeMastery's MaxBonus & MaxBonusLevel (replaced by RankDamageMultiplier) ! (Skills) Woodcutting's Double Drop subskill is now named Harvest Lumber ! (Skills) Archery's Skill Shot now uses a rank system - ! (Config) Archery's Skill Shot now uses IncreaseDamage for its damage bonus - ! (Config) Archery's Skill shot now uses IncreaseDamageMaxBonus instead of MaxDamage + ! (Skills) Axe's Axe Mastery now uses a rank system + ! (Config) Archery's Skill Shot now uses RankDamageMultiplier for its damage bonus calculations + ! (Config) Axe's Axe mastery now uses RankDamageMultiplier for its damage bonus calculations ! (Permissions) Replaced the old Double Drop permission node for woodcutting with a new Harvest Lumber permission node ! (Locale) Super Abilities no longer have (ABILITY) in their Skill.Effect strings ! (API) mcMMO is now built against Spigot-API instead of Bukkit diff --git a/src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java index 2c159d043..210d67b54 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java @@ -32,7 +32,7 @@ public class ArcheryCommand extends SkillCommand { // SKILL SHOT if (canSkillShot) { double bonus = (skillValue / Archery.skillShotIncreaseLevel) * Archery.skillShotIncreasePercentage; - skillShotBonus = percent.format(Math.min(bonus, Archery.skillShotMaxBonusPercentage)); + skillShotBonus = percent.format(Archery.getSkillShotBonusDamage(player, 0)); } // ARCHERY_DAZE diff --git a/src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java index 386e17214..70dc519bf 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java @@ -3,8 +3,10 @@ package com.gmail.nossr50.commands.skills; import java.util.ArrayList; import java.util.List; +import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.datatypes.skills.PrimarySkill; import com.gmail.nossr50.datatypes.skills.SubSkill; +import com.gmail.nossr50.util.skills.RankUtils; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.entity.Player; @@ -53,7 +55,7 @@ public class AxesCommand extends SkillCommand { // AXE MASTERY if (canAxeMastery) { - axeMasteryDamage = Math.min(skillValue / (Axes.axeMasteryMaxBonusLevel / Axes.axeMasteryMaxBonus), Axes.axeMasteryMaxBonus); + axeMasteryDamage = Axes.getAxeMasteryBonusDamage(player); } } diff --git a/src/main/java/com/gmail/nossr50/config/AdvancedConfig.java b/src/main/java/com/gmail/nossr50/config/AdvancedConfig.java index 4fb59e244..7307732d0 100644 --- a/src/main/java/com/gmail/nossr50/config/AdvancedConfig.java +++ b/src/main/java/com/gmail/nossr50/config/AdvancedConfig.java @@ -119,12 +119,8 @@ public class AdvancedConfig extends AutoUpdateConfigLoader { /* ARCHERY */ - if (getSkillShotIncreasePercentage() <= 0) { - reason.add("Skills.Archery.SkillShot.IncreaseDamage should be greater than 0!"); - } - - if (getSkillShotBonusMax() < 0) { - reason.add("Skills.Archery.SkillShot.IncreaseDamageMaxBonus should be at least 0!"); + if (getSkillShotRankDamageMultiplier() <= 0) { + reason.add("Skills.Archery.SkillShot.RankDamageMultiplier should be greater than 0!"); } if (getMaxChance(SubSkill.ARCHERY_DAZE) < 1) { @@ -152,12 +148,9 @@ public class AdvancedConfig extends AutoUpdateConfigLoader { } /* AXES */ - if (getAxeMasteryBonusMax() < 1) { - reason.add("Skills.Axes.AxeMastery.MaxBonus should be at least 1!"); - } - - if (getAxeMasteryMaxBonusLevel() < 1) { - reason.add("Skills.Axes.AxeMastery.MaxBonusLevel should be at least 1!"); + if(getAxeMasteryRankDamageMultiplier() < 0) + { + reason.add("Skills.Axes.AxeMastery.RankDamageMultiplier should be at least 0!"); } if (getMaxChance(SubSkill.AXES_CRITICAL_HIT) < 1) { @@ -736,8 +729,7 @@ public class AdvancedConfig extends AutoUpdateConfigLoader { /* ARCHERY */ public int getSkillShotIncreaseLevel() { return config.getInt("Skills.Archery.SkillShot.IncreaseLevel", 50); } - public double getSkillShotIncreasePercentage() { return config.getDouble("Skills.Archery.SkillShot.IncreaseDamage", 10.0D); } - public double getSkillShotBonusMax() { return config.getDouble("Skills.Archery.SkillShot.IncreaseDamageMaxBonus", 200.0D); } + public double getSkillShotRankDamageMultiplier() { return config.getDouble("Skills.Archery.SkillShot.RankDamageMultiplier", 10.0D); } public double getSkillShotDamageMax() { return config.getDouble("Skills.Archery.SkillShot.MaxDamage", 9.0D); } public double getDazeBonusDamage() { return config.getDouble("Skills.Archery.Daze.BonusDamage", 4.0D); } @@ -745,8 +737,7 @@ public class AdvancedConfig extends AutoUpdateConfigLoader { public double getForceMultiplier() { return config.getDouble("Skills.Archery.ForceMultiplier", 2.0D); } /* AXES */ - public double getAxeMasteryBonusMax() { return config.getDouble("Skills.Axes.AxeMastery.MaxBonus", 4.0D); } - public int getAxeMasteryMaxBonusLevel() { return config.getInt("Skills.Axes.AxeMastery.MaxBonusLevel", 200); } + public double getAxeMasteryRankDamageMultiplier() { return config.getDouble("Skills.Axes.AxeMastery.RankDamageMultiplier", 1.0D); } public double getCriticalHitPVPModifier() { return config.getDouble("Skills.Axes.CriticalHit.PVP_Modifier", 1.5D); } public double getCriticalHitPVEModifier() { return config.getDouble("Skills.Axes.CriticalHit.PVE_Modifier", 2.0D); } diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkill.java b/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkill.java index b7d08a82f..6d8bd5b5e 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkill.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/SubSkill.java @@ -26,9 +26,10 @@ public enum SubSkill { /* Axes */ AXES_ARMOR_IMPACT, - AXES_AXE_MASTERY, + AXES_AXE_MASTERY(4), AXES_CRITICAL_HIT, AXES_GREATER_IMPACT, + AXES_SKULL_SPLITTER(0, ACTIVE | SUPERABILITY), /* Excavation */ EXCAVATION_TREASURE_HUNTER, @@ -97,6 +98,7 @@ public enum SubSkill { WOODCUTTING_HARVEST_LUMBER(3, RNG); private final int numRanks; + //TODO: SuperAbility should also contain flags for active by default? Not sure if it should work that way. private final int flags; /** diff --git a/src/main/java/com/gmail/nossr50/skills/archery/Archery.java b/src/main/java/com/gmail/nossr50/skills/archery/Archery.java index 158e31346..e093625f0 100644 --- a/src/main/java/com/gmail/nossr50/skills/archery/Archery.java +++ b/src/main/java/com/gmail/nossr50/skills/archery/Archery.java @@ -4,8 +4,11 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import com.gmail.nossr50.datatypes.skills.SubSkill; +import com.gmail.nossr50.util.skills.RankUtils; import org.bukkit.Material; import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import com.gmail.nossr50.config.AdvancedConfig; @@ -16,8 +19,7 @@ public class Archery { private static List trackedEntities = new ArrayList(); public static int skillShotIncreaseLevel = AdvancedConfig.getInstance().getSkillShotIncreaseLevel(); - public static double skillShotIncreasePercentage = AdvancedConfig.getInstance().getSkillShotIncreasePercentage(); - public static double skillShotMaxBonusPercentage = AdvancedConfig.getInstance().getSkillShotBonusMax(); + public static double skillShotIncreasePercentage = AdvancedConfig.getInstance().getSkillShotRankDamageMultiplier(); public static double skillShotMaxBonusDamage = AdvancedConfig.getInstance().getSkillShotDamageMax(); public static double dazeBonusDamage = AdvancedConfig.getInstance().getDazeBonusDamage(); @@ -62,4 +64,19 @@ public class Archery { } } } + + /** + * Every rank we increase Skill Shot's bonus damage % by the IncreaseDamage percentage value from advanced.yml + * Divide end result by 100.0D to get proper scale + * Damage is capped in advanced.yml by Archery.SkillShot.MaxDamage + * + * @param player The target player + * @param oldDamage The raw damage of the arrow before we add bonus damage + * @return The damage that the arrow will deal after we've added bonus damage, damage is capped by Archery.SkillShot.MaxDamage + */ + public static double getSkillShotBonusDamage(Player player, double oldDamage) + { + double damageBonusPercent = ((RankUtils.getRank(player, SubSkill.ARCHERY_SKILL_SHOT)) * Archery.skillShotIncreasePercentage) / 100.0D; + return Math.min(oldDamage * damageBonusPercent, Archery.skillShotMaxBonusDamage); + } } diff --git a/src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java b/src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java index 450b6c5d3..49e90e55f 100644 --- a/src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java +++ b/src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java @@ -93,23 +93,15 @@ public class ArcheryManager extends SkillManager { } /** - * Handle the effects of the Skill Shot ability + * Calculates the damage to deal after Skill Shot has been applied * - * @param damage The amount of damage initially dealt by the event + * @param oldDamage The raw damage value of this arrow before we modify it */ - public double skillShot(double damage) { + public double skillShot(double oldDamage) { if (!SkillUtils.isActivationSuccessful(SubSkillActivationType.ALWAYS_FIRES, SubSkill.ARCHERY_SKILL_SHOT, getPlayer(), null, 0, 0)) { - return damage; + return oldDamage; } - /* - * Archery - * Skill Shot - * - * Every rank we increase Skill Shot's bonus damage % by the IncreaseDamage percentage value from advanced.yml - * Divide end result by 100.0D to get proper scale - */ - double damageBonusPercent = (Math.min(((RankUtils.getRank(getPlayer(), SubSkill.ARCHERY_SKILL_SHOT)) * Archery.skillShotIncreasePercentage), Archery.skillShotMaxBonusPercentage) / 100.0D); - return Math.min(damage * damageBonusPercent, Archery.skillShotMaxBonusDamage); + return Archery.getSkillShotBonusDamage(getPlayer(), oldDamage); } } diff --git a/src/main/java/com/gmail/nossr50/skills/axes/Axes.java b/src/main/java/com/gmail/nossr50/skills/axes/Axes.java index 5268e7865..fc9083940 100644 --- a/src/main/java/com/gmail/nossr50/skills/axes/Axes.java +++ b/src/main/java/com/gmail/nossr50/skills/axes/Axes.java @@ -1,14 +1,17 @@ package com.gmail.nossr50.skills.axes; +import com.gmail.nossr50.datatypes.player.McMMOPlayer; +import com.gmail.nossr50.datatypes.skills.SubSkill; +import com.gmail.nossr50.util.skills.RankUtils; import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.util.ItemUtils; public class Axes { - public static double axeMasteryMaxBonus = AdvancedConfig.getInstance().getAxeMasteryBonusMax(); - public static int axeMasteryMaxBonusLevel = AdvancedConfig.getInstance().getAxeMasteryMaxBonusLevel(); + public static double axeMasteryRankDamageMultiplier = AdvancedConfig.getInstance().getAxeMasteryRankDamageMultiplier(); public static double criticalHitPVPModifier = AdvancedConfig.getInstance().getCriticalHitPVPModifier(); public static double criticalHitPVEModifier = AdvancedConfig.getInstance().getCriticalHitPVEModifier(); @@ -32,4 +35,14 @@ public class Axes { return false; } + + /** + * For every rank in Axe Mastery we add RankDamageMultiplier to get the total bonus damage from Axe Mastery + * @param player The target player + * @return The axe mastery bonus damage which will be added to their attack + */ + public static double getAxeMasteryBonusDamage(Player player) + { + return RankUtils.getRank(player, SubSkill.AXES_AXE_MASTERY) * Axes.axeMasteryRankDamageMultiplier; + } } diff --git a/src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java b/src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java index ad2892f07..686041e3e 100644 --- a/src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java +++ b/src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java @@ -3,7 +3,7 @@ package com.gmail.nossr50.skills.axes; import java.util.Map; import com.gmail.nossr50.datatypes.skills.SubSkill; -import com.gmail.nossr50.util.skills.SubSkillActivationType; +import com.gmail.nossr50.util.skills.*; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageEvent.DamageModifier; @@ -18,9 +18,6 @@ import com.gmail.nossr50.skills.SkillManager; import com.gmail.nossr50.util.ItemUtils; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.player.UserManager; -import com.gmail.nossr50.util.skills.CombatUtils; -import com.gmail.nossr50.util.skills.ParticleEffectUtils; -import com.gmail.nossr50.util.skills.SkillUtils; public class AxesManager extends SkillManager { public AxesManager(McMMOPlayer mcMMOPlayer) { @@ -59,7 +56,7 @@ public class AxesManager extends SkillManager { return 0; } - return Math.min(getSkillLevel() / (Axes.axeMasteryMaxBonusLevel / Axes.axeMasteryMaxBonus), Axes.axeMasteryMaxBonus); + return Axes.getAxeMasteryBonusDamage(getPlayer()); } /** diff --git a/src/main/resources/advanced.yml b/src/main/resources/advanced.yml index 410d8adb0..7bccad0c9 100644 --- a/src/main/resources/advanced.yml +++ b/src/main/resources/advanced.yml @@ -97,17 +97,12 @@ Skills: Rank_18: 90 Rank_19: 95 Rank_20: 100 - # IncreaseDamage: Every rank of the skill will add this much additional damage in percentage form, rank 1 = 10% bonus, rank 20 = 200% bonus (with default settings) - # IncreaseDamage is a percentage - IncreaseDamage: 10.0 - # IncreaseDamageMax: When the has been reached, the bonus percentage will not go up anymore. 200.0 = 200% - IncreaseDamageMaxBonus: 200.0 - # --OLD SYSTEM -- IncreaseLevel: 5 - # --OLD SYSTEM -- IncreasePercentage: 0.1 - # MaxBonus: When the has been reached, the bonus percentage will not go up anymore. 2.0 = 200% - # --OLD SYSTEM -- MaxBonus: 2.0 + # RankDamageMultiplier: The current rank of this subskill is multiplied by this value to determine the bonus damage, rank 20 would result in 200% damage increase with a value of 10.0 for RankDamageMultiplier + # RankDamageMultiplier is a percentage + RankDamageMultiplier: 10.0 + # MaxDamage: After adding bonus damage, the total damage dealt by the player will not exceed this number + # You should be careful to not set this too low MaxDamage: 9.0 - Daze: # ChanceMax: Maximum chance of causing daze to opponents when on or higher # MaxBonusLevel: Maximum bonus level of Daze, when a player reaches this level his chance of causing a daze will be @@ -129,11 +124,14 @@ Skills: ### Axes: AxeMastery: - # MaxBonus: Maximum bonus damage when on or higher - # MaxBonusLevel: Level where is reached - MaxBonus: 4.0 - MaxBonusLevel: 20 - + # This number is multiplied by the current rank the player has in this subskill to find the amount of additional damage to apply + # With the default config value of 1.0, at rank 4 a player will deal 4.0 extra damage with Axes (1.0 * 4) + RankDamageMultiplier: 1.0 + Rank_Levels: + Rank_1: 5 + Rank_2: 10 + Rank_3: 15 + Rank_4: 20 CriticalHit: # ChanceMax: Maximum chance of causing a critical hit when on or higher # MaxBonusLevel: Level where of causing critical hits is reached