Started using data lock

This commit is contained in:
auto committed 2022-05-15 22:39:08 +02:00
1 parent bd8c6f414c
commit e28d6c4e34
13 files changed
+109 -59

No files matched your search

+1 -23
View File
@@ -1,35 +1,13 @@
package com.alttd.events;
import com.alttd.VillagerUI;
import com.alttd.config.Config;
import com.alttd.database.Queries;
import com.alttd.objects.EconUser;
import com.alttd.util.Logger;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.UUID;
public class LoginEvent implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
final Player player = event.getPlayer();
//TODO lock user
new BukkitRunnable() {
@Override
public void run() {
UUID uuid = player.getUniqueId();
EconUser user = EconUser.getUser(uuid);
int minutes = Queries.getMinutesSinceUpdated(uuid);
user.removePoints(minutes * 2);
if (Config.DEBUG)
Logger.info("Loaded EconUser for % and removed % points",
player.getName(), String.valueOf(minutes * 2));
}
}.runTask(VillagerUI.getInstance());
EconUser.tryLoadUser(event.getPlayer().getUniqueId());
}
}
@@ -1,12 +1,17 @@
package com.alttd.events;
import com.alttd.GUI.GUI;
import com.alttd.VillagerUI;
import com.alttd.config.Config;
import com.alttd.objects.EconUser;
import com.alttd.util.Logger;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.UUID;
@@ -17,8 +22,17 @@ public class LogoutEvent implements Listener {
if (Config.DEBUG)
Logger.info("Syncing %", event.getPlayer().getName());
EconUser.getUser(uuid).syncPoints();
EconUser.removeUser(uuid);
GUI.GUIByUUID.remove(uuid);
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("try-unlock");
out.writeUTF(uuid.toString());
Bukkit.getServer().sendPluginMessage(VillagerUI.getInstance(),
"villagerui:player-data",
out.toByteArray());
EconUser user = EconUser.getUser(uuid);
if (user == null)
return;
user.syncPoints();
EconUser.removeUser(uuid);
}
}
@@ -1,22 +1,73 @@
package com.alttd.events;
import com.alttd.VillagerUI;
import com.alttd.config.Config;
import com.alttd.database.Queries;
import com.alttd.objects.EconUser;
import com.alttd.util.Logger;
import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteStreams;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;
import java.util.UUID;
public class PluginMessageListener implements org.bukkit.plugin.messaging.PluginMessageListener {
@Override
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] bytes) {
if (!channel.equals("VillagerUI:player-data")) {
if (!channel.equals("villagerui:player-data")) {
Logger.warning("Received plugin message on invalid channel");
return;
}
ByteArrayDataInput in = ByteStreams.newDataInput(bytes);
switch (in.readUTF()) {
case "try-lock-result" -> {
if (!in.readBoolean()) {
Logger.warning("Unable to lock row");
return; //TODO handle
}
UUID uuid = UUID.fromString(in.readUTF());
loadUser(uuid);
}
case "queue-lock-failed" -> Logger.warning("Encountered uuid that was locked and had a lock queued: %, lock is from %", in.readUTF(), in.readUTF());
case "try-unlock-result" -> {
if (in.readBoolean()) {
// ignore?
return;
}
Logger.severe("Unable to unlock %.", in.readUTF());
}
case "locked-queue-lock" -> {
if (!in.readBoolean()) {
Logger.warning("Got false back from locked queue lock");
return; //TODO handle
}
UUID uuid = UUID.fromString(in.readUTF());
loadUser(uuid);
}
case "check-lock-result" -> {
}
}
}
private void loadUser(UUID uuid) {
new BukkitRunnable() {
@Override
public void run() {
EconUser user = Queries.getEconUser(uuid);
int minutes = Queries.getMinutesSinceUpdated(uuid);
user.removePoints(minutes * 2);
if (Config.DEBUG)
Logger.info("Loaded EconUser for % and removed % points",
uuid.toString(), String.valueOf(minutes * 2));
EconUser.addUser(uuid, user);
EconUser.removeQueriedUser(uuid);
}
}.runTaskAsynchronously(VillagerUI.getInstance());
}
}
@@ -42,7 +42,7 @@ public class VillagerEvents implements Listener {
}
EconUser user = EconUser.getUser(player.getUniqueId());
if (user == null) {
Utilities.econSyncingMessage(player);
player.sendMiniMessage(Config.LOADING_ECON_DATA, null);
return;
}
new BukkitRunnable() {