diff --git a/src/main/java/com/alttd/objects/EconUser.java b/src/main/java/com/alttd/objects/EconUser.java index 2582fa5..34952ed 100644 --- a/src/main/java/com/alttd/objects/EconUser.java +++ b/src/main/java/com/alttd/objects/EconUser.java @@ -8,17 +8,18 @@ import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.Unmodifiable; -import java.io.ByteArrayOutputStream; import java.util.*; +import java.util.concurrent.LinkedBlockingQueue; import java.util.stream.Collectors; public class EconUser { - private final static Object2ObjectArrayMap users = new Object2ObjectArrayMap<>(); + private static Object2ObjectArrayMap users = new Object2ObjectArrayMap<>(); + private final static Queue addQueue = new LinkedBlockingQueue<>(); + private final static Queue removeQueue = new LinkedBlockingQueue<>(); private final UUID uuid; private final Object2ObjectArrayMap pointsMap; @@ -26,7 +27,8 @@ public class EconUser { public EconUser(UUID uuid, Object2ObjectArrayMap points) { this.uuid = uuid; this.pointsMap = points; - users.put(this.uuid, this); + addQueue.offer(this); + updateUsers(); if (Config.DEBUG) Logger.info("Created EconUser for: %", uuid.toString()); } @@ -137,7 +139,30 @@ public class EconUser { queriedUsers.remove(uuid); if (Config.DEBUG) Logger.info("Unloading EconUser %", uuid.toString()); - users.remove(uuid); + EconUser user = users.get(uuid); + if (user == null) + return; + removeQueue.offer(user); + updateUsers(); + } + + private static void updateUsers() { + if (addQueue.isEmpty() && removeQueue.isEmpty()) + return; + Object2ObjectArrayMap tmp = new Object2ObjectArrayMap<>(users); + while (!addQueue.isEmpty()) { + EconUser user = addQueue.poll(); + if (user == null) + continue; + tmp.put(user.getUuid(), user); + } + while (!removeQueue.isEmpty()) { + EconUser user = addQueue.poll(); + if (user == null) + continue; + tmp.remove(user.getUuid()); + } + users = tmp; } @Unmodifiable