diff --git a/pom.xml b/pom.xml
index e14dd66..c16b585 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
me.SuperRonanCraft
BetterRTP
jar
- 3.1.1
+ 3.2.0
1.8
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/BetterRTP.java b/src/main/java/me/SuperRonanCraft/BetterRTP/BetterRTP.java
index a2ab655..991d9ad 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/BetterRTP.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/BetterRTP.java
@@ -6,6 +6,7 @@ import me.SuperRonanCraft.BetterRTP.player.commands.Commands;
import me.SuperRonanCraft.BetterRTP.player.events.Listener;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP;
import me.SuperRonanCraft.BetterRTP.references.Permissions;
+import me.SuperRonanCraft.BetterRTP.references.Updater;
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseCooldowns;
import me.SuperRonanCraft.BetterRTP.references.depends.DepEconomy;
import me.SuperRonanCraft.BetterRTP.references.file.Files;
@@ -14,11 +15,8 @@ import me.SuperRonanCraft.BetterRTP.references.invs.RTPInventories;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.CooldownHandler;
import me.SuperRonanCraft.BetterRTP.references.settings.Settings;
import me.SuperRonanCraft.BetterRTP.references.web.Metrics;
-import me.SuperRonanCraft.BetterRTP.references.Updater;
-import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.List;
@@ -35,7 +33,7 @@ public class BetterRTP extends JavaPlugin {
private final RTPInventories invs = new RTPInventories();
private final PlayerInfo pInfo = new PlayerInfo();
private final Settings settings = new Settings();
- @Getter private final DatabaseCooldowns database = new DatabaseCooldowns();
+ @Getter private final DatabaseCooldowns databaseCooldowns = new DatabaseCooldowns();
@Getter private final CooldownHandler cooldowns = new CooldownHandler();
public void onEnable() {
@@ -114,6 +112,7 @@ public class BetterRTP extends JavaPlugin {
//(Re)Load all plugin systems/files/cache
private void loadAll() {
+ pInfo.unloadAll();
files.loadAll();
settings.load();
invs.load();
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/PlayerInfo.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/PlayerInfo.java
index 7b91505..323605a 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/PlayerInfo.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/PlayerInfo.java
@@ -9,6 +9,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import java.util.HashMap;
+import java.util.UUID;
public class PlayerInfo {
@@ -17,6 +18,7 @@ public class PlayerInfo {
@Getter private final HashMap invWorld = new HashMap<>();
@Getter private final HashMap invNextInv = new HashMap<>();
@Getter private final HashMap cooldown = new HashMap<>();
+ @Getter private final HashMap rtping = new HashMap<>();
//private final HashMap rtpType = new HashMap<>();
public void setInv(Player p, Inventory inv) {
@@ -41,18 +43,25 @@ public class PlayerInfo {
return invs.containsKey(p);
}
- public void clear() {
+ public void unloadAll() {
invs.clear();
invType.clear();
invWorld.clear();
invNextInv.clear();
+ cooldown.clear();
+ rtping.clear();
}
- public void clear(Player p) {
+ public void unload(Player p) {
+ clearInvs(p);
+ cooldown.remove(p);
+ rtping.remove(p);
+ }
+
+ public void clearInvs(Player p) {
invs.remove(p);
invType.remove(p);
invWorld.remove(p);
invNextInv.remove(p);
}
-
}
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java
index f9da630..2b4a721 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/Commands.java
@@ -1,6 +1,7 @@
package me.SuperRonanCraft.BetterRTP.player.commands;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
+import me.SuperRonanCraft.BetterRTP.references.rtpinfo.CooldownData;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.CooldownHandler;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPSetupInformation;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE;
@@ -13,14 +14,11 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.UUID;
public class Commands {
private final BetterRTP pl;
- public HashMap rtping = new HashMap<>();
private int delayTimer;
public List commands = new ArrayList<>();
@@ -31,7 +29,6 @@ public class Commands {
public void load() {
FileBasics.FILETYPE config = FileBasics.FILETYPE.CONFIG;
delayTimer = config.getInt("Settings.Delay.Time");
- rtping.clear();
commands.clear();
for (RTPCommandType cmd : RTPCommandType.values())
registerCommand(cmd.getCmd(), false);
@@ -154,14 +151,16 @@ public class Commands {
if (pl.getSettings().delayEnabled && delayTimer > 0) //Delay enabled?
if (!pl.getPerms().getBypassDelay(player)) //Can bypass?
delay = true;
- RTPSetupInformation setup_info = new RTPSetupInformation(world, sendi, player, true, biomes, delay, rtpType, locations);
+ //player.sendMessage("Cooldown applies: " + cooldownApplies(sendi, player));
+ RTPSetupInformation setup_info = new RTPSetupInformation(world, sendi, player, true,
+ biomes, delay, rtpType, locations, !ignoreCooldown && cooldownApplies(sendi, player)); //ignore cooldown or else
pl.getRTP().start(setup_info);
}
}
}
private boolean checkRTPing(Player player, CommandSender sendi) {
- if (rtping.containsKey(player.getUniqueId()) && rtping.get(player.getUniqueId())) {
+ if (getPl().getpInfo().getRtping().containsKey(player) && getPl().getpInfo().getRtping().get(player)) {
pl.getText().getAlready(sendi);
return false;
}
@@ -169,18 +168,20 @@ public class Commands {
}
private boolean checkCooldown(CommandSender sendi, Player player) {
- if (sendi != player || pl.getPerms().getBypassCooldown(player)) { //Bypassing/Forced?
- return true;
- } else if (getPl().getCo.isEnabled()) { //Cooling down?
- if (!.database.isLoaded()) //Cooldowns have yet to download
+ if (cooldownApplies(sendi, player)) { //Bypassing/Forced?
+ CooldownHandler cooldownHandler = getPl().getCooldowns();
+ if (!cooldownHandler.isLoaded() || !cooldownHandler.loadedPlayer(player)) { //Cooldowns have yet to download
+ pl.getText().getCooldown(sendi, String.valueOf(-1L));
return false;
- UUID id = player.getUniqueId();
- if (cooldowns.exists(id)) {
- if (cooldowns.locked(id)) { //Infinite cooldown (locked)
+ }
+ //Cooldown Data
+ CooldownData cooldownData = getPl().getCooldowns().getPlayer(player);
+ if (cooldownData != null) {
+ if (cooldownHandler.locked(cooldownData)) { //Infinite cooldown (locked)
pl.getText().getNoPermission(sendi);
return false;
} else { //Normal cooldown
- long Left = cooldowns.timeLeft(id);
+ long Left = cooldownHandler.timeLeft(cooldownData);
if (pl.getSettings().delayEnabled && !pl.getPerms().getBypassDelay(sendi))
Left = Left + delayTimer;
if (Left > 0) {
@@ -199,6 +200,18 @@ public class Commands {
return true;
}
+ private boolean cooldownOverride(CommandSender sendi, Player player) {
+ return sendi != player || pl.getPerms().getBypassCooldown(player);
+ }
+
+ private boolean cooldownEnabled() {
+ return getPl().getCooldowns().isEnabled();
+ }
+
+ private boolean cooldownApplies(CommandSender sendi, Player player) {
+ return cooldownEnabled() && !cooldownOverride(sendi, player);
+ }
+
private BetterRTP getPl() {
return BetterRTP.getInstance();
}
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Click.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Click.java
index 41ee129..bfbe761 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Click.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Click.java
@@ -21,7 +21,7 @@ public class Click {
PlayerInfo pInfo = BetterRTP.getInstance().getpInfo();
Player p = (Player) e.getWhoClicked();
RTPInventories menu = BetterRTP.getInstance().getInvs();
- menu.getInv(pInfo.getInvType(p)).clickEvent(e);
+ menu.getInv(pInfo.getInvType().get(p)).clickEvent(e);
} catch (NullPointerException ex) {
//ex.printStackTrace();
}
@@ -36,10 +36,10 @@ public class Click {
return false;
else if (e.getWhoClicked() instanceof Player) {
// Clicks the inventory
- if (!e.getInventory().equals(BetterRTP.getInstance().getpInfo().getInv((Player) e.getWhoClicked())))
+ if (!e.getInventory().equals(BetterRTP.getInstance().getpInfo().getInvs().get((Player) e.getWhoClicked())))
return false;
// Clicks their own inventory
- else if (!e.getClickedInventory().equals(BetterRTP.getInstance().getpInfo().getInv((Player) e
+ else if (!e.getClickedInventory().equals(BetterRTP.getInstance().getpInfo().getInvs().get((Player) e
.getWhoClicked()))) {
e.setCancelled(true);
return false;
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Join.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Join.java
index 2e8e161..b3091f2 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Join.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Join.java
@@ -13,7 +13,9 @@ public class Join {
void event(PlayerJoinEvent e) {
Player p = e.getPlayer();
updater(p);
- getPl().getCmd().cooldowns.loadPlayer(p.getUniqueId());
+ Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> {
+ getPl().getCooldowns().loadPlayer(p);
+ });
rtpOnFirstJoin(p);
}
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Leave.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Leave.java
index 03ad393..a3973ab 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Leave.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/events/Leave.java
@@ -1,6 +1,7 @@
package me.SuperRonanCraft.BetterRTP.player.events;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
+import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerQuitEvent;
import java.util.UUID;
@@ -9,8 +10,8 @@ class Leave {
void event(PlayerQuitEvent e) {
BetterRTP pl = BetterRTP.getInstance();
- UUID id = e.getPlayer().getUniqueId();
- pl.getCmd().rtping.remove(id);
- pl.getCmd().cooldowns.unloadPlayer(id);
+ Player p = e.getPlayer();
+ pl.getpInfo().getRtping().remove(p);
+ pl.getpInfo().unload(p);
}
}
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java
index bbb90af..c552f63 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java
@@ -1,10 +1,9 @@
package me.SuperRonanCraft.BetterRTP.player.rtp;
import lombok.Getter;
-import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
+import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.*;
-import me.SuperRonanCraft.BetterRTP.references.worlds.*;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
@@ -156,14 +155,16 @@ public class RTP {
// Economy
if (!getPl().getEco().hasBalance(sendi, pWorld))
return;
- rtp(sendi, pWorld, setup_info.delay, setup_info.rtp_type);
+ rtp(sendi, pWorld, setup_info.delay, setup_info.rtp_type, setup_info.cooldown);
}
- private void rtp(CommandSender sendi, WorldPlayer pWorld, boolean delay, RTP_TYPE type) {
+ private void rtp(CommandSender sendi, WorldPlayer pWorld, boolean delay, RTP_TYPE type, boolean cooldown) {
//Cooldown
Player p = pWorld.getPlayer();
- getPl().getCmd().cooldowns.add(p.getUniqueId());
- getPl().getCmd().rtping.put(p.getUniqueId(), true); //Cache player so they cant run '/rtp' again while rtp'ing
+ //p.sendMessage("Cooling down: " + cooldown);
+ if (cooldown)
+ getPl().getCooldowns().add(p);
+ getPl().getpInfo().getRtping().put(p, true); //Cache player so they cant run '/rtp' again while rtp'ing
//Setup player rtp methods
RTPPlayer rtpPlayer = new RTPPlayer(p, this, pWorld, type);
// Delaying? Else, just go
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java
index 720977c..ce2e240 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java
@@ -61,7 +61,7 @@ class RTPDelay implements Listener {
getPl().getRTP().getTeleport().cancelledTeleport(rtp.getPlayer());
//getPl().getEco().unCharge(rtp.getPlayer(), rtp.pWorld);
getPl().getCooldowns().removeCooldown(rtp.getPlayer());
- getPl().getCmd().rtping.put(rtp.getPlayer().getUniqueId(), false);
+ getPl().getpInfo().getRtping().put(rtp.getPlayer(), false);
Bukkit.getServer().getPluginManager().callEvent(new RTP_CancelledEvent(rtp.getPlayer()));
}
}
@@ -69,7 +69,7 @@ class RTPDelay implements Listener {
private Runnable run(final CommandSender sendi, final RTPDelay cls) {
return () -> {
HandlerList.unregisterAll(cls);
- if (getPl().getCmd().rtping.containsKey(rtp.getPlayer().getUniqueId()))
+ if (getPl().getpInfo().getRtping().containsKey(rtp.getPlayer()))
rtp.randomlyTeleport(sendi);
};
}
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPLoader.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPLoader.java
index c06c2d3..583f998 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPLoader.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPLoader.java
@@ -3,7 +3,6 @@ package me.SuperRonanCraft.BetterRTP.player.rtp;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.*;
-import me.SuperRonanCraft.BetterRTP.references.worlds.*;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.jetbrains.annotations.NotNull;
@@ -68,7 +67,7 @@ public class RTPLoader {
valids.append(type.name()).append(", ");
valids.replace(valids.length() - 2, valids.length(), "");
getPl().getLogger().severe("World Type for '" + entry.getKey() + "' is INVALID '" + entry.getValue() +
- "'. Valid ID's are: " + valids.toString());
+ "'. Valid ID's are: " + valids);
//Wrong rtp world type
}
}/* else {
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java
index f8de9ec..8c75c1e 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java
@@ -79,9 +79,9 @@ public class RTPPlayer {
getPl().getText().getFailedNotSafe(sendi, settings.maxAttempts);
else
getPl().getText().getOtherNotSafe(sendi, settings.maxAttempts, p.getName());*/
- getPl().getCmd().cooldowns.removeCooldown(p.getUniqueId());
+ getPl().getCooldowns().removeCooldown(p);
//getPl().getEco().unCharge(p, pWorld);
- getPl().getCmd().rtping.put(p.getUniqueId(), false);
+ getPl().getpInfo().getRtping().put(p, false);
}
private Location getLocAtNormal(int x, int z, World world, Float yaw, Float pitch, WorldPlayer pWorld) {
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSetupInformation.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSetupInformation.java
index 16cf528..d889033 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSetupInformation.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSetupInformation.java
@@ -11,7 +11,7 @@ public class RTPSetupInformation {
public String world;
public CommandSender sender;
public Player player;
- public boolean personalized;
+ public boolean personalized, cooldown;
public List biomes;
public WorldLocations location;
public boolean delay;
@@ -22,7 +22,12 @@ public class RTPSetupInformation {
}
public RTPSetupInformation(String world, CommandSender sender, Player player, boolean personalized, List biomes,
- boolean delay, RTP_TYPE rtp_type, WorldLocations location) {
+ boolean delay, RTP_TYPE rtp_type, WorldLocations location) {
+ this(world, sender, player, personalized, biomes, delay, rtp_type, location, true);
+ }
+
+ public RTPSetupInformation(String world, CommandSender sender, Player player, boolean personalized, List biomes,
+ boolean delay, RTP_TYPE rtp_type, WorldLocations location, boolean cooldown) {
this.world = world;
this.sender = sender;
this.player = player;
@@ -37,5 +42,6 @@ public class RTPSetupInformation {
else if (this.location != null)
this.world = this.location.getWorld().getName();
}
+ this.cooldown = cooldown;
}
}
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java
index cd22295..b344813 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java
@@ -62,7 +62,7 @@ public class RTPTeleport {
afterTeleport(p, loc, price, attempts, oldLoc, type);
if (sendi != p) //Tell player who requested that the player rtp'd
sendSuccessMsg(sendi, p.getName(), loc, price, false, attempts);
- getPl().getCmd().rtping.remove(p.getUniqueId()); //No longer rtp'ing
+ getPl().getpInfo().getRtping().remove(p); //No longer rtp'ing
//Save respawn location if first join
if (type == RTP_TYPE.JOIN) //RTP Type was Join
if (BetterRTP.getInstance().getSettings().rtpOnFirstJoin_SetAsRespawn) //Save as respawn is enabled
@@ -70,7 +70,7 @@ public class RTPTeleport {
}
});
} catch (Exception e) {
- getPl().getCmd().rtping.remove(p.getUniqueId()); //No longer rtp'ing (errored)
+ getPl().getpInfo().getRtping().remove(p); //No longer rtp'ing (errored)
e.printStackTrace();
}
}
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabaseCooldowns.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabaseCooldowns.java
index 0d059c9..62d0be7 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabaseCooldowns.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabaseCooldowns.java
@@ -43,7 +43,7 @@ public class DatabaseCooldowns extends SQLite {
return sqlUpdate(sql, params);
}
- public List