diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java index 3de39240..f1ec204d 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java @@ -3,6 +3,7 @@ package com.willfp.ecoenchants.enchantments; import com.willfp.ecoenchants.EcoEnchantsPlugin; import com.willfp.ecoenchants.config.ConfigManager; import com.willfp.ecoenchants.config.configs.EnchantmentConfig; +import com.willfp.ecoenchants.enchantments.itemtypes.Spell; import com.willfp.ecoenchants.enchantments.meta.EnchantmentRarity; import com.willfp.ecoenchants.enchantments.util.Watcher; import com.willfp.ecoenchants.integrations.placeholder.PlaceholderEntry; @@ -172,6 +173,19 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Regist }) ); } + + if(this instanceof Spell) { + PlaceholderManager.registerPlaceholder( + new PlaceholderEntry(this.getPermissionName() + "_" + "cooldown", (player) -> { + return String.valueOf(Spell.getCooldown((Spell) this, player)); + }) + ); + PlaceholderManager.registerPlaceholder( + new PlaceholderEntry(this.getPermissionName() + "_" + "cooldown_total", (player) -> { + return String.valueOf(((Spell) this).getCooldownTime()); + }) + ); + } } /** diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/itemtypes/Spell.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/itemtypes/Spell.java index 263ec55c..6fe59afb 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/itemtypes/Spell.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/itemtypes/Spell.java @@ -65,12 +65,10 @@ public abstract class Spell extends EcoEnchant { this.onRightClick(player, level, event); }); - long msLeft = runnable.getEndTime() - System.currentTimeMillis(); + int cooldown = getCooldown(this, player); - long secondsLeft = (long) Math.ceil((double) msLeft / 1000); - - if(msLeft > 0) { - String message = ConfigManager.getLang().getMessage("on-cooldown").replaceAll("%seconds%", String.valueOf(secondsLeft)).replaceAll("%name%", EnchantmentCache.getEntry(this).getRawName()); + if(cooldown > 0) { + String message = ConfigManager.getLang().getMessage("on-cooldown").replaceAll("%seconds%", String.valueOf(cooldown)).replaceAll("%name%", EnchantmentCache.getEntry(this).getRawName()); player.sendMessage(message); player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 0.5f); return; @@ -83,4 +81,17 @@ public abstract class Spell extends EcoEnchant { } public abstract void onRightClick(Player player, int level, PlayerInteractEvent event); + + public static int getCooldown(Spell spell, Player player) { + if(!spell.cooldownTracker.containsKey(player.getUniqueId())) + spell.cooldownTracker.put(player.getUniqueId(), new SpellRunnable(player, spell)); + + SpellRunnable runnable = spell.cooldownTracker.get(player.getUniqueId()); + + long msLeft = runnable.getEndTime() - System.currentTimeMillis(); + + long secondsLeft = (long) Math.ceil((double) msLeft / 1000); + + return new Long(secondsLeft).intValue(); + } }