From 5f39a7cb8041436cf4bd208745ca367c34c095e3 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Sun, 27 Jan 2019 18:53:10 -0800 Subject: [PATCH] Fixing a bug where Lucky perk wasn't adding to success --- Changelog.txt | 1 + .../skills/excavation/ExcavationManager.java | 2 +- .../util/random/RandomChanceSkill.java | 16 +++++++++++++ .../nossr50/util/random/RandomChanceUtil.java | 24 ++++++++++++++++++- 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index ee7762f0b..f21486578 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -8,6 +8,7 @@ Key: - Removal Version 2.1.2 + (Perks) Fixed a bug where the Lucky perk wasn't adding to success (Skills) Tree Feller now works on Mushroom Stems (Experience) Wood blocks now give XP and are affected by Tree Feller (6 sided bark blocks) (API) Moved XPGainReason from skills to experience package diff --git a/src/main/java/com/gmail/nossr50/skills/excavation/ExcavationManager.java b/src/main/java/com/gmail/nossr50/skills/excavation/ExcavationManager.java index 40f3bfebc..e17af0476 100644 --- a/src/main/java/com/gmail/nossr50/skills/excavation/ExcavationManager.java +++ b/src/main/java/com/gmail/nossr50/skills/excavation/ExcavationManager.java @@ -41,7 +41,7 @@ public class ExcavationManager extends SkillManager { for (ExcavationTreasure treasure : treasures) { if (skillLevel >= treasure.getDropLevel() - && RandomChanceUtil.checkRandomChanceExecutionSuccess(treasure.getDropChance())) { + && RandomChanceUtil.checkRandomChanceExecutionSuccess(getPlayer(), PrimarySkillType.EXCAVATION, treasure.getDropChance())) { xp += treasure.getXp(); Misc.dropItem(location, treasure.getDrop()); } diff --git a/src/main/java/com/gmail/nossr50/util/random/RandomChanceSkill.java b/src/main/java/com/gmail/nossr50/util/random/RandomChanceSkill.java index 4f19af910..3502e84bc 100644 --- a/src/main/java/com/gmail/nossr50/util/random/RandomChanceSkill.java +++ b/src/main/java/com/gmail/nossr50/util/random/RandomChanceSkill.java @@ -3,6 +3,7 @@ package com.gmail.nossr50.util.random; import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.datatypes.skills.SubSkillType; +import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.player.UserManager; import org.bukkit.entity.Player; @@ -11,6 +12,7 @@ public class RandomChanceSkill implements RandomChanceExecution { protected final PrimarySkillType primarySkillType; protected final SubSkillType subSkillType; protected final double probabilityCap; + protected final boolean isLucky; private int skillLevel; public RandomChanceSkill(Player player, SubSkillType subSkillType) @@ -23,6 +25,11 @@ public class RandomChanceSkill implements RandomChanceExecution { this.skillLevel = UserManager.getPlayer(player).getSkillLevel(primarySkillType); else this.skillLevel = 0; + + if(player != null) + isLucky = Permissions.lucky(player, primarySkillType); + else + isLucky = false; } public RandomChanceSkill(Player player, SubSkillType subSkillType, boolean hasCap) @@ -39,6 +46,11 @@ public class RandomChanceSkill implements RandomChanceExecution { this.skillLevel = UserManager.getPlayer(player).getSkillLevel(primarySkillType); else this.skillLevel = 0; + + if(player != null) + isLucky = Permissions.lucky(player, primarySkillType); + else + isLucky = false; } /** @@ -97,4 +109,8 @@ public class RandomChanceSkill implements RandomChanceExecution { public double getProbabilityCap() { return probabilityCap; } + + public boolean isLucky() { + return isLucky; + } } diff --git a/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java b/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java index 2475a5109..7bb5f011d 100644 --- a/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java +++ b/src/main/java/com/gmail/nossr50/util/random/RandomChanceUtil.java @@ -63,11 +63,13 @@ public class RandomChanceUtil * Checks whether or not the random chance succeeds * @return true if the random chance succeeds */ - public static boolean checkRandomChanceExecutionSuccess(double chance) + public static boolean checkRandomChanceExecutionSuccess(Player player, PrimarySkillType primarySkillType, double chance) { //Check the odds chance *= 100; + chance = addLuck(player, primarySkillType, chance); + /* * Stuff like treasures can specify a drop chance from 0.05 to 100 * Because of that we need to use a large int bound and multiply the chance by 100 @@ -143,6 +145,10 @@ public class RandomChanceUtil //Get chance of success chanceOfSuccess = getChanceOfSuccess(randomChance.getXPos(), maximumProbability, maximumBonusLevel); } + + //Add Luck + chanceOfSuccess = addLuck(randomChance.isLucky(), chanceOfSuccess); + return chanceOfSuccess; } @@ -281,4 +287,20 @@ public class RandomChanceUtil return displayValues; } + + public static double addLuck(Player player, PrimarySkillType primarySkillType, double chance) + { + if(Permissions.lucky(player, primarySkillType)) + return chance * 1.333D; + else + return chance; + } + + public static double addLuck(boolean isLucky, double chance) + { + if(isLucky) + return chance * 1.333D; + else + return chance; + } }