From 6673e279fcdf849f437dfab86f7611a9b51f06d5 Mon Sep 17 00:00:00 2001 From: SuperRonanCraft Date: Wed, 6 Apr 2022 00:10:51 -0400 Subject: [PATCH] ability to disable per world cooldowns --- .../addons/parties/PartyData.java | 7 +- pom.xml | 2 +- .../references/rtpinfo/CooldownData.java | 5 +- .../references/rtpinfo/CooldownHandler.java | 88 ++++++++++--------- 4 files changed, 56 insertions(+), 46 deletions(-) diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/parties/PartyData.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/parties/PartyData.java index 6bab1d0..8642d06 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/parties/PartyData.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/parties/PartyData.java @@ -97,9 +97,10 @@ public class PartyData { BetterRTP.getInstance().getRTP().getTeleport().afterTeleport(p, loc, 0, 0, e.getOldLocation(), e.getType()); }); //Set cooldowns - if (!PermissionNode.BYPASS_COOLDOWN.check(p)) - BetterRTP.getInstance().getPlayerDataManager().getData(p).getCooldowns().put(loc.getWorld(), - new CooldownData(p.getUniqueId(), System.currentTimeMillis(), loc.getWorld())); + if (!PermissionNode.BYPASS_COOLDOWN.check(p)) { + BetterRTP.getInstance().getCooldowns().add(p, loc.getWorld()); + //BetterRTP.getInstance().getPlayerDataManager().getData(p).getCooldowns().put(loc.getWorld(), new CooldownData(p.getUniqueId(), System.currentTimeMillis(), loc.getWorld())); + } } }); } diff --git a/pom.xml b/pom.xml index ecb570e..29f27a9 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ me.SuperRonanCraft BetterRTP jar - 3.3.0 + 3.4.0 1.8 diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownData.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownData.java index 3dbf9b5..06ee387 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownData.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownData.java @@ -4,15 +4,16 @@ import lombok.Getter; import lombok.Setter; import org.bukkit.World; +import javax.annotation.Nullable; import java.util.UUID; public class CooldownData { @Getter private final UUID uuid; @Getter @Setter private Long time; - @Getter private final World world; + @Getter private final @Nullable World world; - public CooldownData(UUID uuid, Long time, World world) { + public CooldownData(UUID uuid, Long time, @Nullable World world) { this.uuid = uuid; this.time = time; this.world = world; diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownHandler.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownHandler.java index 6974fed..74ef36f 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownHandler.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownHandler.java @@ -18,7 +18,7 @@ import java.util.List; public class CooldownHandler { - @Getter boolean enabled, loaded; + @Getter boolean enabled, loaded, cooldownByWorld; private int timer, //Global Cooldown timer lockedAfter; //Rtp's before being locked @@ -36,6 +36,7 @@ public class CooldownHandler { if (enabled) { timer = config.getInt("Settings.Cooldown.Time"); lockedAfter = config.getInt("Settings.Cooldown.LockAfter"); + cooldownByWorld = config.getBoolean("Settings.Cooldown.PerWorld"); } Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { //globalCooldown.load(); @@ -47,15 +48,11 @@ public class CooldownHandler { private void checkLater() { Bukkit.getScheduler().runTaskLaterAsynchronously(BetterRTP.getInstance(), () -> { - //AtomicBoolean loaded = new AtomicBoolean(true); - //if (!globalCooldown.isLoaded()) { - // checkLater(); - // return; - //} else - if (!cooldowns.isLoaded()) { + if (cooldownByWorld && !cooldowns.isLoaded()) { checkLater(); return; - } else if (!players.isLoaded()) { + } + if (!players.isLoaded()) { checkLater(); return; } @@ -70,33 +67,39 @@ public class CooldownHandler { public void add(Player player, World world) { if (!enabled) return; PlayerData playerData = getData(player); - HashMap cooldowns = playerData.getCooldowns(); - CooldownData data = cooldowns.getOrDefault(world, new CooldownData(player.getUniqueId(), 0L, world)); - if (lockedAfter > 0) + if (cooldownByWorld) { + HashMap cooldowns = playerData.getCooldowns(); + CooldownData data = cooldowns.getOrDefault(world, new CooldownData(player.getUniqueId(), 0L, world)); playerData.setRtpCount(playerData.getRtpCount() + 1); - data.setTime(System.currentTimeMillis()); - cooldowns.put(world, data); - //getData(player).setCooldowns(data); - savePlayer(player, data, false); + data.setTime(System.currentTimeMillis()); + playerData.setGlobalCooldown(data.getTime()); + cooldowns.put(world, data); + savePlayer(player, data, false); + } else + add(player); } - public boolean exists(Player p) { - return getData(p).getCooldowns() != null; + private void add(Player player) { + if (!enabled) return; + PlayerData playerData = getData(player); + playerData.setRtpCount(playerData.getRtpCount() + 1); + playerData.setGlobalCooldown(System.currentTimeMillis()); + savePlayer(player, null, false); } @Nullable public CooldownData get(Player p, World world) { - HashMap data = getData(p).getCooldowns(); - if (data != null) - return data.getOrDefault(world, null); + PlayerData data = getData(p); + if (cooldownByWorld) { + HashMap cooldownData = getData(p).getCooldowns(); + if (data != null) + return cooldownData.getOrDefault(world, null); + } else if (data.getGlobalCooldown() > 0) { + return new CooldownData(p.getUniqueId(), data.getGlobalCooldown(), null); + } return null; } - //@Nullable - //public CooldownData getGlobal(Player p) { - // return globalCooldown.getCooldown(p.getUniqueId()); - //} - public long timeLeft(CooldownData data) { long cooldown = data.getTime(); return ((cooldown / 1000) + timer) - (System.currentTimeMillis() / 1000); @@ -125,12 +128,13 @@ public class CooldownHandler { } } - private void savePlayer(Player player, CooldownData data, boolean remove) { + private void savePlayer(Player player, @Nullable CooldownData data, boolean remove) { Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { - if (!remove) { - getDatabaseWorlds().setCooldown(data); - } else { - getDatabaseWorlds().removePlayer(data.getUuid(), data.getWorld()); + if (data != null && getDatabaseWorlds() != null) { //Per World enabled? + if (!remove) + getDatabaseWorlds().setCooldown(data); + else + getDatabaseWorlds().removePlayer(data.getUuid(), data.getWorld()); } players.setData(getData(player)); }); @@ -139,15 +143,16 @@ public class CooldownHandler { public void loadPlayer(Player player) { if (!isEnabled()) return; downloading.add(player); - for (World world : Bukkit.getWorlds()) { - PlayerData playerData = getData(player); - //Cooldowns - CooldownData cooldown = getDatabaseWorlds().getCooldown(player.getUniqueId(), world); - if (cooldown != null) - playerData.getCooldowns().put(world, cooldown); - //Player Data - players.setupData(playerData); - } + PlayerData playerData = getData(player); + if (getDatabaseWorlds() != null) //Per World enabled? + for (World world : Bukkit.getWorlds()) { + //Cooldowns + CooldownData cooldown = getDatabaseWorlds().getCooldown(player.getUniqueId(), world); + if (cooldown != null) + playerData.getCooldowns().put(world, cooldown); + } + //Player Data + players.setupData(playerData); downloading.remove(player); } @@ -155,8 +160,11 @@ public class CooldownHandler { return !downloading.contains(player); } + @Nullable private DatabaseCooldownsWorlds getDatabaseWorlds() { - return cooldowns; + if (cooldownByWorld) + return cooldowns; + return null; } private PlayerData getData(Player p) {