diff --git a/api/src/main/java/net/islandearth/rpgregions/command/IconCommand.java b/api/src/main/java/net/islandearth/rpgregions/command/IconCommand.java index fc00c93..d42bfb7 100644 --- a/api/src/main/java/net/islandearth/rpgregions/command/IconCommand.java +++ b/api/src/main/java/net/islandearth/rpgregions/command/IconCommand.java @@ -4,10 +4,12 @@ public class IconCommand { private final String command; private final CommandClickType clickType; + private final int cooldown; - public IconCommand(String command, CommandClickType clickType) { + public IconCommand(String command, CommandClickType clickType, int cooldown) { this.command = command; this.clickType = clickType; + this.cooldown = cooldown; } public String getCommand() { @@ -17,7 +19,11 @@ public class IconCommand { public CommandClickType getClickType() { return clickType; } - + + public int getCooldown() { + return cooldown; + } + public enum CommandClickType { DISCOVERED, UNDISCOVERED diff --git a/gradle.properties b/gradle.properties index 69a1d2d..950d744 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ pluginGroup=net.islandearth -pluginVersion=1.2.7 +pluginVersion=1.2.8 diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/gui/DiscoveryGUI.java b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/DiscoveryGUI.java index 446710b..0e229c8 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/gui/DiscoveryGUI.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/DiscoveryGUI.java @@ -10,11 +10,13 @@ import io.papermc.lib.PaperLib; import me.arcaniax.hdb.api.HeadDatabaseAPI; import net.islandearth.rpgregions.RPGRegions; import net.islandearth.rpgregions.command.IconCommand; +import net.islandearth.rpgregions.managers.data.account.RPGRegionsAccount; import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion; import net.islandearth.rpgregions.translation.Translations; import net.islandearth.rpgregions.utils.ItemStackBuilder; import net.islandearth.rpgregions.utils.StringUtils; import net.islandearth.rpgregions.utils.XMaterial; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -242,11 +244,22 @@ public class DiscoveryGUI extends RPGRegionsGUI { if (configuredRegion.isTeleportable() && player.hasPermission("rpgregions.teleport") && hasDiscovered) { - int x = configuredRegion.getX(); - int y = configuredRegion.getY(); - int z = configuredRegion.getZ(); - if (configuredRegion.getWorld() == null) Translations.CANNOT_TELEPORT.send(player); - else PaperLib.teleportAsync(player, new Location(configuredRegion.getWorld(), x, y, z)); + if (!account.getCooldowns().contains(RPGRegionsAccount.AccountCooldown.TELEPORT)) { + int x = configuredRegion.getX(); + int y = configuredRegion.getY(); + int z = configuredRegion.getZ(); + if (configuredRegion.getWorld() == null) { + Translations.CANNOT_TELEPORT.send(player); + } else { + PaperLib.teleportAsync(player, new Location(configuredRegion.getWorld(), x, y, z)); + if (configuredRegion.getTeleportCooldown() != 0) { + account.getCooldowns().add(RPGRegionsAccount.AccountCooldown.TELEPORT); + Bukkit.getScheduler().runTaskLater(plugin, () -> account.getCooldowns().remove(RPGRegionsAccount.AccountCooldown.TELEPORT), configuredRegion.getTeleportCooldown()); + } + } + } else { + Translations.COOLDOWN.send(player); + } } if (!configuredRegion.getIconCommands().isEmpty()) { @@ -263,10 +276,20 @@ public class DiscoveryGUI extends RPGRegionsGUI { || iconCommand.getClickType() != IconCommand.CommandClickType.UNDISCOVERED && !hasDiscovered) { return; } - + + if (account.getCooldowns().contains(RPGRegionsAccount.AccountCooldown.ICON_COMMAND)) { + Translations.COOLDOWN.send(player); + return; + } + player.performCommand(iconCommand.getCommand() .replace("%region%", configuredRegion.getId()) .replace("%player%", player.getName())); + + if (iconCommand.getCooldown() != 0) { + account.getCooldowns().add(RPGRegionsAccount.AccountCooldown.ICON_COMMAND); + Bukkit.getScheduler().runTaskLater(plugin, () -> account.getCooldowns().remove(RPGRegionsAccount.AccountCooldown.ICON_COMMAND), iconCommand.getCooldown()); + } }); } })); diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/data/account/RPGRegionsAccount.java b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/data/account/RPGRegionsAccount.java index e573d45..efbc690 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/data/account/RPGRegionsAccount.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/data/account/RPGRegionsAccount.java @@ -2,6 +2,8 @@ package net.islandearth.rpgregions.managers.data.account; import net.islandearth.rpgregions.managers.data.region.Discovery; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.UUID; @@ -9,10 +11,12 @@ public class RPGRegionsAccount { private UUID uuid; private Map discoveredRegions; + private List cooldowns; public RPGRegionsAccount(UUID uuid, Map discoveredRegions) { this.uuid = uuid; this.discoveredRegions = discoveredRegions; + this.cooldowns = new ArrayList<>(); } public Map getDiscoveredRegions() { @@ -22,4 +26,13 @@ public class RPGRegionsAccount { public void addDiscovery(Discovery discovery) { discoveredRegions.put(discovery.getRegion(), discovery); } + + public List getCooldowns() { + return cooldowns; + } + + public enum AccountCooldown { + ICON_COMMAND, + TELEPORT + } } \ No newline at end of file diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java index 16b6f01..686f0bc 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java @@ -60,6 +60,7 @@ public class ConfiguredRegion { private List discoveredTitle; private List discoveredSubtitle; private Regenerate regenerate; + private final int teleportCooldown; public ConfiguredRegion(@Nullable World world, String id, String customName, List rewards, List effects, int x, int y, int z) { @@ -85,6 +86,7 @@ public class ConfiguredRegion { this.requirements = Collections.singletonList(new LevelRequirement(5)); this.discoveredLore = new ArrayList<>(); this.alwaysShowTitles = false; + this.teleportCooldown = 0; } public ConfiguredRegion(@Nullable World world, String id, String customName, @@ -112,6 +114,7 @@ public class ConfiguredRegion { this.requirements = Collections.singletonList(new LevelRequirement(5)); this.discoveredLore = new ArrayList<>(); this.alwaysShowTitles = false; + this.teleportCooldown = 0; } public String getId() { @@ -302,7 +305,11 @@ public class ConfiguredRegion { public void setRegenerate(@NotNull Regenerate regenerate) { this.regenerate = regenerate; } - + + public int getTeleportCooldown() { + return teleportCooldown; + } + public void save(RPGRegions plugin) throws IOException { File file = new File(plugin.getDataFolder() + "/regions/" + this.id + ".json"); Writer writer = new FileWriter(file); diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/translation/Translations.java b/rpgregions/src/main/java/net/islandearth/rpgregions/translation/Translations.java index 8d96bef..6069fa5 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/translation/Translations.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/translation/Translations.java @@ -29,7 +29,8 @@ public enum Translations { UNKNOWN_REGION("Unknown Realm"), EXIT("&cExit"), EXIT_LORE("&fExit the GUI", true), - CANNOT_ENTER("&cYou require %0 to enter this area."); + CANNOT_ENTER("&cYou require %0 to enter this area."), + COOLDOWN("&cThat is currently on cooldown."); private final String defaultValue; private final boolean isList; diff --git a/rpgregions/src/main/resources/lang/en_gb.yml b/rpgregions/src/main/resources/lang/en_gb.yml index 4a22262..465a977 100644 --- a/rpgregions/src/main/resources/lang/en_gb.yml +++ b/rpgregions/src/main/resources/lang/en_gb.yml @@ -20,4 +20,5 @@ previous_page_lore: next_page_lore: - "&fGo to the next page" exit_lore: - - "&fExit the GUI" \ No newline at end of file + - "&fExit the GUI" +cooldown: "&cThat is currently on cooldown." \ No newline at end of file