Sfoglia il codice sorgente

Merge pull request #461 from Glitchfinder/master

Merging in TfT-02's changes.
Glitchfinder 12 anni fa
parent
commit
9ef0ed8516
34 ha cambiato i file con 349 aggiunte e 147 eliminazioni
  1. 36 9
      src/main/java/com/gmail/nossr50/commands/skills/AcrobaticsCommand.java
  2. 24 8
      src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java
  3. 19 7
      src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java
  4. 23 23
      src/main/java/com/gmail/nossr50/commands/skills/FishingCommand.java
  5. 22 7
      src/main/java/com/gmail/nossr50/commands/skills/HerbalismCommand.java
  6. 15 4
      src/main/java/com/gmail/nossr50/commands/skills/MiningCommand.java
  7. 11 3
      src/main/java/com/gmail/nossr50/commands/skills/RepairCommand.java
  8. 22 6
      src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java
  9. 11 3
      src/main/java/com/gmail/nossr50/commands/skills/TamingCommand.java
  10. 22 6
      src/main/java/com/gmail/nossr50/commands/skills/UnarmedCommand.java
  11. 11 3
      src/main/java/com/gmail/nossr50/commands/skills/WoodcuttingCommand.java
  12. 0 3
      src/main/java/com/gmail/nossr50/config/AdvancedConfig.java
  13. 2 2
      src/main/java/com/gmail/nossr50/listeners/EntityListener.java
  14. 0 1
      src/main/java/com/gmail/nossr50/skills/combat/Axes.java
  15. 20 34
      src/main/java/com/gmail/nossr50/skills/gathering/Fishing.java
  16. 68 0
      src/main/resources/advanced.yml
  17. 4 6
      src/main/resources/locale/locale_cy.properties
  18. 2 1
      src/main/resources/locale/locale_da.properties
  19. 2 1
      src/main/resources/locale/locale_de.properties
  20. 3 2
      src/main/resources/locale/locale_en_US.properties
  21. 2 1
      src/main/resources/locale/locale_es.properties
  22. 2 1
      src/main/resources/locale/locale_fi.properties
  23. 2 1
      src/main/resources/locale/locale_fr.properties
  24. 1 1
      src/main/resources/locale/locale_it.properties
  25. 2 1
      src/main/resources/locale/locale_ko.properties
  26. 2 1
      src/main/resources/locale/locale_lv.properties
  27. 4 2
      src/main/resources/locale/locale_nl.properties
  28. 2 1
      src/main/resources/locale/locale_no.properties
  29. 2 1
      src/main/resources/locale/locale_pl.properties
  30. 2 1
      src/main/resources/locale/locale_pt_BR.properties
  31. 5 4
      src/main/resources/locale/locale_ru.properties
  32. 2 1
      src/main/resources/locale/locale_sv.properties
  33. 2 1
      src/main/resources/locale/locale_tr_TR.properties
  34. 2 1
      src/main/resources/locale/locale_zh_CN.properties

+ 36 - 9
src/main/java/com/gmail/nossr50/commands/skills/AcrobaticsCommand.java

@@ -14,8 +14,11 @@ public class AcrobaticsCommand extends SkillCommand {
     AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
 
     private String dodgeChance;
+    private String dodgeChanceLucky;
     private String rollChance;
+    private String rollChanceLucky;
     private String gracefulRollChance;
+    private String gracefulRollChanceLucky;
 
     private float dodgeChanceMax = advancedConfig.getDodgeChanceMax();
     private float dodgeMaxBonusLevel = advancedConfig.getDodgeMaxBonusLevel();
@@ -36,15 +39,30 @@ public class AcrobaticsCommand extends SkillCommand {
     @Override
     protected void dataCalculations() {
         DecimalFormat df = new DecimalFormat("0.0");
+        float dodgeChanceF;
+        float rollChanceF;
+        float gracefulRollChanceF;
+
         // DODGE
-        if(skillValue >= dodgeMaxBonusLevel) dodgeChance = df.format(dodgeChanceMax);
-        else dodgeChance = df.format(((double) dodgeChanceMax / (double) dodgeMaxBonusLevel) * skillValue);
+        if(skillValue >= dodgeMaxBonusLevel) dodgeChanceF = dodgeChanceMax;
+        else dodgeChanceF = (float) (((double) dodgeChanceMax / (double) dodgeMaxBonusLevel) * skillValue);
+        dodgeChance = df.format(dodgeChanceF);
+        if(dodgeChanceF + dodgeChanceF * 0.3333D >= 100D) dodgeChanceLucky = df.format(100D);
+        else dodgeChanceLucky = df.format(dodgeChanceF + dodgeChanceF * 0.3333D);
+
         // ROLL
-        if(skillValue >= rollMaxBonusLevel) rollChance = df.format(rollChanceMax);
-        else rollChance = df.format(((double) rollChanceMax / (double) rollMaxBonusLevel) * skillValue);
+        if(skillValue >= rollMaxBonusLevel) rollChanceF = rollChanceMax;
+        else rollChanceF = (float) (((double) rollChanceMax / (double) rollMaxBonusLevel) * skillValue);
+        rollChance = df.format(rollChanceF);
+        if(rollChanceF + rollChanceF * 0.3333D >= 100D) rollChanceLucky = df.format(100D);
+        else rollChanceLucky = df.format(rollChanceF + rollChanceF * 0.3333D);
+
         // GRACEFULROLL
-        if(skillValue >= gracefulRollMaxBonusLevel) gracefulRollChance = df.format(gracefulRollChanceMax);
-        else gracefulRollChance = df.format(((double) gracefulRollChanceMax / (double) gracefulRollMaxBonusLevel) * skillValue);
+        if(skillValue >= gracefulRollMaxBonusLevel) gracefulRollChanceF = gracefulRollChanceMax;
+        else gracefulRollChanceF = (float) (((double) gracefulRollChanceMax / (double) gracefulRollMaxBonusLevel) * skillValue);
+        gracefulRollChance = df.format(gracefulRollChanceF);
+        if(gracefulRollChanceF + gracefulRollChanceF * 0.3333D >= 100D) gracefulRollChanceLucky = df.format(100D);
+        else gracefulRollChanceLucky = df.format(gracefulRollChanceF + gracefulRollChanceF * 0.3333D);
     }
 
     @Override
@@ -88,15 +106,24 @@ public class AcrobaticsCommand extends SkillCommand {
     @Override
     protected void statsDisplay() {
         if (canRoll) {
-            player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.Chance", new Object[] { rollChance }));
+        	if (player.hasPermission("mcmmo.perks.lucky.acrobatics"))
+                player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.Chance", new Object[] { rollChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { rollChanceLucky }));
+        	else
+                player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.Chance", new Object[] { rollChance }));
         }
 
         if (canGracefulRoll) {
-            player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.GraceChance", new Object[] { gracefulRollChance }));
+        	if (player.hasPermission("mcmmo.perks.lucky.acrobatics"))
+                player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.GraceChance", new Object[] { gracefulRollChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { gracefulRollChanceLucky }));
+        	else
+                player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.GraceChance", new Object[] { gracefulRollChance }));
         }
 
         if (canDodge) {
-            player.sendMessage(LocaleLoader.getString("Acrobatics.DodgeChance", new Object[] { dodgeChance }));
+        	if (player.hasPermission("mcmmo.perks.lucky.acrobatics"))
+                player.sendMessage(LocaleLoader.getString("Acrobatics.DodgeChance", new Object[] { dodgeChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { dodgeChanceLucky }));
+        	else
+                player.sendMessage(LocaleLoader.getString("Acrobatics.DodgeChance", new Object[] { dodgeChance }));
         }
     }
 }

+ 24 - 8
src/main/java/com/gmail/nossr50/commands/skills/ArcheryCommand.java

@@ -15,7 +15,9 @@ public class ArcheryCommand extends SkillCommand {
 
     private String skillShotBonus;
     private String dazeChance;
+    private String dazeChanceLucky;
     private String retrieveChance;
+    private String retrieveChanceLucky;
 
     private int skillShotIncreaseLevel = advancedConfig.getSkillShotIncreaseLevel();
     private double skillShotIncreasePercentage = advancedConfig.getSkillShotIncreasePercentage();
@@ -27,7 +29,6 @@ public class ArcheryCommand extends SkillCommand {
     private float retrieveBonusMax = advancedConfig.getRetrieveBonusMax();
     private float retrieveMaxBonusLevel = advancedConfig.getRetrieveMaxBonusLevel();
 
-
     private boolean canSkillShot;
     private boolean canDaze;
     private boolean canRetrieve;
@@ -40,18 +41,27 @@ public class ArcheryCommand extends SkillCommand {
     @Override
     protected void dataCalculations() {
         DecimalFormat df = new DecimalFormat("0.0");
+        float dazeChanceF;
+        float retrieveChanceF;
+
         // SkillShot
         double bonus = (int)((double) skillValue / (double) skillShotIncreaseLevel) * skillShotIncreasePercentage;
         if (bonus > skillShotBonusMax) skillShotBonus = percent.format(skillShotBonusMax);
         else skillShotBonus = percent.format(bonus);
 
         // Daze
-        if(skillValue >= dazeMaxBonusLevel) dazeChance = df.format(dazeBonusMax);
-        else dazeChance = df.format(((double) dazeBonusMax / (double) dazeMaxBonusLevel) * skillValue);
+        if(skillValue >= dazeMaxBonusLevel) dazeChanceF = dazeBonusMax;
+        else dazeChanceF = (float) (((double) dazeBonusMax / (double) dazeMaxBonusLevel) * skillValue);
+        dazeChance = df.format(dazeChanceF);
+        if(dazeChanceF + dazeChanceF * 0.3333D >= 100D) dazeChanceLucky = df.format(100D);
+        else dazeChanceLucky = df.format(dazeChanceF + dazeChanceF * 0.3333D);
 
         // Retrieve
-        if(skillValue >= retrieveMaxBonusLevel)    retrieveChance = df.format(retrieveBonusMax);
-        else retrieveChance = df.format(((double) retrieveBonusMax / (double) retrieveMaxBonusLevel) * skillValue);
+        if(skillValue >= retrieveMaxBonusLevel) retrieveChanceF = retrieveBonusMax;
+        else retrieveChanceF = (float) (((double) retrieveBonusMax / (double) retrieveMaxBonusLevel) * skillValue);
+        retrieveChance = df.format(retrieveChanceF);
+        if(retrieveChanceF + retrieveChanceF * 0.3333D >= 100D) retrieveChanceLucky = df.format(100D);
+        else retrieveChanceLucky = df.format(retrieveChanceF + retrieveChanceF * 0.3333D);
     }
 
     @Override
@@ -95,15 +105,21 @@ public class ArcheryCommand extends SkillCommand {
     @Override
     protected void statsDisplay() {
         if (canSkillShot) {
-            player.sendMessage(LocaleLoader.getString("Archery.Combat.SkillshotBonus", new Object[] { skillShotBonus }));
+        	player.sendMessage(LocaleLoader.getString("Archery.Combat.SkillshotBonus", new Object[] { skillShotBonus }));
         }
 
         if (canDaze) {
-            player.sendMessage(LocaleLoader.getString("Archery.Combat.DazeChance", new Object[] { dazeChance }));
+        	if (player.hasPermission("mcmmo.perks.lucky.archery"))
+        		player.sendMessage(LocaleLoader.getString("Archery.Combat.DazeChance", new Object[] { dazeChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { dazeChanceLucky }));
+        	else
+        		player.sendMessage(LocaleLoader.getString("Archery.Combat.DazeChance", new Object[] { dazeChance }));
         }
 
         if (canRetrieve) {
-            player.sendMessage(LocaleLoader.getString("Archery.Combat.RetrieveChance", new Object[] { retrieveChance }));
+        	if (player.hasPermission("mcmmo.perks.lucky.archery"))
+        		player.sendMessage(LocaleLoader.getString("Archery.Combat.RetrieveChance", new Object[] { retrieveChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { retrieveChanceLucky }));
+        	else
+        		player.sendMessage(LocaleLoader.getString("Archery.Combat.RetrieveChance", new Object[] { retrieveChance }));
         }
     }
 }

+ 19 - 7
src/main/java/com/gmail/nossr50/commands/skills/AxesCommand.java

@@ -15,6 +15,7 @@ public class AxesCommand extends SkillCommand {
     AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
 
     private String critChance;
+    private String critChanceLucky;
     private String bonusDamage;
     private String impactDamage;
     private String greaterImpactDamage;
@@ -25,7 +26,7 @@ public class AxesCommand extends SkillCommand {
     private double critMaxChance = advancedConfig.getAxesCriticalChance();
     private int critMaxBonusLevel = advancedConfig.getAxesCriticalMaxBonusLevel();
     private int greaterImpactIncreaseLevel = advancedConfig.getArmorImpactIncreaseLevel();
-    //    private double greaterImpactModifier = advancedConfig.getGreaterImpactModifier();
+    private double greaterImpactBonusDamage = advancedConfig.getGreaterImpactBonusDamage();
     private int abilityLengthIncreaseLevel = advancedConfig.getAbilityLength();
 
     private boolean canSkullSplitter;
@@ -42,14 +43,22 @@ public class AxesCommand extends SkillCommand {
     @Override
     protected void dataCalculations() {
         DecimalFormat df = new DecimalFormat("0.0");
+        float critChanceF;
         int skillCheck = Misc.skillCheck((int)skillValue, critMaxBonusLevel);
 
+        //Armor Impact
         impactDamage = String.valueOf(1 + ((double) skillValue / (double) greaterImpactIncreaseLevel));
+        //Skull Splitter
         skullSplitterLength = String.valueOf(2 + (int) ((double) skillValue / (double) abilityLengthIncreaseLevel));
-        greaterImpactDamage = "2";
-
-        if (skillValue >= critMaxBonusLevel) critChance = df.format(critMaxChance);
-        else critChance = String.valueOf((critMaxChance / critMaxBonusLevel) * skillCheck);
+        //Greater Impact
+        greaterImpactDamage = String.valueOf(greaterImpactBonusDamage);
+        //Critical Strikes
+        if (skillValue >= critMaxBonusLevel) critChanceF = (float) critMaxChance;
+        else critChanceF = (float) ((critMaxChance / critMaxBonusLevel) * skillCheck);
+        critChance = df.format(critChanceF);
+        if(critChanceF + critChanceF * 0.3333D >= 100D) critChanceLucky = df.format(100D);
+        else critChanceLucky = df.format(critChanceF + critChanceF * 0.3333D);
+        //Axe Mastery
         if (skillValue >= bonusDamageAxesMaxBonusLevel) bonusDamage = String.valueOf(bonusDamageAxesBonusMax);
         else bonusDamage = String.valueOf(skillValue / ((double) bonusDamageAxesMaxBonusLevel / (double) bonusDamageAxesBonusMax));
     }
@@ -116,8 +125,11 @@ public class AxesCommand extends SkillCommand {
             player.sendMessage(LocaleLoader.getString("Ability.Generic.Template", new Object[] { LocaleLoader.getString("Axes.Ability.Bonus.4"), LocaleLoader.getString("Axes.Ability.Bonus.5", new Object[] {greaterImpactDamage}) }));
         }
 
-        if (canCritical) {
-            player.sendMessage(LocaleLoader.getString("Axes.Combat.CritChance", new Object[] { critChance }));
+        if (canCritical){
+            if (player.hasPermission("mcmmo.perks.lucky.axes"))
+                player.sendMessage(LocaleLoader.getString("Axes.Combat.CritChance", new Object[] { critChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { critChanceLucky }));
+            else
+                player.sendMessage(LocaleLoader.getString("Axes.Combat.CritChance", new Object[] { critChance }));
         }
 
         if (canSkullSplitter) {

+ 23 - 23
src/main/java/com/gmail/nossr50/commands/skills/FishingCommand.java

@@ -1,5 +1,7 @@
 package com.gmail.nossr50.commands.skills;
 
+import java.text.DecimalFormat;
+
 import org.bukkit.ChatColor;
 
 import com.gmail.nossr50.commands.SkillCommand;
@@ -17,8 +19,12 @@ public class FishingCommand extends SkillCommand {
     private String magicChance;
     private int shakeUnlockLevel;
     private String shakeChance;
+    private String shakeChanceLucky;
     private String fishermansDietRank;
 
+    private int fishermansDietRankChange = advancedConfig.getFarmerDietRankChange();
+    private int fishermansDietRankMaxLevel = fishermansDietRankChange * 5;
+
     private boolean canTreasureHunt;
     private boolean canMagicHunt;
     private boolean canShake;
@@ -31,30 +37,21 @@ public class FishingCommand extends SkillCommand {
 
     @Override
     protected void dataCalculations() {
+        DecimalFormat df = new DecimalFormat("0.0");
+        //Treasure Hunter
         lootTier = Fishing.getFishingLootTier(profile);
-        magicChance = percent.format(lootTier / 15D);
+        magicChance = percent.format(lootTier / 15D);
+        //Shake
         int dropChance = Fishing.getShakeChance(lootTier);
-        if (Permissions.luckyFishing(player)) {
-            dropChance = (int) (dropChance * 1.25D);
-        }
-        shakeChance = String.valueOf(dropChance);
-
-        if (skillValue >= 1000) {
-            fishermansDietRank = "5";
-        }
-        else if (skillValue >= 800) {
-            fishermansDietRank = "4";
-        }
-        else if (skillValue >= 600) {
-            fishermansDietRank = "3";
-        }
-        else if (skillValue >= 400) {
-            fishermansDietRank = "2";
-        }
-        else {
-            fishermansDietRank = "1";
-        }
-        shakeUnlockLevel = advancedConfig.getShakeUnlockLevel();
+
+        shakeChance = df.format(dropChance);
+        if(dropChance + (dropChance * 0.3333D) >= 100D) shakeChanceLucky = df.format(100D);
+        else shakeChanceLucky = df.format(dropChance + (dropChance * 0.3333D));
+        shakeUnlockLevel = advancedConfig.getShakeUnlockLevel();
+
+        //Fishermans Diet
+        if(skillValue >= fishermansDietRankMaxLevel) fishermansDietRank = "5";
+        else fishermansDietRank = String.valueOf((int) ((double) skillValue / (double) fishermansDietRankChange));
     }
 
     @Override
@@ -115,7 +112,10 @@ public class FishingCommand extends SkillCommand {
                 player.sendMessage(LocaleLoader.getString("Ability.Generic.Template.Lock", new Object[] { LocaleLoader.getString("Fishing.Ability.Locked.0", new Object[] { shakeUnlockLevel }) }));
             }
             else {
-                player.sendMessage(LocaleLoader.getString("Fishing.Ability.Shake", new Object[] { shakeChance }));
+                if (player.hasPermission("mcmmo.perks.lucky.fishing"))
+                    player.sendMessage(LocaleLoader.getString("Fishing.Ability.Shake", new Object[] { shakeChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { shakeChanceLucky }));
+                else
+                    player.sendMessage(LocaleLoader.getString("Fishing.Ability.Shake", new Object[] { shakeChance }));
             }
         }
 

+ 22 - 7
src/main/java/com/gmail/nossr50/commands/skills/HerbalismCommand.java

@@ -16,9 +16,11 @@ public class HerbalismCommand extends SkillCommand {
 
     private String greenTerraLength;
     private String greenThumbChance;
+    private String greenThumbChanceLucky;
     private String greenThumbStage;
     private String farmersDietRank;
     private String doubleDropChance;
+    private String doubleDropChanceLucky;
 
     private int abilityLengthIncreaseLevel = advancedConfig.getAbilityLength();
     private int farmersDietRankChange = advancedConfig.getFarmerDietRankChange();
@@ -45,6 +47,8 @@ public class HerbalismCommand extends SkillCommand {
     @Override
     protected void dataCalculations() {
         DecimalFormat df = new DecimalFormat("0.0");
+        float greenThumbChanceF;
+        float doubleDropChanceF;
         greenTerraLength = String.valueOf(2 + (int) ((double) skillValue / (double) abilityLengthIncreaseLevel));
         //FARMERS DIET
         if(skillValue >= farmersDietMaxLevel) farmersDietRank = "5";
@@ -53,12 +57,17 @@ public class HerbalismCommand extends SkillCommand {
         if(skillValue >= greenThumbStageMaxLevel) greenThumbStage = "4";
         else greenThumbStage = String.valueOf((int) ((double) skillValue / (double) greenThumbStageChange));
 
-
-        if(skillValue >= greenThumbMaxLevel) greenThumbChance = String.valueOf(greenThumbMaxBonus);
-        else greenThumbChance = df.format((greenThumbMaxBonus / greenThumbMaxLevel) * skillValue);
+        if(skillValue >= greenThumbMaxLevel) greenThumbChanceF = (float) (greenThumbMaxBonus);
+        else greenThumbChanceF = (float) ((greenThumbMaxBonus / greenThumbMaxLevel) * skillValue);
+        greenThumbChance = df.format(greenThumbChanceF);
+        if(greenThumbChanceF + greenThumbChanceF * 0.3333D >= 100D) greenThumbChanceLucky = df.format(100D);
+        else greenThumbChanceLucky = df.format(greenThumbChanceF + greenThumbChanceF * 0.3333D);
         //DOUBLE DROPS
-        if(skillValue >= doubleDropsMaxLevel) doubleDropChance = df.format(doubleDropsMaxBonus);
-        else doubleDropChance = df.format((doubleDropsMaxBonus / doubleDropsMaxLevel) * skillValue);
+        if(skillValue >= doubleDropsMaxLevel) doubleDropChanceF = (float) (doubleDropsMaxBonus);
+        else doubleDropChanceF = (float) ((doubleDropsMaxBonus / doubleDropsMaxLevel) * skillValue);
+        doubleDropChance = df.format(doubleDropChanceF);
+        if(doubleDropChanceF + doubleDropChanceF * 0.3333D >= 100D) doubleDropChanceLucky = df.format(100D);
+        else doubleDropChanceLucky = df.format(doubleDropChanceF + doubleDropChanceF * 0.3333D);
     }
 
     @Override
@@ -119,7 +128,10 @@ public class HerbalismCommand extends SkillCommand {
         }
 
         if (canGreenThumbBlocks || canGreenThumbWheat) {
-            player.sendMessage(LocaleLoader.getString("Herbalism.Ability.GTh.Chance", new Object[] { greenThumbChance }));
+            if (player.hasPermission("mcmmo.perks.lucky.herbalism"))
+                player.sendMessage(LocaleLoader.getString("Herbalism.Ability.GTh.Chance", new Object[] { greenThumbChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { greenThumbChanceLucky }));
+            else
+                player.sendMessage(LocaleLoader.getString("Herbalism.Ability.GTh.Chance", new Object[] { greenThumbChance }));
         }
 
         if (canGreenThumbWheat) {
@@ -131,7 +143,10 @@ public class HerbalismCommand extends SkillCommand {
         }
 
         if (canDoubleDrop && !doubleDropsDisabled) {
-            player.sendMessage(LocaleLoader.getString("Herbalism.Ability.DoubleDropChance", new Object[] { doubleDropChance }));
+            if (player.hasPermission("mcmmo.perks.lucky.herbalism"))
+                player.sendMessage(LocaleLoader.getString("Herbalism.Ability.DoubleDropChance", new Object[] { doubleDropChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { doubleDropChanceLucky }));
+            else
+                player.sendMessage(LocaleLoader.getString("Herbalism.Ability.DoubleDropChance", new Object[] { doubleDropChance }));
         }
     }
 }

+ 15 - 4
src/main/java/com/gmail/nossr50/commands/skills/MiningCommand.java

@@ -15,6 +15,7 @@ import com.gmail.nossr50.util.Permissions;
 public class MiningCommand extends SkillCommand {
     AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
     private String doubleDropChance;
+    private String doubleDropChanceLucky;
     private String superBreakerLength;
     private String blastMiningRank;
     private String blastRadiusIncrease;
@@ -48,10 +49,17 @@ public class MiningCommand extends SkillCommand {
     @Override
     protected void dataCalculations() {
         DecimalFormat df = new DecimalFormat("0.0");
+        float doubleDropChanceF;
+        //Super Breaker
         superBreakerLength = String.valueOf(2 + (int) ((double) skillValue / (double) abilityLengthIncreaseLevel));
-        if(skillValue >= doubleDropsMaxLevel) doubleDropChance = df.format(doubleDropsMaxBonus);
-        else doubleDropChance = df.format((doubleDropsMaxBonus / doubleDropsMaxLevel) * skillValue);
-
+        //Double Drops
+        if(skillValue >= doubleDropsMaxLevel) doubleDropChanceF = (float) (doubleDropsMaxBonus);
+        else doubleDropChanceF = (float) ((doubleDropsMaxBonus / doubleDropsMaxLevel) * skillValue);
+        doubleDropChance = df.format(doubleDropChanceF);
+        if(doubleDropChanceF + doubleDropChanceF * 0.3333D >= 100D) doubleDropChanceLucky = df.format(100D);
+        else doubleDropChanceLucky = df.format(doubleDropChanceF + doubleDropChanceF * 0.3333D);
+
+        //Blast Mining
         if (skillValue >= blastMiningRank8) {
             blastMiningRank = "8";
             blastDamageDecrease = "100.00%";
@@ -153,7 +161,10 @@ public class MiningCommand extends SkillCommand {
     @Override
     protected void statsDisplay() {
         if (canDoubleDrop && !doubleDropsDisabled) {
-            player.sendMessage(LocaleLoader.getString("Mining.Effect.DropChance", new Object[] { doubleDropChance }));
+            if (player.hasPermission("mcmmo.perks.lucky.mining"))
+                player.sendMessage(LocaleLoader.getString("Mining.Effect.DropChance", new Object[] { doubleDropChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { doubleDropChanceLucky }));
+            else
+                player.sendMessage(LocaleLoader.getString("Mining.Effect.DropChance", new Object[] { doubleDropChance }));
         }
 
         if (canSuperBreaker) {

+ 11 - 3
src/main/java/com/gmail/nossr50/commands/skills/RepairCommand.java

@@ -19,6 +19,7 @@ public class RepairCommand extends SkillCommand {
     private int arcaneForgingRank;
     private String repairMasteryBonus;
     private String superRepairChance;
+    private String superRepairChanceLucky;
 
     private float repairMasteryChanceMax = advancedConfig.getRepairMasteryChanceMax();
     private float repairMasteryMaxBonusLevel = advancedConfig.getRepairMasteryMaxLevel();
@@ -52,6 +53,7 @@ public class RepairCommand extends SkillCommand {
     @Override
     protected void dataCalculations() {
         DecimalFormat df = new DecimalFormat("0.0");
+        float superRepairChanceF;
         // We're using pickaxes here, not the best but it works
         Repairable diamondRepairable = mcMMO.repairManager.getRepairable(278);
         Repairable goldRepairable = mcMMO.repairManager.getRepairable(285);
@@ -68,8 +70,11 @@ public class RepairCommand extends SkillCommand {
         if(skillValue >= repairMasteryMaxBonusLevel) repairMasteryBonus = df.format(repairMasteryChanceMax);
         else repairMasteryBonus = df.format(((double) repairMasteryChanceMax / (double) repairMasteryMaxBonusLevel) * skillValue);
 
-        if(skillValue >= superRepairMaxBonusLevel) superRepairChance = df.format(superRepairChanceMax);
-        else superRepairChance = df.format(((double) superRepairChanceMax / (double) superRepairMaxBonusLevel) * skillValue);
+        if(skillValue >= superRepairMaxBonusLevel) superRepairChanceF = superRepairChanceMax;
+        else superRepairChanceF = (float) (((double) superRepairChanceMax / (double) superRepairMaxBonusLevel) * skillValue);
+        superRepairChance = df.format(superRepairChanceF);
+        if(superRepairChanceF + superRepairChanceF * 0.3333D >= 100D) superRepairChanceLucky = df.format(100D);
+        else superRepairChanceLucky = df.format(superRepairChanceF + superRepairChanceF * 0.3333D);
 
         arcaneForgingRank = Repair.getArcaneForgingRank(profile);
     }
@@ -152,7 +157,10 @@ public class RepairCommand extends SkillCommand {
         }
 
         if (canSuperRepair) {
-            player.sendMessage(LocaleLoader.getString("Repair.Skills.Super.Chance", new Object[] { superRepairChance }));
+            if (player.hasPermission("mcmmo.perks.lucky.repair"))
+                player.sendMessage(LocaleLoader.getString("Repair.Skills.Super.Chance", new Object[] { superRepairChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { superRepairChanceLucky }));
+            else
+                player.sendMessage(LocaleLoader.getString("Repair.Skills.Super.Chance", new Object[] { superRepairChance }));
         }
 
         if (canArcaneForge) {

+ 22 - 6
src/main/java/com/gmail/nossr50/commands/skills/SwordsCommand.java

@@ -14,8 +14,10 @@ public class SwordsCommand extends SkillCommand {
     AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
 
     private String counterAttackChance;
+    private String counterAttackChanceLucky;
     private String bleedLength;
     private String bleedChance;
+    private String bleedChanceLucky;
     private String serratedStrikesLength;
 
     private int abilityLengthIncreaseLevel = advancedConfig.getAbilityLength();
@@ -39,16 +41,24 @@ public class SwordsCommand extends SkillCommand {
     @Override
     protected void dataCalculations() {
         DecimalFormat df = new DecimalFormat("0.0");
+        float bleedChanceF;
+        float counterAttackChanceF;
         serratedStrikesLength = String.valueOf(2 + (int) ((double) skillValue / (double) abilityLengthIncreaseLevel));
 
         if (skillValue >= bleedMaxLevel) bleedLength = String.valueOf(bleedMaxTicks);
         else bleedLength = String.valueOf(bleedBaseTicks);
 
-        if(skillValue >= bleedMaxLevel) bleedChance = df.format(bleedChanceMax);
-        else bleedChance = df.format(((double) bleedChanceMax / (double) bleedMaxLevel) * skillValue);
+        if(skillValue >= bleedMaxLevel) bleedChanceF = bleedChanceMax;
+        else bleedChanceF = (float) (((double) bleedChanceMax / (double) bleedMaxLevel) * skillValue);
+        bleedChance = df.format(bleedChanceF);
+        if(bleedChanceF + bleedChanceF * 0.3333D >= 100D) bleedChanceLucky = df.format(100D);
+        else bleedChanceLucky = df.format(bleedChanceF + bleedChanceF * 0.3333D);
 
-        if(skillValue >= counterMaxLevel) counterAttackChance = df.format(counterChanceMax);
-        else counterAttackChance = df.format(((double) counterChanceMax / (double) counterMaxLevel) * skillValue);
+        if(skillValue >= counterMaxLevel) counterAttackChanceF = counterChanceMax;
+        else counterAttackChanceF = (float) (((double) counterChanceMax / (double) counterMaxLevel) * skillValue);
+        counterAttackChance = df.format(counterAttackChanceF);
+        if(counterAttackChanceF + counterAttackChanceF * 0.3333D >= 100D) counterAttackChanceLucky = df.format(100D);
+        else counterAttackChanceLucky = df.format(counterAttackChanceF + counterAttackChanceF * 0.3333D);
 
         serratedStrikesLength = String.valueOf(serratedBleedTicks);
     }
@@ -95,13 +105,19 @@ public class SwordsCommand extends SkillCommand {
     @Override
     protected void statsDisplay() {
         if (canCounter) {
-            player.sendMessage(LocaleLoader.getString("Swords.Combat.Counter.Chance", new Object[] { counterAttackChance }));
+            if (player.hasPermission("mcmmo.perks.lucky.swords"))
+                player.sendMessage(LocaleLoader.getString("Swords.Combat.Counter.Chance", new Object[] { counterAttackChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { counterAttackChanceLucky }));
+            else
+                player.sendMessage(LocaleLoader.getString("Swords.Combat.Counter.Chance", new Object[] { counterAttackChance }));
         }
 
         if (canBleed) {
             player.sendMessage(LocaleLoader.getString("Swords.Combat.Bleed.Length", new Object[] { bleedLength }));
             player.sendMessage(LocaleLoader.getString("Swords.Combat.Bleed.Note"));
-            player.sendMessage(LocaleLoader.getString("Swords.Combat.Bleed.Chance", new Object[] { bleedChance }));
+            if (player.hasPermission("mcmmo.perks.lucky.swords"))
+                player.sendMessage(LocaleLoader.getString("Swords.Combat.Bleed.Chance", new Object[] { bleedChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { bleedChanceLucky }));
+            else
+                player.sendMessage(LocaleLoader.getString("Swords.Combat.Bleed.Chance", new Object[] { bleedChance }));
         }
 
         if (canSerratedStrike) {

+ 11 - 3
src/main/java/com/gmail/nossr50/commands/skills/TamingCommand.java

@@ -14,6 +14,7 @@ import com.gmail.nossr50.util.Permissions;
 public class TamingCommand extends SkillCommand {
     AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
     private String goreChance;
+    private String goreChanceLucky;
 
     private float goreChanceMax = advancedConfig.getGoreChanceMax();
     private float goreMaxLevel = advancedConfig.getGoreMaxBonusLevel();
@@ -41,8 +42,12 @@ public class TamingCommand extends SkillCommand {
     @Override
     protected void dataCalculations() {
         DecimalFormat df = new DecimalFormat("0.0");
-        if(skillValue >= goreMaxLevel) goreChance = df.format(goreChanceMax);
-        else goreChance = df.format(((double) goreChanceMax / (double) goreMaxLevel) * skillValue);
+        float goreChanceF;
+        if(skillValue >= goreMaxLevel) goreChanceF = (goreChanceMax);
+        else goreChanceF = (float) (((double) goreChanceMax / (double) goreMaxLevel) * skillValue);
+        goreChance = df.format(goreChanceF);
+        if(goreChanceF + goreChanceF * 0.3333D >= 100D) goreChanceLucky = df.format(100D);
+        else goreChanceLucky = df.format(goreChanceF + goreChanceF * 0.3333D);
     }
 
     @Override
@@ -160,7 +165,10 @@ public class TamingCommand extends SkillCommand {
         }
 
         if (canGore) {
-            player.sendMessage(LocaleLoader.getString("Taming.Combat.Chance.Gore", new Object[] { goreChance }));
+            if (player.hasPermission("mcmmo.perks.lucky.taming"))
+                player.sendMessage(LocaleLoader.getString("Taming.Combat.Chance.Gore", new Object[] { goreChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { goreChanceLucky }));
+            else
+                player.sendMessage(LocaleLoader.getString("Taming.Combat.Chance.Gore", new Object[] { goreChance }));
         }
     }
 }

+ 22 - 6
src/main/java/com/gmail/nossr50/commands/skills/UnarmedCommand.java

@@ -14,7 +14,9 @@ public class UnarmedCommand extends SkillCommand {
     AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
     private String berserkLength;
     private String deflectChance;
+    private String deflectChanceLucky;
     private String disarmChance;
+    private String disarmChanceLucky;
     private String ironArmBonus;
 
     private float disarmChanceMax = advancedConfig.getDisarmChanceMax();
@@ -38,13 +40,21 @@ public class UnarmedCommand extends SkillCommand {
     @Override
     protected void dataCalculations() {
         DecimalFormat df = new DecimalFormat("0.0");
+        float disarmChanceF;
+        float deflectChanceF;
         berserkLength = String.valueOf(2 + (int) ((double) skillValue / (double) abilityLengthIncreaseLevel));
 
-        if(skillValue >= disarmMaxLevel) disarmChance = df.format(disarmChanceMax);
-        else disarmChance = df.format(((double) disarmChanceMax / (double) disarmMaxLevel) * skillValue);
+        if(skillValue >= disarmMaxLevel) disarmChanceF = disarmChanceMax;
+        else disarmChanceF = (float) (((double) disarmChanceMax / (double) disarmMaxLevel) * skillValue);
+        disarmChance = df.format(disarmChanceF);
+        if(disarmChanceF + disarmChanceF * 0.3333D >= 100D) disarmChanceLucky = df.format(100D);
+        else disarmChanceLucky = df.format(disarmChanceF + disarmChanceF * 0.3333D);
 
-        if(skillValue >= deflectMaxLevel) deflectChance = df.format(deflectChanceMax);
-        else deflectChance = df.format(((double) deflectChanceMax / (double) deflectMaxLevel) * skillValue);
+        if(skillValue >= deflectMaxLevel) deflectChanceF = deflectChanceMax;
+        else deflectChanceF = (float) (((double) deflectChanceMax / (double) deflectMaxLevel) * skillValue);
+        deflectChance = df.format(deflectChanceF);
+        if(deflectChanceF + deflectChanceF * 0.3333D >= 100D) deflectChanceLucky = df.format(100D);
+        else deflectChanceLucky = df.format(deflectChanceF + deflectChanceF * 0.3333D);
 
         if (skillValue >= 250) ironArmBonus = String.valueOf(ironArmMaxBonus);
         else ironArmBonus = String.valueOf(3 + ((double) skillValue / (double) ironArmIncreaseLevel));
@@ -100,11 +110,17 @@ public class UnarmedCommand extends SkillCommand {
         }
 
         if (canDeflect) {
-            player.sendMessage(LocaleLoader.getString("Unarmed.Ability.Chance.ArrowDeflect", new Object[] { deflectChance }));
+            if (player.hasPermission("mcmmo.perks.lucky.unarmed"))
+                player.sendMessage(LocaleLoader.getString("Unarmed.Ability.Chance.ArrowDeflect", new Object[] { deflectChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { deflectChanceLucky }));
+            else
+                player.sendMessage(LocaleLoader.getString("Unarmed.Ability.Chance.ArrowDeflect", new Object[] { deflectChance }));
         }
 
         if (canDisarm) {
-            player.sendMessage(LocaleLoader.getString("Unarmed.Ability.Chance.Disarm", new Object[] { disarmChance }));
+            if (player.hasPermission("mcmmo.perks.lucky.unarmed"))
+                player.sendMessage(LocaleLoader.getString("Unarmed.Ability.Chance.Disarm", new Object[] { disarmChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { disarmChanceLucky }));
+            else
+                player.sendMessage(LocaleLoader.getString("Unarmed.Ability.Chance.Disarm", new Object[] { disarmChance }));
         }
 
         if (canBerserk) {

+ 11 - 3
src/main/java/com/gmail/nossr50/commands/skills/WoodcuttingCommand.java

@@ -15,6 +15,7 @@ public class WoodcuttingCommand extends SkillCommand {
     AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
     private String treeFellerLength;
     private String doubleDropChance;
+    private String doubleDropChanceLucky;
 
     private int abilityLengthIncreaseLevel = advancedConfig.getAbilityLength();
     private double doubleDropsMaxBonus = advancedConfig.getWoodcuttingDoubleDropChance();
@@ -34,10 +35,14 @@ public class WoodcuttingCommand extends SkillCommand {
     @Override
     protected void dataCalculations() {
         DecimalFormat df = new DecimalFormat("0.0");
+        float doubleDropChanceF;
 
         treeFellerLength = String.valueOf(2 + (int) ((double) skillValue / (double) abilityLengthIncreaseLevel));
-        if(skillValue >= doubleDropsMaxLevel) doubleDropChance = df.format(doubleDropsMaxBonus);
-        else doubleDropChance = df.format((doubleDropsMaxBonus / doubleDropsMaxLevel) * skillValue);
+        if(skillValue >= doubleDropsMaxLevel) doubleDropChanceF = (float) (doubleDropsMaxBonus);
+        else doubleDropChanceF = (float) ((doubleDropsMaxBonus / doubleDropsMaxLevel) * skillValue);
+        doubleDropChance = df.format(doubleDropChanceF);
+        if(doubleDropChanceF + doubleDropChanceF * 0.3333D >= 100D) doubleDropChanceLucky = df.format(100D);
+        else doubleDropChanceLucky = df.format(doubleDropChanceF + doubleDropChanceF * 0.3333D);
     }
 
     @Override
@@ -94,7 +99,10 @@ public class WoodcuttingCommand extends SkillCommand {
         }
 
         if (canDoubleDrop && !doubleDropsDisabled) {
-            player.sendMessage(LocaleLoader.getString("Woodcutting.Ability.Chance.DDrop", new Object[] { doubleDropChance }));
+            if (player.hasPermission("mcmmo.perks.lucky.woodcutting"))
+                player.sendMessage(LocaleLoader.getString("Woodcutting.Ability.Chance.DDrop", new Object[] { doubleDropChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { doubleDropChanceLucky }));
+            else
+                player.sendMessage(LocaleLoader.getString("Woodcutting.Ability.Chance.DDrop", new Object[] { doubleDropChance }));
         }
 
         if (canTreeFell) {

+ 0 - 3
src/main/java/com/gmail/nossr50/config/AdvancedConfig.java

@@ -148,7 +148,4 @@ public class AdvancedConfig extends ConfigLoader {
     public int getSpoutNotificationTier2() { return config.getInt("Spout.Notifications.Tier2", 400); }
     public int getSpoutNotificationTier3() { return config.getInt("Spout.Notifications.Tier3", 600); }
     public int getSpoutNotificationTier4() { return config.getInt("Spout.Notifications.Tier4", 800); }
-    //TODO Make the sounds configurable! :D
-    //    public String getSpoutSoundRepair() { return config.getString("Spout.Sounds.RepairSound", "url here"); }
-    //    public String getSpoutSoundLevelUp() { return config.getString("Spout.Sounds.LevelUp", "url here"); }
 }

+ 2 - 2
src/main/java/com/gmail/nossr50/listeners/EntityListener.java

@@ -348,13 +348,13 @@ public class EntityListener implements Listener {
 
                 case RAW_FISH:
                     /* RAW FISH RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */
-                    rankChange = 400;
+                    rankChange = FoodRank2;
                     fish = true;
                     break;
 
                 case COOKED_FISH:
                     /* COOKED FISH RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */
-                    rankChange = 200;
+                    rankChange = FoodRank1;
                     fish = true;
 
                     break;

+ 0 - 1
src/main/java/com/gmail/nossr50/skills/combat/Axes.java

@@ -96,7 +96,6 @@ public class Axes {
         }
 
         if (chance > random.nextInt(randomChance) && !entity.isDead()){
-            //        if (random.nextInt(randomChance) <= skillCheck && !entity.isDead()){
             int damage = event.getDamage();
 
             if (entity instanceof Player){

+ 20 - 34
src/main/java/com/gmail/nossr50/skills/gathering/Fishing.java

@@ -108,11 +108,11 @@ public class Fishing {
         default:
             break;
         }
-
+
         if (Config.getInstance().getFishingDropsEnabled() && rewards.size() > 0
                 && Permissions.fishingTreasures(player)) {
-            FishingTreasure treasure = rewards.get(random.nextInt(rewards
-                    .size()));
+            FishingTreasure treasure;
+            treasure = rewards.get(random.nextInt(rewards.size()));
 
             int randomChance = 100;
 
@@ -121,26 +121,20 @@ public class Fishing {
             }
 
             if (random.nextDouble() * randomChance <= treasure.getDropChance()) {
-                Users.getPlayer(player).addXP(SkillType.FISHING,
-                        treasure.getXp());
+                Users.getPlayer(player).addXP(SkillType.FISHING,treasure.getXp());
                 theCatch.setItemStack(treasure.getDrop());
             }
         } else {
             theCatch.setItemStack(new ItemStack(Material.RAW_FISH));
         }
 
-        short maxDurability = theCatch.getItemStack().getType()
-                .getMaxDurability();
+        short maxDurability = theCatch.getItemStack().getType().getMaxDurability();
 
         if (maxDurability > 0) {
-            theCatch.getItemStack().setDurability(
-                    (short) (random.nextInt(maxDurability))); // Change
-            // durability to
-            // random value
+            theCatch.getItemStack().setDurability((short) (random.nextInt(maxDurability))); // Change durability to random value
         }
 
-        Skills.xpProcessing(player, profile, SkillType.FISHING, Config
-                .getInstance().getFishingBaseXP());
+        Skills.xpProcessing(player, profile, SkillType.FISHING, Config.getInstance().getFishingBaseXP());
     }
 
     /**
@@ -160,8 +154,7 @@ public class Fishing {
         Item theCatch = (Item) event.getCaught();
 
         if (theCatch.getItemStack().getType() != Material.RAW_FISH) {
-            final int ENCHANTMENT_CHANCE = advancedConfig
-                    .getFishingEnchantmentChance();
+            final int ENCHANTMENT_CHANCE = advancedConfig.getFishingEnchantmentChance();
             boolean enchanted = false;
             ItemStack fishingResults = theCatch.getItemStack();
 
@@ -173,16 +166,14 @@ public class Fishing {
                 if (Permissions.luckyFishing(player)) {
                     randomChance = (int) (randomChance * 0.75);
                 }
-
+
                 if (random.nextInt(randomChance) <= ENCHANTMENT_CHANCE
-                        && Permissions.fishingMagic(player)) {
+                        && Permissions.fishingMagic(player)) {
                     for (Enchantment newEnchant : Enchantment.values()) {
                         if (newEnchant.canEnchantItem(fishingResults)) {
-                            Map<Enchantment, Integer> resultEnchantments = fishingResults
-                                    .getEnchantments();
+                            Map<Enchantment, Integer> resultEnchantments = fishingResults.getEnchantments();
 
-                            for (Enchantment oldEnchant : resultEnchantments
-                                    .keySet()) {
+                            for (Enchantment oldEnchant : resultEnchantments.keySet()) {
                                 if (oldEnchant.conflictsWith(newEnchant))
                                     continue;
                             }
@@ -191,23 +182,18 @@ public class Fishing {
                              * Actual chance to have an enchantment is related
                              * to your fishing skill
                              */
-                            if (random.nextInt(15) < Fishing
-                                    .getFishingLootTier(profile)) {
+                            if (random.nextInt(15) < Fishing.getFishingLootTier(profile)) {
                                 enchanted = true;
-                                int randomEnchantLevel = random
-                                        .nextInt(newEnchant.getMaxLevel()) + 1;
+                                int randomEnchantLevel = random.nextInt(newEnchant.getMaxLevel()) + 1;
 
-                                if (randomEnchantLevel < newEnchant
-                                        .getStartLevel()) {
-                                    randomEnchantLevel = newEnchant
-                                            .getStartLevel();
+                                if (randomEnchantLevel < newEnchant.getStartLevel()) {
+                                    randomEnchantLevel = newEnchant.getStartLevel();
                                 }
 
                                 if (randomEnchantLevel >= 1000)
                                     continue;
 
-                                fishingResults.addEnchantment(newEnchant,
-                                        randomEnchantLevel);
+                                fishingResults.addEnchantment(newEnchant,randomEnchantLevel);
                             }
                         }
                     }
@@ -238,10 +224,10 @@ public class Fishing {
         int lootTier = getFishingLootTier(profile);
 
         int dropChance = getShakeChance(lootTier);
-
+
         if (Permissions.luckyFishing(player)) {
-            dropChance = (int) (dropChance * 1.25); // With lucky perk on max
-            // level tier, its 100%
+            // With lucky perk on max level tier, its 100%
+            dropChance = (int) (dropChance * 1.25);
         }
 
         final int DROP_CHANCE = random.nextInt(100);

+ 68 - 0
src/main/resources/advanced.yml

@@ -14,51 +14,119 @@
 ###
 Skills:
     General:
+        # This setting will determine when the length of every ability gets longer with 1 second
         Ability_IncreaseLevel: 50
+    #
+    #  Settings for Acrobatics
+    ###
     Acrobatics:
+        # Dodge_ChanceMax: Maximum chance of dodging when on Dodge_MaxBonusLevel or higher
+        # Dodge_MaxBonusLevel: On this level or higher, the dodge chance will not go higher than Dodge_ChanceMax
         Dodge_ChanceMax: 20
         Dodge_MaxBonusLevel: 800
+
+        # Roll_ChanceMax: Maximum chance of rolling when on Roll_MaxBonusLevel or higher
+        # Roll_MaxBonusLevel: On this level or higher, the roll chance will not go higher than Roll_ChanceMax
         Roll_ChanceMax: 100
         Roll_MaxBonusLevel: 1000
+
+        # GracefulRoll_ChanceMax: Maximum chance of graceful rolling when on GracefulRoll_MaxBonusLevel or higher
+        # GracefulRoll_MaxBonusLevel: On this level or higher, the graceful roll chance will not go higher than GracefulRoll_ChanceMax
         GracefulRoll_ChanceMax: 100
         GracefulRoll_MaxBonusLevel: 500
+
+        # Amount of experience for performing a dodge, roll or fall
         Dodge_XP_Modifier: 120
         Roll_XP_Modifier: 80
         Fall_XP_Modifier: 120
+    #
+    #  Settings for Archery
+    ###
     Archery:
+        # SkillShot_IncreaseLevel: Every "SkillShot_IncreaseLevel" the skillshot bonus will go up by "SkillShot_IncreasePercentage"
+        # SkillShot_IncreasePercentage: This is a percentage value, 0.1 = 10%
+        # SkillShot_MaxBonus: When the SkillShot_MaxBonus has been reached, the bonus percentage will not go up anymore. 2.0 = 200%
         SkillShot_IncreaseLevel: 50
         SkillShot_IncreasePercentage: 0.1D
         SkillShot_MaxBonus: 2.0D
+
+        # Daze_MaxChance: Maximum chance of causing daze to opponents
+        # Daze_MaxBonusLevel: Maximum bonus level of Daze, when a player reaches this level his chance of causing a daze will be "Daze_MaxChance"
+        # Daze_Modifier: Extra damage for arrows that cause a daze (2 damage = 1 heart)
         Daze_MaxChance: 50
         Daze_MaxBonusLevel: 1000
         Daze_Modifier: 4
+
+        # Retrieve_MaxBonus: Maximum chance or retrieving arrows
+        # Retrieve_MaxBonusLevel: Maximum bonus level for Arrow retrieval, at this level the chance of retrieving arrows from mobs is Retrieve_MaxBonus
         Retrieve_MaxBonus: 100
         Retrieve_MaxBonusLevel: 1000
+    #
+    #  Settings for Axes
+    ###
     Axes:
+        # DamageIncrease_MaxBonus: Maximum bonus damage
+        # DamageIncrease_MaxBonusLevel: Level where the maximum bonus is reached
         DamageIncrease_MaxBonus: 4
         DamageIncrease_MaxBonusLevel: 200
+
+        # AxesCritical_MaxChance: Maximum chance of causing a critical hit
+        # AxesCritical_MaxBonusLevel: Level where the maximum chance of causing critical hits is reached
         AxesCritical_MaxChance: 37.50
         AxesCritical_MaxBonusLevel: 750
+
+        # Damage modifier of critical hits for PVP / PVE, when causing a critical hit the damage gets multiplied by the modifier
         AxesCritical_PVP_Modifier: 1.5
         AxesCritical_PVE_Modifier: 2
+
+        # GreaterImpact_Chance: Chance of hitting with GreaterImpact, knocksbacks mobs
+        # GreaterImpact_KnockbackModifier: Velocity modifier of GreaterImpact hits, this determines how great the knockback is
+        # GreaterImpact_BonusDamage: Extra damage for GreaterImpact hits
         GreaterImpact_Chance: 25
         GreaterImpact_KnockbackModifier: 1.5
         GreaterImpact_BonusDamage: 2
+
+        # ArmorImpact_IncreaseLevel: Every "IncreaseLevel" the durability damage goes up with 1
+        # ArmorImpact_MaxPercentageDurabilityDamage: Durability damage cap for ArmorImpact, 20% means that you can never destroy a piece of armor in less than 5 hits
         ArmorImpact_IncreaseLevel: 50
         ArmorImpact_MaxPercentageDurabilityDamage: 20
+    #
+    #  Settings for Fishing
+    ###
     Fishing:
+        # Shake_UnlockLevel: Fishing level when the Shake ability unlocks
         Shake_UnlockLevel: 150
+
+        # Enchantment_Chance: Chance of getting fishing treasure with enchantments
         Enchantment_Chance: 10
+    #
+    #  Settings for Herbalism
+    ###
     Herbalism:
+        # This determines when Farmersdiet and Fishermans diet add extra hunger recovery to food
         Food_RankChange: 200
+
+        # GreenThumb_StageChange: Level value when the GreenThumb stage level goes up
+        # GreenThumb_ChanceMax: Maximum chance of GreenThumb
+        # GreenThumb_MaxBonusLevel: On this level, greenthumb chance will be GreenThumb_ChanceMax
         GreenThumb_StageChange: 200
         GreenThumb_ChanceMax: 100
         GreenThumb_MaxBonusLevel: 1500
+
+        # DoubleDrops_ChanceMax: Maximum chance of receiving double drops
+        # DoubleDrops_MaxBonusLevel: Level when the maximum chance of receiving double drops is reached
         DoubleDrops_ChanceMax: 100
         DoubleDrops_MaxBonusLevel: 1000
+    #
+    #  Settings for Mining
+    ###
     Mining:
+        # DoubleDrops_ChanceMax: Maximum chance of receiving double drops
+        # DoubleDrops_MaxBonusLevel: Level when the maximum chance of receiving double drops is reached
         DoubleDrops_ChanceMax: 100
         DoubleDrops_MaxBonusLevel: 1000
+
+        # BlastMining rank unlocks
         BlastMining_Rank1: 125
         BlastMining_Rank2: 250
         BlastMining_Rank3: 375

+ 4 - 6
src/main/resources/locale/locale_cy.properties

@@ -226,8 +226,8 @@ Swords.SkillName=SWORDS
 Swords.Skills.SS.Off=[[RED]]**Serrated Strikes has worn off**
 Swords.Skills.SS.On=[[GWYRDD]] ** Streiciau danheddog actifadu **
 Swords.Skills.SS.Refresh=[[GREEN]]Your [[YELLOW]]Serrated Strikes [[GREEN]]ability is refreshed!
-Swords.Skills.SS.Other.Off=[[COCH]] Streiciau danheddog [[GWYRDD]] wedi gwisgo i ffwrdd ar gyfer [[MELYN]] {0}
-Swords.Skills.SS.Other.On=[[GWYRDD]] {0} [[TYWYLL_GWYRDD]] wedi defnyddio [[COCH]] Streiciau danheddog!
+Swords.Skills.SS.Other.Off=[[RED]] Streiciau danheddog [[GREEN]] wedi gwisgo i ffwrdd ar gyfer [[YELLOW]] {0}
+Swords.Skills.SS.Other.On=[[GREEN]] {0} [[DARK_GREEN]] wedi defnyddio [[RED]] Streiciau danheddog!
 Swords.Skillup=[[YELLOW]]Swords skill increased by {0}. Total ({1})
 Swords.SS.Length=[[RED]]Serrated Strikes Length: [[YELLOW]]{0}s
 Taming.Ability.Bonus.0=Environmentally Aware
@@ -364,9 +364,6 @@ Commands.Party.Quit=[[RED]]- Leave your current party
 Commands.Party.Teleport=<player> [[RED]]- Teleport to party member
 Commands.Party.Toggle=[[RED]]- Toggle Party Chat
 Commands.Party=<party-name> [[RED]]- Create/Join designated party
-Commands.PowerLevel.Leaderboard=[[MELYN]] - mcMMO [[GLAS]] Lefel P\u0175er [[MELYN]] Arweinwyr--
-Commands.PowerLevel.Capped=[[DARK_RED]]POWER LEVEL: [[GREEN]]{0} [[DARK_RED]]MAX LEVEL: [[YELLOW]]{1}
-Commands.PowerLevel=[[TYWYLL COCH]] LEFEL POWER: [[GWYRDD]] {0}
 Commands.Reset.All=[[GREEN]]All of your skill levels have been reset successfully.
 Commands.Reset.Single=[[GREEN]]Your {0} skill level has been reset successfully.
 Commands.Reset=[[RED]]Reset a skill\'s level to 0
@@ -417,7 +414,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Angenfilod ymosod
 Commands.XPGain.Taming=Anifeiliaid Taming, neu ymladd \u00e2\'ch bleiddiaid
 Commands.XPGain.Unarmed=Attacking Monsters
-Commands.XPGain.WoodCutting=Chopping down trees
+Commands.XPGain.Woodcutting=Chopping down trees
 Commands.XPGain=[[DARK_GRAY]] Cael Profiad: [[GWYN]] {0}
 Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
 Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
@@ -464,6 +461,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_da.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Attacking Monsters
 Commands.XPGain.Taming=Dyret\u00e6mning, eller kamp m/ dine ulve
 Commands.XPGain.Unarmed=Attacking Monsters
-Commands.XPGain.WoodCutting=Chopping down trees
+Commands.XPGain.Woodcutting=Chopping down trees
 Commands.XPGain=[[DARK_GRAY]]XP FORTJENST: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
 Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_de.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Monster angreifen
 Commands.XPGain.Taming=Tierz\u00e4hmung oder Kampf mit W\u00f6lfen
 Commands.XPGain.Unarmed=Monster angreifen
-Commands.XPGain.WoodCutting=Chopping down trees
+Commands.XPGain.Woodcutting=Chopping down trees
 Commands.XPGain=[[DARK_GRAY]]XP Gewinn: [[WHITE]]{0}
 Commands.xplock.locked=[[YELLOW]]Deine XP BAR ist nun auf {0} gesperrt!
 Commands.xplock.unlocked=[[YELLOW]]Deine XP BAR ist nun wieder [[GREEN]]FREIGEGEBEN[[YELLOW]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 3 - 2
src/main/resources/locale/locale_en_US.properties

@@ -112,7 +112,7 @@ Fishing.Effect.4=Shake (vs. Entities)
 Fishing.Effect.5=Shake items off of mobs w/ fishing pole
 Fishing.Effect.6=Fisherman's Diet
 Fishing.Effect.7=Improves hunger restored from fished foods
-Fishing.Enchant.Chance=[[RED]]Magic Hunter Chance: [[YELLOW]]{0}%
+Fishing.Enchant.Chance=[[RED]]Magic Hunter Chance: [[YELLOW]]{0}
 Fishing.ItemFound=[[GRAY]]Treasure found!
 Fishing.Listener=Fishing: 
 Fishing.MagicFound=[[GRAY]]You feel a touch of magic with this catch...
@@ -473,7 +473,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Attacking Monsters
 Commands.XPGain.Taming=Animal Taming, or combat w/ your wolves
 Commands.XPGain.Unarmed=Attacking Monsters
-Commands.XPGain.WoodCutting=Chopping down trees
+Commands.XPGain.Woodcutting=Chopping down trees
 Commands.XPGain=[[DARK_GRAY]]XP GAIN: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
 Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
@@ -535,6 +535,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_es.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Reparando
 Commands.XPGain.Swords=Atacando a Monstruos
 Commands.XPGain.Taming=Domando animales, o combatiendo con tus lobos
 Commands.XPGain.Unarmed=Atacando a Monstruos
-Commands.XPGain.WoodCutting=Talando \u00e1rboles
+Commands.XPGain.Woodcutting=Talando \u00e1rboles
 Commands.XPGain=[[DARK_GRAY]]OBTENCI\u00d3N DE EXPERIENCIA: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Tu BARRA DE EXP esta bloqueada a {0}!
 Commands.xplock.unlocked=[[GOLD]]Tu BARRA DE EXP esta ahora [[GREEN]]DESBLOQUEADA[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_fi.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Attacking Monsters
 Commands.XPGain.Taming=Animal Taming, or combat w/ your wolves
 Commands.XPGain.Unarmed=Attacking Monsters
-Commands.XPGain.WoodCutting=Chopping down trees
+Commands.XPGain.Woodcutting=Chopping down trees
 Commands.XPGain=[[DARK_GRAY]]XP GAIN: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
 Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_fr.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=R\u00e9paration
 Commands.XPGain.Swords=Attaquer des monstres
 Commands.XPGain.Taming=Apprivoiser et combattre
 Commands.XPGain.Unarmed=Attaquer des monstres
-Commands.XPGain.WoodCutting=Couper des arbres
+Commands.XPGain.Woodcutting=Couper des arbres
 Commands.XPGain=[[DARK_GRAY]]GAIN D\'XP : [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Votre barre d\'XP est maintenant verrouill\u00e9e sur {0} !
 Commands.xplock.unlocked=[[GOLD]]Votre barre d\'XP est maintenant [[GREEN]]D\u00c9VERROUILL\u00c9E[[GOLD]] !!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 1 - 1
src/main/resources/locale/locale_it.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Riparare
 Commands.XPGain.Swords=Attaccare Mostri
 Commands.XPGain.Taming=Addomesticare Animali, o combattere con i tuoi lupi
 Commands.XPGain.Unarmed=Attaccare Mostri
-Commands.XPGain.WoodCutting=Tagliare alberi
+Commands.XPGain.Woodcutting=Tagliare alberi
 Commands.XPGain=[[DARK_GRAY]]GUADAGNARE XP: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]La tua BARRA XP \u00e8 ora bloccata a {0}!
 Commands.xplock.unlocked=[[GOLD]]La tua BARRA XP \u00e8 ora [[GREEN]]SBLOCCATA[[GOLD]]!

+ 2 - 1
src/main/resources/locale/locale_ko.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Attacking Monsters
 Commands.XPGain.Taming=Animal Taming, or combat w/ your wolves
 Commands.XPGain.Unarmed=Attacking Monsters
-Commands.XPGain.WoodCutting=Chopping down trees
+Commands.XPGain.Woodcutting=Chopping down trees
 Commands.XPGain=[[DARK_GRAY]]XP GAIN: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
 Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_lv.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Attacking Monsters
 Commands.XPGain.Taming=Animal Taming, or combat w/ your wolves
 Commands.XPGain.Unarmed=Attacking Monsters
-Commands.XPGain.WoodCutting=Koku cir\u0161ana
+Commands.XPGain.Woodcutting=Koku cir\u0161ana
 Commands.XPGain=[[DARK_GRAY]]XP GAIN: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
 Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 4 - 2
src/main/resources/locale/locale_nl.properties

@@ -372,7 +372,8 @@ Commands.Reset.Single=[[GREEN]]Your {0} skill level has been reset successfully.
 Commands.Reset=[[RED]]Reset a skill\'s level to 0
 Commands.Skill.Invalid=[[RED]]That is not a valid skillname!
 Commands.Skill.Leaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Leaderboard--
-Commands.SkillInfo=/<skill> [[RED]]- View detailed information about a skill
+Commands.PowerLevel.Capped=[[DARK_RED]]POWER LEVEL: [[GREEN]]{0} [[DARK_RED]]MAXIMUM LEVEL: [[YELLOW]]{1}
+Commands.SkillInfo=/<skill> [[RED]]- Lees gedetailleerde informatie over een skill
 Commands.Stats.Self=YOUR STATS
 Commands.Stats=[[RED]]- View your mcMMO stats
 Commands.ToggleAbility=[[RED]]- Toggle ability activation with right click
@@ -417,7 +418,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Attacking Monsters
 Commands.XPGain.Taming=Dieren Temmen, of vechten met je wolven
 Commands.XPGain.Unarmed=Attacking Monsters
-Commands.XPGain.WoodCutting=Chopping down trees
+Commands.XPGain.Woodcutting=Chopping down trees
 Commands.XPGain=[[DARK_GRAY]]XP GEWONNEN: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
 Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
@@ -464,6 +465,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_no.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Angriper Monstre
 Commands.XPGain.Taming=Dyr temming, eller sl\u00e5ssing hvisk dine ulver.
 Commands.XPGain.Unarmed=Angriper Monstre
-Commands.XPGain.WoodCutting=Chopping down trees
+Commands.XPGain.Woodcutting=Chopping down trees
 Commands.XPGain=[[DARK_GRAY]]XP GEVINST: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
 Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_pl.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Naprawianie
 Commands.XPGain.Swords=Attacking Monsters
 Commands.XPGain.Taming=Oswoj zwierze, lub walcz ze swoimi wilkami.
 Commands.XPGain.Unarmed=Attacking Monsters
-Commands.XPGain.WoodCutting=Scina drzewa
+Commands.XPGain.Woodcutting=Scina drzewa
 Commands.XPGain=[[DARK_GRAY]Zdobyte do\u015bwiadczenie: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
 Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_pt_BR.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Attacking Monsters
 Commands.XPGain.Taming=Animal Taming, or combat w/ your wolves
 Commands.XPGain.Unarmed=Attacking Monsters
-Commands.XPGain.WoodCutting=Chopping down trees
+Commands.XPGain.Woodcutting=Chopping down trees
 Commands.XPGain=[[DARK_GRAY]]XP GAIN: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Sua barra de XP BAR est\u00e1 travada em {0}!
 Commands.xplock.unlocked=[[GOLD]]Sua barra de XP foi [[GREEN]]DESTRAVADA[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 5 - 4
src/main/resources/locale/locale_ru.properties

@@ -228,7 +228,7 @@ Swords.Skills.SS.On=[[GREEN]]**\u0423\u043c\u0435\u043d\u0438\u0435 \"\u0420\u04
 Swords.Skills.SS.Refresh=[[GREEN]]\u0412\u0430\u0448\u0435 \u0443\u043c\u0435\u043d\u0438\u0435 [[YELLOW]]\"\u0420\u0435\u0436\u0443\u0449\u0438\u0439 \u0423\u0434\u0430\u0440\" [[GREEN]]\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e!
 Swords.Skills.SS.Other.Off=[[RED]]\u0423\u043c\u0435\u043d\u0438\u0435 \"\u0420\u0435\u0436\u0443\u0449\u0438\u0439 \u0443\u0434\u0430\u0440\"[[GREEN]] \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u043b\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0443 [[YELLOW]]{0}
 Swords.Skills.SS.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0443\u043c\u0435\u043d\u0438\u0435 [[RED]]\"\u0420\u0435\u0436\u0443\u0449\u0438\u0439 \u0423\u0434\u0430\u0440\"!
-Swords.Skillup=[[YELLOW]]Swords skill increased by {0}. Total ({1})
+Swords.Skillup=[[YELLOW]]\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0430\u0432\u044b\u043a\u0430 \"\u0412\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u041c\u0435\u0447\u0435\u043c" \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d \u043d\u0430 {0}. \u0412\u0441\u0435\u0433\u043e ({1})
 Swords.SS.Length=[[RED]]\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0443\u043c\u0435\u043d\u0438\u044f \"\u0420\u0435\u0436\u0443\u0449\u0438\u0439 \u0423\u0434\u0430\u0440\": [[YELLOW]]{0}\u0441.
 Taming.Ability.Bonus.0=\u042d\u043a\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0421\u043e\u0437\u043d\u0430\u043d\u0438\u0435
 Taming.Ability.Bonus.1=\u0412\u043e\u043b\u043a\u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u044e\u0442 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438
@@ -365,7 +365,7 @@ Commands.Party.Teleport=<player> [[RED]]- \u0422\u0435\u043b\u0435\u043f\u043e\u
 Commands.Party.Toggle=[[RED]]- \u0412\u043a\u043b./\u043e\u0442\u043a\u043b. \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0439 \u0447\u0430\u0442
 Commands.Party=<party-name> [[RED]]- \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u0438\u043b\u0438 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u0439
 Commands.PowerLevel.Leaderboard=[[YELLOW]]--\u0421\u043f\u0438\u0441\u043e\u043a \u041b\u0438\u0434\u0435\u0440\u043e\u0432 mcMMO \u043f\u043e[[BLUE]] \u041e\u0431\u0449\u0435\u043c\u0443 \u0423\u0440\u043e\u0432\u043d\u044e [[YELLOW]]--
-Commands.PowerLevel.Capped=[[DARK_RED]]POWER LEVEL: [[GREEN]]{0} [[DARK_RED]]MAX LEVEL: [[YELLOW]]{1}
+Commands.PowerLevel.Capped=[[DARK_RED]]\u041e\u0431\u0449\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c: [[GREEN]]{0} [[DARK_RED]]\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c: [[YELLOW]]{1}
 Commands.PowerLevel=[[DARK_RED]]\u041e\u0411\u0429\u0418\u0419 \u0423\u0420\u041e\u0412\u0415\u041d\u042c: [[GREEN]]{0}
 Commands.Reset.All=[[GREEN]]All of your skill levels have been reset successfully.
 Commands.Reset.Single=[[GREEN]]Your {0} skill level has been reset successfully.
@@ -379,7 +379,7 @@ Commands.ToggleAbility=[[RED]]- \u0412\u043a\u043b./\u043e\u0442\u043a\u043b. \u
 mcMMO.MOTD=[[BLUE]]\u042d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 mcMMO {0}! \n \u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 [[YELLOW]]/mcmmo[[BLUE]] \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043c\u043e\u0449\u0438.
 mcMMO.NoInvites=[[RED]]\u0421\u0435\u0439\u0447\u0430\u0441 \u0443 \u0412\u0430\u0441 \u043d\u0435\u0442 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0439
 mcMMO.NoPermission=[[DARK_RED]]\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432.
-mcMMO.NoSkillNote=[[DARK_GRAY]]\u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043d\u0430\u0432\u044b\u043a\u0443, \u0442\u043e \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u0441\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f.
+mcMMO.NoSkillNote=[[DARK_GRAY]]\u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043d\u0430\u0432\u044b\u043a\u0443 - \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0434\u0435\u0441\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f.
 mcMMO.Website=[[GREEN]]http://forums.mcmmo.info[[BLUE]] - \u0421\u0430\u0439\u0442 mcMMO
 Commands.Party.InParty=[[GREEN]]\u0413\u0440\u0443\u043f\u043f\u0430: {0}
 Party.Forbidden=[mcMMO] \u0413\u0440\u0443\u043f\u043f\u044b \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u0432 \u044d\u0442\u043e\u043c \u043c\u0438\u0440\u0435 (\u0421\u043c\u043e\u0442\u0440\u0438 Permissions)
@@ -417,7 +417,7 @@ Commands.XPGain.Repair=\u0420\u0435\u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0
 Commands.XPGain.Swords=\u0410\u0442\u0430\u043a\u0443\u0439\u0442\u0435 \u041c\u043e\u043d\u0441\u0442\u0440\u043e\u0432
 Commands.XPGain.Taming=\u0423\u043a\u0440\u043e\u0449\u0430\u0439\u0442\u0435 \u0436\u0438\u0432\u043e\u0442\u043d\u044b\u0445 \u0438\u043b\u0438 \u0441\u0440\u0430\u0436\u0430\u0439\u0442\u0435\u0441\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0432\u043e\u0438\u0445 \u0432\u043e\u043b\u043a\u043e\u0432
 Commands.XPGain.Unarmed=\u0410\u0442\u0430\u043a\u0443\u0439\u0442\u0435 \u041c\u043e\u043d\u0441\u0442\u0440\u043e\u0432
-Commands.XPGain.WoodCutting=\u0420\u0443\u0431\u0438\u0442\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f
+Commands.XPGain.Woodcutting=\u0420\u0443\u0431\u0438\u0442\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f
 Commands.XPGain=[[DARK_GRAY]]\u041f\u041e\u041b\u0423\u0427\u0415\u041d\u041e \u041e\u041f\u042b\u0422\u0410: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]\u0412\u0430\u0448\u0430 \u041f\u0430\u043d\u0435\u043b\u044c \u041e\u043f\u044b\u0442\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 {0}!
 Commands.xplock.unlocked=[[GOLD]]\u0412\u0430\u0448\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u043e\u043f\u044b\u0442\u0430 \u0442\u0435\u043f\u0435\u0440\u044c [[GREEN]]\u0420\u0410\u0417\u0411\u041b\u041e\u041a\u0418\u0420\u041e\u0412\u0410\u041d\u0410[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_sv.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Attacking Monsters
 Commands.XPGain.Taming=Djurt\u00e4mjning, eller sl\u00e5ss m/ dina vargar
 Commands.XPGain.Unarmed=Attacking Monsters
-Commands.XPGain.WoodCutting=Chopping down trees
+Commands.XPGain.Woodcutting=Chopping down trees
 Commands.XPGain=[[DARK_GRAY]]XP GAIN: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
 Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_tr_TR.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=Repairing
 Commands.XPGain.Swords=Attacking Monsters
 Commands.XPGain.Taming=Animal Taming, or combat w/ your wolves
 Commands.XPGain.Unarmed=Attacking Monsters
-Commands.XPGain.WoodCutting=Chopping down trees
+Commands.XPGain.Woodcutting=Chopping down trees
 Commands.XPGain=[[DARK_GRAY]]XP GAIN: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]Your XP BAR is now locked to {0}!
 Commands.xplock.unlocked=[[GOLD]]Your XP BAR is now [[GREEN]]UNLOCKED[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance

+ 2 - 1
src/main/resources/locale/locale_zh_CN.properties

@@ -417,7 +417,7 @@ Commands.XPGain.Repair=\u4fee\u7406
 Commands.XPGain.Swords=\u653b\u51fb\u602a\u7269
 Commands.XPGain.Taming=\u9a6f\u517d,  \u548c\u4f60\u7684\u72fc\u4e00\u8d77\u6218\u6597
 Commands.XPGain.Unarmed=\u653b\u51fb\u602a\u7269
-Commands.XPGain.WoodCutting=\u628a\u6811\u780d\u5012
+Commands.XPGain.Woodcutting=\u628a\u6811\u780d\u5012
 Commands.XPGain=[[DARK_GRAY]]\u83b7\u5f97\u7ecf\u9a8c: [[WHITE]]{0}
 Commands.xplock.locked=[[GOLD]]\u4f60\u7684\u7ecf\u9a8c\u6761\u9501\u5b9a\u5728 {0}!
 Commands.xplock.unlocked=[[GOLD]]\u4f60\u7684\u7ecf\u9a8c\u6761\u73b0\u5728 [[GREEN]]\u89e3\u9664\u9501\u5b9a\u4e86[[GOLD]]!
@@ -464,6 +464,7 @@ Perks.xp.desc=Receive {0}x XP.
 Perks.lucky.name=Luck
 Perks.lucky.desc=Gives {0} skills and abilities a 33.3% better chance to activate.
 Perks.lucky.desc.login=Gives certain skills and abilities a 33.3% better chance to activate.
+Perks.lucky.bonus=[[GOLD]] ({0}% with Lucky Perk)
 Perks.cooldowns.name=Fast Recovery
 Perks.cooldowns.desc=Cuts cooldown duration by {0}.
 Perks.activationtime.name=Endurance