diff --git a/build.gradle.kts b/build.gradle.kts index 2b75c3c..bfb87eb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -45,5 +45,5 @@ tasks { dependencies { 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") } \ No newline at end of file diff --git a/src/main/java/com/alttd/altitudequests/AQuest.java b/src/main/java/com/alttd/altitudequests/AQuest.java index 40ae009..f3131ec 100644 --- a/src/main/java/com/alttd/altitudequests/AQuest.java +++ b/src/main/java/com/alttd/altitudequests/AQuest.java @@ -6,6 +6,7 @@ import com.alttd.altitudequests.events.*; import com.alttd.altitudequests.objects.Quest; import com.alttd.altitudequests.util.Logger; import com.alttd.altitudequests.util.Utilities; +import com.alttd.datalock.DataLockAPI; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; @@ -28,6 +29,14 @@ public final class AQuest extends JavaPlugin { registerEvents(); new CommandManager(); 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("AQuest started"); @@ -59,8 +68,8 @@ public final class AQuest extends JavaPlugin { getServer().getPluginManager().registerEvents(new EntityBucketed(), this); getServer().getPluginManager().registerEvents(new EntityBreed(), this); getServer().getPluginManager().registerEvents(new DonNotMessWithNPC(), this); - getServer().getMessenger().registerOutgoingPluginChannel(this, "aquest:player-data"); - getServer().getMessenger().registerIncomingPluginChannel(this, "aquest:player-data", new PluginMessageListener()); +// getServer().getMessenger().registerOutgoingPluginChannel(this, "aquest:player-data"); +// getServer().getMessenger().registerIncomingPluginChannel(this, "aquest:player-data", new PluginMessageListener()); } private static int yearDay = Utilities.getYearDay(); diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandProgress.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandProgress.java new file mode 100644 index 0000000..4039b33 --- /dev/null +++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandProgress.java @@ -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 getTabComplete(CommandSender commandSender, String[] args) { + return null; + } + + @Override + public String getHelpMessage() { + return null; + } + + @Override + public boolean shouldTabComplete() { + return true; + } +} diff --git a/src/main/java/com/alttd/altitudequests/database/Queries.java b/src/main/java/com/alttd/altitudequests/database/Queries.java deleted file mode 100644 index 10a820b..0000000 --- a/src/main/java/com/alttd/altitudequests/database/Queries.java +++ /dev/null @@ -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); - } -} diff --git a/src/main/java/com/alttd/altitudequests/events/DataLock.java b/src/main/java/com/alttd/altitudequests/events/DataLock.java new file mode 100644 index 0000000..044d9f6 --- /dev/null +++ b/src/main/java/com/alttd/altitudequests/events/DataLock.java @@ -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()); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/alttd/altitudequests/events/LogoutEvent.java b/src/main/java/com/alttd/altitudequests/events/LogoutEvent.java index 2a96a5d..3bad4a9 100644 --- a/src/main/java/com/alttd/altitudequests/events/LogoutEvent.java +++ b/src/main/java/com/alttd/altitudequests/events/LogoutEvent.java @@ -4,6 +4,7 @@ import com.alttd.altitudequests.AQuest; import com.alttd.altitudequests.config.Config; import com.alttd.altitudequests.objects.Quest; import com.alttd.altitudequests.util.Logger; +import com.alttd.datalock.DataLockAPI; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; import org.bukkit.Bukkit; @@ -26,12 +27,7 @@ public class LogoutEvent implements Listener { if (Config.DEBUG) Logger.info("Syncing %", event.getPlayer().getName()); Quest.unloadUser(uuid); - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - out.writeUTF("try-unlock"); - out.writeUTF(uuid.toString()); - Bukkit.getServer().sendPluginMessage(AQuest.getInstance(), - "aquest:player-data", - out.toByteArray()); + DataLockAPI.get().tryUnlock("aquest:player-data", uuid.toString()); } }.runTaskAsynchronously(AQuest.getInstance()); } diff --git a/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java b/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java index bffd6ce..a927150 100644 --- a/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java +++ b/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java @@ -1,98 +1,98 @@ -package com.alttd.altitudequests.events; - -import com.alttd.altitudequests.AQuest; -import com.alttd.altitudequests.config.Config; -import com.alttd.altitudequests.database.Database; -import com.alttd.altitudequests.objects.Quest; -import com.alttd.altitudequests.util.Logger; -import com.alttd.altitudequests.util.Utilities; -import com.google.common.io.ByteArrayDataInput; -import com.google.common.io.ByteStreams; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import org.jetbrains.annotations.NotNull; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -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("aquest: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; - } - UUID uuid = UUID.fromString(in.readUTF()); - if (Config.DEBUG) - Logger.info("Received positive log result for %, loading user", uuid.toString()); - 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; - } - UUID uuid = UUID.fromString(in.readUTF()); - if (Config.DEBUG) - Logger.info("Received positive log result for %, loading user", uuid.toString()); - loadUser(uuid); - } - case "check-lock-result" -> { - - } - } - } - - private void loadUser(UUID uuid) { - new BukkitRunnable() { - @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)); - } - }.runTaskAsynchronously(AQuest.getInstance()); - } -} +//package com.alttd.altitudequests.events; +// +//import com.alttd.altitudequests.AQuest; +//import com.alttd.altitudequests.config.Config; +//import com.alttd.altitudequests.database.Database; +//import com.alttd.altitudequests.objects.Quest; +//import com.alttd.altitudequests.util.Logger; +//import com.alttd.altitudequests.util.Utilities; +//import com.google.common.io.ByteArrayDataInput; +//import com.google.common.io.ByteStreams; +//import org.bukkit.Bukkit; +//import org.bukkit.entity.Player; +//import org.bukkit.scheduler.BukkitRunnable; +//import org.jetbrains.annotations.NotNull; +// +//import java.sql.PreparedStatement; +//import java.sql.ResultSet; +//import java.sql.SQLException; +//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("aquest: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; +// } +// UUID uuid = UUID.fromString(in.readUTF()); +// if (Config.DEBUG) +// Logger.info("Received positive log result for %, loading user", uuid.toString()); +// 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; +// } +// UUID uuid = UUID.fromString(in.readUTF()); +// if (Config.DEBUG) +// Logger.info("Received positive log result for %, loading user", uuid.toString()); +// loadUser(uuid); +// } +// case "check-lock-result" -> { +// +// } +// } +// } +// +// private void loadUser(UUID uuid) { +// new BukkitRunnable() { +// @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)); +// } +// }.runTaskAsynchronously(AQuest.getInstance()); +// } +//} diff --git a/src/main/java/com/alttd/altitudequests/objects/Quest.java b/src/main/java/com/alttd/altitudequests/objects/Quest.java index e04b7c6..fc89eef 100644 --- a/src/main/java/com/alttd/altitudequests/objects/Quest.java +++ b/src/main/java/com/alttd/altitudequests/objects/Quest.java @@ -10,8 +10,7 @@ import com.alttd.altitudequests.objects.quests.KillMobsQuest; import com.alttd.altitudequests.objects.quests.MineQuest; import com.alttd.altitudequests.util.Logger; import com.alttd.altitudequests.util.Utilities; -import com.google.common.io.ByteArrayDataOutput; -import com.google.common.io.ByteStreams; +import com.alttd.datalock.DataLockAPI; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; @@ -141,12 +140,7 @@ public abstract class Quest { new BukkitRunnable() { @Override public void run() { - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - out.writeUTF("try-lock"); - out.writeUTF(uuid.toString()); - Bukkit.getServer().sendPluginMessage(AQuest.getInstance(), - "aquest:player-data", - out.toByteArray()); + DataLockAPI.get().tryLock("aquest:player-data", uuid.toString()); if (Config.DEBUG) Logger.info("Send lock request for %", uuid.toString()); } diff --git a/src/main/java/com/alttd/altitudequests/util/LoadUser.java b/src/main/java/com/alttd/altitudequests/util/LoadUser.java new file mode 100644 index 0000000..bead779 --- /dev/null +++ b/src/main/java/com/alttd/altitudequests/util/LoadUser.java @@ -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)); + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 08b5d84..c3fb39d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,6 +4,8 @@ main: com.alttd.altitudequests.AQuest api-version: 1.18 authors: [ Teriuihi ] description: A plugin to run quests on a server +depend: + - DataLockLib commands: aquest: permission: aquest.use