Moved to using DataLock API

This commit is contained in:
Teriuihi 2023-01-03 22:51:50 +01:00
parent 9ef6d87d0a
commit 5ce29f3967
7 changed files with 93 additions and 96 deletions

View File

@ -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")
}

View File

@ -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() {

View File

@ -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());
}
}
}

View File

@ -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());
}

View File

@ -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());
}
}

View File

@ -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());
}

View File

@ -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);
}
}