瀏覽代碼

Static Abuse Removal - Misc (now MiscTools)

nossr50 5 年之前
父節點
當前提交
3552457790
共有 40 個文件被更改,包括 133 次插入165 次删除
  1. 2 3
      src/main/java/com/gmail/nossr50/commands/party/teleport/PtpCommand.java
  2. 2 1
      src/main/java/com/gmail/nossr50/commands/player/RankCommand.java
  3. 5 6
      src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java
  4. 1 2
      src/main/java/com/gmail/nossr50/database/SQLDatabaseManager.java
  5. 1 2
      src/main/java/com/gmail/nossr50/datatypes/party/Party.java
  6. 2 3
      src/main/java/com/gmail/nossr50/datatypes/party/PartyTeleportRecord.java
  7. 8 9
      src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java
  8. 1 2
      src/main/java/com/gmail/nossr50/datatypes/skills/behaviours/ArcheryBehaviour.java
  9. 2 3
      src/main/java/com/gmail/nossr50/datatypes/skills/behaviours/MiningBehaviour.java
  10. 1 2
      src/main/java/com/gmail/nossr50/datatypes/skills/behaviours/WoodcuttingBehaviour.java
  11. 6 7
      src/main/java/com/gmail/nossr50/listeners/EntityListener.java
  12. 1 2
      src/main/java/com/gmail/nossr50/listeners/PlayerListener.java
  13. 14 6
      src/main/java/com/gmail/nossr50/mcMMO.java
  14. 2 3
      src/main/java/com/gmail/nossr50/party/PartyManager.java
  15. 2 3
      src/main/java/com/gmail/nossr50/party/ShareHandler.java
  16. 1 2
      src/main/java/com/gmail/nossr50/runnables/items/ChimaeraWingWarmup.java
  17. 1 2
      src/main/java/com/gmail/nossr50/runnables/items/TeleportationWarmup.java
  18. 2 3
      src/main/java/com/gmail/nossr50/runnables/player/PlayerProfileLoadingTask.java
  19. 1 2
      src/main/java/com/gmail/nossr50/runnables/skills/AbilityDisableTask.java
  20. 1 2
      src/main/java/com/gmail/nossr50/skills/acrobatics/AcrobaticsManager.java
  21. 1 2
      src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java
  22. 1 2
      src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java
  23. 5 6
      src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java
  24. 1 2
      src/main/java/com/gmail/nossr50/skills/repair/RepairManager.java
  25. 3 4
      src/main/java/com/gmail/nossr50/skills/salvage/SalvageManager.java
  26. 8 9
      src/main/java/com/gmail/nossr50/skills/taming/TamingManager.java
  27. 1 2
      src/main/java/com/gmail/nossr50/skills/taming/TrackedTamingEntity.java
  28. 2 3
      src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java
  29. 4 5
      src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java
  30. 3 3
      src/main/java/com/gmail/nossr50/util/ChimaeraWing.java
  31. 1 1
      src/main/java/com/gmail/nossr50/util/EventManager.java
  32. 29 36
      src/main/java/com/gmail/nossr50/util/MiscTools.java
  33. 1 1
      src/main/java/com/gmail/nossr50/util/MobHealthBarManager.java
  34. 1 2
      src/main/java/com/gmail/nossr50/util/commands/CommandTools.java
  35. 2 3
      src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java
  36. 1 2
      src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardStrings.java
  37. 1 2
      src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java
  38. 7 8
      src/main/java/com/gmail/nossr50/util/skills/CombatTools.java
  39. 3 4
      src/main/java/com/gmail/nossr50/util/skills/SkillTools.java
  40. 2 3
      src/main/java/com/gmail/nossr50/util/sounds/SoundManager.java

+ 2 - 3
src/main/java/com/gmail/nossr50/commands/party/teleport/PtpCommand.java

@@ -6,7 +6,6 @@ import com.gmail.nossr50.datatypes.party.PartyFeature;
 import com.gmail.nossr50.datatypes.party.PartyTeleportRecord;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import com.google.common.collect.ImmutableList;
 import org.bukkit.command.Command;
 import org.bukkit.command.CommandExecutor;
@@ -88,7 +87,7 @@ public class PtpCommand implements TabExecutor {
             int hurtCooldown = pluginRef.getConfigManager().getConfigParty().getPTP().getPtpRecentlyHurtCooldown();
 
             if (hurtCooldown > 0) {
-                int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, hurtCooldown, player);
+                int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(recentlyHurt * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR, hurtCooldown, player);
 
                 if (timeRemaining > 0) {
                     player.sendMessage(pluginRef.getLocaleManager().getString("Item.Injured.Wait", timeRemaining));
@@ -109,7 +108,7 @@ public class PtpCommand implements TabExecutor {
             long ptpLastUse = mcMMOPlayer.getPartyTeleportRecord().getLastUse();
 
             if (ptpCooldown > 0) {
-                int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(ptpLastUse * Misc.TIME_CONVERSION_FACTOR, ptpCooldown, player);
+                int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(ptpLastUse * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR, ptpCooldown, player);
 
                 if (timeRemaining > 0) {
                     player.sendMessage(pluginRef.getLocaleManager().getString("Item.Generic.Wait", timeRemaining));

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

@@ -4,6 +4,7 @@ import com.gmail.nossr50.core.MetadataConstants;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.runnables.commands.RankCommandAsyncTask;
+import com.gmail.nossr50.util.scoreboards.SidebarType;
 import com.google.common.collect.ImmutableList;
 import org.bukkit.command.Command;
 import org.bukkit.command.CommandSender;
@@ -116,7 +117,7 @@ public class RankCommand implements TabExecutor {
                 && (pluginRef.getScoreboardSettings().isScoreboardEnabled(SidebarType.RANK_BOARD));
         boolean useChat = !useBoard || pluginRef.getScoreboardSettings().isScoreboardPrinting(SidebarType.RANK_BOARD);
 
-        new RankCommandAsyncTask(playerName, sender, useBoard, useChat).runTaskAsynchronously(pluginRef);
+        new RankCommandAsyncTask(pluginRef, playerName, sender, useBoard, useChat).runTaskAsynchronously(pluginRef);
     }
 
     private long getCDSeconds(McMMOPlayer mcMMOPlayer, long cooldownMillis) {

+ 5 - 6
src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java

@@ -8,7 +8,6 @@ import com.gmail.nossr50.datatypes.player.UniqueDataType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.StringUtils;
 import org.bukkit.OfflinePlayer;
 
@@ -175,7 +174,7 @@ public final class FlatFileDatabaseManager implements DatabaseManager {
                     long lastPlayed = 0;
                     boolean rewrite = false;
                     try {
-                        lastPlayed = Long.parseLong(character[37]) * Misc.TIME_CONVERSION_FACTOR;
+                        lastPlayed = Long.parseLong(character[37]) * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR;
                     } catch (NumberFormatException e) {
                         e.printStackTrace();
                     }
@@ -272,7 +271,7 @@ public final class FlatFileDatabaseManager implements DatabaseManager {
             }
         }
 
-        Misc.profileCleanup(playerName);
+        pluginRef.getMiscTools().profileCleanup(playerName);
 
         return worked;
     }
@@ -382,7 +381,7 @@ public final class FlatFileDatabaseManager implements DatabaseManager {
         writer.append(profile.getSkillLevel(PrimarySkillType.FISHING)).append(":");
         writer.append(profile.getSkillXpLevel(PrimarySkillType.FISHING)).append(":");
         writer.append((int) profile.getAbilityDATS(SuperAbilityType.BLAST_MINING)).append(":");
-        writer.append(System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR).append(":");
+        writer.append(System.currentTimeMillis() / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR).append(":");
         MobHealthbarType mobHealthbarType = profile.getMobHealthbarType();
         writer.append(mobHealthbarType == null ? pluginRef.getConfigManager().getConfigMobs().getCombat().getHealthBars().getDisplayBarType().toString() : mobHealthbarType.toString()).append(":");
         writer.append(profile.getSkillLevel(PrimarySkillType.ALCHEMY)).append(":");
@@ -462,7 +461,7 @@ public final class FlatFileDatabaseManager implements DatabaseManager {
                 out.append(startingLevel); // Fishing
                 out.append("0:"); // FishingXp
                 out.append("0:"); // Blast Mining
-                out.append(String.valueOf(System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR)).append(":"); // LastLogin
+                out.append(String.valueOf(System.currentTimeMillis() / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR)).append(":"); // LastLogin
                 out.append(pluginRef.getConfigManager().getConfigMobs().getCombat().getHealthBars().getDisplayBarType().toString()).append(":"); // Mob Healthbar HUD
                 out.append(startingLevel); // Alchemy
                 out.append("0:"); // AlchemyXp
@@ -1019,7 +1018,7 @@ public final class FlatFileDatabaseManager implements DatabaseManager {
                             if (character[i].isEmpty() && !(i == 2 || i == 3 || i == 23 || i == 33 || i == 41)) {
                                 corrupted = true;
                                 if (i == 37) {
-                                    character[i] = String.valueOf(System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
+                                    character[i] = String.valueOf(System.currentTimeMillis() / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR);
                                 } else if (i == 38) {
                                     character[i] = pluginRef.getConfigManager().getConfigMobs().getCombat().getHealthBars().getDisplayBarType().toString();
                                 } else {

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

@@ -10,7 +10,6 @@ import com.gmail.nossr50.datatypes.player.UniqueDataType;
 import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import org.apache.tomcat.jdbc.pool.DataSource;
 import org.apache.tomcat.jdbc.pool.PoolProperties;
 
@@ -222,7 +221,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
             if(uuid != null)
                 cleanupUser(uuid);
 
-            Misc.profileCleanup(playerName);
+            pluginRef.getMiscTools().profileCleanup(playerName);
         }
 
         return success;

+ 1 - 2
src/main/java/com/gmail/nossr50/datatypes/party/Party.java

@@ -3,7 +3,6 @@ package com.gmail.nossr50.datatypes.party;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.party.ShareHandler;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.StringUtils;
 import com.gmail.nossr50.util.sounds.SoundType;
 import org.bukkit.Bukkit;
@@ -513,7 +512,7 @@ public class Party {
             double range = pluginRef.getConfigManager().getConfigParty().getPartyXP().getPartyExperienceSharing().getPartyShareRange();
 
             for (Player member : party.getOnlineMembers()) {
-                if (!player.equals(member) && member.isValid() && Misc.isNear(player.getLocation(), member.getLocation(), range)) {
+                if (!player.equals(member) && member.isValid() && pluginRef.getMiscTools().isNear(player.getLocation(), member.getLocation(), range)) {
                     nearMembers.add(member);
                 }
             }

+ 2 - 3
src/main/java/com/gmail/nossr50/datatypes/party/PartyTeleportRecord.java

@@ -1,7 +1,6 @@
 package com.gmail.nossr50.datatypes.party;
 
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import org.bukkit.entity.Player;
 
 public class PartyTeleportRecord {
@@ -54,7 +53,7 @@ public class PartyTeleportRecord {
     }
 
     public void actualizeLastUse() {
-        lastUse = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
+        lastUse = (int) (System.currentTimeMillis() / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR);
     }
 
     public int getTimeout() {
@@ -62,6 +61,6 @@ public class PartyTeleportRecord {
     }
 
     public void actualizeTimeout() {
-        timeout = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
+        timeout = (int) (System.currentTimeMillis() / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR);
     }
 }

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

@@ -30,7 +30,6 @@ import com.gmail.nossr50.skills.swords.SwordsManager;
 import com.gmail.nossr50.skills.taming.TamingManager;
 import com.gmail.nossr50.skills.unarmed.UnarmedManager;
 import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.experience.ExperienceBarManager;
 import com.gmail.nossr50.util.skills.PerksUtils;
 import com.gmail.nossr50.util.sounds.SoundType;
@@ -421,7 +420,7 @@ public class McMMOPlayer {
     }
 
     public void actualizeRecentlyHurt() {
-        recentlyHurt = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
+        recentlyHurt = (int) (System.currentTimeMillis() / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR);
     }
 
     /*
@@ -433,7 +432,7 @@ public class McMMOPlayer {
     }
 
     public void actualizeChimeraWingLastUse() {
-        profile.setChimaeraWingDATS((int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR));
+        profile.setChimaeraWingDATS((int) (System.currentTimeMillis() / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR));
     }
 
     public Location getTeleportCommenceLocation() {
@@ -457,7 +456,7 @@ public class McMMOPlayer {
     }
 
     public void actualizeRespawnATS() {
-        respawnATS = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
+        respawnATS = (int) (System.currentTimeMillis() / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR);
     }
 
     public long getTeleportATS() {
@@ -946,7 +945,7 @@ public class McMMOPlayer {
         int abilityLength = pluginRef.getSkillTools().calculateAbilityLengthPerks(this, primarySkillType, superAbility);
 
         // Enable the ability
-        profile.setAbilityDATS(superAbility, System.currentTimeMillis() + (abilityLength * Misc.TIME_CONVERSION_FACTOR));
+        profile.setAbilityDATS(superAbility, System.currentTimeMillis() + (abilityLength * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR));
         setSuperAbilityMode(superAbility, true);
 
         if (superAbility == SuperAbilityType.SUPER_BREAKER || superAbility == SuperAbilityType.GIGA_DRILL_BREAKER) {
@@ -954,7 +953,7 @@ public class McMMOPlayer {
         }
 
         setToolPreparationMode(tool, false);
-        new AbilityDisableTask(pluginRef,   this, superAbility).runTaskLater(pluginRef, abilityLength * Misc.TICK_CONVERSION_FACTOR);
+        new AbilityDisableTask(pluginRef,   this, superAbility).runTaskLater(pluginRef, abilityLength * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR);
     }
 
     public void processAbilityActivation(PrimarySkillType primarySkillType) {
@@ -1001,7 +1000,7 @@ public class McMMOPlayer {
             }
 
             setToolPreparationMode(tool, true);
-            new ToolLowerTask(pluginRef,this, tool).runTaskLater(pluginRef, 4 * Misc.TICK_CONVERSION_FACTOR);
+            new ToolLowerTask(pluginRef,this, tool).runTaskLater(pluginRef, 4 * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR);
         }
     }
 
@@ -1012,9 +1011,9 @@ public class McMMOPlayer {
      * @return the number of seconds remaining before the cooldown expires
      */
     public int calculateTimeRemaining(SuperAbilityType superAbilityType) {
-        long deactivatedTimestamp = profile.getAbilityDATS(superAbilityType) * Misc.TIME_CONVERSION_FACTOR;
+        long deactivatedTimestamp = profile.getAbilityDATS(superAbilityType) * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR;
         return (int) (((deactivatedTimestamp + (PerksUtils.handleCooldownPerks(player,
-                pluginRef.getSkillTools().getSuperAbilityCooldown(superAbilityType)) * Misc.TIME_CONVERSION_FACTOR)) - System.currentTimeMillis()) / Misc.TIME_CONVERSION_FACTOR);
+                pluginRef.getSkillTools().getSuperAbilityCooldown(superAbilityType)) * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR)) - System.currentTimeMillis()) / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR);
     }
 
     /*

+ 1 - 2
src/main/java/com/gmail/nossr50/datatypes/skills/behaviours/ArcheryBehaviour.java

@@ -4,7 +4,6 @@ import com.gmail.nossr50.core.MetadataConstants;
 import com.gmail.nossr50.datatypes.meta.TrackedArrowMeta;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import org.bukkit.Material;
 import org.bukkit.entity.LivingEntity;
 import org.bukkit.entity.Player;
@@ -33,7 +32,7 @@ public class ArcheryBehaviour {
      */
     public void arrowRetrievalCheck(LivingEntity livingEntity) {
         if(livingEntity.hasMetadata(MetadataConstants.ARROW_TRACKER_METAKEY)) {
-            Misc.dropItems(livingEntity.getLocation(), new ItemStack(Material.ARROW), livingEntity.getMetadata(MetadataConstants.ARROW_TRACKER_METAKEY).get(0).asInt());
+            pluginRef.getMiscTools().dropItems(livingEntity.getLocation(), new ItemStack(Material.ARROW), livingEntity.getMetadata(MetadataConstants.ARROW_TRACKER_METAKEY).get(0).asInt());
         }
     }
 

+ 2 - 3
src/main/java/com/gmail/nossr50/datatypes/skills/behaviours/MiningBehaviour.java

@@ -4,7 +4,6 @@ import com.gmail.nossr50.core.MetadataConstants;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.skills.mining.MiningManager;
-import com.gmail.nossr50.util.Misc;
 import org.bukkit.Material;
 import org.bukkit.block.BlockState;
 import org.bukkit.entity.Player;
@@ -171,7 +170,7 @@ public class MiningBehaviour {
             case REDSTONE_ORE:
             case STONE:
             case PRISMARINE:
-                Misc.dropItem(Misc.getBlockCenter(blockState), new ItemStack(blockState.getType()));
+                pluginRef.getMiscTools().dropItem(pluginRef.getMiscTools().getBlockCenter(blockState), new ItemStack(blockState.getType()));
                 return;
 
             default:
@@ -237,7 +236,7 @@ public class MiningBehaviour {
             case YELLOW_TERRACOTTA:
             case STONE:
             case NETHER_QUARTZ_ORE:
-                Misc.dropItems(Misc.getBlockCenter(blockState), blockState.getBlock().getDrops());
+                pluginRef.getMiscTools().dropItems(pluginRef.getMiscTools().getBlockCenter(blockState), blockState.getBlock().getDrops());
                 return;
 
             default:

+ 1 - 2
src/main/java/com/gmail/nossr50/datatypes/skills/behaviours/WoodcuttingBehaviour.java

@@ -1,7 +1,6 @@
 package com.gmail.nossr50.datatypes.skills.behaviours;
 
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import org.bukkit.block.BlockState;
 
 /**
@@ -82,7 +81,7 @@ public class WoodcuttingBehaviour {
         }
         else {*/
         if (pluginRef.getDynamicSettingsManager().getBonusDropManager().isBonusDropWhitelisted(blockState.getType())) {
-            Misc.dropItems(Misc.getBlockCenter(blockState), blockState.getBlock().getDrops());
+            pluginRef.getMiscTools().dropItems(pluginRef.getMiscTools().getBlockCenter(blockState), blockState.getBlock().getDrops());
         }
         //}
     }

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

@@ -11,7 +11,6 @@ import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.skills.mining.MiningManager;
 import com.gmail.nossr50.skills.taming.TamingManager;
 import com.gmail.nossr50.skills.unarmed.UnarmedManager;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.skills.SkillActivationType;
 import org.bukkit.Material;
 import org.bukkit.OfflinePlayer;
@@ -311,7 +310,7 @@ public class EntityListener implements Listener {
         }
 
 
-        if (Misc.isNPCEntityExcludingVillagers(defender) || !defender.isValid() || !(defender instanceof LivingEntity)) {
+        if (pluginRef.getMiscTools().isNPCEntityExcludingVillagers(defender) || !defender.isValid() || !(defender instanceof LivingEntity)) {
             return;
         }
 
@@ -321,7 +320,7 @@ public class EntityListener implements Listener {
             return;
         }
 
-        if (Misc.isNPCEntityExcludingVillagers(attacker)) {
+        if (pluginRef.getMiscTools().isNPCEntityExcludingVillagers(attacker)) {
             return;
         }
 
@@ -484,7 +483,7 @@ public class EntityListener implements Listener {
         }
         */
 
-        if (Misc.isNPCEntityExcludingVillagers(entity) || !entity.isValid() || !(entity instanceof LivingEntity)) {
+        if (pluginRef.getMiscTools().isNPCEntityExcludingVillagers(entity) || !entity.isValid() || !(entity instanceof LivingEntity)) {
             return;
         }
 
@@ -614,7 +613,7 @@ public class EntityListener implements Listener {
 
         LivingEntity entity = event.getEntity();
 
-        if (Misc.isNPCEntityExcludingVillagers(entity)) {
+        if (pluginRef.getMiscTools().isNPCEntityExcludingVillagers(entity)) {
             return;
         }
 
@@ -646,7 +645,7 @@ public class EntityListener implements Listener {
 
         LivingEntity entity = event.getEntity();
 
-        if (Misc.isNPCEntityExcludingVillagers(entity)) {
+        if (pluginRef.getMiscTools().isNPCEntityExcludingVillagers(entity)) {
             return;
         }
 
@@ -952,7 +951,7 @@ public class EntityListener implements Listener {
 
         LivingEntity entity = event.getEntity();
 
-        if (!pluginRef.getUserManager().hasPlayerDataKey(player) || Misc.isNPCEntityExcludingVillagers(entity) || entity.hasMetadata(MetadataConstants.UNNATURAL_MOB_METAKEY)) {
+        if (!pluginRef.getUserManager().hasPlayerDataKey(player) || pluginRef.getMiscTools().isNPCEntityExcludingVillagers(entity) || entity.hasMetadata(MetadataConstants.UNNATURAL_MOB_METAKEY)) {
             return;
         }
 

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

@@ -18,7 +18,6 @@ import com.gmail.nossr50.skills.salvage.SalvageManager;
 import com.gmail.nossr50.skills.taming.TamingManager;
 import com.gmail.nossr50.util.ChimaeraWing;
 import com.gmail.nossr50.util.HardcoreManager;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.sounds.SoundType;
 import org.bukkit.Bukkit;
 import org.bukkit.ChatColor;
@@ -834,7 +833,7 @@ public class PlayerListener implements Listener {
     public void onPlayerChat(AsyncPlayerChatEvent event) {
         Player player = event.getPlayer();
 
-        if (Misc.isNPCEntityExcludingVillagers(player) || !pluginRef.getUserManager().hasPlayerDataKey(player)) {
+        if (pluginRef.getMiscTools().isNPCEntityExcludingVillagers(player) || !pluginRef.getUserManager().hasPlayerDataKey(player)) {
             return;
         }
 

+ 14 - 6
src/main/java/com/gmail/nossr50/mcMMO.java

@@ -103,6 +103,7 @@ public class mcMMO extends JavaPlugin {
     private PermissionTools permissionTools;
     private WorldGuardUtils worldGuardUtils;
     private MessageOfTheDayUtils messageOfTheDayUtils;
+    private MiscTools miscTools;
     private ZipLibrary zipLibrary;
 
     /* Never-Ending tasks */
@@ -289,6 +290,9 @@ public class mcMMO extends JavaPlugin {
 
         //Init Sound Manager
         soundManager = new SoundManager(this);
+
+        //Misc Tools Init
+        miscTools = new MiscTools(this);
     }
 
     @Override
@@ -656,13 +660,13 @@ public class mcMMO extends JavaPlugin {
 
         // Bleed timer (Runs every 0.5 seconds)
         bleedTimerTask = new BleedTimerTask(this);
-        bleedTimerTask.runTaskTimer(this, Misc.TICK_CONVERSION_FACTOR, (Misc.TICK_CONVERSION_FACTOR / 2));
+        bleedTimerTask.runTaskTimer(this, miscTools.TICK_CONVERSION_FACTOR, (miscTools.TICK_CONVERSION_FACTOR / 2));
 
         // Old & Powerless User remover
-        long purgeIntervalTicks = getConfigManager().getConfigDatabase().getConfigSectionCleaning().getPurgeInterval() * 60L * 60L * Misc.TICK_CONVERSION_FACTOR;
+        long purgeIntervalTicks = getConfigManager().getConfigDatabase().getConfigSectionCleaning().getPurgeInterval() * 60L * 60L * miscTools.TICK_CONVERSION_FACTOR;
 
         if (getDatabaseCleaningSettings().isOnlyPurgeAtStartup()) {
-            new UserPurgeTask(this).runTaskLaterAsynchronously(this, 2 * Misc.TICK_CONVERSION_FACTOR); // Start 2 seconds after startup.
+            new UserPurgeTask(this).runTaskLaterAsynchronously(this, 2 * miscTools.TICK_CONVERSION_FACTOR); // Start 2 seconds after startup.
         } else if (purgeIntervalTicks > 0) {
             new UserPurgeTask(this).runTaskTimerAsynchronously(this, purgeIntervalTicks, purgeIntervalTicks);
         }
@@ -670,17 +674,17 @@ public class mcMMO extends JavaPlugin {
         //Party System Stuff
         if (configManager.getConfigParty().isPartySystemEnabled()) {
             // Automatically remove old members from parties
-            long kickIntervalTicks = getConfigManager().getConfigParty().getPartyCleanup().getPartyAutoKickHoursInterval() * 60L * 60L * Misc.TICK_CONVERSION_FACTOR;
+            long kickIntervalTicks = getConfigManager().getConfigParty().getPartyCleanup().getPartyAutoKickHoursInterval() * 60L * 60L * miscTools.TICK_CONVERSION_FACTOR;
 
             if (kickIntervalTicks == 0) {
-                new PartyAutoKickTask(this).runTaskLater(this, 2 * Misc.TICK_CONVERSION_FACTOR); // Start 2 seconds after startup.
+                new PartyAutoKickTask(this).runTaskLater(this, 2 * miscTools.TICK_CONVERSION_FACTOR); // Start 2 seconds after startup.
             } else if (kickIntervalTicks > 0) {
                 new PartyAutoKickTask(this).runTaskTimer(this, kickIntervalTicks, kickIntervalTicks);
             }
         }
 
         // Update power level tag scoreboards
-        new PowerLevelUpdatingTask(this).runTaskTimer(this, 2 * Misc.TICK_CONVERSION_FACTOR, 2 * Misc.TICK_CONVERSION_FACTOR);
+        new PowerLevelUpdatingTask(this).runTaskTimer(this, 2 * miscTools.TICK_CONVERSION_FACTOR, 2 * miscTools.TICK_CONVERSION_FACTOR);
 
         // Clear the registered XP data so players can earn XP again
         if (getConfigManager().getConfigLeveling().getConfigLevelingDiminishedReturns().isDiminishedReturnsEnabled()) {
@@ -833,4 +837,8 @@ public class mcMMO extends JavaPlugin {
     public ChunkManagerFactory getChunkManagerFactory() {
         return chunkManagerFactory;
     }
+
+    public MiscTools getMiscTools() {
+        return miscTools;
+    }
 }

+ 2 - 3
src/main/java/com/gmail/nossr50/party/PartyManager.java

@@ -9,7 +9,6 @@ import com.gmail.nossr50.events.party.McMMOPartyChangeEvent;
 import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.runnables.items.TeleportationWarmup;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.sounds.SoundType;
 import org.bukkit.OfflinePlayer;
 import org.bukkit.command.CommandSender;
@@ -228,7 +227,7 @@ public final class PartyManager {
             double range = pluginRef.getPartyXPShareSettings().getPartyShareRange();
 
             for (Player member : party.getOnlineMembers()) {
-                if (!player.equals(member) && member.isValid() && Misc.isNear(player.getLocation(), member.getLocation(), range)) {
+                if (!player.equals(member) && member.isValid() && pluginRef.getMiscTools().isNear(player.getLocation(), member.getLocation(), range)) {
                     nearMembers.add(member);
                 }
             }
@@ -248,7 +247,7 @@ public final class PartyManager {
             for (Player member : party.getVisibleMembers(player)) {
                 if (!player.equals(member)
                         && member.isValid()
-                        && Misc.isNear(player.getLocation(), member.getLocation(), range)) {
+                        && pluginRef.getMiscTools().isNear(player.getLocation(), member.getLocation(), range)) {
                     nearMembers.add(member);
                 }
             }

+ 2 - 3
src/main/java/com/gmail/nossr50/party/ShareHandler.java

@@ -8,7 +8,6 @@ import com.gmail.nossr50.datatypes.party.ShareMode;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import org.bukkit.Material;
 import org.bukkit.entity.Item;
 import org.bukkit.entity.Player;
@@ -120,7 +119,7 @@ public final class ShareHandler {
                         }
 
                         int itemShareModifier = mcMMOMember.getItemShareModifier();
-                        int diceRoll = Misc.getRandom().nextInt(itemShareModifier);
+                        int diceRoll = pluginRef.getMiscTools().getRandom().nextInt(itemShareModifier);
 
                         if (diceRoll <= highestRoll) {
                             mcMMOMember.setItemShareModifier(itemShareModifier + itemWeight);
@@ -146,7 +145,7 @@ public final class ShareHandler {
 
             case RANDOM:
                 for (int i = 0; i < itemStack.getAmount(); i++) {
-                    winningPlayer = nearMembers.get(Misc.getRandom().nextInt(partySize));
+                    winningPlayer = nearMembers.get(pluginRef.getMiscTools().getRandom().nextInt(partySize));
                     awardDrop(winningPlayer, newStack);
                 }
 

+ 1 - 2
src/main/java/com/gmail/nossr50/runnables/items/ChimaeraWingWarmup.java

@@ -3,7 +3,6 @@ package com.gmail.nossr50.runnables.items;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.util.ChimaeraWing;
-import com.gmail.nossr50.util.Misc;
 import org.bukkit.Location;
 import org.bukkit.entity.Player;
 import org.bukkit.inventory.ItemStack;
@@ -45,7 +44,7 @@ public class ChimaeraWingWarmup extends BukkitRunnable {
         int hurtCooldown = pluginRef.getConfigManager().getConfigItems().getRecentlyHurtCooldown();
 
         if (hurtCooldown > 0) {
-            int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, hurtCooldown, player);
+            int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(recentlyHurt * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR, hurtCooldown, player);
 
             if (timeRemaining > 0) {
                 player.sendMessage(pluginRef.getLocaleManager().getString("Item.Injured.Wait", timeRemaining));

+ 1 - 2
src/main/java/com/gmail/nossr50/runnables/items/TeleportationWarmup.java

@@ -2,7 +2,6 @@ package com.gmail.nossr50.runnables.items;
 
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import org.bukkit.Location;
 import org.bukkit.entity.Player;
 import org.bukkit.scheduler.BukkitRunnable;
@@ -41,7 +40,7 @@ public class TeleportationWarmup extends BukkitRunnable {
         int hurtCooldown = pluginRef.getConfigManager().getConfigParty().getPTP().getPtpRecentlyHurtCooldown();
 
         if (hurtCooldown > 0) {
-            int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, hurtCooldown, teleportingPlayer);
+            int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(recentlyHurt * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR, hurtCooldown, teleportingPlayer);
 
             if (timeRemaining > 0) {
                 teleportingPlayer.sendMessage(pluginRef.getLocaleManager().getString("Item.Injured.Wait", timeRemaining));

+ 2 - 3
src/main/java/com/gmail/nossr50/runnables/player/PlayerProfileLoadingTask.java

@@ -4,7 +4,6 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.datatypes.player.PlayerProfile;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.runnables.commands.ScoreboardKeepTask;
-import com.gmail.nossr50.util.Misc;
 import org.bukkit.Server;
 import org.bukkit.entity.Player;
 import org.bukkit.scheduler.BukkitRunnable;
@@ -30,7 +29,7 @@ public class PlayerProfileLoadingTask extends BukkitRunnable {
     @Override
     public void run() {
 
-        if (Misc.isNPCIncludingVillagers(player)) {
+        if (pluginRef.getMiscTools().isNPCIncludingVillagers(player)) {
             return;
         }
 
@@ -91,7 +90,7 @@ public class PlayerProfileLoadingTask extends BukkitRunnable {
 
                 if (pluginRef.getScoreboardSettings().getShowStatsAfterLogin()) {
                     pluginRef.getScoreboardManager().enablePlayerStatsScoreboard(player);
-                    new ScoreboardKeepTask(pluginRef, player).runTaskLater(pluginRef, Misc.TICK_CONVERSION_FACTOR);
+                    new ScoreboardKeepTask(pluginRef, player).runTaskLater(pluginRef, pluginRef.getMiscTools().TICK_CONVERSION_FACTOR);
                 }
             }
 

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

@@ -4,7 +4,6 @@ import com.gmail.nossr50.datatypes.interactions.NotificationType;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.skills.PerksUtils;
 import org.bukkit.Chunk;
 import org.bukkit.World;
@@ -60,7 +59,7 @@ public class AbilityDisableTask extends BukkitRunnable {
                 pluginRef.getSkillTools().getSuperAbilityOtherPlayerDeactivationStr(superAbilityType));
         new AbilityCooldownTask(pluginRef, mcMMOPlayer, superAbilityType).runTaskLater(pluginRef,
                 PerksUtils.handleCooldownPerks(player,
-                        pluginRef.getSkillTools().getSuperAbilityCooldown(superAbilityType) * Misc.TICK_CONVERSION_FACTOR));
+                        pluginRef.getSkillTools().getSuperAbilityCooldown(superAbilityType) * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR));
     }
 
     private void resendChunkRadiusAt(Player player) {

+ 1 - 2
src/main/java/com/gmail/nossr50/skills/acrobatics/AcrobaticsManager.java

@@ -9,7 +9,6 @@ import com.gmail.nossr50.datatypes.skills.SubSkillType;
 import com.gmail.nossr50.datatypes.skills.behaviours.AcrobaticsBehaviour;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.skills.SkillManager;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.skills.ParticleEffectUtils;
 import com.gmail.nossr50.util.skills.SkillActivationType;
 import org.bukkit.Location;
@@ -94,7 +93,7 @@ public class AcrobaticsManager extends SkillManager {
             //Check respawn to prevent abuse
             if (!pluginRef.getConfigManager().getConfigExploitPrevention().getConfigSectionExploitAcrobatics().isPreventAcrobaticsAbuse())
                 applyXpGain((float) (damage * acrobaticsBehaviour.getDodgeXpModifier()), XPGainReason.PVP);
-            else if (pluginRef.getSkillTools().cooldownExpired(mcMMOPlayer.getRespawnATS(), Misc.PLAYER_RESPAWN_COOLDOWN_SECONDS)
+            else if (pluginRef.getSkillTools().cooldownExpired(mcMMOPlayer.getRespawnATS(), pluginRef.getMiscTools().PLAYER_RESPAWN_COOLDOWN_SECONDS)
                     && mcMMOPlayer.getTeleportATS() < System.currentTimeMillis()) {
                 applyXpGain((float) (damage * acrobaticsBehaviour.getDodgeXpModifier()), XPGainReason.PVP);
             }

+ 1 - 2
src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java

@@ -8,7 +8,6 @@ import com.gmail.nossr50.datatypes.skills.SubSkillType;
 import com.gmail.nossr50.datatypes.skills.behaviours.ArcheryBehaviour;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.skills.SkillManager;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.skills.SkillActivationType;
 import org.bukkit.Location;
 import org.bukkit.entity.Entity;
@@ -94,7 +93,7 @@ public class ArcheryManager extends SkillManager {
         }
 
         Location dazedLocation = defender.getLocation();
-        dazedLocation.setPitch(90 - Misc.getRandom().nextInt(181));
+        dazedLocation.setPitch(90 - pluginRef.getMiscTools().getRandom().nextInt(181));
 
         defender.teleport(dazedLocation);
         defender.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 20 * 10, 10));

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

@@ -15,7 +15,6 @@ import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.runnables.skills.DelayedHerbalismXPCheckTask;
 import com.gmail.nossr50.runnables.skills.HerbalismBlockUpdaterTask;
 import com.gmail.nossr50.skills.SkillManager;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.StringUtils;
 import com.gmail.nossr50.util.skills.SkillActivationType;
 import org.bukkit.Material;
@@ -685,7 +684,7 @@ public class HerbalismManager extends SkillManager {
     private boolean processGrowingPlants(BlockState blockState, boolean greenTerra) {
         int greenThumbStage = getGreenThumbStage();
 
-        blockState.setMetadata(MetadataConstants.GREEN_THUMB_METAKEY, new FixedMetadataValue(pluginRef, (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR)));
+        blockState.setMetadata(MetadataConstants.GREEN_THUMB_METAKEY, new FixedMetadataValue(pluginRef, (int) (System.currentTimeMillis() / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR)));
         Ageable crops = (Ageable) blockState.getBlockData();
 
         switch (blockState.getType()) {

+ 5 - 6
src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java

@@ -11,7 +11,6 @@ import com.gmail.nossr50.datatypes.skills.behaviours.MiningBehaviour;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.runnables.skills.AbilityCooldownTask;
 import com.gmail.nossr50.skills.SkillManager;
-import com.gmail.nossr50.util.Misc;
 import org.bukkit.Material;
 import org.bukkit.block.Block;
 import org.bukkit.block.BlockState;
@@ -129,7 +128,7 @@ public class MiningManager extends SkillManager {
 
         mcMMOPlayer.setAbilityDATS(SuperAbilityType.BLAST_MINING, System.currentTimeMillis());
         mcMMOPlayer.setAbilityInformed(SuperAbilityType.BLAST_MINING, false);
-        new AbilityCooldownTask(pluginRef, mcMMOPlayer, SuperAbilityType.BLAST_MINING).runTaskLater(pluginRef, SuperAbilityType.BLAST_MINING.getCooldown() * Misc.TICK_CONVERSION_FACTOR);
+        new AbilityCooldownTask(pluginRef, mcMMOPlayer, SuperAbilityType.BLAST_MINING).runTaskLater(pluginRef, SuperAbilityType.BLAST_MINING.getCooldown() * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR);
     }
 
     /**
@@ -160,12 +159,12 @@ public class MiningManager extends SkillManager {
         }
 
         for (BlockState blockState : ores) {
-            if (Misc.getRandom().nextFloat() < (yield + oreBonus)) {
+            if (pluginRef.getMiscTools().getRandom().nextFloat() < (yield + oreBonus)) {
                 if (!pluginRef.getPlaceStore().isTrue(blockState)) {
                     xp += miningBehaviour.getBlockXp(blockState);
                 }
 
-                Misc.dropItem(Misc.getBlockCenter(blockState), new ItemStack(blockState.getType())); // Initial block that would have been dropped
+                pluginRef.getMiscTools().dropItem(pluginRef.getMiscTools().getBlockCenter(blockState), new ItemStack(blockState.getType())); // Initial block that would have been dropped
 
                 if (!pluginRef.getPlaceStore().isTrue(blockState)) {
                     for (int i = 1; i < dropMultiplier; i++) {
@@ -177,8 +176,8 @@ public class MiningManager extends SkillManager {
 
         if (debrisYield > 0) {
             for (BlockState blockState : debris) {
-                if (Misc.getRandom().nextFloat() < debrisYield) {
-                    Misc.dropItems(Misc.getBlockCenter(blockState), blockState.getBlock().getDrops());
+                if (pluginRef.getMiscTools().getRandom().nextFloat() < debrisYield) {
+                    pluginRef.getMiscTools().dropItems(pluginRef.getMiscTools().getBlockCenter(blockState), blockState.getBlock().getDrops());
                 }
             }
         }

+ 1 - 2
src/main/java/com/gmail/nossr50/skills/repair/RepairManager.java

@@ -6,7 +6,6 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.skills.SkillManager;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.random.RandomChanceSkillStatic;
 import com.gmail.nossr50.util.skills.SkillActivationType;
 import com.gmail.nossr50.util.sounds.SoundType;
@@ -362,6 +361,6 @@ public class RepairManager extends SkillManager {
     }
 
     public void actualizeLastAnvilUse() {
-        lastClick = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
+        lastClick = (int) (System.currentTimeMillis() / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR);
     }
 }

+ 3 - 4
src/main/java/com/gmail/nossr50/skills/salvage/SalvageManager.java

@@ -8,7 +8,6 @@ import com.gmail.nossr50.datatypes.skills.behaviours.SalvageBehaviour;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.skills.SkillManager;
 import com.gmail.nossr50.skills.salvage.salvageables.Salvageable;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.StringUtils;
 import com.gmail.nossr50.util.random.RandomChanceSkillStatic;
 import com.gmail.nossr50.util.sounds.SoundType;
@@ -146,10 +145,10 @@ public class SalvageManager extends SkillManager {
         anvilLoc.add(0, .1, 0);
 
         if (enchantBook != null) {
-            Misc.spawnItemTowardsLocation(anvilLoc.clone(), playerLoc.clone(), enchantBook, vectorSpeed);
+            pluginRef.getMiscTools().spawnItemTowardsLocation(anvilLoc.clone(), playerLoc.clone(), enchantBook, vectorSpeed);
         }
 
-        Misc.spawnItemTowardsLocation(anvilLoc.clone(), playerLoc.clone(), salvageResults, vectorSpeed);
+        pluginRef.getMiscTools().spawnItemTowardsLocation(anvilLoc.clone(), playerLoc.clone(), salvageResults, vectorSpeed);
 
         // BWONG BWONG BWONG - CLUNK!
         if (pluginRef.getConfigManager().getConfigSalvage().getGeneral().isAnvilUseSounds()) {
@@ -318,6 +317,6 @@ public class SalvageManager extends SkillManager {
     }
 
     public void actualizeLastAnvilUse() {
-        lastClick = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
+        lastClick = (int) (System.currentTimeMillis() / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR);
     }
 }

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

@@ -11,7 +11,6 @@ import com.gmail.nossr50.datatypes.skills.subskills.taming.CallOfTheWildType;
 import com.gmail.nossr50.datatypes.skills.subskills.taming.TamingSummon;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.skills.SkillManager;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.StringUtils;
 import com.gmail.nossr50.util.random.RandomChanceSkillStatic;
 import com.gmail.nossr50.util.skills.ParticleEffectUtils;
@@ -269,7 +268,7 @@ public class TamingManager extends SkillManager {
             //Check to see if players have the correct amount of the item required to summon
             if(itemInMainHand.getAmount() >= tamingSummon.getItemAmountRequired()) {
                 //Initial Spawn location
-                Location spawnLocation = Misc.getLocationOffset(player.getLocation(), 1);
+                Location spawnLocation = pluginRef.getMiscTools().getLocationOffset(player.getLocation(), 1);
 
                 //COTW can summon multiple entities per usage
                 for (int i = 0; i < tamingSummon.getEntitiesSummoned(); i++) {
@@ -281,7 +280,7 @@ public class TamingManager extends SkillManager {
                         break;
                     }
 
-                    spawnLocation = Misc.getLocationOffset(spawnLocation, 1);
+                    spawnLocation = pluginRef.getMiscTools().getLocationOffset(spawnLocation, 1);
                     spawnCOTWEntity(callOfTheWildType, spawnLocation, tamingSummon.getEntityType());
 
                     //Inform the player about what they have just done
@@ -360,11 +359,11 @@ public class TamingManager extends SkillManager {
         //Randomize the cat
         if(callOfWildEntity instanceof Ocelot) {
             int numberOfTypes = Ocelot.Type.values().length;
-            ((Ocelot) callOfWildEntity).setCatType(Ocelot.Type.values()[Misc.getRandom().nextInt(numberOfTypes)]);
+            ((Ocelot) callOfWildEntity).setCatType(Ocelot.Type.values()[pluginRef.getMiscTools().getRandom().nextInt(numberOfTypes)]);
             ((Ocelot) callOfWildEntity).setAdult();
         } else if(callOfWildEntity instanceof Cat) {
             int numberOfTypes = Cat.Type.values().length;
-            ((Cat) callOfWildEntity).setCatType(Cat.Type.values()[Misc.getRandom().nextInt(numberOfTypes)]);
+            ((Cat) callOfWildEntity).setCatType(Cat.Type.values()[pluginRef.getMiscTools().getRandom().nextInt(numberOfTypes)]);
             ((Cat) callOfWildEntity).setAdult();
         }
 
@@ -385,12 +384,12 @@ public class TamingManager extends SkillManager {
         //Randomize Horse
         Horse horse = (Horse) callOfWildEntity;
 
-        callOfWildEntity.setMaxHealth(15.0 + (Misc.getRandom().nextDouble() * 15));
+        callOfWildEntity.setMaxHealth(15.0 + (pluginRef.getMiscTools().getRandom().nextDouble() * 15));
         callOfWildEntity.setHealth(callOfWildEntity.getMaxHealth());
-        horse.setColor(Horse.Color.values()[Misc.getRandom().nextInt(Horse.Color.values().length)]);
-        horse.setStyle(Horse.Style.values()[Misc.getRandom().nextInt(Horse.Style.values().length)]);
+        horse.setColor(Horse.Color.values()[pluginRef.getMiscTools().getRandom().nextInt(Horse.Color.values().length)]);
+        horse.setStyle(Horse.Style.values()[pluginRef.getMiscTools().getRandom().nextInt(Horse.Style.values().length)]);
         horse.setJumpStrength(Math.max(pluginRef.getConfigManager().getConfigTaming().getMinHorseJumpStrength(),
-                Math.min(Math.min(Misc.getRandom().nextDouble(), Misc.getRandom().nextDouble()) * 2, pluginRef.getConfigManager().getConfigTaming().getMaxHorseJumpStrength())));
+                Math.min(Math.min(pluginRef.getMiscTools().getRandom().nextDouble(), pluginRef.getMiscTools().getRandom().nextDouble()) * 2, pluginRef.getConfigManager().getConfigTaming().getMaxHorseJumpStrength())));
         horse.setAdult();
 
         //TODO: setSpeed, once available

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

@@ -2,7 +2,6 @@ package com.gmail.nossr50.skills.taming;
 
 import com.gmail.nossr50.datatypes.skills.subskills.taming.CallOfTheWildType;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.skills.ParticleEffectUtils;
 import org.bukkit.Location;
 import org.bukkit.Sound;
@@ -30,7 +29,7 @@ public class TrackedTamingEntity extends BukkitRunnable {
         int tamingCOTWLength = pluginRef.getConfigManager().getConfigTaming().getSubSkills().getCallOfTheWild().getCOTWSummon(callOfTheWildType).getSummonLifespan();
 
         if (tamingCOTWLength > 0) {
-            this.length = tamingCOTWLength * Misc.TICK_CONVERSION_FACTOR;
+            this.length = tamingCOTWLength * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR;
             this.runTaskLater(pluginRef, length);
         }
     }

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

@@ -9,7 +9,6 @@ import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.ToolType;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.skills.SkillManager;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.skills.SkillActivationType;
 import org.bukkit.Material;
 import org.bukkit.block.BlockState;
@@ -107,7 +106,7 @@ public class UnarmedManager extends SkillManager {
             if (pluginRef.getUserManager().getPlayer(defender) == null)
                 return;
 
-            Item item = Misc.dropItem(defender.getLocation(), defender.getInventory().getItemInMainHand());
+            Item item = pluginRef.getMiscTools().dropItem(defender.getLocation(), defender.getInventory().getItemInMainHand());
 
             if (item != null && pluginRef.getConfigManager().getConfigUnarmed().doesDisarmPreventTheft()) {
                 item.setMetadata(MetadataConstants.DISARMED_ITEM_METAKEY, pluginRef.getUserManager().getPlayer(defender).getPlayerMetadata());
@@ -173,7 +172,7 @@ public class UnarmedManager extends SkillManager {
      * @return true if the defender was not disarmed, false otherwise
      */
     private boolean hasIronGrip(Player defender) {
-        if (!Misc.isNPCEntityExcludingVillagers(defender)
+        if (!pluginRef.getMiscTools().isNPCEntityExcludingVillagers(defender)
                 && pluginRef.getPermissionTools().isSubSkillEnabled(defender, SubSkillType.UNARMED_IRON_GRIP)
                 && pluginRef.getRandomChanceTools().isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.UNARMED_IRON_GRIP, defender)) {
             pluginRef.getNotificationManager().sendPlayerInformation(defender, NotificationType.SUBSKILL_MESSAGE, "Unarmed.Ability.IronGrip.Defender");

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

@@ -9,7 +9,6 @@ import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.behaviours.WoodcuttingBehaviour;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.skills.SkillManager;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.skills.SkillActivationType;
 import org.bukkit.Material;
 import org.bukkit.block.Block;
@@ -101,7 +100,7 @@ public class WoodcuttingManager extends SkillManager {
             double health = player.getHealth();
 
             if (health > 1) {
-                pluginRef.getCombatTools().dealDamage(player, Misc.getRandom().nextInt((int) (health - 1)));
+                pluginRef.getCombatTools().dealDamage(player, pluginRef.getMiscTools().getRandom().nextInt((int) (health - 1)));
             }
 
             return;
@@ -263,17 +262,17 @@ public class WoodcuttingManager extends SkillManager {
             //TODO: Update this to drop the correct items/blocks via NMS
             if (material == Material.BROWN_MUSHROOM_BLOCK || material == Material.RED_MUSHROOM_BLOCK) {
                 xp += woodcuttingBehaviour.processTreeFellerXPGains(blockState, processedLogCount);
-                Misc.dropItems(Misc.getBlockCenter(blockState), block.getDrops());
+                pluginRef.getMiscTools().dropItems(pluginRef.getMiscTools().getBlockCenter(blockState), block.getDrops());
             } else {
                 if (pluginRef.getBlockTools().isLog(blockState)) {
                     if (canGetDoubleDrops()) {
                         woodcuttingBehaviour.checkForDoubleDrop(blockState);
                     }
                     xp += woodcuttingBehaviour.processTreeFellerXPGains(blockState, processedLogCount);
-                    Misc.dropItems(Misc.getBlockCenter(blockState), block.getDrops());
+                    pluginRef.getMiscTools().dropItems(pluginRef.getMiscTools().getBlockCenter(blockState), block.getDrops());
                 }
                 if (pluginRef.getBlockTools().isLeaves(blockState)) {
-                    Misc.dropItems(Misc.getBlockCenter(blockState), block.getDrops());
+                    pluginRef.getMiscTools().dropItems(pluginRef.getMiscTools().getBlockCenter(blockState), block.getDrops());
                 }
             }
 

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

@@ -56,7 +56,7 @@ public final class ChimaeraWing {
         int cooldown = pluginRef.getConfigManager().getConfigItems().getCooldown();
 
         if (cooldown > 0) {
-            int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(lastTeleport * Misc.TIME_CONVERSION_FACTOR, cooldown, player);
+            int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(lastTeleport * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR, cooldown, player);
 
             if (timeRemaining > 0) {
                 pluginRef.getNotificationManager().sendPlayerInformation(player, NotificationType.ABILITY_COOLDOWN, "Item.Generic.Wait", String.valueOf(timeRemaining));
@@ -68,7 +68,7 @@ public final class ChimaeraWing {
         int hurtCooldown = pluginRef.getConfigManager().getConfigItems().getRecentlyHurtCooldown();
 
         if (hurtCooldown > 0) {
-            int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, hurtCooldown, player);
+            int timeRemaining = pluginRef.getSkillTools().calculateTimeLeft(recentlyHurt * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR, hurtCooldown, player);
 
             if (timeRemaining > 0) {
                 pluginRef.getNotificationManager().sendPlayerInformation(player, NotificationType.ITEM_MESSAGE, "Item.Injured.Wait", String.valueOf(timeRemaining));
@@ -82,7 +82,7 @@ public final class ChimaeraWing {
                 pluginRef.getNotificationManager().sendPlayerInformation(player, NotificationType.REQUIREMENTS_NOT_MET, "Item.ChimaeraWing.Fail");
                 player.updateInventory();
                 player.setVelocity(new Vector(0, 0.5D, 0));
-                pluginRef.getCombatTools().dealDamage(player, Misc.getRandom().nextInt((int) (player.getHealth() - 10)));
+                pluginRef.getCombatTools().dealDamage(player, pluginRef.getMiscTools().getRandom().nextInt((int) (player.getHealth() - 10)));
                 mcMMOPlayer.actualizeChimeraWingLastUse();
                 return;
             }

+ 1 - 1
src/main/java/com/gmail/nossr50/util/EventManager.java

@@ -123,7 +123,7 @@ public class EventManager {
         Entity entity = entityDamageEvent.getEntity();
 
         //Check to make sure the entity is not an NPC
-        if(Misc.isNPCEntityExcludingVillagers(entity))
+        if(pluginRef.getMiscTools().isNPCEntityExcludingVillagers(entity))
             return false;
 
         if (!entity.isValid() || !(entity instanceof LivingEntity)) {

+ 29 - 36
src/main/java/com/gmail/nossr50/util/Misc.java → src/main/java/com/gmail/nossr50/util/MiscTools.java

@@ -1,6 +1,7 @@
 package com.gmail.nossr50.util;
 
 import com.gmail.nossr50.events.items.McMMOItemSpawnEvent;
+import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.runnables.player.PlayerProfileLoadingTask;
 import com.google.common.collect.ImmutableSet;
 import org.bukkit.Location;
@@ -14,26 +15,18 @@ import java.util.Collection;
 import java.util.Random;
 import java.util.Set;
 
-public final class Misc {
-    public static final int TIME_CONVERSION_FACTOR = 1000;
-    public static final int TICK_CONVERSION_FACTOR = 20;
-    public static final int PLAYER_RESPAWN_COOLDOWN_SECONDS = 5;
-    public static final double SKILL_MESSAGE_MAX_SENDING_DISTANCE = 10.0;
-    public static final Set<String> modNames = ImmutableSet.of("LOTR", "BUILDCRAFT", "ENDERIO", "ENHANCEDBIOMES", "IC2", "METALLURGY", "FORESTRY", "GALACTICRAFT", "RAILCRAFT", "TWILIGHTFOREST", "THAUMCRAFT", "GRAVESTONEMOD", "GROWTHCRAFT", "ARCTICMOBS", "DEMONMOBS", "INFERNOMOBS", "SWAMPMOBS", "MARICULTURE", "MINESTRAPPOLATION");
+public final class MiscTools {
+    public final int TIME_CONVERSION_FACTOR = 1000;
+    public final int TICK_CONVERSION_FACTOR = 20;
+    public final int PLAYER_RESPAWN_COOLDOWN_SECONDS = 5;
+    public final double SKILL_MESSAGE_MAX_SENDING_DISTANCE = 10.0;
+    public final Set<String> modNames = ImmutableSet.of("LOTR", "BUILDCRAFT", "ENDERIO", "ENHANCEDBIOMES", "IC2", "METALLURGY", "FORESTRY", "GALACTICRAFT", "RAILCRAFT", "TWILIGHTFOREST", "THAUMCRAFT", "GRAVESTONEMOD", "GROWTHCRAFT", "ARCTICMOBS", "DEMONMOBS", "INFERNOMOBS", "SWAMPMOBS", "MARICULTURE", "MINESTRAPPOLATION");
+    private final mcMMO pluginRef;
 
-    // Sound Pitches & Volumes from CB
-/*    public static final float ANVIL_USE_PITCH  = 0.3F;  // Not in CB directly, I went off the place sound values
-    public static final float ANVIL_USE_VOLUME = 1.0F * MainConfig.getInstance().getMasterVolume();  // Not in CB directly, I went off the place sound values
-    public static final float FIZZ_VOLUME      = 0.5F * MainConfig.getInstance().getMasterVolume();
-    public static final float POP_VOLUME       = 0.2F * MainConfig.getInstance().getMasterVolume();
-    public static final float BAT_VOLUME       = 1.0F * MainConfig.getInstance().getMasterVolume();
-    public static final float BAT_PITCH        = 0.6F;
-    public static final float GHAST_VOLUME     = 1.0F * MainConfig.getInstance().getMasterVolume();
-    public static final float LEVELUP_PITCH    = 0.5F;  // Reduced to differentiate between vanilla level-up
-    public static final float LEVELUP_VOLUME   = 0.75F * MainConfig.getInstance().getMasterVolume(); // Use max volume always*/
-    private static Random random = new Random();
+    private Random random = new Random();
 
-    private Misc() {
+    public MiscTools(mcMMO pluginRef) {
+        this.pluginRef = pluginRef;
     }
 
     /**
@@ -45,30 +38,30 @@ public final class Misc {
      * 2) The entity can be considered an NPC
      *
      * In this context, an NPC is a bit hard to define. Various plugins determine what an NPC is in different ways.
-     * @see Misc::isNPCIncludingVillagers
+     * @see MiscTools ::isNPCIncludingVillagers
      * @param entity target entity
      * @return true if the entity is not a Villager and is not a "NPC"
      */
-    public static boolean isNPCEntityExcludingVillagers(Entity entity) {
+    public boolean isNPCEntityExcludingVillagers(Entity entity) {
         return (!isVillager(entity)
                 && isNPCIncludingVillagers(entity)); //Compatibility with some mod..
     }
 
-    public static boolean isNPCClassType(Entity entity) {
+    public boolean isNPCClassType(Entity entity) {
         return entity instanceof NPC;
     }
 
-    public static boolean hasNPCMetadataTag(Entity entity) {
+    public boolean hasNPCMetadataTag(Entity entity) {
         return entity.hasMetadata("NPC");
     }
 
-    public static boolean isVillager(Entity entity) {
+    public boolean isVillager(Entity entity) {
         String entityType = entity.getType().toString();
         //This weird code is for 1.13 & 1.14 compatibility
         return entityType.equalsIgnoreCase("wandering_trader") || entity instanceof Villager;
     }
 
-    public static boolean isNPCIncludingVillagers(Entity entity) {
+    public boolean isNPCIncludingVillagers(Entity entity) {
         return (entity == null
                 || (hasNPCMetadataTag(entity))
                 || (isNPCClassType(entity))
@@ -83,7 +76,7 @@ public final class Misc {
      * @param maxDistance The max distance apart
      * @return true if the distance between {@code first} and {@code second} is less than {@code maxDistance}, false otherwise
      */
-    public static boolean isNear(Location first, Location second, double maxDistance) {
+    public boolean isNear(Location first, Location second, double maxDistance) {
         return (first.getWorld() == second.getWorld()) && (first.distanceSquared(second) < (maxDistance * maxDistance) || maxDistance == 0);
     }
 
@@ -93,11 +86,11 @@ public final class Misc {
      * @param blockState The {@link BlockState} of the block
      * @return A {@link Location} lying at the center of the block
      */
-    public static Location getBlockCenter(BlockState blockState) {
+    public Location getBlockCenter(BlockState blockState) {
         return blockState.getLocation().add(0.5, 0.5, 0.5);
     }
 
-    public static void dropItems(Location location, Collection<ItemStack> drops) {
+    public void dropItems(Location location, Collection<ItemStack> drops) {
         for (ItemStack drop : drops) {
             dropItem(location, drop);
         }
@@ -110,7 +103,7 @@ public final class Misc {
      * @param is       The items to drop
      * @param quantity The amount of items to drop
      */
-    public static void dropItems(Location location, ItemStack is, int quantity) {
+    public void dropItems(Location location, ItemStack is, int quantity) {
         for (int i = 0; i < quantity; i++) {
             dropItem(location, is);
         }
@@ -123,7 +116,7 @@ public final class Misc {
      * @param itemStack The item to drop
      * @return Dropped Item entity or null if invalid or cancelled
      */
-    public static Item dropItem(Location location, ItemStack itemStack) {
+    public Item dropItem(Location location, ItemStack itemStack) {
         if (itemStack.getType() == Material.AIR) {
             return null;
         }
@@ -147,7 +140,7 @@ public final class Misc {
      * @param speed the speed that the item should travel
      * @param quantity The amount of items to drop
      */
-    public static void spawnItemsTowardsLocation(Location fromLocation, Location toLocation, ItemStack is, int quantity, double speed) {
+    public void spawnItemsTowardsLocation(Location fromLocation, Location toLocation, ItemStack is, int quantity, double speed) {
         for (int i = 0; i < quantity; i++) {
             spawnItemTowardsLocation(fromLocation, toLocation, is, speed);
         }
@@ -163,7 +156,7 @@ public final class Misc {
      * @param speed the speed that the item should travel
      * @return Dropped Item entity or null if invalid or cancelled
      */
-    public static Item spawnItemTowardsLocation(Location fromLocation, Location toLocation, ItemStack itemToSpawn, double speed) {
+    public Item spawnItemTowardsLocation(Location fromLocation, Location toLocation, ItemStack itemToSpawn, double speed) {
         if (itemToSpawn.getType() == Material.AIR) {
             return null;
         }
@@ -196,16 +189,16 @@ public final class Misc {
         return spawnedItem;
     }
 
-    public static void profileCleanup(String playerName) {
+    public void profileCleanup(String playerName) {
         Player player = pluginRef.getServer().getPlayerExact(playerName);
 
         if (player != null) {
             pluginRef.getUserManager().remove(player);
-            new PlayerProfileLoadingTask(player).runTaskLaterAsynchronously(pluginRef, 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
+            new PlayerProfileLoadingTask(pluginRef, player).runTaskLaterAsynchronously(pluginRef, 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
         }
     }
 
-    public static String getModName(String materialName) {
+    public String getModName(String materialName) {
         for (String mod : modNames) {
             if (materialName.contains(mod)) {
                 return mod;
@@ -224,7 +217,7 @@ public final class Misc {
     /**
      * Gets a random location near the specified location
      */
-    public static Location getLocationOffset(Location location, double strength) {
+    public Location getLocationOffset(Location location, double strength) {
         double blockX = location.getBlockX();
         double blockZ = location.getBlockZ();
 
@@ -238,7 +231,7 @@ public final class Misc {
         return new Location(location.getWorld(), blockX, location.getY(), blockZ);
     }
 
-    public static Random getRandom() {
+    public Random getRandom() {
         return random;
     }
 }

+ 1 - 1
src/main/java/com/gmail/nossr50/util/MobHealthBarManager.java

@@ -80,7 +80,7 @@ public final class MobHealthBarManager {
                 target.setMetadata(MetadataConstants.NAME_VISIBILITY_METAKEY, new FixedMetadataValue(pluginRef, false));
             }
 
-            new MobHealthDisplayUpdaterTask(target).runTaskLater(pluginRef, displayTime * Misc.TICK_CONVERSION_FACTOR); // Clear health display after 3 seconds
+            new MobHealthDisplayUpdaterTask(target).runTaskLater(pluginRef, displayTime * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR); // Clear health display after 3 seconds
         }
     }
 

+ 1 - 2
src/main/java/com/gmail/nossr50/util/commands/CommandTools.java

@@ -5,7 +5,6 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 import com.gmail.nossr50.datatypes.player.PlayerProfile;
 import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.StringUtils;
 import org.bukkit.OfflinePlayer;
 import org.bukkit.command.CommandSender;
@@ -36,7 +35,7 @@ public final class CommandTools {
             return true;
         } else if (pluginRef.getConfigManager().getConfigCommands().isLimitInspectRange()
                         && sender instanceof Player
-                && !Misc.isNear(((Player) sender).getLocation(), target.getLocation(),
+                && !pluginRef.getMiscTools().isNear(((Player) sender).getLocation(), target.getLocation(),
                         pluginRef.getConfigManager().getConfigCommands().getInspectCommandMaxDistance())
                 && !hasPermission) {
             sender.sendMessage(pluginRef.getLocaleManager().getString("Inspect.TooFar"));

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

@@ -7,7 +7,6 @@ import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 import com.gmail.nossr50.events.scoreboard.McMMOScoreboardMakeboardEvent;
 import com.gmail.nossr50.events.scoreboard.ScoreboardEventReason;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import com.google.common.collect.ImmutableList;
 import org.bukkit.entity.Player;
 import org.bukkit.scoreboard.DisplaySlot;
@@ -291,7 +290,7 @@ public class ScoreboardManager {
         if (displayTime == -1) {
             wrapper.showBoardWithNoRevert();
         } else {
-            wrapper.showBoardAndScheduleRevert(displayTime * Misc.TICK_CONVERSION_FACTOR);
+            wrapper.showBoardAndScheduleRevert(displayTime * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR);
         }
     }
 
@@ -308,7 +307,7 @@ public class ScoreboardManager {
     }
 
     public void setRevertTimer(String playerName, int seconds) {
-        PLAYER_SCOREBOARDS.get(playerName).showBoardAndScheduleRevert(seconds * Misc.TICK_CONVERSION_FACTOR);
+        PLAYER_SCOREBOARDS.get(playerName).showBoardAndScheduleRevert(seconds * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR);
     }
 
     public List<String> getDirtyPowerLevels() {

+ 1 - 2
src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardStrings.java

@@ -3,7 +3,6 @@ package com.gmail.nossr50.util.scoreboards;
 import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
 import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import org.bukkit.ChatColor;
@@ -94,7 +93,7 @@ public class ScoreboardStrings {
                     ChatColor.DARK_GREEN,
                     ChatColor.DARK_BLUE);
 
-            Collections.shuffle(colors, Misc.getRandom());
+            Collections.shuffle(colors, pluginRef.getMiscTools().getRandom());
 
             int i = 0;
             for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {

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

@@ -11,7 +11,6 @@ import com.gmail.nossr50.events.scoreboard.ScoreboardEventReason;
 import com.gmail.nossr50.events.scoreboard.ScoreboardObjectiveEventReason;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.skills.child.FamilyTree;
-import com.gmail.nossr50.util.Misc;
 import org.apache.commons.lang.Validate;
 import org.bukkit.ChatColor;
 import org.bukkit.entity.Player;
@@ -82,7 +81,7 @@ public class ScoreboardWrapper {
         if (cooldownTask == null) {
             // Repeat every 5 seconds.
             // Cancels once all cooldowns are done, using stopCooldownUpdating().
-            cooldownTask = new ScoreboardCooldownTask().runTaskTimer(pluginRef, 5 * Misc.TICK_CONVERSION_FACTOR, 5 * Misc.TICK_CONVERSION_FACTOR);
+            cooldownTask = new ScoreboardCooldownTask().runTaskTimer(pluginRef, 5 * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR, 5 * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR);
         }
     }
 

+ 7 - 8
src/main/java/com/gmail/nossr50/util/skills/CombatTools.java

@@ -18,7 +18,6 @@ import com.gmail.nossr50.skills.axes.AxesManager;
 import com.gmail.nossr50.skills.swords.SwordsManager;
 import com.gmail.nossr50.skills.taming.TamingManager;
 import com.gmail.nossr50.skills.unarmed.UnarmedManager;
-import com.gmail.nossr50.util.Misc;
 import com.google.common.collect.ImmutableMap;
 import org.bukkit.GameMode;
 import org.bukkit.Material;
@@ -263,7 +262,7 @@ public final class CombatTools {
         EntityType entityType = damager.getType();
 
         if (target instanceof Player) {
-            if (Misc.isNPCEntityExcludingVillagers(target)) {
+            if (pluginRef.getMiscTools().isNPCEntityExcludingVillagers(target)) {
                 return;
             }
 
@@ -348,7 +347,7 @@ public final class CombatTools {
             if (tamer instanceof Player && pluginRef.getSkillTools().canCombatSkillsTrigger(PrimarySkillType.TAMING, target)) {
                 Player master = (Player) tamer;
 
-                if (!Misc.isNPCEntityExcludingVillagers(master) && pluginRef.getSkillTools().doesPlayerHaveSkillPermission(PrimarySkillType.TAMING, master)) {
+                if (!pluginRef.getMiscTools().isNPCEntityExcludingVillagers(master) && pluginRef.getSkillTools().doesPlayerHaveSkillPermission(PrimarySkillType.TAMING, master)) {
                     processTamingCombat(target, master, wolf, event);
                 }
             }
@@ -359,11 +358,11 @@ public final class CombatTools {
             if (projectileSource instanceof Player && pluginRef.getSkillTools().canCombatSkillsTrigger(PrimarySkillType.ARCHERY, target)) {
                 Player player = (Player) projectileSource;
 
-                if (!Misc.isNPCEntityExcludingVillagers(player) && pluginRef.getSkillTools().doesPlayerHaveSkillPermission(PrimarySkillType.ARCHERY, player)) {
+                if (!pluginRef.getMiscTools().isNPCEntityExcludingVillagers(player) && pluginRef.getSkillTools().doesPlayerHaveSkillPermission(PrimarySkillType.ARCHERY, player)) {
                     processArcheryCombat(target, player, event, arrow);
                 }
 
-                if (target.getType() != EntityType.CREEPER && !Misc.isNPCEntityExcludingVillagers(player) && pluginRef.getSkillTools().doesPlayerHaveSkillPermission(PrimarySkillType.TAMING, player)) {
+                if (target.getType() != EntityType.CREEPER && !pluginRef.getMiscTools().isNPCEntityExcludingVillagers(player) && pluginRef.getSkillTools().doesPlayerHaveSkillPermission(PrimarySkillType.TAMING, player)) {
                     McMMOPlayer mcMMOPlayer = pluginRef.getUserManager().getPlayer(player);
                     TamingManager tamingManager = mcMMOPlayer.getTamingManager();
                     tamingManager.attackTarget(target);
@@ -564,7 +563,7 @@ public final class CombatTools {
                 break;
             }
 
-            if (Misc.isNPCEntityExcludingVillagers(entity) || !(entity instanceof LivingEntity) || !shouldBeAffected(attacker, entity)) {
+            if (pluginRef.getMiscTools().isNPCEntityExcludingVillagers(entity) || !(entity instanceof LivingEntity) || !shouldBeAffected(attacker, entity)) {
                 continue;
             }
 
@@ -619,7 +618,7 @@ public final class CombatTools {
             xpGainReason = XPGainReason.PVP;
             Player defender = (Player) target;
 
-            if (defender.isOnline() && pluginRef.getSkillTools().cooldownExpired(mcMMOPlayer.getRespawnATS(), Misc.PLAYER_RESPAWN_COOLDOWN_SECONDS)) {
+            if (defender.isOnline() && pluginRef.getSkillTools().cooldownExpired(mcMMOPlayer.getRespawnATS(), pluginRef.getMiscTools().PLAYER_RESPAWN_COOLDOWN_SECONDS)) {
                 baseXPMultiplier = 20 * pluginRef.getDynamicSettingsManager().getExperienceManager().getSpecialCombatXP(SpecialXPKey.PVP);
             }
         } else {
@@ -886,7 +885,7 @@ public final class CombatTools {
 
         Player player = (Player) attacker;
 
-        if (Misc.isNPCEntityExcludingVillagers(player) || Misc.isNPCEntityExcludingVillagers(target)) {
+        if (pluginRef.getMiscTools().isNPCEntityExcludingVillagers(player) || pluginRef.getMiscTools().isNPCEntityExcludingVillagers(target)) {
             return;
         }
 

+ 3 - 4
src/main/java/com/gmail/nossr50/util/skills/SkillTools.java

@@ -10,7 +10,6 @@ import com.gmail.nossr50.datatypes.skills.SubSkillType;
 import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
 import com.gmail.nossr50.datatypes.skills.ToolType;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.StringUtils;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
@@ -316,7 +315,7 @@ public class SkillTools {
      * @return the number of seconds remaining before the cooldown expires
      */
     public int calculateTimeLeft(long deactivatedTimeStamp, int cooldown, Player player) {
-        return (int) (((deactivatedTimeStamp + (PerksUtils.handleCooldownPerks(player, cooldown) * Misc.TIME_CONVERSION_FACTOR)) - System.currentTimeMillis()) / Misc.TIME_CONVERSION_FACTOR);
+        return (int) (((deactivatedTimeStamp + (PerksUtils.handleCooldownPerks(player, cooldown) * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR)) - System.currentTimeMillis()) / pluginRef.getMiscTools().TIME_CONVERSION_FACTOR);
     }
 
     /**
@@ -328,7 +327,7 @@ public class SkillTools {
      * @return true if the cooldown is expired
      */
     public boolean cooldownExpired(long deactivatedTimeStamp, int cooldown) {
-        return System.currentTimeMillis() >= (deactivatedTimeStamp + cooldown) * Misc.TIME_CONVERSION_FACTOR;
+        return System.currentTimeMillis() >= (deactivatedTimeStamp + cooldown) * pluginRef.getMiscTools().TIME_CONVERSION_FACTOR;
     }
 
     /**
@@ -345,7 +344,7 @@ public class SkillTools {
         Location location = player.getLocation();
 
         for (Player otherPlayer : player.getWorld().getPlayers()) {
-            if (otherPlayer != player && Misc.isNear(location, otherPlayer.getLocation(), Misc.SKILL_MESSAGE_MAX_SENDING_DISTANCE)) {
+            if (otherPlayer != player && pluginRef.getMiscTools().isNear(location, otherPlayer.getLocation(), pluginRef.getMiscTools().SKILL_MESSAGE_MAX_SENDING_DISTANCE)) {
                 pluginRef.getNotificationManager().sendNearbyPlayersInformation(otherPlayer, notificationType, key, player.getName());
             }
         }

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

@@ -2,7 +2,6 @@ package com.gmail.nossr50.util.sounds;
 
 import com.gmail.nossr50.config.hocon.sound.SoundSetting;
 import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.util.Misc;
 import org.bukkit.Location;
 import org.bukkit.Sound;
 import org.bukkit.SoundCategory;
@@ -100,10 +99,10 @@ public class SoundManager {
     }
 
     public float getFizzPitch() {
-        return 2.6F + (Misc.getRandom().nextFloat() - Misc.getRandom().nextFloat()) * 0.8F;
+        return 2.6F + (pluginRef.getMiscTools().getRandom().nextFloat() - pluginRef.getMiscTools().getRandom().nextFloat()) * 0.8F;
     }
 
     public float getPopPitch() {
-        return ((Misc.getRandom().nextFloat() - Misc.getRandom().nextFloat()) * 0.7F + 1.0F) * 2.0F;
+        return ((pluginRef.getMiscTools().getRandom().nextFloat() - pluginRef.getMiscTools().getRandom().nextFloat()) * 0.7F + 1.0F) * 2.0F;
     }
 }