Started rework for datalockapi

This commit is contained in:
Teriuihi 2022-12-05 21:35:39 +01:00
parent 785ca2f044
commit ba4fff6676
10 changed files with 241 additions and 147 deletions

View File

@ -45,5 +45,5 @@ tasks {
dependencies { dependencies {
compileOnly("com.alttd:Galaxy-API:1.19-R0.1-SNAPSHOT") compileOnly("com.alttd:Galaxy-API:1.19-R0.1-SNAPSHOT")
implementation("com.alttd:DataLockLib:1.0.0-SNAPSHOT") compileOnly("com.alttd.datalock:api:1.1.0-SNAPSHOT")
} }

View File

@ -6,6 +6,7 @@ import com.alttd.altitudequests.events.*;
import com.alttd.altitudequests.objects.Quest; import com.alttd.altitudequests.objects.Quest;
import com.alttd.altitudequests.util.Logger; import com.alttd.altitudequests.util.Logger;
import com.alttd.altitudequests.util.Utilities; import com.alttd.altitudequests.util.Utilities;
import com.alttd.datalock.DataLockAPI;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
@ -28,6 +29,14 @@ public final class AQuest extends JavaPlugin {
registerEvents(); registerEvents();
new CommandManager(); new CommandManager();
scheduleTasks(); scheduleTasks();
DataLockAPI dataLockAPI = DataLockAPI.get();
if (dataLockAPI == null) {
Logger.severe("Unable to load datalockapi");
} else if (dataLockAPI.isActiveChannel("aquest")) {
Logger.warning("Unable to register aquest channel");
} else {
dataLockAPI.registerChannel("aquest:player-data");
}
Logger.info("--------------------------------------------------"); Logger.info("--------------------------------------------------");
Logger.info("AQuest started"); Logger.info("AQuest started");
@ -59,8 +68,8 @@ public final class AQuest extends JavaPlugin {
getServer().getPluginManager().registerEvents(new EntityBucketed(), this); getServer().getPluginManager().registerEvents(new EntityBucketed(), this);
getServer().getPluginManager().registerEvents(new EntityBreed(), this); getServer().getPluginManager().registerEvents(new EntityBreed(), this);
getServer().getPluginManager().registerEvents(new DonNotMessWithNPC(), this); getServer().getPluginManager().registerEvents(new DonNotMessWithNPC(), this);
getServer().getMessenger().registerOutgoingPluginChannel(this, "aquest:player-data"); // getServer().getMessenger().registerOutgoingPluginChannel(this, "aquest:player-data");
getServer().getMessenger().registerIncomingPluginChannel(this, "aquest:player-data", new PluginMessageListener()); // getServer().getMessenger().registerIncomingPluginChannel(this, "aquest:player-data", new PluginMessageListener());
} }
private static int yearDay = Utilities.getYearDay(); private static int yearDay = Utilities.getYearDay();

View File

@ -0,0 +1,34 @@
package com.alttd.altitudequests.commands.subcommands;
import com.alttd.altitudequests.commands.SubCommand;
import org.bukkit.command.CommandSender;
import java.util.List;
public class CommandProgress extends SubCommand {
//TODO show player current quest progress
@Override
public boolean onCommand(CommandSender commandSender, String[] args) {
return false;
}
@Override
public String getName() {
return "progress";
}
@Override
public List<String> getTabComplete(CommandSender commandSender, String[] args) {
return null;
}
@Override
public String getHelpMessage() {
return null;
}
@Override
public boolean shouldTabComplete() {
return true;
}
}

View File

@ -1,32 +0,0 @@
package com.alttd.altitudequests.database;
import com.alttd.altitudequests.util.Logger;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.UUID;
public class Queries {
public static int setUserProgress(UUID uuid, int progress) {
String sql = "INSERT VALUES (?, ?) INTO user_seen " +
"WHERE uuid = ?" +
"ON DUPLICATE KEY UPDATE progress = ?";
long time;
try {
PreparedStatement preparedStatement = Database.getDatabase().getConnection().prepareStatement(sql);
preparedStatement.setString(1, uuid.toString());
preparedStatement.setInt(3, progress);
preparedStatement.setString(4, uuid.toString());
preparedStatement.setInt(6, progress);
preparedStatement.execute();
} catch (SQLException e) {
e.printStackTrace();
Logger.warning("Unable to set progress for %.", uuid.toString());
}
return (0);
}
}

View File

@ -0,0 +1,40 @@
package com.alttd.altitudequests.events;
import com.alttd.altitudequests.AQuest;
import com.alttd.altitudequests.util.LoadUser;
import com.alttd.altitudequests.util.Logger;
import com.alttd.datalock.LockResponseEvent;
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;
}
switch (event.getResponseType()) {
case TRY_LOCK_RESULT -> {
if (!event.getResult())
return;
new LoadUser(uuid).runTaskAsynchronously(AQuest.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

@ -4,6 +4,7 @@ import com.alttd.altitudequests.AQuest;
import com.alttd.altitudequests.config.Config; import com.alttd.altitudequests.config.Config;
import com.alttd.altitudequests.objects.Quest; import com.alttd.altitudequests.objects.Quest;
import com.alttd.altitudequests.util.Logger; import com.alttd.altitudequests.util.Logger;
import com.alttd.datalock.DataLockAPI;
import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -26,12 +27,7 @@ public class LogoutEvent implements Listener {
if (Config.DEBUG) if (Config.DEBUG)
Logger.info("Syncing %", event.getPlayer().getName()); Logger.info("Syncing %", event.getPlayer().getName());
Quest.unloadUser(uuid); Quest.unloadUser(uuid);
ByteArrayDataOutput out = ByteStreams.newDataOutput(); DataLockAPI.get().tryUnlock("aquest:player-data", uuid.toString());
out.writeUTF("try-unlock");
out.writeUTF(uuid.toString());
Bukkit.getServer().sendPluginMessage(AQuest.getInstance(),
"aquest:player-data",
out.toByteArray());
} }
}.runTaskAsynchronously(AQuest.getInstance()); }.runTaskAsynchronously(AQuest.getInstance());
} }

View File

@ -1,98 +1,98 @@
package com.alttd.altitudequests.events; //package com.alttd.altitudequests.events;
//
import com.alttd.altitudequests.AQuest; //import com.alttd.altitudequests.AQuest;
import com.alttd.altitudequests.config.Config; //import com.alttd.altitudequests.config.Config;
import com.alttd.altitudequests.database.Database; //import com.alttd.altitudequests.database.Database;
import com.alttd.altitudequests.objects.Quest; //import com.alttd.altitudequests.objects.Quest;
import com.alttd.altitudequests.util.Logger; //import com.alttd.altitudequests.util.Logger;
import com.alttd.altitudequests.util.Utilities; //import com.alttd.altitudequests.util.Utilities;
import com.google.common.io.ByteArrayDataInput; //import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteStreams; //import com.google.common.io.ByteStreams;
import org.bukkit.Bukkit; //import org.bukkit.Bukkit;
import org.bukkit.entity.Player; //import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; //import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull; //import org.jetbrains.annotations.NotNull;
//
import java.sql.PreparedStatement; //import java.sql.PreparedStatement;
import java.sql.ResultSet; //import java.sql.ResultSet;
import java.sql.SQLException; //import java.sql.SQLException;
import java.util.UUID; //import java.util.UUID;
//
public class PluginMessageListener implements org.bukkit.plugin.messaging.PluginMessageListener { //public class PluginMessageListener implements org.bukkit.plugin.messaging.PluginMessageListener {
//
@Override // @Override
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] bytes) { // public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] bytes) {
if (!channel.equals("aquest:player-data")) { // if (!channel.equals("aquest:player-data")) {
Logger.warning("Received plugin message on invalid channel"); // Logger.warning("Received plugin message on invalid channel");
return; // return;
} // }
ByteArrayDataInput in = ByteStreams.newDataInput(bytes); // ByteArrayDataInput in = ByteStreams.newDataInput(bytes);
switch (in.readUTF()) { // switch (in.readUTF()) {
case "try-lock-result" -> { // case "try-lock-result" -> {
if (!in.readBoolean()) { // if (!in.readBoolean()) {
Logger.warning("Unable to lock row"); // Logger.warning("Unable to lock row");
return; // return;
} // }
UUID uuid = UUID.fromString(in.readUTF()); // UUID uuid = UUID.fromString(in.readUTF());
if (Config.DEBUG) // if (Config.DEBUG)
Logger.info("Received positive log result for %, loading user", uuid.toString()); // Logger.info("Received positive log result for %, loading user", uuid.toString());
loadUser(uuid); // 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 "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" -> { // case "try-unlock-result" -> {
if (in.readBoolean()) { // if (in.readBoolean()) {
// ignore? // // ignore?
return; // return;
} // }
Logger.severe("Unable to unlock %.", in.readUTF()); // Logger.severe("Unable to unlock %.", in.readUTF());
} // }
case "locked-queue-lock" -> { // case "locked-queue-lock" -> {
if (!in.readBoolean()) { // if (!in.readBoolean()) {
Logger.warning("Got false back from locked queue lock"); // Logger.warning("Got false back from locked queue lock");
return; // return;
} // }
UUID uuid = UUID.fromString(in.readUTF()); // UUID uuid = UUID.fromString(in.readUTF());
if (Config.DEBUG) // if (Config.DEBUG)
Logger.info("Received positive log result for %, loading user", uuid.toString()); // Logger.info("Received positive log result for %, loading user", uuid.toString());
loadUser(uuid); // loadUser(uuid);
} // }
case "check-lock-result" -> { // case "check-lock-result" -> {
//
} // }
} // }
} // }
//
private void loadUser(UUID uuid) { // private void loadUser(UUID uuid) {
new BukkitRunnable() { // new BukkitRunnable() {
@Override // @Override
public void run() { // public void run() {
String sql = "SELECT * FROM generic_quest_progress WHERE uuid = ?"; // String sql = "SELECT * FROM generic_quest_progress WHERE uuid = ?";
try { // try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql); // PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
statement.setString(1, uuid.toString()); // statement.setString(1, uuid.toString());
ResultSet resultSet = statement.executeQuery(); // ResultSet resultSet = statement.executeQuery();
if (resultSet.next() && resultSet.getInt("year_day") == Utilities.getYearDay()) { // if (resultSet.next() && resultSet.getInt("year_day") == Utilities.getYearDay()) {
if (Quest.loadDailyQuest( // if (Quest.loadDailyQuest(
resultSet.getString("quest"), // resultSet.getString("quest"),
resultSet.getString("quest_variant"), // resultSet.getString("quest_variant"),
resultSet.getInt("step_1_progress"), // resultSet.getInt("step_1_progress"),
resultSet.getInt("step_2_progress"), // resultSet.getInt("step_2_progress"),
uuid, // uuid,
resultSet.getInt("amount"), // resultSet.getInt("amount"),
resultSet.getInt("reward_received") == 1)) { // resultSet.getInt("reward_received") == 1)) {
if (Config.DEBUG) // if (Config.DEBUG)
Logger.info("Loading daily quest for %", uuid.toString()); // Logger.info("Loading daily quest for %", uuid.toString());
return; // return;
} else // } else
Logger.warning("Unable to load quest for %, creating new quest...", uuid.toString()); // Logger.warning("Unable to load quest for %, creating new quest...", uuid.toString());
} // }
} catch (SQLException exception) { // } catch (SQLException exception) {
exception.printStackTrace(); // exception.printStackTrace();
} // }
if (Config.DEBUG) // if (Config.DEBUG)
Logger.info("Creating new daily quest for %", uuid.toString()); // Logger.info("Creating new daily quest for %", uuid.toString());
Quest.createDailyQuest(Bukkit.getPlayer(uuid)); // Quest.createDailyQuest(Bukkit.getPlayer(uuid));
} // }
}.runTaskAsynchronously(AQuest.getInstance()); // }.runTaskAsynchronously(AQuest.getInstance());
} // }
} //}

View File

@ -10,8 +10,7 @@ import com.alttd.altitudequests.objects.quests.KillMobsQuest;
import com.alttd.altitudequests.objects.quests.MineQuest; import com.alttd.altitudequests.objects.quests.MineQuest;
import com.alttd.altitudequests.util.Logger; import com.alttd.altitudequests.util.Logger;
import com.alttd.altitudequests.util.Utilities; import com.alttd.altitudequests.util.Utilities;
import com.google.common.io.ByteArrayDataOutput; import com.alttd.datalock.DataLockAPI;
import com.google.common.io.ByteStreams;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@ -141,12 +140,7 @@ public abstract class Quest {
new BukkitRunnable() { new BukkitRunnable() {
@Override @Override
public void run() { public void run() {
ByteArrayDataOutput out = ByteStreams.newDataOutput(); DataLockAPI.get().tryLock("aquest:player-data", uuid.toString());
out.writeUTF("try-lock");
out.writeUTF(uuid.toString());
Bukkit.getServer().sendPluginMessage(AQuest.getInstance(),
"aquest:player-data",
out.toByteArray());
if (Config.DEBUG) if (Config.DEBUG)
Logger.info("Send lock request for %", uuid.toString()); Logger.info("Send lock request for %", uuid.toString());
} }

View File

@ -0,0 +1,51 @@
package com.alttd.altitudequests.util;
import com.alttd.altitudequests.config.Config;
import com.alttd.altitudequests.database.Database;
import com.alttd.altitudequests.objects.Quest;
import org.bukkit.Bukkit;
import org.bukkit.scheduler.BukkitRunnable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;
public class LoadUser extends BukkitRunnable {
UUID uuid;
public LoadUser(UUID uuid) {
this.uuid = uuid;
}
@Override
public void run() {
String sql = "SELECT * FROM generic_quest_progress WHERE uuid = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
statement.setString(1, uuid.toString());
ResultSet resultSet = statement.executeQuery();
if (resultSet.next() && resultSet.getInt("year_day") == Utilities.getYearDay()) {
if (Quest.loadDailyQuest(
resultSet.getString("quest"),
resultSet.getString("quest_variant"),
resultSet.getInt("step_1_progress"),
resultSet.getInt("step_2_progress"),
uuid,
resultSet.getInt("amount"),
resultSet.getInt("reward_received") == 1)) {
if (Config.DEBUG)
Logger.info("Loading daily quest for %", uuid.toString());
return;
} else
Logger.warning("Unable to load quest for %, creating new quest...", uuid.toString());
}
} catch (SQLException exception) {
exception.printStackTrace();
}
if (Config.DEBUG)
Logger.info("Creating new daily quest for %", uuid.toString());
Quest.createDailyQuest(Bukkit.getPlayer(uuid));
}
}

View File

@ -4,6 +4,8 @@ main: com.alttd.altitudequests.AQuest
api-version: 1.18 api-version: 1.18
authors: [ Teriuihi ] authors: [ Teriuihi ]
description: A plugin to run quests on a server description: A plugin to run quests on a server
depend:
- DataLockLib
commands: commands:
aquest: aquest:
permission: aquest.use permission: aquest.use