From 6d513de154693a8e291799deb0f354779b31400e Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Fri, 3 Jun 2022 05:02:26 +0200 Subject: [PATCH] Load amount of things to do/collect/kill/whatever into the database and load it when loading quest --- .../commands/subcommands/CommandSetQuest.java | 2 +- .../altitudequests/database/Database.java | 1 + .../events/PluginMessageListener.java | 1 + .../alttd/altitudequests/objects/Quest.java | 14 +++++----- .../objects/quests/BreedMobsQuest.java | 28 ++++++++++--------- .../objects/quests/CollectDropsQuest.java | 28 ++++++++++--------- .../objects/quests/KillMobsQuest.java | 28 ++++++++++--------- .../objects/quests/MineQuest.java | 28 ++++++++++--------- 8 files changed, 70 insertions(+), 60 deletions(-) diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandSetQuest.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandSetQuest.java index 5abb1bf..2f4221a 100644 --- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandSetQuest.java +++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandSetQuest.java @@ -31,7 +31,7 @@ public class CommandSetQuest extends SubCommand { new BukkitRunnable() { @Override public void run() { - if (!Quest.loadDailyQuest(args[2], args[3], 0, 0, player.getUniqueId(), false)) + if (!Quest.loadDailyQuest(args[2], args[3], 0, 0, player.getUniqueId(), -1, false)) commandSender.sendMiniMessage("Unable to create quest of variant .", TagResolver.resolver(Placeholder.parsed("quest", args[2]), Placeholder.parsed("variant", args[3]))); diff --git a/src/main/java/com/alttd/altitudequests/database/Database.java b/src/main/java/com/alttd/altitudequests/database/Database.java index b8a80c4..d94c2e8 100644 --- a/src/main/java/com/alttd/altitudequests/database/Database.java +++ b/src/main/java/com/alttd/altitudequests/database/Database.java @@ -97,6 +97,7 @@ public class Database { "quest_variant VARCHAR(36) NOT NULL, " + "step_1_progress INT NOT NULL, " + "step_2_progress INT NOT NULL, " + + "amount INT NOT NULL, " + "reward_received BIT(1) NOT NULL, " + "PRIMARY KEY (uuid)" + ")"; diff --git a/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java b/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java index 6502ce0..bffd6ce 100644 --- a/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java +++ b/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java @@ -78,6 +78,7 @@ public class PluginMessageListener implements org.bukkit.plugin.messaging.Plugin 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()); diff --git a/src/main/java/com/alttd/altitudequests/objects/Quest.java b/src/main/java/com/alttd/altitudequests/objects/Quest.java index 582c362..3a4b853 100644 --- a/src/main/java/com/alttd/altitudequests/objects/Quest.java +++ b/src/main/java/com/alttd/altitudequests/objects/Quest.java @@ -48,17 +48,17 @@ public abstract class Quest { private boolean rewardReceived; private final int amount; - public Quest(UUID uuid, int step1, int step2, Variant variant, boolean rewardReceived) { + public Quest(UUID uuid, int step1, int step2, Variant variant, int amount, boolean rewardReceived) { this.uuid = uuid; this.step1 = step1; this.step2 = step2; this.variant = variant; this.isDone = rewardReceived; this.rewardReceived = rewardReceived; - if (variant == null) - amount = 0; + if (variant != null && amount == -1) + this.amount = variant.calculateAmount(loadQuestsDoneThisMonth(uuid)); else - amount = variant.calculateAmount(loadQuestsDoneThisMonth(uuid)); + this.amount = amount; } private int loadQuestsDoneThisMonth(UUID uuid) { @@ -141,7 +141,7 @@ public abstract class Quest { } } - public static boolean loadDailyQuest(String quest, String quest_variant, int step_1_progress, int step_2_progress, UUID uuid, boolean turnedIn) { + public static boolean loadDailyQuest(String quest, String quest_variant, int step_1_progress, int step_2_progress, UUID uuid, int amount, boolean turnedIn) { Optional> any = possibleQuests.stream() .filter(q -> q.getSimpleName().equals(quest)) .findAny(); @@ -152,8 +152,8 @@ public abstract class Quest { Class aClass = any.get(); Constructor constructor; try { - constructor = aClass.getConstructor(UUID.class, int.class, int.class, String.class, boolean.class); - Quest quest1 = constructor.newInstance(uuid, step_1_progress, step_2_progress, quest_variant, turnedIn); + constructor = aClass.getConstructor(UUID.class, int.class, int.class, String.class, int.class, boolean.class); + Quest quest1 = constructor.newInstance(uuid, step_1_progress, step_2_progress, quest_variant, amount, turnedIn); dailyQuests.put(uuid, quest1); } catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) { e.printStackTrace(); diff --git a/src/main/java/com/alttd/altitudequests/objects/quests/BreedMobsQuest.java b/src/main/java/com/alttd/altitudequests/objects/quests/BreedMobsQuest.java index b8b0f47..cff361c 100644 --- a/src/main/java/com/alttd/altitudequests/objects/quests/BreedMobsQuest.java +++ b/src/main/java/com/alttd/altitudequests/objects/quests/BreedMobsQuest.java @@ -25,7 +25,7 @@ public class BreedMobsQuest extends Quest { public BreedMobsQuest(UUID uuid) { super(uuid, 0, 0, - QuestsConfig.BREED_MOB_QUEST.get(Utilities.randomOr0(QuestsConfig.BREED_MOB_QUEST.size() - 1)), false); + QuestsConfig.BREED_MOB_QUEST.get(Utilities.randomOr0(QuestsConfig.BREED_MOB_QUEST.size() - 1)), -1, false); if (getVariant() instanceof BreedMobsQuestObject breedMobsQuestObject) this.breedMobsQuestObject = breedMobsQuestObject; else @@ -36,10 +36,10 @@ public class BreedMobsQuest extends Quest { } } - public BreedMobsQuest(UUID uuid, int step1, int step2, String variant, boolean rewardReceived) { + public BreedMobsQuest(UUID uuid, int step1, int step2, String variant, int amount, boolean rewardReceived) { super(uuid, step1, step2, QuestsConfig.BREED_MOB_QUEST.stream() .filter(object -> variant.equals(object.getInternalName())) - .findAny().orElse(null), rewardReceived); + .findAny().orElse(null), amount, rewardReceived); if (getVariant() instanceof BreedMobsQuestObject breedMobsQuestObject) this.breedMobsQuestObject = breedMobsQuestObject; else @@ -54,10 +54,10 @@ public class BreedMobsQuest extends Quest { @Override public void save() { String sql = "INSERT INTO generic_quest_progress " + - "(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, reward_received) " + - "VALUES (?, ?, ?, ?, ?, ?, ?) " + + "(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, amount, reward_received) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?) " + "ON DUPLICATE KEY UPDATE " + - "quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, reward_received = ?"; + "quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, amount = ?, reward_received = ?"; try { PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql); int yearDay = Utilities.getYearDay(); @@ -69,13 +69,15 @@ public class BreedMobsQuest extends Quest { statement.setString(4, breedMobsQuestObject.getInternalName()); statement.setInt(5, getStep1()); statement.setInt(6, getStep2()); - statement.setInt(7, isRewardReceived() ? 1 : 0); - statement.setString(8, this.getClass().getSimpleName()); - statement.setString(9, breedMobsQuestObject.getInternalName()); - statement.setInt(10, getStep1()); - statement.setInt(11, getStep2()); - statement.setInt(12, yearDay); - statement.setInt(13, isRewardReceived() ? 1 : 0); + statement.setInt(7, getAmount()); + statement.setInt(8, isRewardReceived() ? 1 : 0); + statement.setString(9, this.getClass().getSimpleName()); + statement.setString(10, breedMobsQuestObject.getInternalName()); + statement.setInt(11, getStep1()); + statement.setInt(12, getStep2()); + statement.setInt(13, yearDay); + statement.setInt(14, getAmount()); + statement.setInt(15, isRewardReceived() ? 1 : 0); statement.execute(); } catch (SQLException exception) { exception.printStackTrace(); diff --git a/src/main/java/com/alttd/altitudequests/objects/quests/CollectDropsQuest.java b/src/main/java/com/alttd/altitudequests/objects/quests/CollectDropsQuest.java index 6198212..5e8e172 100644 --- a/src/main/java/com/alttd/altitudequests/objects/quests/CollectDropsQuest.java +++ b/src/main/java/com/alttd/altitudequests/objects/quests/CollectDropsQuest.java @@ -28,7 +28,7 @@ public class CollectDropsQuest extends Quest { public CollectDropsQuest(UUID uuid) { super(uuid, 0, 0, - QuestsConfig.COLLECT_DROPS_QUEST.get(Utilities.randomOr0(QuestsConfig.COLLECT_DROPS_QUEST.size() - 1)), false); + QuestsConfig.COLLECT_DROPS_QUEST.get(Utilities.randomOr0(QuestsConfig.COLLECT_DROPS_QUEST.size() - 1)), -1, false); if (getVariant() instanceof CollectDropsQuestObject collectDropsQuestObject) this.collectDropsQuestObject = collectDropsQuestObject; else @@ -39,10 +39,10 @@ public class CollectDropsQuest extends Quest { } } - public CollectDropsQuest(UUID uuid, int step1, int step2, String variant, boolean rewardReceived) { + public CollectDropsQuest(UUID uuid, int step1, int step2, String variant, int amount, boolean rewardReceived) { super(uuid, step1, step2, QuestsConfig.COLLECT_DROPS_QUEST.stream() .filter(object -> variant.equals(object.getInternalName())) - .findAny().orElse(null), rewardReceived); + .findAny().orElse(null), amount, rewardReceived); if (getVariant() instanceof CollectDropsQuestObject collectDropsQuestObject) this.collectDropsQuestObject = collectDropsQuestObject; else @@ -57,10 +57,10 @@ public class CollectDropsQuest extends Quest { @Override public void save() { String sql = "INSERT INTO generic_quest_progress " + - "(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, reward_received) " + - "VALUES (?, ?, ?, ?, ?, ?, ?) " + + "(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, amount, reward_received) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?) " + "ON DUPLICATE KEY UPDATE " + - "quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, reward_received = ?"; + "quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, amount = ?, reward_received = ?"; try { PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql); int yearDay = Utilities.getYearDay(); @@ -72,13 +72,15 @@ public class CollectDropsQuest extends Quest { statement.setString(4, collectDropsQuestObject.getInternalName()); statement.setInt(5, getStep1()); statement.setInt(6, getStep2()); - statement.setInt(7, isRewardReceived() ? 1 : 0); - statement.setString(8, this.getClass().getSimpleName()); - statement.setString(9, collectDropsQuestObject.getInternalName()); - statement.setInt(10, getStep1()); - statement.setInt(11, getStep2()); - statement.setInt(12, yearDay); - statement.setInt(13, isRewardReceived() ? 1 : 0); + statement.setInt(7, getAmount()); + statement.setInt(8, isRewardReceived() ? 1 : 0); + statement.setString(9, this.getClass().getSimpleName()); + statement.setString(10, collectDropsQuestObject.getInternalName()); + statement.setInt(11, getStep1()); + statement.setInt(12, getStep2()); + statement.setInt(13, yearDay); + statement.setInt(14, getAmount()); + statement.setInt(15, isRewardReceived() ? 1 : 0); statement.execute(); } catch (SQLException exception) { exception.printStackTrace(); diff --git a/src/main/java/com/alttd/altitudequests/objects/quests/KillMobsQuest.java b/src/main/java/com/alttd/altitudequests/objects/quests/KillMobsQuest.java index 163c900..c3445fd 100644 --- a/src/main/java/com/alttd/altitudequests/objects/quests/KillMobsQuest.java +++ b/src/main/java/com/alttd/altitudequests/objects/quests/KillMobsQuest.java @@ -25,7 +25,7 @@ public class KillMobsQuest extends Quest { public KillMobsQuest(UUID uuid) { super(uuid, 0, 0, - QuestsConfig.KILL_MOB_QUEST.get(Utilities.randomOr0(QuestsConfig.KILL_MOB_QUEST.size() - 1)), false); + QuestsConfig.KILL_MOB_QUEST.get(Utilities.randomOr0(QuestsConfig.KILL_MOB_QUEST.size() - 1)), -1, false); if (getVariant() instanceof KillMobsQuestObject killMobsQuestObject) this.killMobsQuestObject = killMobsQuestObject; else @@ -36,10 +36,10 @@ public class KillMobsQuest extends Quest { } } - public KillMobsQuest(UUID uuid, int step1, int step2, String variant, boolean rewardReceived) { + public KillMobsQuest(UUID uuid, int step1, int step2, String variant, int amount, boolean rewardReceived) { super(uuid, step1, step2, QuestsConfig.KILL_MOB_QUEST.stream() .filter(object -> variant.equals(object.getInternalName())) - .findAny().orElse(null), rewardReceived); + .findAny().orElse(null), amount, rewardReceived); if (getVariant() instanceof KillMobsQuestObject killMobsQuestObject) this.killMobsQuestObject = killMobsQuestObject; else @@ -54,10 +54,10 @@ public class KillMobsQuest extends Quest { @Override public void save() { String sql = "INSERT INTO generic_quest_progress " + - "(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, reward_received) " + - "VALUES (?, ?, ?, ?, ?, ?, ?) " + + "(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, amount, reward_received) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?) " + "ON DUPLICATE KEY UPDATE " + - "quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, reward_received = ?"; + "quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, amount = ?, reward_received = ?"; try { PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql); int yearDay = Utilities.getYearDay(); @@ -69,13 +69,15 @@ public class KillMobsQuest extends Quest { statement.setString(4, killMobsQuestObject.getInternalName()); statement.setInt(5, getStep1()); statement.setInt(6, getStep2()); - statement.setInt(7, isRewardReceived() ? 1 : 0); - statement.setString(8, this.getClass().getSimpleName()); - statement.setString(9, killMobsQuestObject.getInternalName()); - statement.setInt(10, getStep1()); - statement.setInt(11, getStep2()); - statement.setInt(12, yearDay); - statement.setInt(13, isRewardReceived() ? 1 : 0); + statement.setInt(7, getAmount()); + statement.setInt(8, isRewardReceived() ? 1 : 0); + statement.setString(9, this.getClass().getSimpleName()); + statement.setString(10, killMobsQuestObject.getInternalName()); + statement.setInt(11, getStep1()); + statement.setInt(12, getStep2()); + statement.setInt(13, yearDay); + statement.setInt(14, getAmount()); + statement.setInt(15, isRewardReceived() ? 1 : 0); statement.execute(); } catch (SQLException exception) { exception.printStackTrace(); diff --git a/src/main/java/com/alttd/altitudequests/objects/quests/MineQuest.java b/src/main/java/com/alttd/altitudequests/objects/quests/MineQuest.java index 7d75b3d..ea9de6c 100644 --- a/src/main/java/com/alttd/altitudequests/objects/quests/MineQuest.java +++ b/src/main/java/com/alttd/altitudequests/objects/quests/MineQuest.java @@ -25,7 +25,7 @@ public class MineQuest extends Quest { public MineQuest(UUID uuid) { super(uuid, 0, 0, - QuestsConfig.MINE_QUESTS.get(Utilities.randomOr0(QuestsConfig.MINE_QUESTS.size() - 1)), false); + QuestsConfig.MINE_QUESTS.get(Utilities.randomOr0(QuestsConfig.MINE_QUESTS.size() - 1)), -1, false); if (getVariant() instanceof MineQuestObject mineQuestObject) this.mineQuestObject = mineQuestObject; else @@ -36,10 +36,10 @@ public class MineQuest extends Quest { } } - public MineQuest(UUID uuid, int mined, int turnedIn, String variant, boolean rewardReceived) { + public MineQuest(UUID uuid, int mined, int turnedIn, String variant, int amount, boolean rewardReceived) { super(uuid, mined, turnedIn, QuestsConfig.MINE_QUESTS.stream() .filter(object -> variant.equals(object.getInternalName())) - .findAny().orElse(null), + .findAny().orElse(null), amount, rewardReceived); if (getVariant() instanceof MineQuestObject mineQuestObject) this.mineQuestObject = mineQuestObject; @@ -55,10 +55,10 @@ public class MineQuest extends Quest { @Override public void save() { String sql = "INSERT INTO generic_quest_progress " + - "(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, reward_received) " + - "VALUES (?, ?, ?, ?, ?, ?, ?) " + + "(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, amount, reward_received) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?) " + "ON DUPLICATE KEY UPDATE " + - "quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, reward_received = ?"; + "quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, amount = ?, reward_received = ?"; try { PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql); int yearDay = Utilities.getYearDay(); @@ -70,13 +70,15 @@ public class MineQuest extends Quest { statement.setString(4, mineQuestObject.getInternalName()); statement.setInt(5, getStep1()); statement.setInt(6, getStep2()); - statement.setInt(7, isRewardReceived() ? 1 : 0); - statement.setString(8, this.getClass().getSimpleName()); - statement.setString(9, mineQuestObject.getInternalName()); - statement.setInt(10, getStep1()); - statement.setInt(11, getStep2()); - statement.setInt(12, yearDay); - statement.setInt(13, isRewardReceived() ? 1 : 0); + statement.setInt(7, getAmount()); + statement.setInt(8, isRewardReceived() ? 1 : 0); + statement.setString(9, this.getClass().getSimpleName()); + statement.setString(10, mineQuestObject.getInternalName()); + statement.setInt(11, getStep1()); + statement.setInt(12, getStep2()); + statement.setInt(13, yearDay); + statement.setInt(14, getAmount()); + statement.setInt(15, isRewardReceived() ? 1 : 0); statement.execute(); } catch (SQLException exception) { exception.printStackTrace();