diff --git a/src/main/java/com/alttd/altitudequests/AQuest.java b/src/main/java/com/alttd/altitudequests/AQuest.java
index 1c466f5..6ff53c9 100644
--- a/src/main/java/com/alttd/altitudequests/AQuest.java
+++ b/src/main/java/com/alttd/altitudequests/AQuest.java
@@ -54,6 +54,11 @@ public final class AQuest extends JavaPlugin {
getServer().getPluginManager().registerEvents(new MineBlocks(), this);
getServer().getPluginManager().registerEvents(new LoginEvent(), this);
getServer().getPluginManager().registerEvents(new LogoutEvent(), this);
+ getServer().getPluginManager().registerEvents(new EntityDeath(), this);
+ getServer().getPluginManager().registerEvents(new EntitySheared(), this);
+ getServer().getPluginManager().registerEvents(new EntityBucketed(), this);
+ getServer().getPluginManager().registerEvents(new EntityBreed(), this);
+ getServer().getPluginManager().registerEvents(new DonNotMessWithNPC(), this);
getServer().getPluginManager().registerEvents(new QuestComplete(), this);
getServer().getMessenger().registerOutgoingPluginChannel(this, "aquest:player-data");
getServer().getMessenger().registerIncomingPluginChannel(this, "aquest:player-data", new PluginMessageListener());
diff --git a/src/main/java/com/alttd/altitudequests/commands/CommandManager.java b/src/main/java/com/alttd/altitudequests/commands/CommandManager.java
index 51978a1..293a4ea 100644
--- a/src/main/java/com/alttd/altitudequests/commands/CommandManager.java
+++ b/src/main/java/com/alttd/altitudequests/commands/CommandManager.java
@@ -2,7 +2,7 @@ package com.alttd.altitudequests.commands;
import com.alttd.altitudequests.AQuest;
import com.alttd.altitudequests.commands.subcommands.*;
-import com.alttd.altitudequests.config.Config;
+import com.alttd.altitudequests.config.MessagesConfig;
import com.alttd.altitudequests.util.Logger;
import org.bukkit.command.*;
import org.jetbrains.annotations.NotNull;
@@ -46,7 +46,7 @@ public class CommandManager implements CommandExecutor, TabExecutor {
subCommand = getSubCommand(args[0]);
if (!commandSender.hasPermission(subCommand.getPermission())) {
- commandSender.sendMiniMessage(Config.NO_PERMISSION, null);
+ commandSender.sendMiniMessage(MessagesConfig.NO_PERMISSION, null);
return true;
}
diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandCreateScruff.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandCreateScruff.java
index dd68aa9..8b3342e 100644
--- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandCreateScruff.java
+++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandCreateScruff.java
@@ -1,6 +1,7 @@
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.util.Utilities;
@@ -48,14 +49,14 @@ public class CommandCreateScruff extends SubCommand {
wolf.setAI(false);
wolf.setCollarColor(DyeColor.MAGENTA);
wolf.setCustomNameVisible(true);
- wolf.customName(getMiniMessage().deserialize("Scruff"));
+ wolf.customName(getMiniMessage().deserialize(Config.NPC_NAME));
wolf.setSitting(true);
UUID uuid = wolf.getUniqueId();
LocalConfig.setActiveNPC(uuid);
commandSender.sendMiniMessage("Spawned Scruff", null);
- return true; //TODO make sure scruff can't be put in boats or killed
+ return true;
}
@Override
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 6da4d58..157186a 100644
--- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandSetQuest.java
+++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandSetQuest.java
@@ -1,6 +1,7 @@
package com.alttd.altitudequests.commands.subcommands;
import com.alttd.altitudequests.commands.SubCommand;
+import com.alttd.altitudequests.config.MessagesConfig;
import com.alttd.altitudequests.objects.Quest;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@@ -16,11 +17,15 @@ public class CommandSetQuest extends SubCommand {
@Override
public boolean onCommand(CommandSender commandSender, String[] args) {
- if (args.length != 4)
- return true;//TODO Error invalid length
+ if (args.length != 4) {
+ commandSender.sendMiniMessage(getHelpMessage(), null);
+ return true;
+ }
Player player = Bukkit.getServer().getPlayer(args[1]);
- if (player == null || !player.hasPlayedBefore())
- return true; //TODO error invalid player;
+ if (player == null || !player.hasPlayedBefore()) {
+ commandSender.sendMiniMessage(getHelpMessage(), null);
+ return true;
+ }
if (!Quest.loadDailyQuest(args[2], args[3], 0, 0, player.getUniqueId()))
commandSender.sendMiniMessage("Unable to create quest of variant .",
TagResolver.resolver(Placeholder.parsed("quest", args[2]),
@@ -51,7 +56,7 @@ public class CommandSetQuest extends SubCommand {
@Override
public String getHelpMessage() {
- return "tmp help message"; //TODO fix
+ return MessagesConfig.SET_QUEST_HELP;
}
@Override
diff --git a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandTurnIn.java b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandTurnIn.java
index d917333..8d6525c 100644
--- a/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandTurnIn.java
+++ b/src/main/java/com/alttd/altitudequests/commands/subcommands/CommandTurnIn.java
@@ -3,8 +3,11 @@ 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 com.alttd.altitudequests.util.BookOpener;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -17,17 +20,17 @@ public class CommandTurnIn extends SubCommand {
if (args.length != 1)
return true;
if (!(commandSender instanceof Player player)) {
- commandSender.sendMiniMessage(Config.NO_CONSOLE, null);
+ commandSender.sendMiniMessage(MessagesConfig.NO_CONSOLE, null);
return true;
}
Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId());
if (dailyQuest == null) {
- player.sendMiniMessage(Config.DAILY_ALREADY_DONE, null);
+ player.sendMiniMessage(MessagesConfig.DAILY_ALREADY_DONE, null);
return true;
}
if (player.getNearbyEntities(5, 5, 5).stream()
.noneMatch(entity -> entity.getUniqueId().equals(LocalConfig.activeNPC))) {
- player.sendMiniMessage(Config.TOO_FAR_FROM_NPC, null);
+ player.sendMiniMessage(MessagesConfig.TOO_FAR_FROM_NPC, Placeholder.component("npc", MiniMessage.miniMessage().deserialize(Config.NPC_NAME)));
return true;
}
dailyQuest.turnIn(player);
diff --git a/src/main/java/com/alttd/altitudequests/config/Config.java b/src/main/java/com/alttd/altitudequests/config/Config.java
index cd1cc9e..985d1a2 100644
--- a/src/main/java/com/alttd/altitudequests/config/Config.java
+++ b/src/main/java/com/alttd/altitudequests/config/Config.java
@@ -19,13 +19,6 @@ public final class Config extends AbstractConfig {
config.readConfig(Config.class, null);
}
- public static String NO_PERMISSION = "You do not have permission to do that.";
- public static String NO_CONSOLE = "You cannot use this command from console.";
- private static void loadGeneric() {
- NO_PERMISSION = config.getString("generic.no-permission", NO_PERMISSION);
- NO_CONSOLE = config.getString("generic.no-console", NO_CONSOLE);
- }
-
public static String QUEST_BOOK_AUTHOR = "Scruff";
public static String QUEST_BOOK_TITLE = "Quest Title";
public static List QUEST_PAGES = List.of("""
@@ -45,22 +38,10 @@ public final class Config extends AbstractConfig {
QUEST_PAGES = config.getStringList("book.pages", QUEST_PAGES);
}
- public static String TOO_FAR_FROM_NPC = "You are too far from Scruff";//TODO replace scruff with ?
- public static String DAILY_ALREADY_DONE = "You already completed your daily quest";
- public static String RESETTING_QUESTS = "[Mascot] Scruff: Thank you everyone that completed their daily quest! I will be handing out new ones now so come visit me at /spawn!";
- 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);
- }
-
- private static void loadGUIText() {
- }
-
public static String NPC_NAME = "Scruff";
public static boolean DEBUG = false;
private static void loadSettings() {
- NPC_NAME = config.getString("settings.npd-name", NPC_NAME);
+ NPC_NAME = config.getString("settings.npc-name", NPC_NAME);
DEBUG = config.getBoolean("settings.debug", DEBUG);
}
}
diff --git a/src/main/java/com/alttd/altitudequests/config/LocalConfig.java b/src/main/java/com/alttd/altitudequests/config/LocalConfig.java
index 27b532f..39bd99d 100644
--- a/src/main/java/com/alttd/altitudequests/config/LocalConfig.java
+++ b/src/main/java/com/alttd/altitudequests/config/LocalConfig.java
@@ -30,5 +30,6 @@ public class LocalConfig extends AbstractConfig{
public static void setActiveNPC(UUID uuid) {
config.set("active-npc", uuid.toString());
+ activeNPC = uuid;
}
}
diff --git a/src/main/java/com/alttd/altitudequests/config/MessagesConfig.java b/src/main/java/com/alttd/altitudequests/config/MessagesConfig.java
index 84ba4d4..5083974 100644
--- a/src/main/java/com/alttd/altitudequests/config/MessagesConfig.java
+++ b/src/main/java/com/alttd/altitudequests/config/MessagesConfig.java
@@ -20,16 +20,30 @@ public class MessagesConfig extends AbstractConfig{
public static String HELP_MESSAGE = "Show this menu: /aquest help";
public static String RELOAD_HELP_MESSAGE = "Reload configs: /aquest reload";
public static String CREATE_SCRUFF_MESSAGE = "Create Scruff: /aquest createscruff ";
+ public static String SET_QUEST_HELP = "Set quest: /aquest setquest ";
private static void loadHelp() {
HELP_MESSAGE_WRAPPER = config.getString("help.help-wrapper", HELP_MESSAGE_WRAPPER);
HELP_MESSAGE = config.getString("help.help", HELP_MESSAGE);
RELOAD_HELP_MESSAGE = config.getString("help.reload", RELOAD_HELP_MESSAGE);
+ SET_QUEST_HELP = config.getString("help.set-quest", SET_QUEST_HELP);
CREATE_SCRUFF_MESSAGE = config.getString("help.help-wrapper", CREATE_SCRUFF_MESSAGE);
}
- private static void loadCommandMessages() {
+ public static String TOO_FAR_FROM_NPC = "You are too far from ";
+ public static String DAILY_ALREADY_DONE = "You already completed your daily quest";
+ public static String RESETTING_QUESTS = "[Mascot] Scruff: Thank you everyone that completed their daily quest! I will be handing out new ones now so come visit me at /spawn!";
+ 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);
+ }
+ public static String NO_PERMISSION = "You do not have permission to do that.";
+ public static String NO_CONSOLE = "You cannot use this command from console.";
+ private static void loadGeneric() {
+ NO_PERMISSION = config.getString("generic.no-permission", NO_PERMISSION);
+ NO_CONSOLE = config.getString("generic.no-console", NO_CONSOLE);
}
}
diff --git a/src/main/java/com/alttd/altitudequests/config/QuestsConfig.java b/src/main/java/com/alttd/altitudequests/config/QuestsConfig.java
index 921a5f8..c84b273 100644
--- a/src/main/java/com/alttd/altitudequests/config/QuestsConfig.java
+++ b/src/main/java/com/alttd/altitudequests/config/QuestsConfig.java
@@ -1,9 +1,14 @@
package com.alttd.altitudequests.config;;
+import com.alttd.altitudequests.objects.quests.CollectDropsQuest;
+import com.alttd.altitudequests.objects.variants.BreedMobsQuestObject;
+import com.alttd.altitudequests.objects.variants.CollectDropsQuestObject;
+import com.alttd.altitudequests.objects.variants.KillMobsQuestObject;
import com.alttd.altitudequests.objects.variants.MineQuestObject;
import com.alttd.altitudequests.util.Logger;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.entity.EntityType;
import java.io.File;
import java.util.ArrayList;
@@ -35,14 +40,100 @@ public class QuestsConfig extends AbstractConfig {
}
Set keys = configurationSection.getKeys(false);
for (String key : keys) {
- Material material = Material.valueOf(configurationSection.getString(key + ".material"));
- MINE_QUESTS.add(new MineQuestObject(key,
- configurationSection.getString(key + ".name"),
- material,
- configurationSection.getInt(key + ".amount"),
- configurationSection.getStringList(key + ".quest-pages"),
- configurationSection.getStringList(key + ".done-pages")));
+ try {
+ Material material = Material.valueOf(configurationSection.getString(key + ".material"));
+ MINE_QUESTS.add(new MineQuestObject(key,
+ configurationSection.getString(key + ".name"),
+ material,
+ configurationSection.getInt(key + ".amount"),
+ configurationSection.getStringList(key + ".quest-pages"),
+ configurationSection.getStringList(key + ".done-pages")));
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
}
MINE_QUEST_NAME = config.getString("mining.name", MINE_QUEST_NAME);
}
+
+ public static List KILL_MOB_QUEST = new ArrayList<>();
+ public static String KILL_MOB_QUEST_NAME = "Kill mobs quest";
+ private static void loadKillMobQuests() {
+ KILL_MOB_QUEST.clear();
+ ConfigurationSection configurationSection = config.getConfigurationSection("kill_mobs.possible_tasks");
+ if (configurationSection == null) {
+ Logger.warning("No mob kill quests in config");
+ return;
+ }
+ Set keys = configurationSection.getKeys(false);
+ for (String key : keys) {
+ try {
+ EntityType entityType = EntityType.valueOf(configurationSection.getString(key + ".mob"));
+ KILL_MOB_QUEST.add(new KillMobsQuestObject(key,
+ configurationSection.getString(key + ".name"),
+ entityType,
+ configurationSection.getInt(key + ".amount"),
+ configurationSection.getStringList(key + ".quest-pages"),
+ configurationSection.getStringList(key + ".done-pages")));
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ KILL_MOB_QUEST_NAME = config.getString("kill_mobs.name", KILL_MOB_QUEST_NAME);
+ }
+
+ public static List COLLECT_DROPS_QUEST = new ArrayList<>();
+ public static String COLLECT_DROPS_QUEST_NAME = "Collect drops quest";
+ private static void loadCollectQuests() {
+ COLLECT_DROPS_QUEST.clear();
+ ConfigurationSection configurationSection = config.getConfigurationSection("collect_drops.possible_tasks");
+ if (configurationSection == null) {
+ Logger.warning("No collect drops quests in config");
+ return;
+ }
+ Set keys = configurationSection.getKeys(false);
+ for (String key : keys) {
+ try {
+ Material item = Material.valueOf(configurationSection.getString(key + ".item"));
+ COLLECT_DROPS_QUEST.add(new CollectDropsQuestObject(key,
+ configurationSection.getString(key + ".name"),
+ item,
+ configurationSection.getInt(key + ".amount"),
+ configurationSection.getStringList(key + ".quest-pages"),
+ configurationSection.getStringList(key + ".done-pages")));
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ COLLECT_DROPS_QUEST_NAME = config.getString("collect_drops.name", COLLECT_DROPS_QUEST_NAME);
+ }
+
+ public static List BREED_MOB_QUEST = new ArrayList<>();
+ public static String BREED_MOB_QUEST_NAME = "Breed mobs quest";
+ private static void loadBreedMobQuests() {
+ BREED_MOB_QUEST.clear();
+ ConfigurationSection configurationSection = config.getConfigurationSection("breed_mobs.possible_tasks");
+ if (configurationSection == null) {
+ Logger.warning("No mob breed quests in config");
+ return;
+ }
+ Set keys = configurationSection.getKeys(false);
+ for (String key : keys) {
+ try {
+ EntityType entityType = EntityType.valueOf(configurationSection.getString(key + ".mob"));
+ BREED_MOB_QUEST.add(new BreedMobsQuestObject(key,
+ configurationSection.getString(key + ".name"),
+ entityType,
+ configurationSection.getInt(key + ".amount"),
+ configurationSection.getStringList(key + ".quest-pages"),
+ configurationSection.getStringList(key + ".done-pages")));
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ BREED_MOB_QUEST_NAME = config.getString("breed_mobs.name", BREED_MOB_QUEST_NAME);
+ }
}
diff --git a/src/main/java/com/alttd/altitudequests/events/DonNotMessWithNPC.java b/src/main/java/com/alttd/altitudequests/events/DonNotMessWithNPC.java
new file mode 100644
index 0000000..aa500b1
--- /dev/null
+++ b/src/main/java/com/alttd/altitudequests/events/DonNotMessWithNPC.java
@@ -0,0 +1,51 @@
+package com.alttd.altitudequests.events;
+
+import com.alttd.altitudequests.config.LocalConfig;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Wolf;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.EntityDamageByBlockEvent;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityPotionEffectEvent;
+import org.bukkit.event.vehicle.VehicleEnterEvent;
+
+public class DonNotMessWithNPC implements Listener {
+
+ @EventHandler
+ public void onVehicleEnter(VehicleEnterEvent event) {
+ Entity entered = event.getEntered();
+ if (!(entered instanceof Wolf))
+ return;
+ if (LocalConfig.activeNPC.equals(entered.getUniqueId()))
+ event.setCancelled(true);
+ }
+
+ @EventHandler
+ public void onVillagerPotioned(EntityPotionEffectEvent event) {
+ Entity entity = event.getEntity();
+ if (!(entity instanceof Wolf))
+ return;
+ if (LocalConfig.activeNPC.equals(entity.getUniqueId()))
+ event.setCancelled(true);
+ }
+
+ @EventHandler
+ public void onVillagerEntityDamage(EntityDamageByEntityEvent event) {
+ Entity entity = event.getEntity();
+ if (!(entity instanceof Wolf))
+ return;
+ if (LocalConfig.activeNPC.equals(entity.getUniqueId()))
+ event.setCancelled(true);
+ }
+
+ @EventHandler
+ public void onVillagerBlockDamage(EntityDamageByBlockEvent event) {
+ Entity entity = event.getEntity();
+ if (!(entity instanceof Wolf))
+ return;
+ if (LocalConfig.activeNPC.equals(entity.getUniqueId()))
+ event.setCancelled(true);
+ }
+
+}
diff --git a/src/main/java/com/alttd/altitudequests/events/EntityBreed.java b/src/main/java/com/alttd/altitudequests/events/EntityBreed.java
new file mode 100644
index 0000000..9c7a7d9
--- /dev/null
+++ b/src/main/java/com/alttd/altitudequests/events/EntityBreed.java
@@ -0,0 +1,25 @@
+package com.alttd.altitudequests.events;
+
+import com.alttd.altitudequests.objects.Quest;
+import com.alttd.altitudequests.objects.quests.BreedMobsQuest;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.EntityBreedEvent;
+
+public class EntityBreed implements Listener {
+
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onEntityBreed(EntityBreedEvent event) {
+ if (!(event.getBreeder() instanceof Player player))
+ return;
+ Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId());
+ if (dailyQuest == null || dailyQuest.isDone())
+ return;
+ if (dailyQuest instanceof BreedMobsQuest breedMobsQuest) {
+ breedMobsQuest.breed(event.getMother());
+ }
+ }
+
+}
diff --git a/src/main/java/com/alttd/altitudequests/events/EntityBucketed.java b/src/main/java/com/alttd/altitudequests/events/EntityBucketed.java
new file mode 100644
index 0000000..23d396b
--- /dev/null
+++ b/src/main/java/com/alttd/altitudequests/events/EntityBucketed.java
@@ -0,0 +1,29 @@
+package com.alttd.altitudequests.events;
+
+import com.alttd.altitudequests.objects.Quest;
+import com.alttd.altitudequests.objects.quests.CollectDropsQuest;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerBucketFillEvent;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.List;
+
+public class EntityBucketed implements Listener {
+
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onBucketFill(PlayerBucketFillEvent event) {
+ Player player = event.getPlayer();
+ Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId());
+ if (dailyQuest == null || dailyQuest.isDone())
+ return;
+ if (dailyQuest instanceof CollectDropsQuest collectDropsQuest) {
+ ItemStack itemStack = event.getItemStack();
+ if (itemStack != null)
+ collectDropsQuest.collectDrops(List.of(itemStack));
+ }
+ }
+
+}
diff --git a/src/main/java/com/alttd/altitudequests/events/EntityDeath.java b/src/main/java/com/alttd/altitudequests/events/EntityDeath.java
new file mode 100644
index 0000000..3cd268e
--- /dev/null
+++ b/src/main/java/com/alttd/altitudequests/events/EntityDeath.java
@@ -0,0 +1,31 @@
+package com.alttd.altitudequests.events;
+
+import com.alttd.altitudequests.objects.Quest;
+import com.alttd.altitudequests.objects.quests.CollectDropsQuest;
+import com.alttd.altitudequests.objects.quests.KillMobsQuest;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.EntityDeathEvent;
+
+public class EntityDeath implements Listener {
+
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onEntityDeath(EntityDeathEvent event) {
+ LivingEntity entity = event.getEntity();
+ Player player = entity.getKiller();
+ if (player == null)
+ return;
+ Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId());
+ if (dailyQuest == null || dailyQuest.isDone())
+ return;
+ if (dailyQuest instanceof KillMobsQuest killMobsQuest) {
+ killMobsQuest.kill(entity);
+ } else if (dailyQuest instanceof CollectDropsQuest collectDropsQuest) {
+ collectDropsQuest.collectDrops(event.getDrops());
+ }
+ }
+
+}
diff --git a/src/main/java/com/alttd/altitudequests/events/EntitySheared.java b/src/main/java/com/alttd/altitudequests/events/EntitySheared.java
new file mode 100644
index 0000000..cd486dc
--- /dev/null
+++ b/src/main/java/com/alttd/altitudequests/events/EntitySheared.java
@@ -0,0 +1,25 @@
+package com.alttd.altitudequests.events;
+
+import com.alttd.altitudequests.objects.Quest;
+import com.alttd.altitudequests.objects.quests.CollectDropsQuest;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerShearEntityEvent;
+
+import java.util.List;
+
+public class EntitySheared implements Listener {
+
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onEntityShear(PlayerShearEntityEvent event) {
+ Player player = event.getPlayer();
+ Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId());
+ if (dailyQuest == null || dailyQuest.isDone())
+ return;
+ if (dailyQuest instanceof CollectDropsQuest collectDropsQuest) {
+ collectDropsQuest.collectDrops(List.of(event.getItem()));
+ }
+ }
+}
diff --git a/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java b/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java
index f80de2d..b82db3a 100644
--- a/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java
+++ b/src/main/java/com/alttd/altitudequests/events/PluginMessageListener.java
@@ -31,7 +31,7 @@ public class PluginMessageListener implements org.bukkit.plugin.messaging.Plugin
case "try-lock-result" -> {
if (!in.readBoolean()) {
Logger.warning("Unable to lock row");
- return; //TODO handle
+ return;
}
UUID uuid = UUID.fromString(in.readUTF());
if (Config.DEBUG)
@@ -49,7 +49,7 @@ public class PluginMessageListener implements org.bukkit.plugin.messaging.Plugin
case "locked-queue-lock" -> {
if (!in.readBoolean()) {
Logger.warning("Got false back from locked queue lock");
- return; //TODO handle
+ return;
}
UUID uuid = UUID.fromString(in.readUTF());
if (Config.DEBUG)
diff --git a/src/main/java/com/alttd/altitudequests/events/TalkToQuest.java b/src/main/java/com/alttd/altitudequests/events/TalkToQuest.java
index 24409ef..3fe9722 100644
--- a/src/main/java/com/alttd/altitudequests/events/TalkToQuest.java
+++ b/src/main/java/com/alttd/altitudequests/events/TalkToQuest.java
@@ -36,7 +36,5 @@ public class TalkToQuest implements Listener {
inProcess.remove(uniqueId);
}
}.runTaskAsynchronously(AQuest.getInstance());
- //TODO make it so everything can be done with commands and just don't let them tab complete and do them through the book instead
- //TODO in config allow a multitude of events to be prepared and randomly select from them at certain times of day?
}
}
\ No newline at end of file
diff --git a/src/main/java/com/alttd/altitudequests/objects/Quest.java b/src/main/java/com/alttd/altitudequests/objects/Quest.java
index 4d489f9..9512a9a 100644
--- a/src/main/java/com/alttd/altitudequests/objects/Quest.java
+++ b/src/main/java/com/alttd/altitudequests/objects/Quest.java
@@ -2,6 +2,10 @@ package com.alttd.altitudequests.objects;
import com.alttd.altitudequests.AQuest;
import com.alttd.altitudequests.config.Config;
+import com.alttd.altitudequests.config.MessagesConfig;
+import com.alttd.altitudequests.objects.quests.BreedMobsQuest;
+import com.alttd.altitudequests.objects.quests.CollectDropsQuest;
+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;
@@ -25,10 +29,11 @@ public abstract class Quest {
private static Quest weeklyQuest = null;
private static final List> possibleQuests = new ArrayList<>();
- //TODO add all data every quest needs
-
static {
possibleQuests.add(MineQuest.class);
+ possibleQuests.add(KillMobsQuest.class);
+ possibleQuests.add(CollectDropsQuest.class);
+ possibleQuests.add(BreedMobsQuest.class);
}
private final UUID uuid;
@@ -74,7 +79,7 @@ public abstract class Quest {
}
private static HashSet queriedUsers = new HashSet<>();
- public static void tryLoadDailyQuest(UUID uuid) { //TODO set up a way to listen to the response and load stuff
+ public static void tryLoadDailyQuest(UUID uuid) {
if (queriedUsers.contains(uuid) || dailyQuests.containsKey(uuid))
return;
queriedUsers.add(uuid);
@@ -108,16 +113,18 @@ public abstract class Quest {
}
public static boolean loadDailyQuest(String quest, String quest_variant, int step_1_progress, int step_2_progress, UUID uuid) {
- Optional> any = possibleQuests.stream().filter(q -> q.getSimpleName().equals(quest)).findAny();
+ Optional> any = possibleQuests.stream()
+ .filter(q -> q.getSimpleName().equals(quest))
+ .findAny();
if (any.isEmpty()) {
- //TODO error
+ Logger.warning("Unable to find % quest giving up loading the quest for %", quest, uuid.toString());
return false;
}
Class extends Quest> aClass = any.get();
Constructor extends Quest> constructor;
try {
- constructor = aClass.getConstructor(String.class, int.class, int.class, UUID.class);
- Quest quest1 = constructor.newInstance(quest_variant, step_1_progress, step_2_progress, uuid);
+ constructor = aClass.getConstructor(UUID.class, int.class, int.class, String.class);
+ Quest quest1 = constructor.newInstance(uuid, step_1_progress, step_2_progress, quest_variant);
dailyQuests.put(uuid, quest1);
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
e.printStackTrace();
@@ -134,7 +141,7 @@ public abstract class Quest {
new BukkitRunnable() {
@Override
public void run() {
- Bukkit.getServer().sendMessage(MiniMessage.miniMessage().deserialize(Config.RESETTING_QUESTS));
+ Bukkit.getServer().sendMessage(MiniMessage.miniMessage().deserialize(MessagesConfig.RESETTING_QUESTS));
dailyQuests.clear();
for (Player player : Bukkit.getOnlinePlayers()) {
createDailyQuest(player);
diff --git a/src/main/java/com/alttd/altitudequests/objects/quests/BreedMobsQuest.java b/src/main/java/com/alttd/altitudequests/objects/quests/BreedMobsQuest.java
new file mode 100644
index 0000000..7001a24
--- /dev/null
+++ b/src/main/java/com/alttd/altitudequests/objects/quests/BreedMobsQuest.java
@@ -0,0 +1,117 @@
+package com.alttd.altitudequests.objects.quests;
+
+import com.alttd.altitudequests.config.Config;
+import com.alttd.altitudequests.config.QuestsConfig;
+import com.alttd.altitudequests.database.Database;
+import com.alttd.altitudequests.objects.Quest;
+import com.alttd.altitudequests.objects.variants.BreedMobsQuestObject;
+import com.alttd.altitudequests.util.Logger;
+import com.alttd.altitudequests.util.Utilities;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
+import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.UUID;
+
+public class BreedMobsQuest extends Quest {
+
+ private final BreedMobsQuestObject breedMobsQuestObject;
+
+ public BreedMobsQuest(UUID uuid) {
+ super(uuid, 0, 0,
+ QuestsConfig.BREED_MOB_QUEST.get(Utilities.randomOr0(QuestsConfig.BREED_MOB_QUEST.size() - 1)));
+ if (getVariant() instanceof BreedMobsQuestObject breedMobsQuestObject)
+ this.breedMobsQuestObject = breedMobsQuestObject;
+ else
+ this.breedMobsQuestObject = null;
+ if (breedMobsQuestObject == null) {
+ Logger.warning("Tried to create breedMobQuest but unable to find variant: %.", "unknown");
+ return;
+ }
+ }
+
+ public BreedMobsQuest(UUID uuid, int step1, int step2, String variant) {
+ super(uuid, step1, step2, QuestsConfig.BREED_MOB_QUEST.stream()
+ .filter(object -> variant.equals(object.getInternalName()))
+ .findAny().orElse(null));
+ if (getVariant() instanceof BreedMobsQuestObject breedMobsQuestObject)
+ this.breedMobsQuestObject = breedMobsQuestObject;
+ else
+ this.breedMobsQuestObject = null;
+ if (breedMobsQuestObject == null) {
+ Logger.warning("Tried to create breedMobQuest but unable to find variant: %.", variant);
+ return;
+ }
+ checkDone();
+ }
+
+ @Override
+ public void save() {
+ String sql = "INSERT INTO generic_quest_progress " +
+ "(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress) " +
+ "VALUES (?, ?, ?, ?, ?, ?) " +
+ "ON DUPLICATE KEY UPDATE " +
+ "quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?";
+ try {
+ PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
+ int yearDay = Utilities.getYearDay();
+ if (Config.DEBUG)
+ Logger.info("Saving user for year day %.", String.valueOf(yearDay));
+ statement.setInt(1, yearDay);
+ statement.setString(2, getUuid().toString());
+ statement.setString(3, this.getClass().getSimpleName());
+ 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.execute();
+ } catch (SQLException exception) {
+ exception.printStackTrace();
+ }
+ }
+
+ @Override
+ public TagResolver getTagResolvers() {
+ return TagResolver.resolver(
+ Placeholder.unparsed("mob", breedMobsQuestObject.getEntityType().name()),
+ Placeholder.parsed("step_1_progress", getStep1() == breedMobsQuestObject.getAmount() ?
+ "" + getStep1() + "" : "" + getStep1() + ""),
+ Placeholder.parsed("step_1_total", String.valueOf(breedMobsQuestObject.getAmount())),
+ Placeholder.parsed("step_2_progress", getStep2() == breedMobsQuestObject.getAmount() ?
+ "" + getStep2() + "" : "" + getStep2() + ""),
+ Placeholder.parsed("step_2_total", String.valueOf(breedMobsQuestObject.getAmount()))
+ );
+ }
+
+ @Override
+ public int turnIn(Player player) {
+ int maxToTurnIn = getMaxToTurnIn();
+
+ if (maxToTurnIn == 0)
+ return 0;
+ addStep2(maxToTurnIn);
+ checkDone(player);
+ return maxToTurnIn;
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return MiniMessage.miniMessage().deserialize(QuestsConfig.BREED_MOB_QUEST_NAME);
+ }
+
+ public void breed(LivingEntity entity) {
+ if (isDone() || !entity.getType().equals(breedMobsQuestObject.getEntityType()))
+ return;
+ addStep1(1);
+ checkDone();
+ }
+}
diff --git a/src/main/java/com/alttd/altitudequests/objects/quests/CollectDropsQuest.java b/src/main/java/com/alttd/altitudequests/objects/quests/CollectDropsQuest.java
new file mode 100644
index 0000000..58aadaa
--- /dev/null
+++ b/src/main/java/com/alttd/altitudequests/objects/quests/CollectDropsQuest.java
@@ -0,0 +1,147 @@
+package com.alttd.altitudequests.objects.quests;
+
+import com.alttd.altitudequests.config.Config;
+import com.alttd.altitudequests.config.QuestsConfig;
+import com.alttd.altitudequests.database.Database;
+import com.alttd.altitudequests.objects.Quest;
+import com.alttd.altitudequests.objects.variants.CollectDropsQuestObject;
+import com.alttd.altitudequests.util.Logger;
+import com.alttd.altitudequests.util.Utilities;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
+import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.PlayerInventory;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.UUID;
+
+public class CollectDropsQuest extends Quest {
+
+ private final CollectDropsQuestObject collectDropsQuestObject;
+
+ public CollectDropsQuest(UUID uuid) {
+ super(uuid, 0, 0,
+ QuestsConfig.COLLECT_DROPS_QUEST.get(Utilities.randomOr0(QuestsConfig.COLLECT_DROPS_QUEST.size() - 1)));
+ if (getVariant() instanceof CollectDropsQuestObject collectDropsQuestObject)
+ this.collectDropsQuestObject = collectDropsQuestObject;
+ else
+ this.collectDropsQuestObject = null;
+ if (collectDropsQuestObject == null) {
+ Logger.warning("Tried to create collectDropsQuest but unable to find variant: %.", "unknown");
+ return;
+ }
+ }
+
+ public CollectDropsQuest(UUID uuid, int step1, int step2, String variant) {
+ super(uuid, step1, step2, QuestsConfig.COLLECT_DROPS_QUEST.stream()
+ .filter(object -> variant.equals(object.getInternalName()))
+ .findAny().orElse(null));
+ if (getVariant() instanceof CollectDropsQuestObject collectDropsQuestObject)
+ this.collectDropsQuestObject = collectDropsQuestObject;
+ else
+ this.collectDropsQuestObject = null;
+ if (collectDropsQuestObject == null) {
+ Logger.warning("Tried to create collectDropsQuest but unable to find variant: %.", variant);
+ return;
+ }
+ checkDone();
+ }
+
+ @Override
+ public void save() {
+ String sql = "INSERT INTO generic_quest_progress " +
+ "(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress) " +
+ "VALUES (?, ?, ?, ?, ?, ?) " +
+ "ON DUPLICATE KEY UPDATE " +
+ "quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?";
+ try {
+ PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
+ int yearDay = Utilities.getYearDay();
+ if (Config.DEBUG)
+ Logger.info("Saving user for year day %.", String.valueOf(yearDay));
+ statement.setInt(1, yearDay);
+ statement.setString(2, getUuid().toString());
+ statement.setString(3, this.getClass().getSimpleName());
+ 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.execute();
+ } catch (SQLException exception) {
+ exception.printStackTrace();
+ }
+ }
+
+ @Override
+ public TagResolver getTagResolvers() {
+ return TagResolver.resolver(
+ Placeholder.unparsed("item", collectDropsQuestObject.getMaterial().name()),
+ Placeholder.parsed("step_1_progress", getStep1() == collectDropsQuestObject.getAmount() ?
+ "" + getStep1() + "" : "" + getStep1() + ""),
+ Placeholder.parsed("step_1_total", String.valueOf(collectDropsQuestObject.getAmount())),
+ Placeholder.parsed("step_2_progress", getStep2() == collectDropsQuestObject.getAmount() ?
+ "" + getStep2() + "" : "" + getStep2() + ""),
+ Placeholder.parsed("step_2_total", String.valueOf(collectDropsQuestObject.getAmount()))
+ );
+ }
+
+ @Override
+ public int turnIn(Player player) {
+ PlayerInventory inventory = player.getInventory();
+ int maxToTurnIn = getMaxToTurnIn();
+
+ if (maxToTurnIn == 0)
+ return 0;
+ var ref = new Object() {
+ int tmpAmount = maxToTurnIn;
+ };
+
+ Arrays.stream(inventory.getContents())
+ .filter(Objects::nonNull)
+ .filter(itemStack -> itemStack.getType().equals(collectDropsQuestObject.getMaterial()))
+ .forEach(itemStack -> {
+ if (ref.tmpAmount == 0)
+ return;
+ if (itemStack.getAmount() > ref.tmpAmount) {
+ itemStack.setAmount(itemStack.getAmount() - ref.tmpAmount);
+ ref.tmpAmount = 0;
+ } else {
+ ref.tmpAmount -= itemStack.getAmount();
+ itemStack.setAmount(0);
+ }
+ });
+ int totalTurnedIn = maxToTurnIn - ref.tmpAmount;
+ addStep2(totalTurnedIn);
+ checkDone(player);
+ return totalTurnedIn;
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return MiniMessage.miniMessage().deserialize(QuestsConfig.COLLECT_DROPS_QUEST_NAME);
+ }
+
+ public void collectDrops(List drops) {
+ if (isDone())
+ return;
+ int total = drops.stream()
+ .filter(itemStack -> itemStack.getType().equals(collectDropsQuestObject.getMaterial()))
+ .mapToInt(ItemStack::getAmount)
+ .sum();
+ if (total == 0)
+ return;
+ addStep1(total);
+ checkDone();
+ }
+}
diff --git a/src/main/java/com/alttd/altitudequests/objects/quests/KillMobsQuest.java b/src/main/java/com/alttd/altitudequests/objects/quests/KillMobsQuest.java
new file mode 100644
index 0000000..87c0473
--- /dev/null
+++ b/src/main/java/com/alttd/altitudequests/objects/quests/KillMobsQuest.java
@@ -0,0 +1,117 @@
+package com.alttd.altitudequests.objects.quests;
+
+import com.alttd.altitudequests.config.Config;
+import com.alttd.altitudequests.config.QuestsConfig;
+import com.alttd.altitudequests.database.Database;
+import com.alttd.altitudequests.objects.Quest;
+import com.alttd.altitudequests.objects.variants.KillMobsQuestObject;
+import com.alttd.altitudequests.util.Logger;
+import com.alttd.altitudequests.util.Utilities;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
+import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.UUID;
+
+public class KillMobsQuest extends Quest {
+
+ private final KillMobsQuestObject killMobsQuestObject;
+
+ public KillMobsQuest(UUID uuid) {
+ super(uuid, 0, 0,
+ QuestsConfig.KILL_MOB_QUEST.get(Utilities.randomOr0(QuestsConfig.KILL_MOB_QUEST.size() - 1)));
+ if (getVariant() instanceof KillMobsQuestObject killMobsQuestObject)
+ this.killMobsQuestObject = killMobsQuestObject;
+ else
+ this.killMobsQuestObject = null;
+ if (killMobsQuestObject == null) {
+ Logger.warning("Tried to create killMobsQuest but unable to find variant: %.", "unknown");
+ return;
+ }
+ }
+
+ public KillMobsQuest(UUID uuid, int step1, int step2, String variant) {
+ super(uuid, step1, step2, QuestsConfig.KILL_MOB_QUEST.stream()
+ .filter(object -> variant.equals(object.getInternalName()))
+ .findAny().orElse(null));
+ if (getVariant() instanceof KillMobsQuestObject killMobsQuestObject)
+ this.killMobsQuestObject = killMobsQuestObject;
+ else
+ this.killMobsQuestObject = null;
+ if (killMobsQuestObject == null) {
+ Logger.warning("Tried to create killMobsQuest but unable to find variant: %.", variant);
+ return;
+ }
+ checkDone();
+ }
+
+ @Override
+ public void save() {
+ String sql = "INSERT INTO generic_quest_progress " +
+ "(year_day, uuid, quest, quest_variant, step_1_progress, step_2_progress) " +
+ "VALUES (?, ?, ?, ?, ?, ?) " +
+ "ON DUPLICATE KEY UPDATE " +
+ "quest = ?, quest_variant = ?, step_1_progress = ?, step_2_progress = ?, year_day = ?";
+ try {
+ PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
+ int yearDay = Utilities.getYearDay();
+ if (Config.DEBUG)
+ Logger.info("Saving user for year day %.", String.valueOf(yearDay));
+ statement.setInt(1, yearDay);
+ statement.setString(2, getUuid().toString());
+ statement.setString(3, this.getClass().getSimpleName());
+ 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.execute();
+ } catch (SQLException exception) {
+ exception.printStackTrace();
+ }
+ }
+
+ @Override
+ public TagResolver getTagResolvers() {
+ return TagResolver.resolver(
+ Placeholder.unparsed("mob", killMobsQuestObject.getEntityType().name()),
+ Placeholder.parsed("step_1_progress", getStep1() == killMobsQuestObject.getAmount() ?
+ "" + getStep1() + "" : "" + getStep1() + ""),
+ Placeholder.parsed("step_1_total", String.valueOf(killMobsQuestObject.getAmount())),
+ Placeholder.parsed("step_2_progress", getStep2() == killMobsQuestObject.getAmount() ?
+ "" + getStep2() + "" : "" + getStep2() + ""),
+ Placeholder.parsed("step_2_total", String.valueOf(killMobsQuestObject.getAmount()))
+ );
+ }
+
+ @Override
+ public int turnIn(Player player) {
+ int maxToTurnIn = getMaxToTurnIn();
+
+ if (maxToTurnIn == 0)
+ return 0;
+ addStep2(maxToTurnIn);
+ checkDone(player);
+ return maxToTurnIn;
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return MiniMessage.miniMessage().deserialize(QuestsConfig.KILL_MOB_QUEST_NAME);
+ }
+
+ public void kill(LivingEntity entity) {
+ if (isDone() || !entity.getType().equals(killMobsQuestObject.getEntityType()) || !entity.hasAI())
+ return;
+ addStep1(1);
+ checkDone();
+ }
+}
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 f671eb8..0b2e377 100644
--- a/src/main/java/com/alttd/altitudequests/objects/quests/MineQuest.java
+++ b/src/main/java/com/alttd/altitudequests/objects/quests/MineQuest.java
@@ -29,24 +29,24 @@ public class MineQuest extends Quest {
if (getVariant() instanceof MineQuestObject mineQuestObject)
this.mineQuestObject = mineQuestObject;
else
- this.mineQuestObject = null;
+ mineQuestObject = null;
if (mineQuestObject == null) {
Logger.warning("Tried to create MineQuest but unable to find variant: %.", "unknown");
- return; //TODO error
+ return;
}
}
- public MineQuest(String variantInternalName, int mined, int turnedIn, UUID uuid) {
+ public MineQuest(UUID uuid, int mined, int turnedIn, String variant) {
super(uuid, mined, turnedIn, QuestsConfig.MINE_QUESTS.stream()
- .filter(object -> variantInternalName.equals(object.getInternalName()))
+ .filter(object -> variant.equals(object.getInternalName()))
.findAny().orElse(null));
if (getVariant() instanceof MineQuestObject mineQuestObject)
this.mineQuestObject = mineQuestObject;
else
this.mineQuestObject = null;
if (mineQuestObject == null) {
- Logger.warning("Tried to create MineQuest but unable to find variant: %.", variantInternalName);
- return; //TODO error
+ Logger.warning("Tried to create MineQuest but unable to find variant: %.", variant);
+ return;
}
checkDone();
}
@@ -65,11 +65,11 @@ public class MineQuest extends Quest {
Logger.info("Saving user for year day %.", String.valueOf(yearDay));
statement.setInt(1, yearDay);
statement.setString(2, getUuid().toString());
- statement.setString(3, MineQuest.class.getSimpleName());
+ statement.setString(3, this.getClass().getSimpleName());
statement.setString(4, mineQuestObject.getInternalName());
statement.setInt(5, getStep1());
statement.setInt(6, getStep2());
- statement.setString(7, MineQuest.class.getSimpleName());
+ statement.setString(7, this.getClass().getSimpleName());
statement.setString(8, mineQuestObject.getInternalName());
statement.setInt(9, getStep1());
statement.setInt(10, getStep2());
diff --git a/src/main/java/com/alttd/altitudequests/objects/variants/BreedMobsQuestObject.java b/src/main/java/com/alttd/altitudequests/objects/variants/BreedMobsQuestObject.java
new file mode 100644
index 0000000..6043199
--- /dev/null
+++ b/src/main/java/com/alttd/altitudequests/objects/variants/BreedMobsQuestObject.java
@@ -0,0 +1,21 @@
+package com.alttd.altitudequests.objects.variants;
+
+import com.alttd.altitudequests.objects.Variant;
+import org.bukkit.entity.EntityType;
+
+import java.util.List;
+
+public class BreedMobsQuestObject extends Variant {
+
+ private final EntityType entityType;
+
+ public BreedMobsQuestObject(String internalName, String name, EntityType entityType, int amount,
+ List questPages, List donePages) {
+ super(internalName, name, amount, questPages, donePages);
+ this.entityType = entityType;
+ }
+
+ public EntityType getEntityType() {
+ return entityType;
+ }
+}
diff --git a/src/main/java/com/alttd/altitudequests/objects/variants/CollectDropsQuestObject.java b/src/main/java/com/alttd/altitudequests/objects/variants/CollectDropsQuestObject.java
new file mode 100644
index 0000000..4c3104f
--- /dev/null
+++ b/src/main/java/com/alttd/altitudequests/objects/variants/CollectDropsQuestObject.java
@@ -0,0 +1,20 @@
+package com.alttd.altitudequests.objects.variants;
+
+import com.alttd.altitudequests.objects.Variant;
+import org.bukkit.Material;
+
+import java.util.List;
+
+public class CollectDropsQuestObject extends Variant {
+
+ private final Material material;
+
+ public CollectDropsQuestObject(String internalName, String name, Material item, int amount, List questPages, List donePages) {
+ super(internalName, name, amount, questPages, donePages);
+ this.material = item;
+ }
+
+ public Material getMaterial() {
+ return material;
+ }
+}
diff --git a/src/main/java/com/alttd/altitudequests/objects/variants/KillMobsQuestObject.java b/src/main/java/com/alttd/altitudequests/objects/variants/KillMobsQuestObject.java
new file mode 100644
index 0000000..57f23e9
--- /dev/null
+++ b/src/main/java/com/alttd/altitudequests/objects/variants/KillMobsQuestObject.java
@@ -0,0 +1,21 @@
+package com.alttd.altitudequests.objects.variants;
+
+import com.alttd.altitudequests.objects.Variant;
+import org.bukkit.entity.EntityType;
+
+import java.util.List;
+
+public class KillMobsQuestObject extends Variant {
+
+ private final EntityType entityType;
+
+ public KillMobsQuestObject(String internalName, String name, EntityType entityType, int amount,
+ List questPages, List donePages) {
+ super(internalName, name, amount, questPages, donePages);
+ this.entityType = entityType;
+ }
+
+ public EntityType getEntityType() {
+ return entityType;
+ }
+}