Added get reward command

Store if a player obtained their reward already
This commit is contained in:
2022-06-03 02:50:44 +02:00
parent 696bc20c7e
commit 647cead4c1
16 changed files with 202 additions and 66 deletions
@@ -41,13 +41,15 @@ public abstract class Quest {
private int step2;
private final Variant variant;
private boolean isDone;
private boolean rewardReceived;
public Quest(UUID uuid, int step1, int step2, Variant variant) {
public Quest(UUID uuid, int step1, int step2, Variant variant, boolean rewardReceived) {
this.uuid = uuid;
this.step1 = step1;
this.step2 = step2;
this.variant = variant;
this.isDone = false;
this.isDone = rewardReceived;
this.rewardReceived = rewardReceived;
}
public static void createDailyQuest(Player player) {
@@ -112,7 +114,7 @@ public abstract class Quest {
}
}
public static boolean loadDailyQuest(String quest, String quest_variant, int step_1_progress, int step_2_progress, UUID uuid) {
public static boolean loadDailyQuest(String quest, String quest_variant, int step_1_progress, int step_2_progress, UUID uuid, boolean turnedIn) {
Optional<Class<? extends Quest>> any = possibleQuests.stream()
.filter(q -> q.getSimpleName().equals(quest))
.findAny();
@@ -123,8 +125,8 @@ public abstract class Quest {
Class<? extends Quest> aClass = any.get();
Constructor<? extends Quest> constructor;
try {
constructor = aClass.getConstructor(UUID.class, int.class, int.class, String.class);
Quest quest1 = constructor.newInstance(uuid, step_1_progress, step_2_progress, quest_variant);
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);
dailyQuests.put(uuid, quest1);
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
e.printStackTrace();
@@ -158,6 +160,8 @@ public abstract class Quest {
public abstract Component getDisplayName();
public abstract List<String> getRewardCommand();
public List<String> getQuestPages() {
return variant.getQuestPages();
}
@@ -214,6 +218,14 @@ public abstract class Quest {
return isDone;
}
public boolean isRewardReceived() {
return rewardReceived;
}
public void setRewardReceived(boolean rewardReceived) {
this.rewardReceived = rewardReceived;
}
public int getMaxToTurnIn() {
return Math.min(variant.getAmount() - getStep2(), getStep1() - getStep2());
}
@@ -16,6 +16,7 @@ import org.bukkit.entity.Player;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
public class BreedMobsQuest extends Quest {
@@ -24,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)));
QuestsConfig.BREED_MOB_QUEST.get(Utilities.randomOr0(QuestsConfig.BREED_MOB_QUEST.size() - 1)), false);
if (getVariant() instanceof BreedMobsQuestObject breedMobsQuestObject)
this.breedMobsQuestObject = breedMobsQuestObject;
else
@@ -35,10 +36,10 @@ public class BreedMobsQuest extends Quest {
}
}
public BreedMobsQuest(UUID uuid, int step1, int step2, String variant) {
public BreedMobsQuest(UUID uuid, int step1, int step2, String variant, boolean rewardReceived) {
super(uuid, step1, step2, QuestsConfig.BREED_MOB_QUEST.stream()
.filter(object -> variant.equals(object.getInternalName()))
.findAny().orElse(null));
.findAny().orElse(null), rewardReceived);
if (getVariant() instanceof BreedMobsQuestObject breedMobsQuestObject)
this.breedMobsQuestObject = breedMobsQuestObject;
else
@@ -53,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) " +
"VALUES (?, ?, ?, ?, ?, ?) " +
"(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, reward_received) " +
"VALUES (?, ?, ?, ?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE " +
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?";
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, reward_received = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
int yearDay = Utilities.getYearDay();
@@ -68,11 +69,13 @@ public class BreedMobsQuest extends Quest {
statement.setString(4, breedMobsQuestObject.getInternalName());
statement.setInt(5, getStep1());
statement.setInt(6, getStep2());
statement.setString(7, this.getClass().getSimpleName());
statement.setString(8, breedMobsQuestObject.getInternalName());
statement.setInt(9, getStep1());
statement.setInt(10, getStep2());
statement.setInt(11, yearDay);
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.execute();
} catch (SQLException exception) {
exception.printStackTrace();
@@ -82,7 +85,7 @@ public class BreedMobsQuest extends Quest {
@Override
public TagResolver getTagResolvers() {
TagResolver resolver = TagResolver.resolver(
Placeholder.unparsed("mob", breedMobsQuestObject.getEntityType().name()),
Placeholder.unparsed("mob", Utilities.formatName(breedMobsQuestObject.getEntityType().name())),
Placeholder.parsed("step_1_progress", getStep1() == breedMobsQuestObject.getAmount() ?
"<green>" + getStep1() + "</green>" : "<red>" + getStep1() + "</red>"),
Placeholder.parsed("step_1_total", String.valueOf(breedMobsQuestObject.getAmount())),
@@ -115,6 +118,11 @@ public class BreedMobsQuest extends Quest {
return MiniMessage.miniMessage().deserialize(QuestsConfig.BREED_MOB_QUEST_NAME);
}
@Override
public List<String> getRewardCommand() {
return QuestsConfig.BREED_MOB_COMMANDS;
}
public void breed(LivingEntity entity) {
if (isDone() || !entity.getType().equals(breedMobsQuestObject.getEntityType()))
return;
@@ -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)));
QuestsConfig.COLLECT_DROPS_QUEST.get(Utilities.randomOr0(QuestsConfig.COLLECT_DROPS_QUEST.size() - 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) {
public CollectDropsQuest(UUID uuid, int step1, int step2, String variant, boolean rewardReceived) {
super(uuid, step1, step2, QuestsConfig.COLLECT_DROPS_QUEST.stream()
.filter(object -> variant.equals(object.getInternalName()))
.findAny().orElse(null));
.findAny().orElse(null), 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) " +
"VALUES (?, ?, ?, ?, ?, ?) " +
"(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, reward_received) " +
"VALUES (?, ?, ?, ?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE " +
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?";
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, reward_received = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
int yearDay = Utilities.getYearDay();
@@ -72,11 +72,13 @@ public class CollectDropsQuest extends Quest {
statement.setString(4, collectDropsQuestObject.getInternalName());
statement.setInt(5, getStep1());
statement.setInt(6, getStep2());
statement.setString(7, this.getClass().getSimpleName());
statement.setString(8, collectDropsQuestObject.getInternalName());
statement.setInt(9, getStep1());
statement.setInt(10, getStep2());
statement.setInt(11, yearDay);
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.execute();
} catch (SQLException exception) {
exception.printStackTrace();
@@ -86,7 +88,7 @@ public class CollectDropsQuest extends Quest {
@Override
public TagResolver getTagResolvers() {
TagResolver resolver = TagResolver.resolver(
Placeholder.unparsed("item", collectDropsQuestObject.getMaterial().name()),
Placeholder.unparsed("item", Utilities.formatName(collectDropsQuestObject.getMaterial().name())),
Placeholder.parsed("step_1_progress", getStep1() == collectDropsQuestObject.getAmount() ?
"<green>" + getStep1() + "</green>" : "<red>" + getStep1() + "</red>"),
Placeholder.parsed("step_1_total", String.valueOf(collectDropsQuestObject.getAmount())),
@@ -140,6 +142,11 @@ public class CollectDropsQuest extends Quest {
return MiniMessage.miniMessage().deserialize(QuestsConfig.COLLECT_DROPS_QUEST_NAME);
}
@Override
public List<String> getRewardCommand() {
return QuestsConfig.COLLECT_DROPS_COMMANDS;
}
public void collectDrops(List<ItemStack> drops) {
if (isDone())
return;
@@ -16,6 +16,7 @@ import org.bukkit.entity.Player;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
public class KillMobsQuest extends Quest {
@@ -24,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)));
QuestsConfig.KILL_MOB_QUEST.get(Utilities.randomOr0(QuestsConfig.KILL_MOB_QUEST.size() - 1)), false);
if (getVariant() instanceof KillMobsQuestObject killMobsQuestObject)
this.killMobsQuestObject = killMobsQuestObject;
else
@@ -35,10 +36,10 @@ public class KillMobsQuest extends Quest {
}
}
public KillMobsQuest(UUID uuid, int step1, int step2, String variant) {
public KillMobsQuest(UUID uuid, int step1, int step2, String variant, boolean rewardReceived) {
super(uuid, step1, step2, QuestsConfig.KILL_MOB_QUEST.stream()
.filter(object -> variant.equals(object.getInternalName()))
.findAny().orElse(null));
.findAny().orElse(null), rewardReceived);
if (getVariant() instanceof KillMobsQuestObject killMobsQuestObject)
this.killMobsQuestObject = killMobsQuestObject;
else
@@ -53,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) " +
"VALUES (?, ?, ?, ?, ?, ?) " +
"(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, reward_received) " +
"VALUES (?, ?, ?, ?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE " +
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?";
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, reward_received = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
int yearDay = Utilities.getYearDay();
@@ -68,11 +69,13 @@ public class KillMobsQuest extends Quest {
statement.setString(4, killMobsQuestObject.getInternalName());
statement.setInt(5, getStep1());
statement.setInt(6, getStep2());
statement.setString(7, this.getClass().getSimpleName());
statement.setString(8, killMobsQuestObject.getInternalName());
statement.setInt(9, getStep1());
statement.setInt(10, getStep2());
statement.setInt(11, yearDay);
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.execute();
} catch (SQLException exception) {
exception.printStackTrace();
@@ -82,7 +85,7 @@ public class KillMobsQuest extends Quest {
@Override
public TagResolver getTagResolvers() {
TagResolver resolver = TagResolver.resolver(
Placeholder.unparsed("mob", killMobsQuestObject.getEntityType().name()),
Placeholder.unparsed("mob", Utilities.formatName(killMobsQuestObject.getEntityType().name())),
Placeholder.parsed("step_1_progress", getStep1() == killMobsQuestObject.getAmount() ?
"<green>" + getStep1() + "</green>" : "<red>" + getStep1() + "</red>"),
Placeholder.parsed("step_1_total", String.valueOf(killMobsQuestObject.getAmount())),
@@ -115,6 +118,11 @@ public class KillMobsQuest extends Quest {
return MiniMessage.miniMessage().deserialize(QuestsConfig.KILL_MOB_QUEST_NAME);
}
@Override
public List<String> getRewardCommand() {
return QuestsConfig.KILL_MOB_COMMANDS;
}
public void kill(LivingEntity entity) {
if (isDone() || !entity.getType().equals(killMobsQuestObject.getEntityType()) || !entity.hasAI())
return;
@@ -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)));
QuestsConfig.MINE_QUESTS.get(Utilities.randomOr0(QuestsConfig.MINE_QUESTS.size() - 1)), false);
if (getVariant() instanceof MineQuestObject mineQuestObject)
this.mineQuestObject = mineQuestObject;
else
@@ -36,10 +36,11 @@ public class MineQuest extends Quest {
}
}
public MineQuest(UUID uuid, int mined, int turnedIn, String variant) {
public MineQuest(UUID uuid, int mined, int turnedIn, String variant, boolean rewardReceived) {
super(uuid, mined, turnedIn, QuestsConfig.MINE_QUESTS.stream()
.filter(object -> variant.equals(object.getInternalName()))
.findAny().orElse(null));
.findAny().orElse(null),
rewardReceived);
if (getVariant() instanceof MineQuestObject mineQuestObject)
this.mineQuestObject = mineQuestObject;
else
@@ -54,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) " +
"VALUES (?, ?, ?, ?, ?, ?) " +
"(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress, reward_received) " +
"VALUES (?, ?, ?, ?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE " +
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?";
"quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?, reward_received = ?";
try {
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
int yearDay = Utilities.getYearDay();
@@ -69,11 +70,13 @@ public class MineQuest extends Quest {
statement.setString(4, mineQuestObject.getInternalName());
statement.setInt(5, getStep1());
statement.setInt(6, getStep2());
statement.setString(7, this.getClass().getSimpleName());
statement.setString(8, mineQuestObject.getInternalName());
statement.setInt(9, getStep1());
statement.setInt(10, getStep2());
statement.setInt(11, yearDay);
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.execute();
} catch (SQLException exception) {
exception.printStackTrace();
@@ -83,7 +86,7 @@ public class MineQuest extends Quest {
@Override
public TagResolver getTagResolvers() {
TagResolver resolver = TagResolver.resolver(
Placeholder.unparsed("block", mineQuestObject.getMaterial().name()),
Placeholder.unparsed("block", Utilities.formatName(mineQuestObject.getMaterial().name())),
Placeholder.parsed("step_1_progress", getStep1() == mineQuestObject.getAmount() ?
"<green>" + getStep1() + "</green>" : "<red>" + getStep1() + "</red>"),
Placeholder.parsed("step_1_total", String.valueOf(mineQuestObject.getAmount())),
@@ -136,6 +139,11 @@ public class MineQuest extends Quest {
return MiniMessage.miniMessage().deserialize(QuestsConfig.MINE_QUEST_NAME);
}
@Override
public List<String> getRewardCommand() {
return QuestsConfig.MINE_COMMANDS;
}
public void mine(Block block) {
if (isDone() || !block.getType().equals(mineQuestObject.getMaterial()))
return;