nossr50 преди 6 години
родител
ревизия
d3c47935d4
променени са 32 файла, в които са добавени 271 реда и са изтрити 271 реда
  1. 16 16
      src/main/java/com/gmail/nossr50/api/AbilityAPI.java
  2. 2 2
      src/main/java/com/gmail/nossr50/commands/player/MccooldownCommand.java
  3. 3 3
      src/main/java/com/gmail/nossr50/config/Config.java
  4. 18 18
      src/main/java/com/gmail/nossr50/database/FlatfileDatabaseManager.java
  5. 18 18
      src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java
  6. 28 28
      src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java
  7. 10 10
      src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java
  8. 11 11
      src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkill.java
  9. 1 1
      src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java
  10. 2 3
      src/main/java/com/gmail/nossr50/datatypes/skills/SuperAbilityType.java
  11. 3 3
      src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java
  12. 3 3
      src/main/java/com/gmail/nossr50/events/skills/abilities/McMMOPlayerAbilityEvent.java
  13. 8 8
      src/main/java/com/gmail/nossr50/listeners/BlockListener.java
  14. 0 83
      src/main/java/com/gmail/nossr50/listeners/InteractionManager.java
  15. 2 3
      src/main/java/com/gmail/nossr50/listeners/PlayerListener.java
  16. 5 5
      src/main/java/com/gmail/nossr50/runnables/skills/AbilityCooldownTask.java
  17. 5 5
      src/main/java/com/gmail/nossr50/runnables/skills/AbilityDisableTask.java
  18. 2 2
      src/main/java/com/gmail/nossr50/runnables/skills/ToolLowerTask.java
  19. 2 2
      src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java
  20. 2 2
      src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java
  21. 9 10
      src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java
  22. 2 2
      src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java
  23. 2 2
      src/main/java/com/gmail/nossr50/skills/taming/TamingManager.java
  24. 2 2
      src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java
  25. 2 2
      src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java
  26. 2 2
      src/main/java/com/gmail/nossr50/util/EventUtils.java
  27. 2 3
      src/main/java/com/gmail/nossr50/util/StringUtils.java
  28. 88 0
      src/main/java/com/gmail/nossr50/util/player/NotificationManager.java
  29. 9 9
      src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java
  30. 7 7
      src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java
  31. 4 5
      src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java
  32. 1 1
      src/main/resources/locale/locale_en_US.properties

+ 16 - 16
src/main/java/com/gmail/nossr50/api/AbilityAPI.java

@@ -1,6 +1,6 @@
 package com.gmail.nossr50.api;
 
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import org.bukkit.entity.LivingEntity;
 import org.bukkit.entity.Player;
 
@@ -12,37 +12,37 @@ public final class AbilityAPI {
     private AbilityAPI() {}
 
     public static boolean berserkEnabled(Player player) {
-        return UserManager.getPlayer(player).getAbilityMode(SuperAbility.BERSERK);
+        return UserManager.getPlayer(player).getAbilityMode(SuperAbilityType.BERSERK);
     }
 
     public static boolean gigaDrillBreakerEnabled(Player player) {
-        return UserManager.getPlayer(player).getAbilityMode(SuperAbility.GIGA_DRILL_BREAKER);
+        return UserManager.getPlayer(player).getAbilityMode(SuperAbilityType.GIGA_DRILL_BREAKER);
     }
 
     public static boolean greenTerraEnabled(Player player) {
-        return UserManager.getPlayer(player).getAbilityMode(SuperAbility.GREEN_TERRA);
+        return UserManager.getPlayer(player).getAbilityMode(SuperAbilityType.GREEN_TERRA);
     }
 
     public static boolean serratedStrikesEnabled(Player player) {
-        return UserManager.getPlayer(player).getAbilityMode(SuperAbility.SERRATED_STRIKES);
+        return UserManager.getPlayer(player).getAbilityMode(SuperAbilityType.SERRATED_STRIKES);
     }
 
     public static boolean skullSplitterEnabled(Player player) {
-        return UserManager.getPlayer(player).getAbilityMode(SuperAbility.SKULL_SPLITTER);
+        return UserManager.getPlayer(player).getAbilityMode(SuperAbilityType.SKULL_SPLITTER);
     }
 
     public static boolean superBreakerEnabled(Player player) {
-        return UserManager.getPlayer(player).getAbilityMode(SuperAbility.SUPER_BREAKER);
+        return UserManager.getPlayer(player).getAbilityMode(SuperAbilityType.SUPER_BREAKER);
     }
 
     public static boolean treeFellerEnabled(Player player) {
-        return UserManager.getPlayer(player).getAbilityMode(SuperAbility.TREE_FELLER);
+        return UserManager.getPlayer(player).getAbilityMode(SuperAbilityType.TREE_FELLER);
     }
 
     public static boolean isAnyAbilityEnabled(Player player) {
         McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
 
-        for (SuperAbility ability : SuperAbility.values()) {
+        for (SuperAbilityType ability : SuperAbilityType.values()) {
             if (mcMMOPlayer.getAbilityMode(ability)) {
                 return true;
             }
@@ -56,31 +56,31 @@ public final class AbilityAPI {
     }
 
     public static void setBerserkCooldown(Player player, long cooldown) {
-        UserManager.getPlayer(player).setAbilityDATS(SuperAbility.BERSERK, cooldown);
+        UserManager.getPlayer(player).setAbilityDATS(SuperAbilityType.BERSERK, cooldown);
     }
 
     public static void setGigaDrillBreakerCooldown(Player player, long cooldown) {
-        UserManager.getPlayer(player).setAbilityDATS(SuperAbility.GIGA_DRILL_BREAKER, cooldown);
+        UserManager.getPlayer(player).setAbilityDATS(SuperAbilityType.GIGA_DRILL_BREAKER, cooldown);
     }
 
     public static void setGreenTerraCooldown(Player player, long cooldown) {
-        UserManager.getPlayer(player).setAbilityDATS(SuperAbility.GREEN_TERRA, cooldown);
+        UserManager.getPlayer(player).setAbilityDATS(SuperAbilityType.GREEN_TERRA, cooldown);
     }
 
     public static void setSerratedStrikesCooldown(Player player, long cooldown) {
-        UserManager.getPlayer(player).setAbilityDATS(SuperAbility.SERRATED_STRIKES, cooldown);
+        UserManager.getPlayer(player).setAbilityDATS(SuperAbilityType.SERRATED_STRIKES, cooldown);
     }
 
     public static void setSkullSplitterCooldown(Player player, long cooldown) {
-        UserManager.getPlayer(player).setAbilityDATS(SuperAbility.SKULL_SPLITTER, cooldown);
+        UserManager.getPlayer(player).setAbilityDATS(SuperAbilityType.SKULL_SPLITTER, cooldown);
     }
 
     public static void setSuperBreakerCooldown(Player player, long cooldown) {
-        UserManager.getPlayer(player).setAbilityDATS(SuperAbility.SUPER_BREAKER, cooldown);
+        UserManager.getPlayer(player).setAbilityDATS(SuperAbilityType.SUPER_BREAKER, cooldown);
     }
 
     public static void setTreeFellerCooldown(Player player, long cooldown) {
-        UserManager.getPlayer(player).setAbilityDATS(SuperAbility.TREE_FELLER, cooldown);
+        UserManager.getPlayer(player).setAbilityDATS(SuperAbilityType.TREE_FELLER, cooldown);
     }
 
     public static boolean isBleeding(LivingEntity entity) {

+ 2 - 2
src/main/java/com/gmail/nossr50/commands/player/MccooldownCommand.java

@@ -2,7 +2,7 @@ package com.gmail.nossr50.commands.player;
 
 import java.util.List;
 
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import org.bukkit.command.Command;
 import org.bukkit.command.CommandSender;
 import org.bukkit.command.TabExecutor;
@@ -45,7 +45,7 @@ public class MccooldownCommand implements TabExecutor {
                 player.sendMessage(LocaleLoader.getString("Commands.Cooldowns.Header"));
                 player.sendMessage(LocaleLoader.getString("mcMMO.NoSkillNote"));
 
-                for (SuperAbility ability : SuperAbility.values()) {
+                for (SuperAbilityType ability : SuperAbilityType.values()) {
                     if (!ability.getPermissions(player)) {
                         continue;
                     }

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

@@ -3,7 +3,7 @@ package com.gmail.nossr50.config;
 import com.gmail.nossr50.database.SQLDatabaseManager.PoolIdentifier;
 import com.gmail.nossr50.datatypes.MobHealthbarType;
 import com.gmail.nossr50.datatypes.party.PartyFeature;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.util.StringUtils;
 import org.bukkit.Material;
@@ -454,8 +454,8 @@ public class Config extends AutoUpdateConfigLoader {
     public boolean getAbilitiesOnlyActivateWhenSneaking() { return config.getBoolean("Abilities.Activation.Only_Activate_When_Sneaking", false); }
     public boolean getAbilitiesGateEnabled() { return config.getBoolean("Abilities.Activation.Level_Gate_Abilities"); }
 
-    public int getCooldown(SuperAbility ability) { return config.getInt("Abilities.Cooldowns." + ability.toString()); }
-    public int getMaxLength(SuperAbility ability) { return config.getInt("Abilities.Max_Seconds." + ability.toString()); }
+    public int getCooldown(SuperAbilityType ability) { return config.getInt("Abilities.Cooldowns." + ability.toString()); }
+    public int getMaxLength(SuperAbilityType ability) { return config.getInt("Abilities.Max_Seconds." + ability.toString()); }
 
     /* Durability Settings */
     public int getAbilityToolDamage() { return config.getInt("Abilities.Tools.Durability_Loss", 1); }

+ 18 - 18
src/main/java/com/gmail/nossr50/database/FlatfileDatabaseManager.java

@@ -19,7 +19,7 @@ import java.util.UUID;
 
 import com.gmail.nossr50.datatypes.player.UniqueDataType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import org.bukkit.OfflinePlayer;
 
 import com.gmail.nossr50.mcMMO;
@@ -348,17 +348,17 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
         writer.append(":");
         writer.append(profile.getSkillLevel(PrimarySkill.TAMING)).append(":");
         writer.append(profile.getSkillXpLevel(PrimarySkill.TAMING)).append(":");
-        writer.append((int) profile.getAbilityDATS(SuperAbility.BERSERK)).append(":");
-        writer.append((int) profile.getAbilityDATS(SuperAbility.GIGA_DRILL_BREAKER)).append(":");
-        writer.append((int) profile.getAbilityDATS(SuperAbility.TREE_FELLER)).append(":");
-        writer.append((int) profile.getAbilityDATS(SuperAbility.GREEN_TERRA)).append(":");
-        writer.append((int) profile.getAbilityDATS(SuperAbility.SERRATED_STRIKES)).append(":");
-        writer.append((int) profile.getAbilityDATS(SuperAbility.SKULL_SPLITTER)).append(":");
-        writer.append((int) profile.getAbilityDATS(SuperAbility.SUPER_BREAKER)).append(":");
+        writer.append((int) profile.getAbilityDATS(SuperAbilityType.BERSERK)).append(":");
+        writer.append((int) profile.getAbilityDATS(SuperAbilityType.GIGA_DRILL_BREAKER)).append(":");
+        writer.append((int) profile.getAbilityDATS(SuperAbilityType.TREE_FELLER)).append(":");
+        writer.append((int) profile.getAbilityDATS(SuperAbilityType.GREEN_TERRA)).append(":");
+        writer.append((int) profile.getAbilityDATS(SuperAbilityType.SERRATED_STRIKES)).append(":");
+        writer.append((int) profile.getAbilityDATS(SuperAbilityType.SKULL_SPLITTER)).append(":");
+        writer.append((int) profile.getAbilityDATS(SuperAbilityType.SUPER_BREAKER)).append(":");
         writer.append(":");
         writer.append(profile.getSkillLevel(PrimarySkill.FISHING)).append(":");
         writer.append(profile.getSkillXpLevel(PrimarySkill.FISHING)).append(":");
-        writer.append((int) profile.getAbilityDATS(SuperAbility.BLAST_MINING)).append(":");
+        writer.append((int) profile.getAbilityDATS(SuperAbilityType.BLAST_MINING)).append(":");
         writer.append(System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR).append(":");
         MobHealthbarType mobHealthbarType = profile.getMobHealthbarType();
         writer.append(mobHealthbarType == null ? Config.getInstance().getMobHealthbarDefault().toString() : mobHealthbarType.toString()).append(":");
@@ -1145,7 +1145,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
     private PlayerProfile loadFromLine(String[] character) {
         Map<PrimarySkill, Integer>   skills     = getSkillMapFromLine(character);      // Skill levels
         Map<PrimarySkill, Float>     skillsXp   = new EnumMap<PrimarySkill, Float>(PrimarySkill.class);     // Skill & XP
-        Map<SuperAbility, Integer> skillsDATS = new EnumMap<SuperAbility, Integer>(SuperAbility.class); // Ability & Cooldown
+        Map<SuperAbilityType, Integer> skillsDATS = new EnumMap<SuperAbilityType, Integer>(SuperAbilityType.class); // Ability & Cooldown
         Map<UniqueDataType, Integer> uniquePlayerDataMap = new EnumMap<UniqueDataType, Integer>(UniqueDataType.class);
         MobHealthbarType mobHealthbarType;
         int scoreboardTipsShown;
@@ -1167,17 +1167,17 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
         skillsXp.put(PrimarySkill.ALCHEMY, (float) Integer.valueOf(character[EXP_ALCHEMY]));
 
         // Taming - Unused
-        skillsDATS.put(SuperAbility.SUPER_BREAKER, Integer.valueOf(character[COOLDOWN_SUPER_BREAKER]));
+        skillsDATS.put(SuperAbilityType.SUPER_BREAKER, Integer.valueOf(character[COOLDOWN_SUPER_BREAKER]));
         // Repair - Unused
-        skillsDATS.put(SuperAbility.TREE_FELLER, Integer.valueOf(character[COOLDOWN_TREE_FELLER]));
-        skillsDATS.put(SuperAbility.BERSERK, Integer.valueOf(character[COOLDOWN_BERSERK]));
-        skillsDATS.put(SuperAbility.GREEN_TERRA, Integer.valueOf(character[COOLDOWN_GREEN_TERRA]));
-        skillsDATS.put(SuperAbility.GIGA_DRILL_BREAKER, Integer.valueOf(character[COOLDOWN_GIGA_DRILL_BREAKER]));
+        skillsDATS.put(SuperAbilityType.TREE_FELLER, Integer.valueOf(character[COOLDOWN_TREE_FELLER]));
+        skillsDATS.put(SuperAbilityType.BERSERK, Integer.valueOf(character[COOLDOWN_BERSERK]));
+        skillsDATS.put(SuperAbilityType.GREEN_TERRA, Integer.valueOf(character[COOLDOWN_GREEN_TERRA]));
+        skillsDATS.put(SuperAbilityType.GIGA_DRILL_BREAKER, Integer.valueOf(character[COOLDOWN_GIGA_DRILL_BREAKER]));
         // Archery - Unused
-        skillsDATS.put(SuperAbility.SERRATED_STRIKES, Integer.valueOf(character[COOLDOWN_SERRATED_STRIKES]));
-        skillsDATS.put(SuperAbility.SKULL_SPLITTER, Integer.valueOf(character[COOLDOWN_SKULL_SPLITTER]));
+        skillsDATS.put(SuperAbilityType.SERRATED_STRIKES, Integer.valueOf(character[COOLDOWN_SERRATED_STRIKES]));
+        skillsDATS.put(SuperAbilityType.SKULL_SPLITTER, Integer.valueOf(character[COOLDOWN_SKULL_SPLITTER]));
         // Acrobatics - Unused
-        skillsDATS.put(SuperAbility.BLAST_MINING, Integer.valueOf(character[COOLDOWN_BLAST_MINING]));
+        skillsDATS.put(SuperAbilityType.BLAST_MINING, Integer.valueOf(character[COOLDOWN_BLAST_MINING]));
 
         try {
             mobHealthbarType = MobHealthbarType.valueOf(character[HEALTHBAR]);

+ 18 - 18
src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java

@@ -7,7 +7,7 @@ import com.gmail.nossr50.datatypes.database.PlayerStat;
 import com.gmail.nossr50.datatypes.database.UpgradeType;
 import com.gmail.nossr50.datatypes.player.PlayerProfile;
 import com.gmail.nossr50.datatypes.player.UniqueDataType;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.runnables.database.UUIDUpdateAsyncTask;
@@ -289,14 +289,14 @@ public final class SQLDatabaseManager implements DatabaseManager {
                     + "  mining = ?, woodcutting = ?, unarmed = ?"
                     + ", herbalism = ?, excavation = ?, swords = ?"
                     + ", axes = ?, blast_mining = ?, chimaera_wing = ? WHERE user_id = ?");
-            statement.setLong(1, profile.getAbilityDATS(SuperAbility.SUPER_BREAKER));
-            statement.setLong(2, profile.getAbilityDATS(SuperAbility.TREE_FELLER));
-            statement.setLong(3, profile.getAbilityDATS(SuperAbility.BERSERK));
-            statement.setLong(4, profile.getAbilityDATS(SuperAbility.GREEN_TERRA));
-            statement.setLong(5, profile.getAbilityDATS(SuperAbility.GIGA_DRILL_BREAKER));
-            statement.setLong(6, profile.getAbilityDATS(SuperAbility.SERRATED_STRIKES));
-            statement.setLong(7, profile.getAbilityDATS(SuperAbility.SKULL_SPLITTER));
-            statement.setLong(8, profile.getAbilityDATS(SuperAbility.BLAST_MINING));
+            statement.setLong(1, profile.getAbilityDATS(SuperAbilityType.SUPER_BREAKER));
+            statement.setLong(2, profile.getAbilityDATS(SuperAbilityType.TREE_FELLER));
+            statement.setLong(3, profile.getAbilityDATS(SuperAbilityType.BERSERK));
+            statement.setLong(4, profile.getAbilityDATS(SuperAbilityType.GREEN_TERRA));
+            statement.setLong(5, profile.getAbilityDATS(SuperAbilityType.GIGA_DRILL_BREAKER));
+            statement.setLong(6, profile.getAbilityDATS(SuperAbilityType.SERRATED_STRIKES));
+            statement.setLong(7, profile.getAbilityDATS(SuperAbilityType.SKULL_SPLITTER));
+            statement.setLong(8, profile.getAbilityDATS(SuperAbilityType.BLAST_MINING));
             statement.setLong(9, profile.getUniqueData(UniqueDataType.CHIMAERA_WING_DATS));
             statement.setInt(10, id);
             success = (statement.executeUpdate() != 0);
@@ -1054,7 +1054,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
     private PlayerProfile loadFromResult(String playerName, ResultSet result) throws SQLException {
         Map<PrimarySkill, Integer> skills = new EnumMap<PrimarySkill, Integer>(PrimarySkill.class); // Skill & Level
         Map<PrimarySkill, Float> skillsXp = new EnumMap<PrimarySkill, Float>(PrimarySkill.class); // Skill & XP
-        Map<SuperAbility, Integer> skillsDATS = new EnumMap<SuperAbility, Integer>(SuperAbility.class); // Ability & Cooldown
+        Map<SuperAbilityType, Integer> skillsDATS = new EnumMap<SuperAbilityType, Integer>(SuperAbilityType.class); // Ability & Cooldown
         Map<UniqueDataType, Integer> uniqueData = new EnumMap<UniqueDataType, Integer>(UniqueDataType.class); //Chimaera wing cooldown and other misc info
         MobHealthbarType mobHealthbarType;
         UUID uuid;
@@ -1095,17 +1095,17 @@ public final class SQLDatabaseManager implements DatabaseManager {
         skillsXp.put(PrimarySkill.ALCHEMY, result.getFloat(OFFSET_XP + 13));
 
         // Taming - Unused - result.getInt(OFFSET_DATS + 1)
-        skillsDATS.put(SuperAbility.SUPER_BREAKER, result.getInt(OFFSET_DATS + 2));
+        skillsDATS.put(SuperAbilityType.SUPER_BREAKER, result.getInt(OFFSET_DATS + 2));
         // Repair - Unused - result.getInt(OFFSET_DATS + 3)
-        skillsDATS.put(SuperAbility.TREE_FELLER, result.getInt(OFFSET_DATS + 4));
-        skillsDATS.put(SuperAbility.BERSERK, result.getInt(OFFSET_DATS + 5));
-        skillsDATS.put(SuperAbility.GREEN_TERRA, result.getInt(OFFSET_DATS + 6));
-        skillsDATS.put(SuperAbility.GIGA_DRILL_BREAKER, result.getInt(OFFSET_DATS + 7));
+        skillsDATS.put(SuperAbilityType.TREE_FELLER, result.getInt(OFFSET_DATS + 4));
+        skillsDATS.put(SuperAbilityType.BERSERK, result.getInt(OFFSET_DATS + 5));
+        skillsDATS.put(SuperAbilityType.GREEN_TERRA, result.getInt(OFFSET_DATS + 6));
+        skillsDATS.put(SuperAbilityType.GIGA_DRILL_BREAKER, result.getInt(OFFSET_DATS + 7));
         // Archery - Unused - result.getInt(OFFSET_DATS + 8)
-        skillsDATS.put(SuperAbility.SERRATED_STRIKES, result.getInt(OFFSET_DATS + 9));
-        skillsDATS.put(SuperAbility.SKULL_SPLITTER, result.getInt(OFFSET_DATS + 10));
+        skillsDATS.put(SuperAbilityType.SERRATED_STRIKES, result.getInt(OFFSET_DATS + 9));
+        skillsDATS.put(SuperAbilityType.SKULL_SPLITTER, result.getInt(OFFSET_DATS + 10));
         // Acrobatics - Unused - result.getInt(OFFSET_DATS + 11)
-        skillsDATS.put(SuperAbility.BLAST_MINING, result.getInt(OFFSET_DATS + 12));
+        skillsDATS.put(SuperAbilityType.BLAST_MINING, result.getInt(OFFSET_DATS + 12));
         uniqueData.put(UniqueDataType.CHIMAERA_WING_DATS, result.getInt(OFFSET_DATS + 13));
 
 

+ 28 - 28
src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java

@@ -8,11 +8,10 @@ import com.gmail.nossr50.datatypes.interactions.NotificationType;
 import com.gmail.nossr50.datatypes.mods.CustomTool;
 import com.gmail.nossr50.datatypes.party.Party;
 import com.gmail.nossr50.datatypes.party.PartyTeleportRecord;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.datatypes.skills.ToolType;
 import com.gmail.nossr50.datatypes.skills.XPGainReason;
-import com.gmail.nossr50.listeners.InteractionManager;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.party.PartyManager;
@@ -40,6 +39,7 @@ import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
 import com.gmail.nossr50.util.EventUtils;
 import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.Permissions;
+import com.gmail.nossr50.util.player.NotificationManager;
 import com.gmail.nossr50.util.player.UserManager;
 import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
 import com.gmail.nossr50.util.skills.ParticleEffectUtils;
@@ -50,7 +50,6 @@ import com.gmail.nossr50.util.sounds.SoundType;
 import org.apache.commons.lang.Validate;
 import org.bukkit.GameMode;
 import org.bukkit.Location;
-import org.bukkit.Sound;
 import org.bukkit.entity.Player;
 import org.bukkit.inventory.ItemStack;
 import org.bukkit.metadata.FixedMetadataValue;
@@ -81,8 +80,8 @@ public class McMMOPlayer {
     private boolean godMode;
     private boolean chatSpy = false; //Off by default
 
-    private final Map<SuperAbility, Boolean> abilityMode     = new HashMap<SuperAbility, Boolean>();
-    private final Map<SuperAbility, Boolean> abilityInformed = new HashMap<SuperAbility, Boolean>();
+    private final Map<SuperAbilityType, Boolean> abilityMode     = new HashMap<SuperAbilityType, Boolean>();
+    private final Map<SuperAbilityType, Boolean> abilityInformed = new HashMap<SuperAbilityType, Boolean>();
 
     private final Map<ToolType, Boolean> toolMode = new HashMap<ToolType, Boolean>();
 
@@ -123,9 +122,9 @@ public class McMMOPlayer {
             mcMMO.p.getPluginLoader().disablePlugin(mcMMO.p);
         }
 
-        for (SuperAbility superAbility : SuperAbility.values()) {
-            abilityMode.put(superAbility, false);
-            abilityInformed.put(superAbility, true); // This is intended
+        for (SuperAbilityType superAbilityType : SuperAbilityType.values()) {
+            abilityMode.put(superAbilityType, false);
+            abilityInformed.put(superAbilityType, true); // This is intended
         }
 
         for (ToolType toolType : ToolType.values()) {
@@ -201,7 +200,7 @@ public class McMMOPlayer {
      * Reset the mode of all abilities.
      */
     public void resetAbilityMode() {
-        for (SuperAbility ability : SuperAbility.values()) {
+        for (SuperAbilityType ability : SuperAbilityType.values()) {
             // Correctly disable and handle any special deactivate code
             new AbilityDisableTask(this, ability).run();
         }
@@ -213,7 +212,7 @@ public class McMMOPlayer {
      * @param ability The ability to check
      * @return true if the ability is enabled, false otherwise
      */
-    public boolean getAbilityMode(SuperAbility ability) {
+    public boolean getAbilityMode(SuperAbilityType ability) {
         return abilityMode.get(ability);
     }
 
@@ -223,7 +222,7 @@ public class McMMOPlayer {
      * @param ability The ability to check
      * @param isActive True if the ability is active, false otherwise
      */
-    public void setAbilityMode(SuperAbility ability, boolean isActive) {
+    public void setAbilityMode(SuperAbilityType ability, boolean isActive) {
         abilityMode.put(ability, isActive);
     }
 
@@ -233,7 +232,7 @@ public class McMMOPlayer {
      * @param ability The ability to check
      * @return true if the ability is informed, false otherwise
      */
-    public boolean getAbilityInformed(SuperAbility ability) {
+    public boolean getAbilityInformed(SuperAbilityType ability) {
         return abilityInformed.get(ability);
     }
 
@@ -243,7 +242,7 @@ public class McMMOPlayer {
      * @param ability The ability to check
      * @param isInformed True if the ability is informed, false otherwise
      */
-    public void setAbilityInformed(SuperAbility ability, boolean isInformed) {
+    public void setAbilityInformed(SuperAbilityType ability, boolean isInformed) {
         abilityInformed.put(ability, isInformed);
     }
 
@@ -517,8 +516,7 @@ public class McMMOPlayer {
             SoundManager.sendSound(player, player.getLocation(), SoundType.LEVEL_UP);
         }
 
-        InteractionManager.sendPlayerLevelUpNotification(UserManager.getPlayer(player), primarySkill, profile.getSkillLevel(primarySkill));
-        //player.sendMessage(LocaleLoader.getString(StringUtils.getCapitalized(primarySkill.toString()) + ".Skillup", levelsGained, getSkillLevel(primarySkill)));
+        NotificationManager.sendPlayerLevelUpNotification(UserManager.getPlayer(player), primarySkill, profile.getSkillLevel(primarySkill));
     }
 
     /*
@@ -731,7 +729,7 @@ public class McMMOPlayer {
      */
     public void checkAbilityActivation(PrimarySkill skill) {
         ToolType tool = skill.getTool();
-        SuperAbility ability = skill.getAbility();
+        SuperAbilityType ability = skill.getAbility();
 
         if (getAbilityMode(ability)) {
             return;
@@ -744,8 +742,10 @@ public class McMMOPlayer {
         {
             if(getSkillLevel(skill) < skill.getSkillAbilityGate())
             {
+                int diff = skill.getSkillAbilityGate() - getSkillLevel(skill);
+
                 //Inform the player they are not yet skilled enough
-                player.sendMessage(LocaleLoader.getString("Skills.AbilityGateRequirementFail"));
+                NotificationManager.sendPlayerInformation(player, NotificationType.ABILITY_COOLDOWN, "Skills.AbilityGateRequirementFail", String.valueOf(diff), skill.getName());
                 return;
             }
         }
@@ -758,7 +758,7 @@ public class McMMOPlayer {
              * We show them the too tired message when they take action.
              */
             if (skill == PrimarySkill.WOODCUTTING || skill == PrimarySkill.AXES) {
-                player.sendMessage(LocaleLoader.getString("Skills.TooTired", timeRemaining));
+                NotificationManager.sendPlayerInformation(player, NotificationType.ABILITY_COOLDOWN, "Skills.TooTired", String.valueOf(timeRemaining));
             }
 
             return;
@@ -774,7 +774,7 @@ public class McMMOPlayer {
         ParticleEffectUtils.playAbilityEnabledEffect(player);
 
         if (useChatNotifications()) {
-            InteractionManager.sendPlayerInformation(player, NotificationType.SUPER_ABILITY, ability.getAbilityOn());
+            NotificationManager.sendPlayerInformation(player, NotificationType.SUPER_ABILITY, ability.getAbilityOn());
             //player.sendMessage(ability.getAbilityOn());
         }
 
@@ -784,7 +784,7 @@ public class McMMOPlayer {
         profile.setAbilityDATS(ability, System.currentTimeMillis() + (ticks * Misc.TIME_CONVERSION_FACTOR));
         setAbilityMode(ability, true);
 
-        if (ability == SuperAbility.SUPER_BREAKER || ability == SuperAbility.GIGA_DRILL_BREAKER) {
+        if (ability == SuperAbilityType.SUPER_BREAKER || ability == SuperAbilityType.GIGA_DRILL_BREAKER) {
             SkillUtils.handleAbilitySpeedIncrease(player);
         }
 
@@ -807,13 +807,13 @@ public class McMMOPlayer {
             return;
         }
 
-        for (SuperAbility superAbility : SuperAbility.values()) {
-            if (getAbilityMode(superAbility)) {
+        for (SuperAbilityType superAbilityType : SuperAbilityType.values()) {
+            if (getAbilityMode(superAbilityType)) {
                 return;
             }
         }
 
-        SuperAbility ability = skill.getAbility();
+        SuperAbilityType ability = skill.getAbility();
         ToolType tool = skill.getTool();
 
         /*
@@ -825,13 +825,13 @@ public class McMMOPlayer {
                 int timeRemaining = calculateTimeRemaining(ability);
 
                 if (!getAbilityMode(ability) && timeRemaining > 0) {
-                    InteractionManager.sendPlayerInformation(player, NotificationType.ABILITY_COOLDOWN, "Skills.TooTired", String.valueOf(timeRemaining));
+                    NotificationManager.sendPlayerInformation(player, NotificationType.ABILITY_COOLDOWN, "Skills.TooTired", String.valueOf(timeRemaining));
                     return;
                 }
             }
 
             if (Config.getInstance().getAbilityMessagesEnabled()) {
-                InteractionManager.sendPlayerInformation(player, NotificationType.TOOL, tool.getRaiseTool());
+                NotificationManager.sendPlayerInformation(player, NotificationType.TOOL, tool.getRaiseTool());
             }
 
             setToolPreparationMode(tool, true);
@@ -842,11 +842,11 @@ public class McMMOPlayer {
     /**
      * Calculate the time remaining until the ability's cooldown expires.
      *
-     * @param ability SuperAbility whose cooldown to check
+     * @param ability SuperAbilityType whose cooldown to check
      *
      * @return the number of seconds remaining before the cooldown expires
      */
-    public int calculateTimeRemaining(SuperAbility ability) {
+    public int calculateTimeRemaining(SuperAbilityType ability) {
         long deactivatedTimestamp = profile.getAbilityDATS(ability) * Misc.TIME_CONVERSION_FACTOR;
         return (int) (((deactivatedTimestamp + (PerksUtils.handleCooldownPerks(player, ability.getCooldown()) * Misc.TIME_CONVERSION_FACTOR)) - System.currentTimeMillis()) / Misc.TIME_CONVERSION_FACTOR);
     }
@@ -894,7 +894,7 @@ public class McMMOPlayer {
         profile.addXp(skill, xp);
     }
 
-    public void setAbilityDATS(SuperAbility ability, long DATS) {
+    public void setAbilityDATS(SuperAbilityType ability, long DATS) {
         profile.setAbilityDATS(ability, DATS);
     }
 

+ 10 - 10
src/main/java/com/gmail/nossr50/datatypes/player/PlayerProfile.java

@@ -7,7 +7,7 @@ import java.util.UUID;
 import java.util.concurrent.DelayQueue;
 
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.config.Config;
 import com.gmail.nossr50.config.experience.ExperienceConfig;
@@ -33,7 +33,7 @@ public class PlayerProfile {
     /* Skill Data */
     private final Map<PrimarySkill, Integer>   skills     = new HashMap<PrimarySkill, Integer>();   // Skill & Level
     private final Map<PrimarySkill, Float>     skillsXp   = new HashMap<PrimarySkill, Float>();     // Skill & XP
-    private final Map<SuperAbility, Integer> abilityDATS = new HashMap<SuperAbility, Integer>(); // Ability & Cooldown
+    private final Map<SuperAbilityType, Integer> abilityDATS = new HashMap<SuperAbilityType, Integer>(); // Ability & Cooldown
     private final Map<UniqueDataType, Integer> uniquePlayerData = new HashMap<>(); //Misc data that doesn't fit into other categories (chimaera wing, etc..)
 
     // Store previous XP gains for deminished returns
@@ -52,8 +52,8 @@ public class PlayerProfile {
         mobHealthbarType = Config.getInstance().getMobHealthbarDefault();
         scoreboardTipsShown = 0;
 
-        for (SuperAbility superAbility : SuperAbility.values()) {
-            abilityDATS.put(superAbility, 0);
+        for (SuperAbilityType superAbilityType : SuperAbilityType.values()) {
+            abilityDATS.put(superAbilityType, 0);
         }
 
         for (PrimarySkill primarySkill : PrimarySkill.NON_CHILD_SKILLS) {
@@ -76,7 +76,7 @@ public class PlayerProfile {
         this.loaded = isLoaded;
     }
 
-    public PlayerProfile(String playerName, UUID uuid, Map<PrimarySkill, Integer> levelData, Map<PrimarySkill, Float> xpData, Map<SuperAbility, Integer> cooldownData, MobHealthbarType mobHealthbarType, int scoreboardTipsShown, Map<UniqueDataType, Integer> uniqueProfileData) {
+    public PlayerProfile(String playerName, UUID uuid, Map<PrimarySkill, Integer> levelData, Map<PrimarySkill, Float> xpData, Map<SuperAbilityType, Integer> cooldownData, MobHealthbarType mobHealthbarType, int scoreboardTipsShown, Map<UniqueDataType, Integer> uniqueProfileData) {
         this.playerName = playerName;
         this.uuid = uuid;
         this.mobHealthbarType = mobHealthbarType;
@@ -175,20 +175,20 @@ public class PlayerProfile {
     /**
      * Get the current deactivation timestamp of an ability.
      *
-     * @param ability The {@link SuperAbility} to get the DATS for
+     * @param ability The {@link SuperAbilityType} to get the DATS for
      * @return the deactivation timestamp for the ability
      */
-    public long getAbilityDATS(SuperAbility ability) {
+    public long getAbilityDATS(SuperAbilityType ability) {
         return abilityDATS.get(ability);
     }
 
     /**
      * Set the current deactivation timestamp of an ability.
      *
-     * @param ability The {@link SuperAbility} to set the DATS for
+     * @param ability The {@link SuperAbilityType} to set the DATS for
      * @param DATS the DATS of the ability
      */
-    protected void setAbilityDATS(SuperAbility ability, long DATS) {
+    protected void setAbilityDATS(SuperAbilityType ability, long DATS) {
         changed = true;
 
         abilityDATS.put(ability, (int) (DATS * .001D));
@@ -200,7 +200,7 @@ public class PlayerProfile {
     protected void resetCooldowns() {
         changed = true;
 
-        for (SuperAbility ability : abilityDATS.keySet()) {
+        for (SuperAbilityType ability : abilityDATS.keySet()) {
             abilityDATS.put(ability, 0);
         }
     }

+ 11 - 11
src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkill.java

@@ -39,22 +39,22 @@ public enum PrimarySkill {
     ACROBATICS(AcrobaticsManager.class, Color.WHITE, ImmutableList.of(SubSkillType.ACROBATICS_DODGE, SubSkillType.ACROBATICS_ROLL)),
     ALCHEMY(AlchemyManager.class, Color.FUCHSIA, ImmutableList.of(SubSkillType.ALCHEMY_CATALYSIS, SubSkillType.ALCHEMY_CONCOCTIONS)),
     ARCHERY(ArcheryManager.class, Color.MAROON, ImmutableList.of(SubSkillType.ARCHERY_DAZE, SubSkillType.ARCHERY_ARROW_RETRIEVAL, SubSkillType.ARCHERY_SKILL_SHOT)),
-    AXES(AxesManager.class, Color.AQUA, SuperAbility.SKULL_SPLITTER, ToolType.AXE, ImmutableList.of(SubSkillType.AXES_SKULL_SPLITTER, SubSkillType.AXES_ARMOR_IMPACT, SubSkillType.AXES_AXE_MASTERY, SubSkillType.AXES_CRITICAL_STRIKES, SubSkillType.AXES_GREATER_IMPACT)),
-    EXCAVATION(ExcavationManager.class, Color.fromRGB(139, 69, 19), SuperAbility.GIGA_DRILL_BREAKER, ToolType.SHOVEL, ImmutableList.of(SubSkillType.EXCAVATION_GIGA_DRILL_BREAKER, SubSkillType.EXCAVATION_TREASURE_HUNTER)),
+    AXES(AxesManager.class, Color.AQUA, SuperAbilityType.SKULL_SPLITTER, ToolType.AXE, ImmutableList.of(SubSkillType.AXES_SKULL_SPLITTER, SubSkillType.AXES_ARMOR_IMPACT, SubSkillType.AXES_AXE_MASTERY, SubSkillType.AXES_CRITICAL_STRIKES, SubSkillType.AXES_GREATER_IMPACT)),
+    EXCAVATION(ExcavationManager.class, Color.fromRGB(139, 69, 19), SuperAbilityType.GIGA_DRILL_BREAKER, ToolType.SHOVEL, ImmutableList.of(SubSkillType.EXCAVATION_GIGA_DRILL_BREAKER, SubSkillType.EXCAVATION_TREASURE_HUNTER)),
     FISHING(FishingManager.class, Color.NAVY, ImmutableList.of(SubSkillType.FISHING_FISHERMANS_DIET, SubSkillType.FISHING_TREASURE_HUNTER, SubSkillType.FISHING_ICE_FISHING, SubSkillType.FISHING_MAGIC_HUNTER, SubSkillType.FISHING_MASTER_ANGLER, SubSkillType.FISHING_SHAKE)),
-    HERBALISM(HerbalismManager.class, Color.GREEN, SuperAbility.GREEN_TERRA, ToolType.HOE, ImmutableList.of(SubSkillType.HERBALISM_FARMERS_DIET, SubSkillType.HERBALISM_GREEN_THUMB, SubSkillType.HERBALISM_DOUBLE_DROPS, SubSkillType.HERBALISM_HYLIAN_LUCK, SubSkillType.HERBALISM_SHROOM_THUMB)),
-    MINING(MiningManager.class, Color.GRAY, SuperAbility.SUPER_BREAKER, ToolType.PICKAXE, ImmutableList.of(SubSkillType.MINING_SUPER_BREAKER, SubSkillType.MINING_DEMOLITIONS_EXPERTISE, SubSkillType.MINING_BIGGER_BOMBS, SubSkillType.MINING_BLAST_MINING, SubSkillType.MINING_DOUBLE_DROPS)),
+    HERBALISM(HerbalismManager.class, Color.GREEN, SuperAbilityType.GREEN_TERRA, ToolType.HOE, ImmutableList.of(SubSkillType.HERBALISM_FARMERS_DIET, SubSkillType.HERBALISM_GREEN_THUMB, SubSkillType.HERBALISM_DOUBLE_DROPS, SubSkillType.HERBALISM_HYLIAN_LUCK, SubSkillType.HERBALISM_SHROOM_THUMB)),
+    MINING(MiningManager.class, Color.GRAY, SuperAbilityType.SUPER_BREAKER, ToolType.PICKAXE, ImmutableList.of(SubSkillType.MINING_SUPER_BREAKER, SubSkillType.MINING_DEMOLITIONS_EXPERTISE, SubSkillType.MINING_BIGGER_BOMBS, SubSkillType.MINING_BLAST_MINING, SubSkillType.MINING_DOUBLE_DROPS)),
     REPAIR(RepairManager.class, Color.SILVER, ImmutableList.of(SubSkillType.REPAIR_ARCANE_FORGING, SubSkillType.REPAIR_REPAIR_MASTERY, SubSkillType.REPAIR_SUPER_REPAIR)),
     SALVAGE(SalvageManager.class, Color.ORANGE, ImmutableList.of(SubSkillType.SALVAGE_ADVANCED_SALVAGE, SubSkillType.SALVAGE_ARCANE_SALVAGE)),
     SMELTING(SmeltingManager.class, Color.YELLOW, ImmutableList.of(SubSkillType.SMELTING_FLUX_MINING, SubSkillType.SMELTING_FUEL_EFFICIENCY, SubSkillType.SMELTING_SECOND_SMELT)),
-    SWORDS(SwordsManager.class, Color.fromRGB(178, 34, 34), SuperAbility.SERRATED_STRIKES, ToolType.SWORD, ImmutableList.of(SubSkillType.SWORDS_SERRATED_STRIKES, SubSkillType.SWORDS_BLEED, SubSkillType.SWORDS_COUNTER_ATTACK)),
+    SWORDS(SwordsManager.class, Color.fromRGB(178, 34, 34), SuperAbilityType.SERRATED_STRIKES, ToolType.SWORD, ImmutableList.of(SubSkillType.SWORDS_SERRATED_STRIKES, SubSkillType.SWORDS_BLEED, SubSkillType.SWORDS_COUNTER_ATTACK)),
     TAMING(TamingManager.class, Color.PURPLE, ImmutableList.of(SubSkillType.TAMING_BEAST_LORE, SubSkillType.TAMING_CALL_OF_THE_WILD, SubSkillType.TAMING_ENVIRONMENTALLY_AWARE, SubSkillType.TAMING_FAST_FOOD_SERVICE, SubSkillType.TAMING_GORE, SubSkillType.TAMING_HOLY_HOUND, SubSkillType.TAMING_SHARPENED_CLAWS, SubSkillType.TAMING_SHOCK_PROOF, SubSkillType.TAMING_THICK_FUR, SubSkillType.TAMING_PUMMEL)),
-    UNARMED(UnarmedManager.class, Color.BLACK, SuperAbility.BERSERK, ToolType.FISTS, ImmutableList.of(SubSkillType.UNARMED_BERSERK, SubSkillType.UNARMED_BLOCK_CRACKER, SubSkillType.UNARMED_ARROW_DEFLECT, SubSkillType.UNARMED_DISARM, SubSkillType.UNARMED_IRON_ARM_STYLE, SubSkillType.UNARMED_IRON_GRIP)),
-    WOODCUTTING(WoodcuttingManager.class, Color.OLIVE, SuperAbility.TREE_FELLER, ToolType.AXE, ImmutableList.of(SubSkillType.WOODCUTTING_LEAF_BLOWER, SubSkillType.WOODCUTTING_BARK_SURGEON, SubSkillType.WOODCUTTING_SPLINTER, SubSkillType.WOODCUTTING_NATURES_BOUNTY, SubSkillType.WOODCUTTING_TREE_FELLER, SubSkillType.WOODCUTTING_HARVEST_LUMBER));
+    UNARMED(UnarmedManager.class, Color.BLACK, SuperAbilityType.BERSERK, ToolType.FISTS, ImmutableList.of(SubSkillType.UNARMED_BERSERK, SubSkillType.UNARMED_BLOCK_CRACKER, SubSkillType.UNARMED_ARROW_DEFLECT, SubSkillType.UNARMED_DISARM, SubSkillType.UNARMED_IRON_ARM_STYLE, SubSkillType.UNARMED_IRON_GRIP)),
+    WOODCUTTING(WoodcuttingManager.class, Color.OLIVE, SuperAbilityType.TREE_FELLER, ToolType.AXE, ImmutableList.of(SubSkillType.WOODCUTTING_LEAF_BLOWER, SubSkillType.WOODCUTTING_BARK_SURGEON, SubSkillType.WOODCUTTING_SPLINTER, SubSkillType.WOODCUTTING_NATURES_BOUNTY, SubSkillType.WOODCUTTING_TREE_FELLER, SubSkillType.WOODCUTTING_HARVEST_LUMBER));
 
     private Class<? extends SkillManager> managerClass;
     private Color runescapeColor;
-    private SuperAbility ability;
+    private SuperAbilityType ability;
     private ToolType tool;
     private List<SubSkillType> subSkillTypes;
 
@@ -101,7 +101,7 @@ public enum PrimarySkill {
         this(managerClass, runescapeColor, null, null, subSkillTypes);
     }
 
-    private PrimarySkill(Class<? extends SkillManager> managerClass, Color runescapeColor, SuperAbility ability, ToolType tool, List<SubSkillType> subSkillTypes) {
+    private PrimarySkill(Class<? extends SkillManager> managerClass, Color runescapeColor, SuperAbilityType ability, ToolType tool, List<SubSkillType> subSkillTypes) {
         this.managerClass = managerClass;
         this.runescapeColor = runescapeColor;
         this.ability = ability;
@@ -113,7 +113,7 @@ public enum PrimarySkill {
         return managerClass;
     }
 
-    public SuperAbility getAbility() {
+    public SuperAbilityType getAbility() {
         return ability;
     }
 
@@ -211,7 +211,7 @@ public enum PrimarySkill {
         return null;
     }
 
-    public static PrimarySkill byAbility(SuperAbility ability) {
+    public static PrimarySkill byAbility(SuperAbilityType ability) {
         for (PrimarySkill type : values()) {
             if (type.getAbility() == ability) {
                 return type;

+ 1 - 1
src/main/java/com/gmail/nossr50/datatypes/skills/SubSkillType.java

@@ -100,7 +100,7 @@ public enum SubSkillType {
     WOODCUTTING_HARVEST_LUMBER(3);
 
     private final int numRanks;
-    //TODO: SuperAbility should also contain flags for active by default? Not sure if it should work that way.
+    //TODO: SuperAbilityType should also contain flags for active by default? Not sure if it should work that way.
 
     /**
      * If our SubSkillType has more than 1 rank define it

+ 2 - 3
src/main/java/com/gmail/nossr50/datatypes/skills/SuperAbility.java → src/main/java/com/gmail/nossr50/datatypes/skills/SuperAbilityType.java

@@ -5,12 +5,11 @@ import org.bukkit.block.BlockState;
 import org.bukkit.entity.Player;
 
 import com.gmail.nossr50.config.Config;
-import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.util.BlockUtils;
 import com.gmail.nossr50.util.Permissions;
 import com.gmail.nossr50.util.StringUtils;
 
-public enum SuperAbility {
+public enum SuperAbilityType {
     BERSERK(
             "Unarmed.Skills.Berserk.On",
             "Unarmed.Skills.Berserk.Off",
@@ -77,7 +76,7 @@ public enum SuperAbility {
     private String abilityRefresh;
     private String abilityPlayerOff;
 
-    private SuperAbility(String abilityOn, String abilityOff, String abilityPlayer, String abilityRefresh, String abilityPlayerOff) {
+    private SuperAbilityType(String abilityOn, String abilityOff, String abilityPlayer, String abilityRefresh, String abilityPlayerOff) {
         this.abilityOn = abilityOn;
         this.abilityOff = abilityOff;
         this.abilityPlayer = abilityPlayer;

+ 3 - 3
src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java

@@ -8,13 +8,13 @@ import com.gmail.nossr50.datatypes.player.PlayerProfile;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
 import com.gmail.nossr50.datatypes.skills.XPGainReason;
 import com.gmail.nossr50.datatypes.skills.subskills.interfaces.RandomChance;
-import com.gmail.nossr50.listeners.InteractionManager;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.skills.acrobatics.Acrobatics;
 import com.gmail.nossr50.util.EventUtils;
 import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.Permissions;
+import com.gmail.nossr50.util.player.NotificationManager;
 import com.gmail.nossr50.util.player.UserManager;
 import com.gmail.nossr50.util.skills.PerksUtils;
 import com.gmail.nossr50.util.skills.SkillActivationType;
@@ -217,7 +217,7 @@ public class Roll extends AcrobaticsSubSkill implements RandomChance {
         double modifiedDamage = calculateModifiedRollDamage(damage, Acrobatics.rollThreshold);
 
         if (!isFatal(player, modifiedDamage) && SkillUtils.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.ACROBATICS_ROLL, player, getPrimarySkill(), skillLevel, getActivationChance(mcMMOPlayer))) {
-            InteractionManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE, "Acrobatics.Roll.Text");
+            NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE, "Acrobatics.Roll.Text");
             //player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.Text"));
 
             if (!SkillUtils.cooldownExpired((long) mcMMOPlayer.getTeleportATS(), Config.getInstance().getXPAfterTeleportCooldown())) {
@@ -251,7 +251,7 @@ public class Roll extends AcrobaticsSubSkill implements RandomChance {
         double modifiedDamage = calculateModifiedRollDamage(damage, Acrobatics.gracefulRollThreshold);
 
         if (!isFatal(player, modifiedDamage) && SkillUtils.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.ACROBATICS_ROLL, player, getPrimarySkill(), skillLevel, getActivationChance(mcMMOPlayer))) {
-            InteractionManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE, "Acrobatics.Ability.Proc");
+            NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE, "Acrobatics.Ability.Proc");
             SkillUtils.applyXpGain(mcMMOPlayer, getPrimarySkill(), calculateRollXP(player, damage, true), XPGainReason.PVE);
 
             return modifiedDamage;

+ 3 - 3
src/main/java/com/gmail/nossr50/events/skills/abilities/McMMOPlayerAbilityEvent.java

@@ -1,20 +1,20 @@
 package com.gmail.nossr50.events.skills.abilities;
 
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import org.bukkit.entity.Player;
 
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent;
 
 public class McMMOPlayerAbilityEvent extends McMMOPlayerSkillEvent {
-    private SuperAbility ability;
+    private SuperAbilityType ability;
 
     protected McMMOPlayerAbilityEvent(Player player, PrimarySkill skill) {
         super(player, skill);
         ability = skill.getAbility();
     }
 
-    public SuperAbility getAbility() {
+    public SuperAbilityType getAbility() {
         return ability;
     }
 }

+ 8 - 8
src/main/java/com/gmail/nossr50/listeners/BlockListener.java

@@ -3,7 +3,7 @@ package com.gmail.nossr50.listeners;
 import com.gmail.nossr50.config.Config;
 import com.gmail.nossr50.config.HiddenConfig;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.datatypes.skills.ToolType;
 import com.gmail.nossr50.events.fake.FakeBlockBreakEvent;
@@ -244,7 +244,7 @@ public class BlockListener implements Listener {
             ExcavationManager excavationManager = mcMMOPlayer.getExcavationManager();
             excavationManager.excavationBlockCheck(blockState);
 
-            if (mcMMOPlayer.getAbilityMode(SuperAbility.GIGA_DRILL_BREAKER)) {
+            if (mcMMOPlayer.getAbilityMode(SuperAbilityType.GIGA_DRILL_BREAKER)) {
                 excavationManager.gigaDrillBreaker(blockState);
             }
         }
@@ -334,12 +334,12 @@ public class BlockListener implements Listener {
             ItemStack heldItem = player.getInventory().getItemInMainHand();
 
             if (HiddenConfig.getInstance().useEnchantmentBuffs()) {
-                if ((ItemUtils.isPickaxe(heldItem) && !mcMMOPlayer.getAbilityMode(SuperAbility.SUPER_BREAKER)) || (ItemUtils.isShovel(heldItem) && !mcMMOPlayer.getAbilityMode(SuperAbility.GIGA_DRILL_BREAKER))) {
+                if ((ItemUtils.isPickaxe(heldItem) && !mcMMOPlayer.getAbilityMode(SuperAbilityType.SUPER_BREAKER)) || (ItemUtils.isShovel(heldItem) && !mcMMOPlayer.getAbilityMode(SuperAbilityType.GIGA_DRILL_BREAKER))) {
                     SkillUtils.removeAbilityBuff(heldItem);
                 }
             }
             else {
-                if ((mcMMOPlayer.getAbilityMode(SuperAbility.SUPER_BREAKER) && !BlockUtils.affectedBySuperBreaker(blockState)) || (mcMMOPlayer.getAbilityMode(SuperAbility.GIGA_DRILL_BREAKER) && !BlockUtils.affectedByGigaDrillBreaker(blockState))) {
+                if ((mcMMOPlayer.getAbilityMode(SuperAbilityType.SUPER_BREAKER) && !BlockUtils.affectedBySuperBreaker(blockState)) || (mcMMOPlayer.getAbilityMode(SuperAbilityType.GIGA_DRILL_BREAKER) && !BlockUtils.affectedByGigaDrillBreaker(blockState))) {
                     SkillUtils.handleAbilitySpeedDecrease(player);
                 }
             }
@@ -366,7 +366,7 @@ public class BlockListener implements Listener {
          *
          * We don't need to check permissions here because they've already been checked for the ability to even activate.
          */
-        if (mcMMOPlayer.getAbilityMode(SuperAbility.TREE_FELLER) && BlockUtils.isLog(blockState) && Config.getInstance().getTreeFellerSoundsEnabled()) {
+        if (mcMMOPlayer.getAbilityMode(SuperAbilityType.TREE_FELLER) && BlockUtils.isLog(blockState) && Config.getInstance().getTreeFellerSoundsEnabled()) {
             SoundManager.sendSound(player, blockState.getLocation(), SoundType.FIZZ);
         }
     }
@@ -398,13 +398,13 @@ public class BlockListener implements Listener {
          *
          * We don't need to check permissions here because they've already been checked for the ability to even activate.
          */
-        if (mcMMOPlayer.getAbilityMode(SuperAbility.GREEN_TERRA) && BlockUtils.canMakeMossy(blockState)) {
+        if (mcMMOPlayer.getAbilityMode(SuperAbilityType.GREEN_TERRA) && BlockUtils.canMakeMossy(blockState)) {
             if (mcMMOPlayer.getHerbalismManager().processGreenTerra(blockState)) {
                 blockState.update(true);
             }
         }
-        else if (mcMMOPlayer.getAbilityMode(SuperAbility.BERSERK) && heldItem.getType() == Material.AIR) {
-            if (SuperAbility.BERSERK.blockCheck(block.getState()) && EventUtils.simulateBlockBreak(block, player, true)) {
+        else if (mcMMOPlayer.getAbilityMode(SuperAbilityType.BERSERK) && heldItem.getType() == Material.AIR) {
+            if (SuperAbilityType.BERSERK.blockCheck(block.getState()) && EventUtils.simulateBlockBreak(block, player, true)) {
                 event.setInstaBreak(true);
                 SoundManager.sendSound(player, block.getLocation(), SoundType.POP);
             }

+ 0 - 83
src/main/java/com/gmail/nossr50/listeners/InteractionManager.java

@@ -1,22 +1,10 @@
 package com.gmail.nossr50.listeners;
 
-import com.gmail.nossr50.config.AdvancedConfig;
-import com.gmail.nossr50.datatypes.interactions.NotificationType;
-import com.gmail.nossr50.datatypes.player.McMMOPlayer;
-import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
 import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
 import com.gmail.nossr50.datatypes.skills.subskills.interfaces.InteractType;
 import com.gmail.nossr50.datatypes.skills.subskills.interfaces.Interaction;
-import com.gmail.nossr50.events.skills.McMMOPlayerNotificationEvent;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
-import com.gmail.nossr50.util.TextComponentFactory;
-import net.md_5.bungee.api.ChatMessageType;
-import net.md_5.bungee.api.chat.TextComponent;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.entity.Player;
 import org.bukkit.event.Event;
 
 import java.util.ArrayList;
@@ -91,77 +79,6 @@ public class InteractionManager {
         }
     }
 
-    /**
-     * Sends players notifications from mcMMO
-     * This does this by sending out an event so other plugins can cancel it
-     * @param player target player
-     * @param notificationType notifications defined type
-     * @param key the locale key for the notifications defined message
-     */
-    public static void sendPlayerInformation(Player player, NotificationType notificationType, String key)
-    {
-
-        ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
-
-        TextComponent message = TextComponentFactory.getNotificationTextComponentFromLocale(key, notificationType);
-        McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(player, notificationType, destination, message);
-
-        sendNotification(player, customEvent);
-    }
-
-    public static void sendOtherPlayersSkillInfo(Player source, NotificationType notificationType, String key, String... values)
-    {
-        Location location = source.getLocation();
-        for (Player otherPlayer : source.getWorld().getPlayers()) {
-            if (otherPlayer != source && Misc.isNear(location, otherPlayer.getLocation(), Misc.SKILL_MESSAGE_MAX_SENDING_DISTANCE)) {
-                sendPlayerInformation(otherPlayer, notificationType, key, values);
-            }
-        }
-    }
-
-    public static void sendPlayerInformation(Player player, NotificationType notificationType, String key, String... values)
-    {
-        ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
-
-        TextComponent message = TextComponentFactory.getNotificationMultipleValues(key, notificationType, values);
-        McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(player, notificationType, destination, message);
-
-        sendNotification(player, customEvent);
-    }
-
-    private static void sendNotification(Player player, McMMOPlayerNotificationEvent customEvent) {
-        if (customEvent.isCancelled())
-            return;
-
-        player.spigot().sendMessage(customEvent.getChatMessageType(), customEvent.getNotificationTextComponent());
-    }
-
-    private static McMMOPlayerNotificationEvent checkNotificationEvent(Player player, NotificationType notificationType, ChatMessageType destination, TextComponent message) {
-        //Init event
-        McMMOPlayerNotificationEvent customEvent = new McMMOPlayerNotificationEvent(player,
-                notificationType, message, destination);
-
-        //Call event
-        Bukkit.getServer().getPluginManager().callEvent(customEvent);
-        return customEvent;
-    }
-
-    /**
-     * Handles sending level up notifications to a mcMMOPlayer
-     * @param mcMMOPlayer target mcMMOPlayer
-     * @param skillName skill that leveled up
-     * @param newLevel new level of that skill
-     */
-    public static void sendPlayerLevelUpNotification(McMMOPlayer mcMMOPlayer, PrimarySkill skillName, int newLevel)
-    {
-        ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(NotificationType.LEVEL_UP_MESSAGE) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
-
-        TextComponent levelUpTextComponent = TextComponentFactory.getNotificationLevelUpTextComponent(mcMMOPlayer, skillName, newLevel);
-        McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(mcMMOPlayer.getPlayer(), NotificationType.LEVEL_UP_MESSAGE, destination, levelUpTextComponent);
-
-        sendNotification(mcMMOPlayer.getPlayer(), customEvent);
-    }
-
     /**
      * Returns the list that contains all unique instances of registered Interaction classes
      * Interactions are extensions of abstract classes that represent modifying behaviours in Minecraft through events

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

@@ -8,7 +8,7 @@ import com.gmail.nossr50.config.experience.ExperienceConfig;
 import com.gmail.nossr50.datatypes.chat.ChatMode;
 import com.gmail.nossr50.datatypes.party.Party;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.mcMMO;
@@ -30,7 +30,6 @@ import com.gmail.nossr50.util.sounds.SoundManager;
 import com.gmail.nossr50.util.sounds.SoundType;
 import org.bukkit.GameMode;
 import org.bukkit.Material;
-import org.bukkit.Sound;
 import org.bukkit.block.Block;
 import org.bukkit.block.BlockState;
 import org.bukkit.entity.*;
@@ -310,7 +309,7 @@ public class PlayerListener implements Listener {
             }
         }
 
-        if ((mcMMOPlayer.isUsingUnarmed() && ItemUtils.isSharable(dropStack) && !Config.getInstance().getUnarmedItemsAsUnarmed()) || mcMMOPlayer.getAbilityMode(SuperAbility.BERSERK)) {
+        if ((mcMMOPlayer.isUsingUnarmed() && ItemUtils.isSharable(dropStack) && !Config.getInstance().getUnarmedItemsAsUnarmed()) || mcMMOPlayer.getAbilityMode(SuperAbilityType.BERSERK)) {
             boolean pickupSuccess = Unarmed.handleItemPickup(player.getInventory(), drop);
             boolean cancel = Config.getInstance().getUnarmedItemPickupDisabled() || pickupSuccess;
             event.setCancelled(cancel);

+ 5 - 5
src/main/java/com/gmail/nossr50/runnables/skills/AbilityCooldownTask.java

@@ -1,17 +1,17 @@
 package com.gmail.nossr50.runnables.skills;
 
 import com.gmail.nossr50.datatypes.interactions.NotificationType;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
-import com.gmail.nossr50.listeners.InteractionManager;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
+import com.gmail.nossr50.util.player.NotificationManager;
 import org.bukkit.scheduler.BukkitRunnable;
 
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 
 public class AbilityCooldownTask extends BukkitRunnable {
     private McMMOPlayer mcMMOPlayer;
-    private SuperAbility ability;
+    private SuperAbilityType ability;
 
-    public AbilityCooldownTask(McMMOPlayer mcMMOPlayer, SuperAbility ability) {
+    public AbilityCooldownTask(McMMOPlayer mcMMOPlayer, SuperAbilityType ability) {
         this.mcMMOPlayer = mcMMOPlayer;
         this.ability = ability;
     }
@@ -24,7 +24,7 @@ public class AbilityCooldownTask extends BukkitRunnable {
 
         mcMMOPlayer.setAbilityInformed(ability, true);
 
-        InteractionManager.sendPlayerInformation(mcMMOPlayer.getPlayer(), NotificationType.ABILITY_REFRESHED, ability.getAbilityRefresh());
+        NotificationManager.sendPlayerInformation(mcMMOPlayer.getPlayer(), NotificationType.ABILITY_REFRESHED, ability.getAbilityRefresh());
         //mcMMOPlayer.getPlayer().sendMessage(ability.getAbilityRefresh());
     }
 }

+ 5 - 5
src/main/java/com/gmail/nossr50/runnables/skills/AbilityDisableTask.java

@@ -1,8 +1,8 @@
 package com.gmail.nossr50.runnables.skills;
 
 import com.gmail.nossr50.datatypes.interactions.NotificationType;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
-import com.gmail.nossr50.listeners.InteractionManager;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
+import com.gmail.nossr50.util.player.NotificationManager;
 import org.bukkit.Chunk;
 import org.bukkit.World;
 import org.bukkit.entity.Player;
@@ -19,9 +19,9 @@ import com.gmail.nossr50.util.skills.SkillUtils;
 
 public class AbilityDisableTask extends BukkitRunnable {
     private McMMOPlayer mcMMOPlayer;
-    private SuperAbility ability;
+    private SuperAbilityType ability;
 
-    public AbilityDisableTask(McMMOPlayer mcMMOPlayer, SuperAbility ability) {
+    public AbilityDisableTask(McMMOPlayer mcMMOPlayer, SuperAbilityType ability) {
         this.mcMMOPlayer = mcMMOPlayer;
         this.ability = ability;
     }
@@ -59,7 +59,7 @@ public class AbilityDisableTask extends BukkitRunnable {
 
         if (mcMMOPlayer.useChatNotifications()) {
             //player.sendMessage(ability.getAbilityOff());
-            InteractionManager.sendPlayerInformation(player, NotificationType.ABILITY_OFF, ability.getAbilityOff());
+            NotificationManager.sendPlayerInformation(player, NotificationType.ABILITY_OFF, ability.getAbilityOff());
         }
 
 

+ 2 - 2
src/main/java/com/gmail/nossr50/runnables/skills/ToolLowerTask.java

@@ -1,7 +1,7 @@
 package com.gmail.nossr50.runnables.skills;
 
 import com.gmail.nossr50.datatypes.interactions.NotificationType;
-import com.gmail.nossr50.listeners.InteractionManager;
+import com.gmail.nossr50.util.player.NotificationManager;
 import org.bukkit.scheduler.BukkitRunnable;
 
 import com.gmail.nossr50.config.Config;
@@ -26,7 +26,7 @@ public class ToolLowerTask extends BukkitRunnable {
         mcMMOPlayer.setToolPreparationMode(tool, false);
 
         if (Config.getInstance().getAbilityMessagesEnabled()) {
-            InteractionManager.sendPlayerInformation(mcMMOPlayer.getPlayer(), NotificationType.TOOL, tool.getLowerTool());
+            NotificationManager.sendPlayerInformation(mcMMOPlayer.getPlayer(), NotificationType.TOOL, tool.getLowerTool());
         }
     }
 }

+ 2 - 2
src/main/java/com/gmail/nossr50/skills/axes/AxesManager.java

@@ -3,6 +3,7 @@ package com.gmail.nossr50.skills.axes;
 import java.util.Map;
 
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.util.skills.*;
 import org.bukkit.entity.LivingEntity;
 import org.bukkit.entity.Player;
@@ -10,7 +11,6 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageModifier;
 import org.bukkit.inventory.ItemStack;
 
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.datatypes.skills.ToolType;
 import com.gmail.nossr50.locale.LocaleLoader;
@@ -41,7 +41,7 @@ public class AxesManager extends SkillManager {
     }
 
     public boolean canUseSkullSplitter(LivingEntity target) {
-        return target.isValid() && mcMMOPlayer.getAbilityMode(SuperAbility.SKULL_SPLITTER) && Permissions.skullSplitter(getPlayer());
+        return target.isValid() && mcMMOPlayer.getAbilityMode(SuperAbilityType.SKULL_SPLITTER) && Permissions.skullSplitter(getPlayer());
     }
 
     public boolean canActivateAbility() {

+ 2 - 2
src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java

@@ -55,7 +55,7 @@ public class HerbalismManager extends SkillManager {
     }
 
     public boolean canGreenTerraBlock(BlockState blockState) {
-        return mcMMOPlayer.getAbilityMode(SuperAbility.GREEN_TERRA) && BlockUtils.canMakeMossy(blockState);
+        return mcMMOPlayer.getAbilityMode(SuperAbilityType.GREEN_TERRA) && BlockUtils.canMakeMossy(blockState);
     }
 
     public boolean canActivateAbility() {
@@ -63,7 +63,7 @@ public class HerbalismManager extends SkillManager {
     }
 
     public boolean canGreenTerraPlant() {
-        return mcMMOPlayer.getAbilityMode(SuperAbility.GREEN_TERRA);
+        return mcMMOPlayer.getAbilityMode(SuperAbilityType.GREEN_TERRA);
     }
 
     /**

+ 9 - 10
src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java

@@ -3,12 +3,10 @@ package com.gmail.nossr50.skills.mining;
 import com.gmail.nossr50.config.Config;
 import com.gmail.nossr50.datatypes.interactions.NotificationType;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
 import com.gmail.nossr50.datatypes.skills.XPGainReason;
-import com.gmail.nossr50.listeners.InteractionManager;
-import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.runnables.skills.AbilityCooldownTask;
 import com.gmail.nossr50.skills.SkillManager;
@@ -17,6 +15,7 @@ import com.gmail.nossr50.util.BlockUtils;
 import com.gmail.nossr50.util.EventUtils;
 import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.Permissions;
+import com.gmail.nossr50.util.player.NotificationManager;
 import com.gmail.nossr50.util.skills.SkillActivationType;
 import com.gmail.nossr50.util.skills.SkillUtils;
 import org.bukkit.inventory.ItemStack;
@@ -106,17 +105,17 @@ public class MiningManager extends SkillManager {
 
         TNTPrimed tnt = player.getWorld().spawn(targetBlock.getLocation(), TNTPrimed.class);
 
-        //SkillUtils.sendSkillMessage(player, SuperAbility.BLAST_MINING.getAbilityPlayer(player));
-        InteractionManager.sendPlayerInformation(player, NotificationType.SUPER_ABILITY, "Mining.Blast.Boom");
+        //SkillUtils.sendSkillMessage(player, SuperAbilityType.BLAST_MINING.getAbilityPlayer(player));
+        NotificationManager.sendPlayerInformation(player, NotificationType.SUPER_ABILITY, "Mining.Blast.Boom");
         //player.sendMessage(LocaleLoader.getString("Mining.Blast.Boom"));
 
         tnt.setMetadata(mcMMO.tntMetadataKey, mcMMOPlayer.getPlayerMetadata());
         tnt.setFuseTicks(0);
         targetBlock.setType(Material.AIR);
 
-        mcMMOPlayer.setAbilityDATS(SuperAbility.BLAST_MINING, System.currentTimeMillis());
-        mcMMOPlayer.setAbilityInformed(SuperAbility.BLAST_MINING, false);
-        new AbilityCooldownTask(mcMMOPlayer, SuperAbility.BLAST_MINING).runTaskLaterAsynchronously(mcMMO.p, SuperAbility.BLAST_MINING.getCooldown() * Misc.TICK_CONVERSION_FACTOR);
+        mcMMOPlayer.setAbilityDATS(SuperAbilityType.BLAST_MINING, System.currentTimeMillis());
+        mcMMOPlayer.setAbilityInformed(SuperAbilityType.BLAST_MINING, false);
+        new AbilityCooldownTask(mcMMOPlayer, SuperAbilityType.BLAST_MINING).runTaskLaterAsynchronously(mcMMO.p, SuperAbilityType.BLAST_MINING.getCooldown() * Misc.TICK_CONVERSION_FACTOR);
     }
 
     /**
@@ -291,11 +290,11 @@ public class MiningManager extends SkillManager {
     }
 
     private boolean blastMiningCooldownOver() {
-        int timeRemaining = mcMMOPlayer.calculateTimeRemaining(SuperAbility.BLAST_MINING);
+        int timeRemaining = mcMMOPlayer.calculateTimeRemaining(SuperAbilityType.BLAST_MINING);
 
         if (timeRemaining > 0) {
             //getPlayer().sendMessage(LocaleLoader.getString("Skills.TooTired", timeRemaining));
-            InteractionManager.sendPlayerInformation(getPlayer(), NotificationType.ABILITY_COOLDOWN, "Skills.TooTired", String.valueOf("timeRemaining"));
+            NotificationManager.sendPlayerInformation(getPlayer(), NotificationType.ABILITY_COOLDOWN, "Skills.TooTired", String.valueOf("timeRemaining"));
             return false;
         }
 

+ 2 - 2
src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java

@@ -4,7 +4,7 @@ import java.util.Map;
 
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.util.skills.SkillActivationType;
 import org.bukkit.entity.Entity;
 import org.bukkit.entity.LivingEntity;
@@ -40,7 +40,7 @@ public class SwordsManager extends SkillManager {
     }
 
     public boolean canUseSerratedStrike() {
-        return mcMMOPlayer.getAbilityMode(SuperAbility.SERRATED_STRIKES) && Permissions.serratedStrikes(getPlayer());
+        return mcMMOPlayer.getAbilityMode(SuperAbilityType.SERRATED_STRIKES) && Permissions.serratedStrikes(getPlayer());
     }
 
     /**

+ 2 - 2
src/main/java/com/gmail/nossr50/skills/taming/TamingManager.java

@@ -10,7 +10,6 @@ import com.gmail.nossr50.datatypes.skills.SubSkillType;
 import com.gmail.nossr50.datatypes.skills.XPGainReason;
 import com.gmail.nossr50.events.fake.FakeEntityTameEvent;
 import com.gmail.nossr50.events.skills.secondaryabilities.SubSkillWeightedActivationCheckEvent;
-import com.gmail.nossr50.listeners.InteractionManager;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.runnables.skills.BleedTimerTask;
@@ -18,6 +17,7 @@ import com.gmail.nossr50.skills.SkillManager;
 import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.Permissions;
 import com.gmail.nossr50.util.StringUtils;
+import com.gmail.nossr50.util.player.NotificationManager;
 import com.gmail.nossr50.util.player.UserManager;
 import com.gmail.nossr50.util.skills.ParticleEffectUtils;
 import com.gmail.nossr50.util.skills.SkillActivationType;
@@ -330,7 +330,7 @@ public class TamingManager extends SkillManager {
 
         for (Entity entity : player.getNearbyEntities(range, range, range)) {
             if (entity.getType() == type) {
-                InteractionManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE_FAILURE, Taming.getCallOfTheWildFailureMessage(type));
+                NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE_FAILURE, Taming.getCallOfTheWildFailureMessage(type));
                 return false;
             }
         }

+ 2 - 2
src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java

@@ -3,7 +3,7 @@ package com.gmail.nossr50.skills.unarmed;
 import com.gmail.nossr50.config.AdvancedConfig;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.datatypes.skills.ToolType;
 import com.gmail.nossr50.locale.LocaleLoader;
@@ -38,7 +38,7 @@ public class UnarmedManager extends SkillManager {
     }
 
     public boolean canUseBerserk() {
-        return mcMMOPlayer.getAbilityMode(SuperAbility.BERSERK) && Permissions.berserk(getPlayer());
+        return mcMMOPlayer.getAbilityMode(SuperAbilityType.BERSERK) && Permissions.berserk(getPlayer());
     }
 
     public boolean canDisarm(LivingEntity target) {

+ 2 - 2
src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java

@@ -3,7 +3,7 @@ package com.gmail.nossr50.skills.woodcutting;
 import com.gmail.nossr50.datatypes.mods.CustomBlock;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.datatypes.skills.XPGainReason;
 import com.gmail.nossr50.locale.LocaleLoader;
@@ -34,7 +34,7 @@ public class WoodcuttingManager extends SkillManager {
     }
 
     public boolean canUseTreeFeller(ItemStack heldItem) {
-        return mcMMOPlayer.getAbilityMode(SuperAbility.TREE_FELLER) && Permissions.treeFeller(getPlayer()) && ItemUtils.isAxe(heldItem);
+        return mcMMOPlayer.getAbilityMode(SuperAbilityType.TREE_FELLER) && Permissions.treeFeller(getPlayer()) && ItemUtils.isAxe(heldItem);
     }
 
     protected boolean canGetDoubleDrops() {

+ 2 - 2
src/main/java/com/gmail/nossr50/util/EventUtils.java

@@ -4,7 +4,7 @@ import com.gmail.nossr50.datatypes.party.Party;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.datatypes.player.PlayerProfile;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.datatypes.skills.XPGainReason;
 import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
@@ -354,7 +354,7 @@ public class EventUtils {
         return !isCancelled;
     }
 
-    public static McMMOPlayerAbilityDeactivateEvent callAbilityDeactivateEvent(Player player, SuperAbility ability) {
+    public static McMMOPlayerAbilityDeactivateEvent callAbilityDeactivateEvent(Player player, SuperAbilityType ability) {
         McMMOPlayerAbilityDeactivateEvent event = new McMMOPlayerAbilityDeactivateEvent(player, PrimarySkill.byAbility(ability));
         mcMMO.p.getServer().getPluginManager().callEvent(event);
 

+ 2 - 3
src/main/java/com/gmail/nossr50/util/StringUtils.java

@@ -1,9 +1,8 @@
 package com.gmail.nossr50.util;
 
 import com.gmail.nossr50.datatypes.party.PartyFeature;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import org.bukkit.Material;
-import org.bukkit.TreeSpecies;
 import org.bukkit.block.data.Ageable;
 import org.bukkit.block.data.BlockData;
 import org.bukkit.entity.EntityType;
@@ -29,7 +28,7 @@ public class StringUtils {
         return createPrettyString(entity.toString());
     }
 
-    public static String getPrettyAbilityString(SuperAbility ability) {
+    public static String getPrettyAbilityString(SuperAbilityType ability) {
         return createPrettyString(ability.toString());
     }
     

+ 88 - 0
src/main/java/com/gmail/nossr50/util/player/NotificationManager.java

@@ -0,0 +1,88 @@
+package com.gmail.nossr50.util.player;
+
+import com.gmail.nossr50.config.AdvancedConfig;
+import com.gmail.nossr50.datatypes.interactions.NotificationType;
+import com.gmail.nossr50.datatypes.player.McMMOPlayer;
+import com.gmail.nossr50.datatypes.skills.PrimarySkill;
+import com.gmail.nossr50.events.skills.McMMOPlayerNotificationEvent;
+import com.gmail.nossr50.util.Misc;
+import com.gmail.nossr50.util.TextComponentFactory;
+import net.md_5.bungee.api.ChatMessageType;
+import net.md_5.bungee.api.chat.TextComponent;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+public class NotificationManager {
+    /**
+     * Sends players notifications from mcMMO
+     * This does this by sending out an event so other plugins can cancel it
+     * @param player target player
+     * @param notificationType notifications defined type
+     * @param key the locale key for the notifications defined message
+     */
+    public static void sendPlayerInformation(Player player, NotificationType notificationType, String key)
+    {
+
+        ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
+
+        TextComponent message = TextComponentFactory.getNotificationTextComponentFromLocale(key, notificationType);
+        McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(player, notificationType, destination, message);
+
+        sendNotification(player, customEvent);
+    }
+
+    public static void sendOtherPlayersSkillInfo(Player source, NotificationType notificationType, String key, String... values)
+    {
+        Location location = source.getLocation();
+        for (Player otherPlayer : source.getWorld().getPlayers()) {
+            if (otherPlayer != source && Misc.isNear(location, otherPlayer.getLocation(), Misc.SKILL_MESSAGE_MAX_SENDING_DISTANCE)) {
+                sendPlayerInformation(otherPlayer, notificationType, key, values);
+            }
+        }
+    }
+
+    public static void sendPlayerInformation(Player player, NotificationType notificationType, String key, String... values)
+    {
+        ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(notificationType) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
+
+
+        TextComponent message = TextComponentFactory.getNotificationMultipleValues(key, notificationType, values);
+        McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(player, notificationType, destination, message);
+
+        sendNotification(player, customEvent);
+    }
+
+    private static void sendNotification(Player player, McMMOPlayerNotificationEvent customEvent) {
+        if (customEvent.isCancelled())
+            return;
+
+        player.spigot().sendMessage(customEvent.getChatMessageType(), customEvent.getNotificationTextComponent());
+    }
+
+    private static McMMOPlayerNotificationEvent checkNotificationEvent(Player player, NotificationType notificationType, ChatMessageType destination, TextComponent message) {
+        //Init event
+        McMMOPlayerNotificationEvent customEvent = new McMMOPlayerNotificationEvent(player,
+                notificationType, message, destination);
+
+        //Call event
+        Bukkit.getServer().getPluginManager().callEvent(customEvent);
+        return customEvent;
+    }
+
+    /**
+     * Handles sending level up notifications to a mcMMOPlayer
+     * @param mcMMOPlayer target mcMMOPlayer
+     * @param skillName skill that leveled up
+     * @param newLevel new level of that skill
+     */
+    public static void sendPlayerLevelUpNotification(McMMOPlayer mcMMOPlayer, PrimarySkill skillName, int newLevel)
+    {
+        ChatMessageType destination = AdvancedConfig.getInstance().doesNotificationUseActionBar(NotificationType.LEVEL_UP_MESSAGE) ? ChatMessageType.ACTION_BAR : ChatMessageType.SYSTEM;
+
+        TextComponent levelUpTextComponent = TextComponentFactory.getNotificationLevelUpTextComponent(mcMMOPlayer, skillName, newLevel);
+        McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(mcMMOPlayer.getPlayer(), NotificationType.LEVEL_UP_MESSAGE, destination, levelUpTextComponent);
+
+        sendNotification(mcMMOPlayer.getPlayer(), customEvent);
+    }
+}

+ 9 - 9
src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java

@@ -7,7 +7,7 @@ import java.util.List;
 import java.util.Map;
 
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import org.bukkit.ChatColor;
 import org.bukkit.entity.Player;
 import org.bukkit.scoreboard.DisplaySlot;
@@ -51,8 +51,8 @@ public class ScoreboardManager {
     static final String LABEL_OVERALL = LocaleLoader.getString("Scoreboard.Misc.Overall");
 
     static final Map<PrimarySkill, String>   skillLabels;
-    static final Map<SuperAbility, String> abilityLabelsColored;
-    static final Map<SuperAbility, String> abilityLabelsSkill;
+    static final Map<SuperAbilityType, String> abilityLabelsColored;
+    static final Map<SuperAbilityType, String> abilityLabelsSkill;
 
     /*
      * Initializes the static properties of this class
@@ -62,8 +62,8 @@ public class ScoreboardManager {
          * We need immutable objects for our Scoreboard's labels
          */
         ImmutableMap.Builder<PrimarySkill, String> skillLabelBuilder = ImmutableMap.builder();
-        ImmutableMap.Builder<SuperAbility, String> abilityLabelBuilder = ImmutableMap.builder();
-        ImmutableMap.Builder<SuperAbility, String> abilityLabelSkillBuilder = ImmutableMap.builder();
+        ImmutableMap.Builder<SuperAbilityType, String> abilityLabelBuilder = ImmutableMap.builder();
+        ImmutableMap.Builder<SuperAbilityType, String> abilityLabelSkillBuilder = ImmutableMap.builder();
 
         /*
          * Builds the labels for our ScoreBoards
@@ -98,7 +98,7 @@ public class ScoreboardManager {
                     abilityLabelBuilder.put(type.getAbility(), getShortenedName(colors.get(i) + type.getAbility().getName()));
 
                     if (type == PrimarySkill.MINING) {
-                        abilityLabelBuilder.put(SuperAbility.BLAST_MINING, getShortenedName(colors.get(i) + SuperAbility.BLAST_MINING.getName()));
+                        abilityLabelBuilder.put(SuperAbilityType.BLAST_MINING, getShortenedName(colors.get(i) + SuperAbilityType.BLAST_MINING.getName()));
                     }
                 }
 
@@ -120,14 +120,14 @@ public class ScoreboardManager {
                     abilityLabelBuilder.put(type.getAbility(), formatAbility(type.getAbility().getName()));
 
                     if (type == PrimarySkill.MINING) {
-                        abilityLabelBuilder.put(SuperAbility.BLAST_MINING, formatAbility(SuperAbility.BLAST_MINING.getName()));
+                        abilityLabelBuilder.put(SuperAbilityType.BLAST_MINING, formatAbility(SuperAbilityType.BLAST_MINING.getName()));
                     }
                 }
             }
         }
 
-        for (SuperAbility type : SuperAbility.values()) {
-            abilityLabelSkillBuilder.put(type, formatAbility((type == SuperAbility.BLAST_MINING ? ChatColor.BLUE : ChatColor.AQUA), type.getName()));
+        for (SuperAbilityType type : SuperAbilityType.values()) {
+            abilityLabelSkillBuilder.put(type, formatAbility((type == SuperAbilityType.BLAST_MINING ? ChatColor.BLUE : ChatColor.AQUA), type.getName()));
         }
 
         skillLabels = skillLabelBuilder.build();

+ 7 - 7
src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java

@@ -3,6 +3,7 @@ package com.gmail.nossr50.util.scoreboards;
 import java.util.List;
 import java.util.Map;
 
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.events.scoreboard.*;
 import org.bukkit.ChatColor;
 import org.bukkit.entity.Player;
@@ -18,7 +19,6 @@ import com.gmail.nossr50.config.Config;
 import com.gmail.nossr50.datatypes.database.PlayerStat;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.datatypes.player.PlayerProfile;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.skills.child.FamilyTree;
@@ -463,10 +463,10 @@ public class ScoreboardWrapper {
 
                     if (targetSkill == PrimarySkill.MINING) {
                         // Special-Case: Mining has two abilities, both with cooldowns
-                        Score cooldownSB = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(SuperAbility.SUPER_BREAKER));
-                        Score cooldownBM = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(SuperAbility.BLAST_MINING));
-                        int secondsSB = Math.max(mcMMOPlayer.calculateTimeRemaining(SuperAbility.SUPER_BREAKER), 0);
-                        int secondsBM = Math.max(mcMMOPlayer.calculateTimeRemaining(SuperAbility.BLAST_MINING), 0);
+                        Score cooldownSB = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(SuperAbilityType.SUPER_BREAKER));
+                        Score cooldownBM = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(SuperAbilityType.BLAST_MINING));
+                        int secondsSB = Math.max(mcMMOPlayer.calculateTimeRemaining(SuperAbilityType.SUPER_BREAKER), 0);
+                        int secondsBM = Math.max(mcMMOPlayer.calculateTimeRemaining(SuperAbilityType.BLAST_MINING), 0);
 
                         cooldownSB.setScore(secondsSB);
                         cooldownBM.setScore(secondsBM);
@@ -474,7 +474,7 @@ public class ScoreboardWrapper {
                         stopUpdating = (secondsSB == 0 && secondsBM == 0);
                     }
                     else {
-                        SuperAbility ability = targetSkill.getAbility();
+                        SuperAbilityType ability = targetSkill.getAbility();
                         Score cooldown = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(ability));
                         int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
 
@@ -495,7 +495,7 @@ public class ScoreboardWrapper {
             case COOLDOWNS_BOARD:
                 boolean anyCooldownsActive = false;
 
-                for (SuperAbility ability : SuperAbility.values()) {
+                for (SuperAbilityType ability : SuperAbilityType.values()) {
                     int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
 
                     if (seconds != 0) {

+ 4 - 5
src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java

@@ -6,20 +6,20 @@ import com.gmail.nossr50.config.HiddenConfig;
 import com.gmail.nossr50.datatypes.interactions.NotificationType;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
-import com.gmail.nossr50.datatypes.skills.SuperAbility;
+import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkill;
 import com.gmail.nossr50.datatypes.skills.XPGainReason;
 import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
 import com.gmail.nossr50.datatypes.skills.subskills.interfaces.RandomChance;
 import com.gmail.nossr50.events.skills.secondaryabilities.SubSkillEvent;
 import com.gmail.nossr50.events.skills.secondaryabilities.SubSkillWeightedActivationCheckEvent;
-import com.gmail.nossr50.listeners.InteractionManager;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.util.EventUtils;
 import com.gmail.nossr50.util.ItemUtils;
 import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.StringUtils;
+import com.gmail.nossr50.util.player.NotificationManager;
 import com.gmail.nossr50.util.player.UserManager;
 import org.bukkit.Location;
 import org.bukkit.Material;
@@ -33,7 +33,6 @@ import org.bukkit.inventory.meta.ItemMeta;
 import org.bukkit.potion.PotionEffect;
 import org.bukkit.potion.PotionEffectType;
 
-import java.awt.*;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
@@ -138,7 +137,7 @@ public class SkillUtils {
 
         for (Player otherPlayer : player.getWorld().getPlayers()) {
             if (otherPlayer != player && Misc.isNear(location, otherPlayer.getLocation(), Misc.SKILL_MESSAGE_MAX_SENDING_DISTANCE)) {
-                InteractionManager.sendOtherPlayersSkillInfo(player, notificationType, key);
+                NotificationManager.sendOtherPlayersSkillInfo(player, notificationType, key);
             }
         }
     }
@@ -180,7 +179,7 @@ public class SkillUtils {
             }
 
             McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
-            PrimarySkill skill = mcMMOPlayer.getAbilityMode(SuperAbility.SUPER_BREAKER) ? PrimarySkill.MINING : PrimarySkill.EXCAVATION;
+            PrimarySkill skill = mcMMOPlayer.getAbilityMode(SuperAbilityType.SUPER_BREAKER) ? PrimarySkill.MINING : PrimarySkill.EXCAVATION;
             int ticks = PerksUtils.handleActivationPerks(player, 2 + (mcMMOPlayer.getSkillLevel(skill) / AdvancedConfig.getInstance().getAbilityLength()), skill.getAbility().getMaxLength()) * Misc.TICK_CONVERSION_FACTOR;
 
             PotionEffect abilityBuff = new PotionEffect(PotionEffectType.FAST_DIGGING, duration + ticks, amplifier + 10);

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

@@ -883,7 +883,7 @@ Skills.ChildStats=[[YELLOW]]{0}[[GREEN]]{1}
 Skills.TooTired=[[RED]]You are too tired to use that ability again. [[YELLOW]]({0}s)
 Skills.Cancelled=[[RED]]{0} cancelled!
 Skills.ConfirmOrCancel=[[GREEN]]Right-click again to confirm [[GOLD]]{0}[[GREEN]]. Left-click to cancel.
-Skills.AbilityGateRequirementFail=[[YELLOW]]You are not yet skilled enough to perform this task.
+Skills.AbilityGateRequirementFail=[[RED]]You require [[YELLOW]]{0}[[RED]] more levels of [[GOLD]]{1}[[RED]] to use this super ability.
 #STATISTICS
 Stats.Header.Combat=[[GOLD]]-=COMBAT SKILLS=-
 Stats.Header.Gathering=[[GOLD]]-=GATHERING SKILLS=-