From 5ce29f39671f322bcd2b381b396441e2a91658f6 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Tue, 3 Jan 2023 22:51:50 +0100 Subject: [PATCH] Moved to using DataLock API --- build.gradle.kts | 1 + src/main/java/com/alttd/VillagerUI.java | 15 ++-- src/main/java/com/alttd/events/DataLock.java | 44 ++++++++++++ .../java/com/alttd/events/LogoutEvent.java | 11 +-- .../alttd/events/PluginMessageListener.java | 72 ------------------- src/main/java/com/alttd/objects/EconUser.java | 16 ++--- src/main/java/com/alttd/util/LoadUser.java | 30 ++++++++ 7 files changed, 93 insertions(+), 96 deletions(-) create mode 100644 src/main/java/com/alttd/events/DataLock.java delete mode 100644 src/main/java/com/alttd/events/PluginMessageListener.java create mode 100644 src/main/java/com/alttd/util/LoadUser.java diff --git a/build.gradle.kts b/build.gradle.kts index fa8eff4..697b1cb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -65,4 +65,5 @@ dependencies { compileOnly("com.github.milkbowl:VaultAPI:1.7") { exclude("org.bukkit","bukkit") } + compileOnly("com.alttd.datalock:api:1.1.0-SNAPSHOT") } \ No newline at end of file diff --git a/src/main/java/com/alttd/VillagerUI.java b/src/main/java/com/alttd/VillagerUI.java index 5c0592c..54446fd 100644 --- a/src/main/java/com/alttd/VillagerUI.java +++ b/src/main/java/com/alttd/VillagerUI.java @@ -7,6 +7,7 @@ import com.alttd.config.Config; import com.alttd.config.VillagerConfig; import com.alttd.config.WorthConfig; import com.alttd.database.Queries; +import com.alttd.datalock.DataLockAPI; import com.alttd.events.*; import com.alttd.logging.LogInOut; import com.alttd.objects.EconUser; @@ -44,12 +45,13 @@ public class VillagerUI extends JavaPlugin { return; Database.getDatabase().init(); scheduleTasks(); - getServer().getMessenger().registerOutgoingPluginChannel(this, "villagerui:player-data"); - getServer().getMessenger().registerIncomingPluginChannel(this, "villagerui:player-data", new PluginMessageListener()); - if (Config.DEBUG) { - Logger.info("Incoming: %\nOutgoing: %", - getServer().getMessenger().getIncomingChannels().toString(), - getServer().getMessenger().getOutgoingChannels().toString()); + DataLockAPI dataLockAPI = DataLockAPI.get(); + if (dataLockAPI == null) { + Logger.severe("Unable to load datalockapi"); + } else if (dataLockAPI.isActiveChannel("villagerui:player-data")) { + Logger.warning("Unable to register aquest channel"); + } else { + dataLockAPI.registerChannel("villagerui:player-data"); } Logger.info("--------------------------------------------------"); Logger.info("Villager UI started"); @@ -92,6 +94,7 @@ public class VillagerUI extends JavaPlugin { getServer().getPluginManager().registerEvents(new LoginEvent(), this); getServer().getPluginManager().registerEvents(new VehicleEvent(), this); getServer().getPluginManager().registerEvents(new SpawnShopListener(logInOut), this); + getServer().getPluginManager().registerEvents(new DataLock(), this); } public Economy getEconomy() { diff --git a/src/main/java/com/alttd/events/DataLock.java b/src/main/java/com/alttd/events/DataLock.java new file mode 100644 index 0000000..1b43498 --- /dev/null +++ b/src/main/java/com/alttd/events/DataLock.java @@ -0,0 +1,44 @@ +package com.alttd.events; + +import com.alttd.VillagerUI; +import com.alttd.config.Config; +import com.alttd.datalock.LockResponseEvent; +import com.alttd.util.LoadUser; +import com.alttd.util.Logger; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.UUID; + +public class DataLock implements Listener { + + @EventHandler + public void onLockResponseEvent(LockResponseEvent event) { + UUID uuid; + try { + uuid = UUID.fromString(event.getData()); + } catch (Exception e) { + Logger.warning("Invalid data received from lock response event [%]", event.getData()); + return; + } + if (Config.DEBUG) { + Logger.info("Received lock response: channel: [%], response type: [%], data: [%]", event.getChannel(), event.getResponseType().toString(), event.getData()); + } + switch (event.getResponseType()) { + case TRY_LOCK_RESULT -> { + if (!event.getResult()) + return; + new LoadUser(uuid).runTaskAsynchronously(VillagerUI.getInstance()); + } + case QUEUE_LOCK_FAILED -> { + Logger.warning("Unable to queue lock"); + } + case TRY_UNLOCK_RESULT -> { + if (event.getResult()) + return; + Logger.warning("Unable to unlock user [%]", uuid.toString()); + } + default -> Logger.warning("Received unimplemented response type [%]", event.getResponseType().toString()); + } + } +} diff --git a/src/main/java/com/alttd/events/LogoutEvent.java b/src/main/java/com/alttd/events/LogoutEvent.java index 0a363c6..15916e5 100644 --- a/src/main/java/com/alttd/events/LogoutEvent.java +++ b/src/main/java/com/alttd/events/LogoutEvent.java @@ -3,11 +3,9 @@ package com.alttd.events; import com.alttd.GUI.GUI; import com.alttd.VillagerUI; import com.alttd.config.Config; +import com.alttd.datalock.DataLockAPI; 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; @@ -31,12 +29,7 @@ public class LogoutEvent implements Listener { user.syncPoints(); EconUser.removeUser(uuid); } - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - out.writeUTF("try-unlock"); - out.writeUTF(uuid.toString()); - Bukkit.getServer().sendPluginMessage(VillagerUI.getInstance(), - "villagerui:player-data", - out.toByteArray()); + DataLockAPI.get().tryUnlock("villagerui:player-data", uuid.toString()); } }.runTaskAsynchronously(VillagerUI.getInstance()); } diff --git a/src/main/java/com/alttd/events/PluginMessageListener.java b/src/main/java/com/alttd/events/PluginMessageListener.java deleted file mode 100644 index df79468..0000000 --- a/src/main/java/com/alttd/events/PluginMessageListener.java +++ /dev/null @@ -1,72 +0,0 @@ -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; -import java.util.stream.Collectors; - -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")) { - 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); - if (Config.DEBUG) - Logger.info("Loaded EconUser % with the following points:\n%", - uuid.toString(), user.getPointsMap().object2ObjectEntrySet().stream() - .map(entry -> entry.getKey() + " - " + entry.getValue().toString()) - .collect(Collectors.joining("\n"))); - int minutes = Queries.getMinutesSinceUpdated(uuid); - user.removePoints(minutes * 2); - } - }.runTaskAsynchronously(VillagerUI.getInstance()); - } -} diff --git a/src/main/java/com/alttd/objects/EconUser.java b/src/main/java/com/alttd/objects/EconUser.java index bcadbff..43624a6 100644 --- a/src/main/java/com/alttd/objects/EconUser.java +++ b/src/main/java/com/alttd/objects/EconUser.java @@ -3,15 +3,18 @@ package com.alttd.objects; import com.alttd.VillagerUI; import com.alttd.config.Config; import com.alttd.database.Queries; +import com.alttd.datalock.DataLockAPI; import com.alttd.util.Logger; -import com.google.common.io.ByteArrayDataOutput; -import com.google.common.io.ByteStreams; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.Unmodifiable; -import java.util.*; +import java.util.Collections; +import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; public class EconUser { @@ -124,12 +127,7 @@ public class EconUser { new BukkitRunnable() { @Override public void run() { - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - out.writeUTF("try-lock"); - out.writeUTF(uuid.toString()); - Bukkit.getServer().sendPluginMessage(VillagerUI.getInstance(), - "villagerui:player-data", - out.toByteArray()); + DataLockAPI.get().tryLock("villagerui:player-data", uuid.toString()); } }.runTaskAsynchronously(VillagerUI.getInstance()); } diff --git a/src/main/java/com/alttd/util/LoadUser.java b/src/main/java/com/alttd/util/LoadUser.java new file mode 100644 index 0000000..c9757b9 --- /dev/null +++ b/src/main/java/com/alttd/util/LoadUser.java @@ -0,0 +1,30 @@ +package com.alttd.util; + +import com.alttd.config.Config; +import com.alttd.database.Queries; +import com.alttd.objects.EconUser; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.UUID; +import java.util.stream.Collectors; + +public class LoadUser extends BukkitRunnable { + + UUID uuid; + + public LoadUser(UUID uuid) { + this.uuid = uuid; + } + + @Override + public void run() { + EconUser user = Queries.getEconUser(uuid); + if (Config.DEBUG) + Logger.info("Loaded EconUser % with the following points:\n%", + uuid.toString(), user.getPointsMap().object2ObjectEntrySet().stream() + .map(entry -> entry.getKey() + " - " + entry.getValue().toString()) + .collect(Collectors.joining("\n"))); + int minutes = Queries.getMinutesSinceUpdated(uuid); + user.removePoints(minutes * 2); + } +}