From c0cb9cae98edbd5d235e4292e98966363ead60bc Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Fri, 3 Jun 2022 00:34:02 +0200 Subject: [PATCH] Added 3 more quests Prevented killing the npc Made more things configurable Moved things to the right config --- .../java/com/alttd/altitudequests/AQuest.java | 5 + .../commands/CommandManager.java | 4 +- .../subcommands/CommandCreateScruff.java | 5 +- .../commands/subcommands/CommandSetQuest.java | 15 +- .../commands/subcommands/CommandTurnIn.java | 9 +- .../alttd/altitudequests/config/Config.java | 21 +-- .../altitudequests/config/LocalConfig.java | 1 + .../altitudequests/config/MessagesConfig.java | 16 +- .../altitudequests/config/QuestsConfig.java | 105 ++++++++++++- .../events/DonNotMessWithNPC.java | 51 ++++++ .../altitudequests/events/EntityBreed.java | 25 +++ .../altitudequests/events/EntityBucketed.java | 29 ++++ .../altitudequests/events/EntityDeath.java | 31 ++++ .../altitudequests/events/EntitySheared.java | 25 +++ .../events/PluginMessageListener.java | 4 +- .../altitudequests/events/TalkToQuest.java | 2 - .../alttd/altitudequests/objects/Quest.java | 23 ++- .../objects/quests/BreedMobsQuest.java | 117 ++++++++++++++ .../objects/quests/CollectDropsQuest.java | 147 ++++++++++++++++++ .../objects/quests/KillMobsQuest.java | 117 ++++++++++++++ .../objects/quests/MineQuest.java | 16 +- .../variants/BreedMobsQuestObject.java | 21 +++ .../variants/CollectDropsQuestObject.java | 20 +++ .../objects/variants/KillMobsQuestObject.java | 21 +++ 24 files changed, 770 insertions(+), 60 deletions(-) create mode 100644 src/main/java/com/alttd/altitudequests/events/DonNotMessWithNPC.java create mode 100644 src/main/java/com/alttd/altitudequests/events/EntityBreed.java create mode 100644 src/main/java/com/alttd/altitudequests/events/EntityBucketed.java create mode 100644 src/main/java/com/alttd/altitudequests/events/EntityDeath.java create mode 100644 src/main/java/com/alttd/altitudequests/events/EntitySheared.java create mode 100644 src/main/java/com/alttd/altitudequests/objects/quests/BreedMobsQuest.java create mode 100644 src/main/java/com/alttd/altitudequests/objects/quests/CollectDropsQuest.java create mode 100644 src/main/java/com/alttd/altitudequests/objects/quests/KillMobsQuest.java create mode 100644 src/main/java/com/alttd/altitudequests/objects/variants/BreedMobsQuestObject.java create mode 100644 src/main/java/com/alttd/altitudequests/objects/variants/CollectDropsQuestObject.java create mode 100644 src/main/java/com/alttd/altitudequests/objects/variants/KillMobsQuestObject.java 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 aClass = any.get(); Constructor 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; + } +}