瀏覽代碼

Limit Break Nerfs

nossr50 6 年之前
父節點
當前提交
6c58e8a243

+ 4 - 0
Changelog.txt

@@ -1,5 +1,8 @@
 Version 2.1.95
 Version 2.1.95
     Added missing Chorus_Fruit & Chorus_Plant entries to Herbalism's Bonus Drops in config.yml (See notes)
     Added missing Chorus_Fruit & Chorus_Plant entries to Herbalism's Bonus Drops in config.yml (See notes)
+    Limit Break damage bonuses now only apply to Players
+    Limit Break now does dramatically less damage to players with lower grades of armor
+    Updated in game text to reflect changes to Limit Break
     Fixed a bug preventing Wandering Traders from granting XP
     Fixed a bug preventing Wandering Traders from granting XP
     Fixed a bug that prevented Chorus Tree's from giving full XP if you broke anything other than the bottom block
     Fixed a bug that prevented Chorus Tree's from giving full XP if you broke anything other than the bottom block
     Fixed a bug which could cause Large Fern's to reward less XP
     Fixed a bug which could cause Large Fern's to reward less XP
@@ -8,6 +11,7 @@ Version 2.1.95
     Added some protection to Acrobatics to prevent gaining too much XP in one Roll.
     Added some protection to Acrobatics to prevent gaining too much XP in one Roll.
     Added 'Carrots, Cocoa, Potatoes, Wheat, Beetroots, Nether_Wart' to Herbalism in experience.yml (See notes)
     Added 'Carrots, Cocoa, Potatoes, Wheat, Beetroots, Nether_Wart' to Herbalism in experience.yml (See notes)
     Removed the _Ripe entries from experience.yml (no longer used)
     Removed the _Ripe entries from experience.yml (no longer used)
+    Updated locale string 'Swords.SubSkill.SwordsLimitBreak.Description' & 'Swords.SubSkill.SwordsLimitBreak.Stat'
     Added missing 'Chorus_Flower' entry to herbalism in experience.yml
     Added missing 'Chorus_Flower' entry to herbalism in experience.yml
     Added some debug messages about XP gains if you are in debug mode
     Added some debug messages about XP gains if you are in debug mode
     Added some debug messages for Acrobatics if you are in debug mode
     Added some debug messages for Acrobatics if you are in debug mode

+ 67 - 9
src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java

@@ -24,6 +24,7 @@ import com.gmail.nossr50.util.player.UserManager;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableMap;
 import org.bukkit.GameMode;
 import org.bukkit.GameMode;
 import org.bukkit.Material;
 import org.bukkit.Material;
+import org.bukkit.enchantments.Enchantment;
 import org.bukkit.entity.*;
 import org.bukkit.entity.*;
 import org.bukkit.event.entity.EntityDamageByEntityEvent;
 import org.bukkit.event.entity.EntityDamageByEntityEvent;
 import org.bukkit.event.entity.EntityDamageEvent;
 import org.bukkit.event.entity.EntityDamageEvent;
@@ -74,7 +75,7 @@ public final class CombatUtils {
             swordsManager.serratedStrikes(target, initialDamage, modifiers);
             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);
             finalDamage+=getLimitBreakDamage(player, SubSkillType.SWORDS_SWORDS_LIMIT_BREAK);
         }
         }
@@ -118,7 +119,7 @@ public final class CombatUtils {
             finalDamage+=axesManager.criticalHit(target, finalDamage);
             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);
             finalDamage+=getLimitBreakDamage(player, SubSkillType.AXES_AXES_LIMIT_BREAK);
         }
         }
@@ -157,7 +158,7 @@ public final class CombatUtils {
                 unarmedManager.disarmCheck((Player) target);
                 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);
                 finalDamage+=getLimitBreakDamage(player, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK);
             }
             }
@@ -225,7 +226,7 @@ public final class CombatUtils {
             archeryManager.retrieveArrows(target, arrow);
             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);
             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
      * @param player target player
      * @return true if the player has access to the limit break
      * @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;
+        }
     }
     }
 
 
     /**
     /**

+ 8 - 8
src/main/resources/locale/locale_en_US.properties

@@ -171,8 +171,8 @@ Archery.SubSkill.ArrowRetrieval.Name=Arrow Retrieval
 Archery.SubSkill.ArrowRetrieval.Description=Chance to retrieve arrows from corpses
 Archery.SubSkill.ArrowRetrieval.Description=Chance to retrieve arrows from corpses
 Archery.SubSkill.ArrowRetrieval.Stat=Arrow Recovery Chance
 Archery.SubSkill.ArrowRetrieval.Stat=Arrow Recovery Chance
 Archery.SubSkill.ArcheryLimitBreak.Name=Archery Limit Break
 Archery.SubSkill.ArcheryLimitBreak.Name=Archery Limit Break
-Archery.SubSkill.ArcheryLimitBreak.Description=Breaking your limits.
-Archery.SubSkill.ArcheryLimitBreak.Stat=Limit Break Bonus DMG
+Archery.SubSkill.ArcheryLimitBreak.Description=Breaking your limits. (PVP Only)
+Archery.SubSkill.ArcheryLimitBreak.Stat=Limit Break PVP DMG
 Archery.Listener=Archery:
 Archery.Listener=Archery:
 Archery.SkillName=ARCHERY
 Archery.SkillName=ARCHERY
 #AXES
 #AXES
@@ -198,8 +198,8 @@ Axes.SubSkill.CriticalStrikes.Stat=Critical Strike Chance
 Axes.SubSkill.AxeMastery.Name=Axe Mastery
 Axes.SubSkill.AxeMastery.Name=Axe Mastery
 Axes.SubSkill.AxeMastery.Description=Adds bonus DMG
 Axes.SubSkill.AxeMastery.Description=Adds bonus DMG
 Axes.SubSkill.AxesLimitBreak.Name=Axes Limit Break
 Axes.SubSkill.AxesLimitBreak.Name=Axes Limit Break
-Axes.SubSkill.AxesLimitBreak.Description=Breaking your limits.
-Axes.SubSkill.AxesLimitBreak.Stat=Limit Break Bonus DMG
+Axes.SubSkill.AxesLimitBreak.Description=Breaking your limits. (PVP Only)
+Axes.SubSkill.AxesLimitBreak.Stat=Limit Break PVP DMG
 Axes.SubSkill.ArmorImpact.Name=Armor Impact
 Axes.SubSkill.ArmorImpact.Name=Armor Impact
 Axes.SubSkill.ArmorImpact.Description=Strike with enough force to shatter armor
 Axes.SubSkill.ArmorImpact.Description=Strike with enough force to shatter armor
 Axes.SubSkill.GreaterImpact.Name=Greater Impact
 Axes.SubSkill.GreaterImpact.Name=Greater Impact
@@ -423,8 +423,8 @@ Swords.SubSkill.Stab.Name=Stab
 Swords.SubSkill.Stab.Description=Adds bonus damage to your attacks.
 Swords.SubSkill.Stab.Description=Adds bonus damage to your attacks.
 Swords.SubSkill.Stab.Stat=Stab Damage
 Swords.SubSkill.Stab.Stat=Stab Damage
 Swords.SubSkill.SwordsLimitBreak.Name=Swords Limit Break
 Swords.SubSkill.SwordsLimitBreak.Name=Swords Limit Break
-Swords.SubSkill.SwordsLimitBreak.Description=Breaking your limits.
-Swords.SubSkill.SwordsLimitBreak.Stat=Limit Break Bonus DMG
+Swords.SubSkill.SwordsLimitBreak.Description=Breaking your limits. (PVP Only)
+Swords.SubSkill.SwordsLimitBreak.Stat=Limit Break PVP DMG
 Swords.SubSkill.Rupture.Stat=Rupture Chance
 Swords.SubSkill.Rupture.Stat=Rupture Chance
 Swords.SubSkill.Rupture.Stat.Extra=Rupture: [[GREEN]]{0} ticks [{1} DMG vs Player] [{2} DMG vs Mobs]
 Swords.SubSkill.Rupture.Stat.Extra=Rupture: [[GREEN]]{0} ticks [{1} DMG vs Player] [{2} DMG vs Mobs]
 Swords.Effect.4=Serrated Strikes Rupture+
 Swords.Effect.4=Serrated Strikes Rupture+
@@ -502,8 +502,8 @@ Unarmed.SubSkill.Disarm.Name=Disarm
 Unarmed.SubSkill.Disarm.Description=Drops the foes item held in hand
 Unarmed.SubSkill.Disarm.Description=Drops the foes item held in hand
 Unarmed.SubSkill.Disarm.Stat=Disarm Chance
 Unarmed.SubSkill.Disarm.Stat=Disarm Chance
 Unarmed.SubSkill.UnarmedLimitBreak.Name=Unarmed Limit Break
 Unarmed.SubSkill.UnarmedLimitBreak.Name=Unarmed Limit Break
-Unarmed.SubSkill.UnarmedLimitBreak.Description=Breaking your limits.
-Unarmed.SubSkill.UnarmedLimitBreak.Stat=Limit Break Bonus DMG
+Unarmed.SubSkill.UnarmedLimitBreak.Description=Breaking your limits. (PVP Only)
+Unarmed.SubSkill.UnarmedLimitBreak.Stat=Limit Break PVP DMG
 Unarmed.SubSkill.IronArmStyle.Name=Iron Arm Style
 Unarmed.SubSkill.IronArmStyle.Name=Iron Arm Style
 Unarmed.SubSkill.IronArmStyle.Description=Hardens your arm over time
 Unarmed.SubSkill.IronArmStyle.Description=Hardens your arm over time
 Unarmed.SubSkill.ArrowDeflect.Name=Arrow Deflect
 Unarmed.SubSkill.ArrowDeflect.Name=Arrow Deflect