2
0
Эх сурвалжийг харах

Don't run these calculations twice. Also, pretty sure one of these was
bugged.

GJ 12 жил өмнө
parent
commit
0b6372a6ea

+ 15 - 7
src/main/java/com/gmail/nossr50/commands/party/teleport/PtpCommand.java

@@ -55,11 +55,15 @@ public class PtpCommand implements TabExecutor {
                 Player player = mcMMOPlayer.getPlayer();
 
                 long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
-                int recentlyhurt_cooldown = Config.getInstance().getPTPCommandRecentlyHurtCooldown();
+                int hurtCooldown = Config.getInstance().getPTPCommandRecentlyHurtCooldown();
 
-                if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)) {
-                    player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)));
-                    return true;
+                if (hurtCooldown > 0) {
+                    int timeRemaining = SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, hurtCooldown, player);
+
+                    if (timeRemaining > 0) {
+                        player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", timeRemaining));
+                        return true;
+                    }
                 }
 
                 if (args[0].equalsIgnoreCase("accept")) {
@@ -74,9 +78,13 @@ public class PtpCommand implements TabExecutor {
                 int ptpCooldown = Config.getInstance().getPTPCommandCooldown();
                 long lastTeleport = mcMMOPlayer.getLastTeleport();
 
-                if (!SkillUtils.cooldownOver(lastTeleport * Misc.TIME_CONVERSION_FACTOR, ptpCooldown, player)) {
-                    player.sendMessage(LocaleLoader.getString("Item.Generic.Wait", SkillUtils.calculateTimeLeft(lastTeleport * Misc.TIME_CONVERSION_FACTOR, ptpCooldown, player)));
-                    return true;
+                if (ptpCooldown > 0) {
+                    int timeRemaining = SkillUtils.calculateTimeLeft(lastTeleport * Misc.TIME_CONVERSION_FACTOR, ptpCooldown, player);
+
+                    if (timeRemaining > 0) {
+                        player.sendMessage(LocaleLoader.getString("Item.Generic.Wait", timeRemaining));
+                        return true;
+                    }
                 }
 
                 sendTeleportRequest(sender, player, args[0]);

+ 11 - 6
src/main/java/com/gmail/nossr50/runnables/items/ChimaeraWingWarmup.java

@@ -28,8 +28,6 @@ public class ChimaeraWingWarmup extends BukkitRunnable {
     private void checkChimaeraWingTeleport() {
         Player player = mcMMOPlayer.getPlayer();
         Location previousLocation = mcMMOPlayer.getTeleportCommenceLocation();
-        long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
-        ItemStack inHand = player.getItemInHand();
 
         mcMMOPlayer.setTeleportCommenceLocation(null);
 
@@ -38,16 +36,23 @@ public class ChimaeraWingWarmup extends BukkitRunnable {
             return;
         }
 
+        ItemStack inHand = player.getItemInHand();
+
         if (!ItemUtils.isChimaeraWing(inHand) || inHand.getAmount() < Config.getInstance().getChimaeraUseCost()) {
             player.sendMessage(LocaleLoader.getString("Skills.NeedMore", LocaleLoader.getString("Item.ChimaeraWing.Name")));
             return;
         }
 
-        int recentlyhurt_cooldown = Config.getInstance().getChimaeraRecentlyHurtCooldown();
+        long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
+        int hurtCooldown = Config.getInstance().getChimaeraRecentlyHurtCooldown();
 
-        if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)) {
-            player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)));
-            return;
+        if (hurtCooldown > 0) {
+            int timeRemaining = SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, hurtCooldown, player);
+
+            if (timeRemaining > 0) {
+                player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", timeRemaining));
+                return;
+            }
         }
 
         ChimaeraWing.chimaeraExecuteTeleport();

+ 8 - 4
src/main/java/com/gmail/nossr50/runnables/items/TeleportationWarmup.java

@@ -47,11 +47,15 @@ public class TeleportationWarmup extends BukkitRunnable {
             return;
         }
 
-        int recentlyhurt_cooldown = Config.getInstance().getPTPCommandRecentlyHurtCooldown();
+        int hurtCooldown = Config.getInstance().getPTPCommandRecentlyHurtCooldown();
 
-        if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, teleportingPlayer)) {
-            teleportingPlayer.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, teleportingPlayer)));
-            return;
+        if (hurtCooldown > 0) {
+            int timeRemaining = SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, hurtCooldown, teleportingPlayer);
+
+            if (timeRemaining > 0) {
+                teleportingPlayer.sendMessage(LocaleLoader.getString("Item.Injured.Wait", timeRemaining));
+                return;
+            }
         }
 
         PtpCommand.handlePartyTeleportEvent(teleportingPlayer, targetPlayer);

+ 3 - 2
src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java

@@ -287,9 +287,10 @@ public class MiningManager extends SkillManager {
 
         long oldTime = profile.getSkillDATS(AbilityType.BLAST_MINING) * Misc.TIME_CONVERSION_FACTOR;
         int cooldown = AbilityType.BLAST_MINING.getCooldown();
+        int timeRemaining = SkillUtils.calculateTimeLeft(oldTime, cooldown, player);
 
-        if (!SkillUtils.cooldownOver(oldTime, cooldown, player)) {
-            player.sendMessage(LocaleLoader.getString("Skills.TooTired", SkillUtils.calculateTimeLeft(oldTime, cooldown, player)));
+        if (timeRemaining > 0) {
+            player.sendMessage(LocaleLoader.getString("Skills.TooTired", timeRemaining));
             return false;
         }
 

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

@@ -35,9 +35,13 @@ public final class ChimaeraWing {
      * @param player Player whose item usage to check
      */
     public static void activationCheck(Player player) {
+        if (!Config.getInstance().getChimaeraEnabled()) {
+            return;
+        }
+
         ItemStack inHand = player.getItemInHand();
 
-        if (!Config.getInstance().getChimaeraEnabled() || !ItemUtils.isChimaeraWing(inHand)) {
+        if (!ItemUtils.isChimaeraWing(inHand)) {
             return;
         }
 
@@ -48,32 +52,43 @@ public final class ChimaeraWing {
 
         mcMMOPlayer = UserManager.getPlayer(player);
 
-        location = player.getLocation();
-        int amount = inHand.getAmount();
-        long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
-        long lastTeleport = mcMMOPlayer.getLastTeleport();
-
         if (mcMMOPlayer.getTeleportCommenceLocation() != null) {
             return;
         }
 
-        if (Config.getInstance().getChimaeraCooldown() > 0 && !SkillUtils.cooldownOver(lastTeleport * Misc.TIME_CONVERSION_FACTOR, Config.getInstance().getChimaeraCooldown(), player)) {
-            player.sendMessage(LocaleLoader.getString("Item.Generic.Wait", SkillUtils.calculateTimeLeft(lastTeleport * Misc.TIME_CONVERSION_FACTOR, Config.getInstance().getChimaeraCooldown(), player)));
+        int amount = inHand.getAmount();
+
+        if (amount < Config.getInstance().getChimaeraUseCost()) {
+            player.sendMessage(LocaleLoader.getString("Skills.NeedMore", LocaleLoader.getString("Item.ChimaeraWing.Name")));
             return;
         }
 
-        int recentlyhurt_cooldown = Config.getInstance().getChimaeraRecentlyHurtCooldown();
+        long lastTeleport = mcMMOPlayer.getLastTeleport();
+        int cooldown = Config.getInstance().getChimaeraCooldown();
 
-        if (!SkillUtils.cooldownOver(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)) {
-            player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, recentlyhurt_cooldown, player)));
-            return;
+        if (cooldown > 0 ) {
+            int timeRemaining = SkillUtils.calculateTimeLeft(lastTeleport * Misc.TIME_CONVERSION_FACTOR, cooldown, player);
+
+            if (timeRemaining > 0) {
+                player.sendMessage(LocaleLoader.getString("Item.Generic.Wait", timeRemaining));
+                return;
+            }
         }
 
-        if (amount < Config.getInstance().getChimaeraUseCost()) {
-            player.sendMessage(LocaleLoader.getString("Skills.NeedMore", LocaleLoader.getString("Item.ChimaeraWing.Name")));
-            return;
+        long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
+        int hurtCooldown = Config.getInstance().getChimaeraRecentlyHurtCooldown();
+
+        if (hurtCooldown > 0) {
+            int timeRemaining = SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, hurtCooldown, player);
+
+            if (timeRemaining > 0) {
+                player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", timeRemaining));
+                return;
+            }
         }
 
+        location = player.getLocation();
+
         if (Config.getInstance().getChimaeraPreventUseUnderground()) {
             if (location.getY() < player.getWorld().getHighestBlockYAt(location)) {
                 player.setItemInHand(new ItemStack(getChimaeraWing(amount - Config.getInstance().getChimaeraUseCost())));

+ 13 - 27
src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java

@@ -55,25 +55,6 @@ public class SkillUtils {
         return currentFoodLevel + foodChange;
     }
 
-    /**
-     * Checks to see if the cooldown for an item or ability is expired.
-     *
-     * @param oldTime The time the ability or item was last used
-     * @param cooldown The amount of time that must pass between uses
-     * @param player The player whose cooldown is being checked
-     * @return true if the cooldown is over, false otherwise
-     */
-    public static boolean cooldownOver(long oldTime, int cooldown, Player player) {
-        long currentTime = System.currentTimeMillis();
-        int adjustedCooldown = PerksUtils.handleCooldownPerks(player, cooldown);
-
-        if (currentTime - oldTime >= (adjustedCooldown * Misc.TIME_CONVERSION_FACTOR)) {
-            return true;
-        }
-
-        return false;
-    }
-
     /**
      * Calculate the time remaining until the cooldown expires.
      *
@@ -96,15 +77,14 @@ public class SkillUtils {
             return;
         }
 
-        McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
-        AbilityType ability = skill.getAbility();
-        ToolType tool = skill.getTool();
         ItemStack inHand = player.getItemInHand();
 
         if (ModUtils.isCustomTool(inHand) && !ModUtils.getToolFromItemStack(inHand).isAbilityEnabled()) {
             return;
         }
 
+        McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
+
         if (!mcMMOPlayer.getAbilityUse()) {
             return;
         }
@@ -116,6 +96,8 @@ public class SkillUtils {
         }
 
         PlayerProfile playerProfile = mcMMOPlayer.getProfile();
+        AbilityType ability = skill.getAbility();
+        ToolType tool = skill.getTool();
 
         /*
          * Woodcutting & Axes need to be treated differently.
@@ -123,8 +105,10 @@ public class SkillUtils {
          */
         if (ability.getPermissions(player) && tool.inHand(inHand) && !mcMMOPlayer.getToolPreparationMode(tool)) {
             if (skill != SkillType.WOODCUTTING && skill != SkillType.AXES) {
-                if (!mcMMOPlayer.getAbilityMode(ability) && !cooldownOver(playerProfile.getSkillDATS(ability) * Misc.TIME_CONVERSION_FACTOR, ability.getCooldown(), player)) {
-                    player.sendMessage(LocaleLoader.getString("Skills.TooTired", calculateTimeLeft(playerProfile.getSkillDATS(ability) * Misc.TIME_CONVERSION_FACTOR, ability.getCooldown(), player)));
+                int timeRemaining = calculateTimeLeft(playerProfile.getSkillDATS(ability) * Misc.TIME_CONVERSION_FACTOR, ability.getCooldown(), player);
+
+                if (!mcMMOPlayer.getAbilityMode(ability) && timeRemaining > 0) {
+                    player.sendMessage(LocaleLoader.getString("Skills.TooTired", timeRemaining));
                     return;
                 }
             }
@@ -294,18 +278,20 @@ public class SkillUtils {
         Player player = mcMMOPlayer.getPlayer();
         PlayerProfile playerProfile = mcMMOPlayer.getProfile();
 
+        int timeRemaining = calculateTimeLeft(playerProfile.getSkillDATS(ability) * Misc.TIME_CONVERSION_FACTOR, ability.getCooldown(), player);
+
         /*
          * Axes and Woodcutting are odd because they share the same tool.
          * We show them the too tired message when they take action.
          */
         if (type == SkillType.WOODCUTTING || type == SkillType.AXES) {
-            if (!mcMMOPlayer.getAbilityMode(ability) && !cooldownOver(playerProfile.getSkillDATS(ability) * Misc.TIME_CONVERSION_FACTOR, ability.getCooldown(), player)) {
-                player.sendMessage(LocaleLoader.getString("Skills.TooTired", calculateTimeLeft(playerProfile.getSkillDATS(ability) * Misc.TIME_CONVERSION_FACTOR, ability.getCooldown(), player)));
+            if (!mcMMOPlayer.getAbilityMode(ability) && timeRemaining > 0) {
+                player.sendMessage(LocaleLoader.getString("Skills.TooTired", timeRemaining));
                 return;
             }
         }
 
-        if (!mcMMOPlayer.getAbilityMode(ability) && cooldownOver(playerProfile.getSkillDATS(ability), ability.getCooldown(), player)) {
+        if (!mcMMOPlayer.getAbilityMode(ability) && timeRemaining <= 0) {
             McMMOPlayerAbilityActivateEvent event = new McMMOPlayerAbilityActivateEvent(player, type);
             mcMMO.p.getServer().getPluginManager().callEvent(event);