Added get reward command

Store if a player obtained their reward already
This commit is contained in:
Teriuihi 2022-06-03 02:50:44 +02:00
parent 696bc20c7e
commit 647cead4c1
16 changed files with 202 additions and 66 deletions

View File

@ -34,7 +34,8 @@ public class CommandManager implements CommandExecutor, TabExecutor {
new CommandCreateScruff(),
new CommandChangeQuest(),
new CommandTurnIn(),
new CommandSetQuest());
new CommandSetQuest(),
new CommandGetReward());
}
@Override

View File

@ -27,7 +27,7 @@ public class CommandChangeQuest extends SubCommand {
@Override
public String getHelpMessage() {
return "\b";
return null;
}
@Override

View File

@ -0,0 +1,67 @@
package com.alttd.altitudequests.commands.subcommands;
import com.alttd.altitudequests.commands.SubCommand;
import com.alttd.altitudequests.config.Config;
import com.alttd.altitudequests.config.LocalConfig;
import com.alttd.altitudequests.config.MessagesConfig;
import com.alttd.altitudequests.objects.Quest;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
public class CommandGetReward extends SubCommand {
@Override
public boolean onCommand(CommandSender commandSender, String[] args) {
if (args.length != 1)
return true;
if (!(commandSender instanceof Player player)) {
commandSender.sendMiniMessage(MessagesConfig.NO_CONSOLE, null);
return true;
}
Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId());
if (dailyQuest == null) {
player.sendMiniMessage("<red>You have no active quests?</red>", null);
return true;
}
if (player.getNearbyEntities(5, 5, 5).stream()
.noneMatch(entity -> entity.getUniqueId().equals(LocalConfig.activeNPC))) {
player.sendMiniMessage(MessagesConfig.TOO_FAR_FROM_NPC, Placeholder.component("npc", MiniMessage.miniMessage().deserialize(Config.NPC_NAME)));
return true;
}
if (dailyQuest.isRewardReceived()) {
player.sendMiniMessage(MessagesConfig.REWARD_ALREADY_RECEIVED, null);
return true;
}
for (String command : dailyQuest.getRewardCommand())
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command.replaceAll("<player>", commandSender.getName()));
player.sendMiniMessage(MessagesConfig.REWARD_SENT, null);
return true;
}
@Override
public String getName() {
return "getreward";
}
@Override
public List<String> getTabComplete(CommandSender commandSender, String[] args) {
return new ArrayList<>();
}
@Override
public String getHelpMessage() {
return null;
}
@Override
public boolean shouldTabComplete() {
return false;
}
}

View File

@ -22,6 +22,7 @@ public class CommandHelp extends SubCommand {
public boolean onCommand(CommandSender commandSender, String[] args) {
commandSender.sendMiniMessage(MessagesConfig.HELP_MESSAGE_WRAPPER.replaceAll("<commands>", commandManager
.getSubCommands().stream()
.filter(SubCommand::shouldTabComplete)
.filter(subCommand -> commandSender.hasPermission(subCommand.getPermission()))
.map(SubCommand::getHelpMessage)
.collect(Collectors.joining("\n"))), null);

View File

@ -26,7 +26,7 @@ public class CommandSetQuest extends SubCommand {
commandSender.sendMiniMessage(getHelpMessage(), null);
return true;
}
if (!Quest.loadDailyQuest(args[2], args[3], 0, 0, player.getUniqueId()))
if (!Quest.loadDailyQuest(args[2], args[3], 0, 0, player.getUniqueId(), false))
commandSender.sendMiniMessage("<red>Unable to create quest <quest> of variant <variant>.</red>",
TagResolver.resolver(Placeholder.parsed("quest", args[2]),
Placeholder.parsed("variant", args[3])));

View File

@ -24,7 +24,7 @@ public class CommandTurnIn extends SubCommand {
return true;
}
Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId());
if (dailyQuest == null) {
if (dailyQuest == null || dailyQuest.isDone()) {
player.sendMiniMessage(MessagesConfig.DAILY_ALREADY_DONE, null);
return true;
}
@ -50,7 +50,7 @@ public class CommandTurnIn extends SubCommand {
@Override
public String getHelpMessage() {
return "\b";
return null;
}
@Override

View File

@ -34,10 +34,14 @@ public class MessagesConfig extends AbstractConfig{
public static String TOO_FAR_FROM_NPC = "<red>You are too far from <npc></red>";
public static String DAILY_ALREADY_DONE = "<red>You already completed your daily quest";
public static String RESETTING_QUESTS = "<white>[<gold>Mascot</gold>] <light_purple>Scruff</light_purple><gray>:</gray> <green>Thank you everyone that completed their daily quest! I will be handing out new ones now so come visit me at <gold>/spawn</gold>!</green></white>";
public static String REWARD_ALREADY_RECEIVED = "<red>You already collected this reward</red>";
public static String REWARD_SENT = "<green>Thank you for completing the quest! Your reward has been sent!";
private static void loadMessages() {
TOO_FAR_FROM_NPC = config.getString("messages.too-far-from-npc", TOO_FAR_FROM_NPC);
DAILY_ALREADY_DONE = config.getString("messages.daily-already-done", DAILY_ALREADY_DONE);
RESETTING_QUESTS = config.getString("messages.resetting-quests", RESETTING_QUESTS);
REWARD_ALREADY_RECEIVED = config.getString("messages.reward-already-received", REWARD_ALREADY_RECEIVED);
REWARD_SENT = config.getString("messages.reward-send", REWARD_SENT);
}
public static String NO_PERMISSION = "<red>You do not have permission to do that.</red>";

View File

@ -32,6 +32,7 @@ public class QuestsConfig extends AbstractConfig {
public static String MINE_STEP_1 = "Mined";
public static String MINE_STEP_2 = "Turned in";
public static String MINE_TURN_IN = "<gold>Click here to turn in your <block></gold>";
public static List<String> MINE_COMMANDS = List.of("broadcast <player> Finished their daily quest!");
private static void loadMineQuests() {
MINE_QUESTS.clear();
@ -59,6 +60,7 @@ public class QuestsConfig extends AbstractConfig {
MINE_STEP_1 = config.getString("mining.step-1", MINE_STEP_1);
MINE_STEP_2 = config.getString("mining.step-2", MINE_STEP_2);
MINE_TURN_IN = config.getString("mining.turn-in", MINE_TURN_IN);
MINE_COMMANDS = config.getStringList("mining.commands", MINE_COMMANDS);
}
public static List<KillMobsQuestObject> KILL_MOB_QUEST = new ArrayList<>();
@ -66,6 +68,8 @@ public class QuestsConfig extends AbstractConfig {
public static String KILL_MOB_STEP_1 = "Killed";
public static String KILL_MOB_STEP_2 = "Confirmed";
public static String KILL_MOB_TURN_IN = "<gold>Click here to confirm the killed <mob>s</gold>";
public static List<String> KILL_MOB_COMMANDS = List.of("broadcast <player> Finished their daily quest!");
private static void loadKillMobQuests() {
KILL_MOB_QUEST.clear();
ConfigurationSection configurationSection = config.getConfigurationSection("kill_mobs.possible_tasks");
@ -92,6 +96,7 @@ public class QuestsConfig extends AbstractConfig {
KILL_MOB_STEP_1 = config.getString("kill_mobs.step-1", KILL_MOB_STEP_1);
KILL_MOB_STEP_2 = config.getString("kill_mobs.step-2", KILL_MOB_STEP_2);
KILL_MOB_TURN_IN = config.getString("kill_mobs.turn-in", KILL_MOB_TURN_IN);
KILL_MOB_COMMANDS = config.getStringList("kill_mobs.commands", KILL_MOB_COMMANDS);
}
public static List<CollectDropsQuestObject> COLLECT_DROPS_QUEST = new ArrayList<>();
@ -99,6 +104,8 @@ public class QuestsConfig extends AbstractConfig {
public static String COLLECT_DROPS_STEP_1 = "Obtained";
public static String COLLECT_DROPS_STEP_2 = "Turned in";
public static String COLLECT_DROPS_TURN_IN = "<gold>Click here to turn in your <item></gold>";
public static List<String> COLLECT_DROPS_COMMANDS = List.of("broadcast <player> Finished their daily quest!");
private static void loadCollectQuests() {
COLLECT_DROPS_QUEST.clear();
ConfigurationSection configurationSection = config.getConfigurationSection("collect_drops.possible_tasks");
@ -125,6 +132,7 @@ public class QuestsConfig extends AbstractConfig {
COLLECT_DROPS_STEP_1 = config.getString("collect_drops.step-1", COLLECT_DROPS_STEP_1);
COLLECT_DROPS_STEP_2 = config.getString("collect_drops.step-2", COLLECT_DROPS_STEP_2);
COLLECT_DROPS_TURN_IN = config.getString("collect_drops.turn-in", COLLECT_DROPS_TURN_IN);
COLLECT_DROPS_COMMANDS = config.getStringList("collect_drops.commands", COLLECT_DROPS_COMMANDS);
}
public static List<BreedMobsQuestObject> BREED_MOB_QUEST = new ArrayList<>();
@ -132,6 +140,8 @@ public class QuestsConfig extends AbstractConfig {
public static String BREED_STEP_1 = "Bred";
public static String BREED_STEP_2 = "Confirmed";
public static String BREED_TURN_IN = "<gold>Click here to confirm the baby <mob>s</gold>";
public static List<String> BREED_MOB_COMMANDS = List.of("broadcast <player> Finished their daily quest!");
private static void loadBreedMobQuests() {
BREED_MOB_QUEST.clear();
ConfigurationSection configurationSection = config.getConfigurationSection("breed_mobs.possible_tasks");
@ -158,5 +168,6 @@ public class QuestsConfig extends AbstractConfig {
BREED_STEP_1 = config.getString("breed_mobs.step-1", BREED_STEP_1);
BREED_STEP_2 = config.getString("breed_mobs.step-2", BREED_STEP_2);
BREED_TURN_IN = config.getString("breed_mobs.turn-in", BREED_TURN_IN);
BREED_MOB_COMMANDS = config.getStringList("breed_mobs.commands", BREED_MOB_COMMANDS);
}
}

View File

@ -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, " +
"reward_received BIT(1) NOT NULL, " +
"PRIMARY KEY (UUID)" +
")";
getDatabase().getConnection().prepareStatement(sql).executeUpdate();

View File

@ -35,7 +35,7 @@ public class PluginMessageListener implements org.bukkit.plugin.messaging.Plugin
}
UUID uuid = UUID.fromString(in.readUTF());
if (Config.DEBUG)
Logger.warning("Received positive log result for %, loading user", uuid.toString());
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());
@ -53,7 +53,7 @@ public class PluginMessageListener implements org.bukkit.plugin.messaging.Plugin
}
UUID uuid = UUID.fromString(in.readUTF());
if (Config.DEBUG)
Logger.warning("Received positive log result for %, loading user", uuid.toString());
Logger.info("Received positive log result for %, loading user", uuid.toString());
loadUser(uuid);
}
case "check-lock-result" -> {
@ -71,16 +71,19 @@ public class PluginMessageListener implements org.bukkit.plugin.messaging.Plugin
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()) {
Quest.loadDailyQuest(
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);
if (Config.DEBUG)
Logger.info("Loading daily quest for %", uuid.toString());
return;
uuid,
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();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -21,4 +21,9 @@ public class Utilities {
calendar.setTime(new Date());
return (calendar.get(Calendar.YEAR) * 1000) + calendar.get(Calendar.DAY_OF_YEAR);
}
public static String formatName(String name) {
name = name.toLowerCase().replaceAll("_", " ");
return name.replace(name.charAt(0), Character.toUpperCase(name.charAt(0)));
}
}