From 7e5123d7fea774cd7eb5b964ec9a9258b17cefcb Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Wed, 22 Dec 2021 21:01:55 +0100 Subject: [PATCH] Added functions to sync user points, remove users, and remove user points --- src/main/java/com/alttd/objects/EconUser.java | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alttd/objects/EconUser.java b/src/main/java/com/alttd/objects/EconUser.java index 27f522c..fc0a0a1 100644 --- a/src/main/java/com/alttd/objects/EconUser.java +++ b/src/main/java/com/alttd/objects/EconUser.java @@ -5,6 +5,7 @@ import com.alttd.database.Queries; import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; import org.bukkit.scheduler.BukkitRunnable; +import java.util.Collections; import java.util.Objects; import java.util.UUID; @@ -34,16 +35,49 @@ public class EconUser { pointsMap.put(villagerType, points); else pointsMap.put(villagerType, Objects.requireNonNullElse(pointsMap.get(villagerType), 0) + points); + } + + public void syncPoints() { new BukkitRunnable() { @Override public void run() { - Queries.updateUserPoints(uuid, villagerType, pointsMap.get(villagerType)); + Queries.updateUserPoints(uuid, pointsMap); } }.runTaskAsynchronously(VillagerUI.getInstance()); } + public void removePoints(int remove) { + pointsMap.forEach((villagerType, points) -> { + if (points == 0) + return; + if (points > 0) + if (points < remove) + points = 0; + else + points -= remove; + else + if (-points < remove) + points = 0; + else + points += remove; + pointsMap.put(villagerType, points); + }); + } + public static EconUser getUser(UUID uuid) { EconUser user = users.get(uuid); - return (user == null ? Queries.getEconUser(uuid) : user); + if (user == null) { + user = Queries.getEconUser(uuid); + EconUser.users.put(uuid, user); + } + return (user); + } + + public static void removeUser(UUID uuid) { + users.remove(uuid); + } + + public static void syncAllPoints() { + Collections.unmodifiableMap(users).values().forEach(EconUser::syncPoints); } }