Limit Break Nerfs

This commit is contained in:
nossr50
2019-07-07 02:33:39 -07:00
parent c818bf82b0
commit 6c58e8a243
3 changed files with 79 additions and 17 deletions

View File

@ -24,6 +24,7 @@ import com.gmail.nossr50.util.player.UserManager;
import com.google.common.collect.ImmutableMap;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.*;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
@ -74,7 +75,7 @@ public final class CombatUtils {
swordsManager.serratedStrikes(target, initialDamage, modifiers);
}
if(canUseLimitBreak(player, SubSkillType.SWORDS_SWORDS_LIMIT_BREAK))
if(canUseLimitBreak(player, target, SubSkillType.SWORDS_SWORDS_LIMIT_BREAK))
{
finalDamage+=getLimitBreakDamage(player, SubSkillType.SWORDS_SWORDS_LIMIT_BREAK);
}
@ -118,7 +119,7 @@ public final class CombatUtils {
finalDamage+=axesManager.criticalHit(target, finalDamage);
}
if(canUseLimitBreak(player, SubSkillType.AXES_AXES_LIMIT_BREAK))
if(canUseLimitBreak(player, target, SubSkillType.AXES_AXES_LIMIT_BREAK))
{
finalDamage+=getLimitBreakDamage(player, SubSkillType.AXES_AXES_LIMIT_BREAK);
}
@ -157,7 +158,7 @@ public final class CombatUtils {
unarmedManager.disarmCheck((Player) target);
}
if(canUseLimitBreak(player, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK))
if(canUseLimitBreak(player, target, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK))
{
finalDamage+=getLimitBreakDamage(player, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK);
}
@ -225,7 +226,7 @@ public final class CombatUtils {
archeryManager.retrieveArrows(target, arrow);
}
if(canUseLimitBreak(player, SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK))
if(canUseLimitBreak(player, target, SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK))
{
finalDamage+=getLimitBreakDamage(player, SubSkillType.ARCHERY_ARCHERY_LIMIT_BREAK);
}
@ -383,8 +384,61 @@ public final class CombatUtils {
}
}
public static int getLimitBreakDamage(Player player, SubSkillType subSkillType) {
return RankUtils.getRank(player, subSkillType);
public static int getLimitBreakDamage(Player player, Player defender, SubSkillType subSkillType) {
int rawDamageBoost = RankUtils.getRank(player, subSkillType);
int armorQualityLevel = getArmorQualityLevel(defender);
if(armorQualityLevel <= 4) {
rawDamageBoost *= .25; //75% Nerf
} else if(armorQualityLevel <= 8) {
rawDamageBoost *= .50; //50% Nerf
} else if(armorQualityLevel <= 12) {
rawDamageBoost *= .75; //25% Nerf
}
return rawDamageBoost;
}
public static int getArmorQualityLevel(Player defender) {
int armorQualityLevel = 0;
for(ItemStack itemStack : defender.getInventory().getArmorContents()) {
if(itemStack != null) {
armorQualityLevel += getArmorQuality(itemStack);
}
}
return armorQualityLevel;
}
private static int getArmorQuality(ItemStack itemStack) {
int quality = 0;
switch(itemStack.getType()) {
case LEATHER_HELMET:
case LEATHER_BOOTS:
case LEATHER_CHESTPLATE:
case LEATHER_LEGGINGS:
return 1;
case IRON_HELMET:
case IRON_BOOTS:
case IRON_CHESTPLATE:
case IRON_LEGGINGS:
return 2;
case GOLDEN_HELMET:
case GOLDEN_BOOTS:
case GOLDEN_CHESTPLATE:
case GOLDEN_LEGGINGS:
return 3;
case DIAMOND_HELMET:
case DIAMOND_BOOTS:
case DIAMOND_CHESTPLATE:
case DIAMOND_LEGGINGS:
return 6;
default:
return 1;
}
}
/**
@ -392,9 +446,13 @@ public final class CombatUtils {
* @param player target player
* @return true if the player has access to the limit break
*/
public static boolean canUseLimitBreak(Player player, SubSkillType subSkillType) {
return RankUtils.hasUnlockedSubskill(player, subSkillType)
&& Permissions.isSubSkillEnabled(player, subSkillType);
public static boolean canUseLimitBreak(Player player, LivingEntity target, SubSkillType subSkillType) {
if(target instanceof Player) {
return RankUtils.hasUnlockedSubskill(player, subSkillType)
&& Permissions.isSubSkillEnabled(player, subSkillType);
} else {
return false;
}
}
/**