diff --git a/api/src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java b/api/src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java index 7b46021..0fd2694 100644 --- a/api/src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java +++ b/api/src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java @@ -15,6 +15,8 @@ public abstract class DiscoveryReward implements IGuiEditable { @GuiEditable("Time Between Reward (s)") private int timeBetweenReward; + private long lastReward; + public DiscoveryReward(IRPGRegionsAPI api) { this.api = api; } @@ -29,6 +31,10 @@ public abstract class DiscoveryReward implements IGuiEditable { */ public abstract void award(Player player); + protected void updateAwardTime() { + this.lastReward = System.currentTimeMillis(); + } + public boolean isAlwaysAward() { return alwaysAward; } @@ -45,6 +51,10 @@ public abstract class DiscoveryReward implements IGuiEditable { this.timeBetweenReward = timeBetweenReward; } + public boolean canAward() { + return (System.currentTimeMillis() - lastReward) >= (timeBetweenReward * 1000L); + } + public String getPluginRequirement() { return null; } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java b/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java index e4fcdc7..a9f858a 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java @@ -106,7 +106,7 @@ public class RegionListener implements Listener { Bukkit.getPluginManager().callEvent(new RegionDiscoverEvent(player, region, discovery)); } else if (prioritised && configuredRegion.isDiscoverable() && has) { if (configuredRegion.getRewards() != null) configuredRegion.getRewards().forEach(reward -> { - if (reward.isAlwaysAward()) { + if (reward.isAlwaysAward() && reward.canAward()) { reward.award(player); } }); diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/AlonsoLevelReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/AlonsoLevelReward.java index cbe4549..4b5eab3 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/AlonsoLevelReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/AlonsoLevelReward.java @@ -17,6 +17,7 @@ public class AlonsoLevelReward extends LevelReward { @Override public void award(Player player) { AlonsoLevelsAPI.addLevel(player.getUniqueId(), 1); + this.updateAwardTime(); } public String getPluginRequirement() { diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ConsoleCommandReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ConsoleCommandReward.java index 2b550ec..a82083f 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ConsoleCommandReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ConsoleCommandReward.java @@ -29,6 +29,7 @@ public class ConsoleCommandReward extends DiscoveryReward { command = PlaceholderAPI.setPlaceholders(player, command); } Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command); + this.updateAwardTime(); } @Override diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java index 4eb09ab..b522672 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java @@ -23,6 +23,7 @@ public class ExperienceReward extends DiscoveryReward { @Override public void award(Player player) { player.giveExp(xp); + this.updateAwardTime(); } @Override diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java index 323bff9..a2a772a 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java @@ -25,6 +25,7 @@ public class ItemReward extends DiscoveryReward { player.getInventory().addItem(item).forEach((pos, item) -> { player.getLocation().getWorld().dropItemNaturally(player.getLocation(), item); }); + this.updateAwardTime(); } @Override diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MessageReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MessageReward.java index cc54fee..229eb39 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MessageReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MessageReward.java @@ -30,6 +30,7 @@ public class MessageReward extends DiscoveryReward { @Override public void award(Player player) { messages.forEach(message -> player.sendMessage(ChatColor.translateAlternateColorCodes('&', message))); + this.updateAwardTime(); } @Override diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MoneyReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MoneyReward.java index 2759697..a07d69e 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MoneyReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/MoneyReward.java @@ -34,6 +34,7 @@ public class MoneyReward extends DiscoveryReward { } economy.getProvider().depositPlayer(player, amount); + this.updateAwardTime(); } @Override diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlaceholderConsoleCommandReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlaceholderConsoleCommandReward.java index 763c1dd..037f365 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlaceholderConsoleCommandReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlaceholderConsoleCommandReward.java @@ -38,6 +38,7 @@ public class PlaceholderConsoleCommandReward extends DiscoveryReward { public void award(Player player) { if (hasPlaceholder(player)) { Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), PlaceholderAPI.setPlaceholders(player, command.replace("%player%", player.getName()))); + this.updateAwardTime(); } } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlayerCommandReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlayerCommandReward.java index 64527a9..3f10072 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlayerCommandReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/PlayerCommandReward.java @@ -29,6 +29,7 @@ public class PlayerCommandReward extends DiscoveryReward { command = PlaceholderAPI.setPlaceholders(player, command); } player.performCommand(command); + this.updateAwardTime(); } @Override diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/QuestReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/QuestReward.java index 8eccb22..d197d88 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/QuestReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/QuestReward.java @@ -50,6 +50,7 @@ public class QuestReward extends DiscoveryReward implements Blocking { if (quest == null) return; if (start) quester.takeQuest(quest, ignoreRequirements); else quest.completeQuest(quester); + this.updateAwardTime(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/RegionDiscoverReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/RegionDiscoverReward.java index 3f16157..48dad75 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/RegionDiscoverReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/RegionDiscoverReward.java @@ -36,6 +36,7 @@ public class RegionDiscoverReward extends DiscoveryReward { final WorldDiscovery worldDiscovery = new WorldDiscovery(formattedDate, region); account.addDiscovery(worldDiscovery); Bukkit.getPluginManager().callEvent(new RegionDiscoverEvent(player, region, worldDiscovery)); + this.updateAwardTime(); }); } } diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/TeleportReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/TeleportReward.java index 6ab7391..57a64a6 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/TeleportReward.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/TeleportReward.java @@ -34,5 +34,6 @@ public class TeleportReward extends DiscoveryReward { @Override public void award(Player player) { PaperLib.teleportAsync(player, location); + this.updateAwardTime(); } }