diff --git a/pom.xml b/pom.xml
index f6bcf4d..a9470d3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -171,6 +171,12 @@
4.9.2
provided
+
+ com.google.guava
+ guava
+ 33.1.0-jre
+ compile
+
\ No newline at end of file
diff --git a/src/main/java/cc/fascinated/Aetheria.java b/src/main/java/cc/fascinated/Aetheria.java
index ed3c003..bd3233a 100644
--- a/src/main/java/cc/fascinated/Aetheria.java
+++ b/src/main/java/cc/fascinated/Aetheria.java
@@ -4,12 +4,12 @@ import cc.fascinated.account.AccountManager;
import cc.fascinated.chat.ChatManager;
import cc.fascinated.command.CommandManager;
import cc.fascinated.commandspy.CommandSpyManager;
-import cc.fascinated.commandspy.command.CommandSpyCommand;
import cc.fascinated.event.EventManager;
import cc.fascinated.metrics.MetricManager;
import cc.fascinated.motd.MotdManager;
import cc.fascinated.placeholder.PlaceholderManager;
import cc.fascinated.playercolor.PlayerColorManager;
+import cc.fascinated.renderdistance.RenderDistanceManager;
import cc.fascinated.utils.BuildData;
import cc.fascinated.worldsize.WorldSizeManager;
import lombok.Getter;
@@ -49,5 +49,6 @@ public class Aetheria extends JavaPlugin {
new ChatManager();
new MotdManager();
new CommandSpyManager();
+ new RenderDistanceManager();
}
}
\ No newline at end of file
diff --git a/src/main/java/cc/fascinated/account/AccountManager.java b/src/main/java/cc/fascinated/account/AccountManager.java
index 3f95a44..b184fe1 100644
--- a/src/main/java/cc/fascinated/account/AccountManager.java
+++ b/src/main/java/cc/fascinated/account/AccountManager.java
@@ -10,6 +10,8 @@ import cc.fascinated.utils.DiscordWebhook;
import cc.fascinated.utils.Manager;
import cc.fascinated.utils.Priority;
import cc.fascinated.utils.Style;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
import com.viaversion.viaversion.api.Via;
import lombok.extern.log4j.Log4j2;
import org.bukkit.Bukkit;
@@ -30,7 +32,16 @@ import java.util.concurrent.TimeUnit;
public class AccountManager extends Manager implements Listener {
private final long SAVE_INTERVAL = 5; // in minutes
- private static final Map ACCOUNTS = new HashMap<>();
+ private static final Cache ACCOUNTS = CacheBuilder.newBuilder()
+ .expireAfterAccess(30, TimeUnit.MINUTES)
+ .removalListener(notification -> {
+ Account account = (Account) notification.getValue();
+ if (account != null) {
+ account.save(); // Save the account when it is removed from the cache
+ log.info("Saved account for {} because it was removed from the cache.", account.getName());
+ }
+ })
+ .build();
public AccountManager() {
CommandManager.registerCommand(new SaveAccountsCommand());
@@ -57,7 +68,7 @@ public class AccountManager extends Manager implements Listener {
* @return the account
*/
public static Account getAccount(UUID uuid) {
- return ACCOUNTS.get(uuid);
+ return ACCOUNTS.getIfPresent(uuid);
}
/**
@@ -67,7 +78,7 @@ public class AccountManager extends Manager implements Listener {
* @return true if the account is already registered, false otherwise
*/
private boolean isAccountLoaded(UUID uuid) {
- return ACCOUNTS.containsKey(uuid);
+ return ACCOUNTS.getIfPresent(uuid) != null;
}
/**
@@ -87,7 +98,8 @@ public class AccountManager extends Manager implements Listener {
long before = System.currentTimeMillis(),
saved = 0; // The amount of accounts that were saved
log.info("Saving accounts...");
- for (Account account : ACCOUNTS.values()) {
+ for (Map.Entry entry : ACCOUNTS.asMap().entrySet()) {
+ Account account = entry.getValue();
boolean didSave = account.save(); // Save the account
if (didSave) {
saved++;
@@ -148,13 +160,10 @@ public class AccountManager extends Manager implements Listener {
.replace("%player%", event.getPlayer().getName())
.replace("player-color", account.getPlayerColorProfile().getColor().toString())
));
- account.save(); // Save the account
- ACCOUNTS.remove(account.getUuid()); // Remove the account from the cache
}
@Override
public void onAetheriaDisable() {
saveAccounts(); // Save the accounts to disk
- ACCOUNTS.clear(); // Remove the accounts from the cache
}
}
diff --git a/src/main/java/cc/fascinated/commandspy/CommandSpyManager.java b/src/main/java/cc/fascinated/commandspy/CommandSpyManager.java
index b3695bb..b752c0e 100644
--- a/src/main/java/cc/fascinated/commandspy/CommandSpyManager.java
+++ b/src/main/java/cc/fascinated/commandspy/CommandSpyManager.java
@@ -41,6 +41,9 @@ public class CommandSpyManager extends Manager {
@Override
public void onCommandPreProcess(Account account, PlayerCommandPreprocessEvent event) {
for (Account commandSpyAccount : COMMAND_SPY_ENABLED) {
+ if (account.equals(commandSpyAccount)) { // Don't send the command to the account that executed it
+ continue;
+ }
commandSpyAccount.sendMessage(Lang.COMMAND_SPY_FORMAT.getAsString()
.replace("player-color", account.getPlayerColorProfile().getColor().toString())
.replace("%player%", account.getName())