Added 3 more quests
Prevented killing the npc Made more things configurable Moved things to the right config
This commit is contained in:
parent
39900153d8
commit
c0cb9cae98
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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("<magenta>Scruff</magenta>"));
|
||||
wolf.customName(getMiniMessage().deserialize(Config.NPC_NAME));
|
||||
wolf.setSitting(true);
|
||||
|
||||
UUID uuid = wolf.getUniqueId();
|
||||
|
||||
LocalConfig.setActiveNPC(uuid);
|
||||
commandSender.sendMiniMessage("<green>Spawned Scruff</green>", null);
|
||||
return true; //TODO make sure scruff can't be put in boats or killed
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -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("<red>Unable to create quest <quest> of variant <variant>.</red>",
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -19,13 +19,6 @@ public final class Config extends AbstractConfig {
|
|||
config.readConfig(Config.class, null);
|
||||
}
|
||||
|
||||
public static String NO_PERMISSION = "<red>You do not have permission to do that.</red>";
|
||||
public static String NO_CONSOLE = "<red>You cannot use this command from console.</red>";
|
||||
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 = "<magenta>Scruff</magenta>";
|
||||
public static String QUEST_BOOK_TITLE = "<green>Quest Title</green>";
|
||||
public static List<String> 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 = "<red>You are too far from Scruff";//TODO replace scruff with <npc>?
|
||||
public static String DAILY_ALREADY_DONE = "<red>You already completed your daily quest";
|
||||
public static String RESETTING_QUESTS = "<white>[<gold>Mascot</gold>] <light_purple>Scruff</light_purple><gray>:</gray> <green>Thank you everyone that completed their daily quest! I will be handing out new ones now so come visit me at <gold>/spawn</gold>!</green></white>";
|
||||
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 = "<light_purple>Scruff</light_purple>";
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,5 +30,6 @@ public class LocalConfig extends AbstractConfig{
|
|||
|
||||
public static void setActiveNPC(UUID uuid) {
|
||||
config.set("active-npc", uuid.toString());
|
||||
activeNPC = uuid;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,16 +20,30 @@ public class MessagesConfig extends AbstractConfig{
|
|||
public static String HELP_MESSAGE = "<green>Show this menu: <gold>/aquest help</gold></green>";
|
||||
public static String RELOAD_HELP_MESSAGE = "<green>Reload configs: <gold>/aquest reload</gold></green>";
|
||||
public static String CREATE_SCRUFF_MESSAGE = "<green>Create Scruff: <gold>/aquest createscruff <x> <y> <z> <yaw> <pitch> <world></gold></green>";
|
||||
public static String SET_QUEST_HELP = "<green>Set quest: <gold>/aquest setquest <player> <quest> <variant></gold></green>";
|
||||
|
||||
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 = "<red>You are too far from <npc></red>";
|
||||
public static String DAILY_ALREADY_DONE = "<red>You already completed your daily quest";
|
||||
public static String RESETTING_QUESTS = "<white>[<gold>Mascot</gold>] <light_purple>Scruff</light_purple><gray>:</gray> <green>Thank you everyone that completed their daily quest! I will be handing out new ones now so come visit me at <gold>/spawn</gold>!</green></white>";
|
||||
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 = "<red>You do not have permission to do that.</red>";
|
||||
public static String NO_CONSOLE = "<red>You cannot use this command from console.</red>";
|
||||
private static void loadGeneric() {
|
||||
NO_PERMISSION = config.getString("generic.no-permission", NO_PERMISSION);
|
||||
NO_CONSOLE = config.getString("generic.no-console", NO_CONSOLE);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> 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<KillMobsQuestObject> KILL_MOB_QUEST = new ArrayList<>();
|
||||
public static String KILL_MOB_QUEST_NAME = "<green>Kill mobs quest</green>";
|
||||
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<String> 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<CollectDropsQuestObject> COLLECT_DROPS_QUEST = new ArrayList<>();
|
||||
public static String COLLECT_DROPS_QUEST_NAME = "<green>Collect drops quest</green>";
|
||||
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<String> 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<BreedMobsQuestObject> BREED_MOB_QUEST = new ArrayList<>();
|
||||
public static String BREED_MOB_QUEST_NAME = "<green>Breed mobs quest</green>";
|
||||
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<String> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Class<? extends Quest>> 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<UUID> 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<Class<? extends Quest>> any = possibleQuests.stream().filter(q -> q.getSimpleName().equals(quest)).findAny();
|
||||
Optional<Class<? extends Quest>> 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);
|
||||
|
|
|
|||
|
|
@ -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() ?
|
||||
"<green>" + getStep1() + "</green>" : "<red>" + getStep1() + "</red>"),
|
||||
Placeholder.parsed("step_1_total", String.valueOf(breedMobsQuestObject.getAmount())),
|
||||
Placeholder.parsed("step_2_progress", getStep2() == breedMobsQuestObject.getAmount() ?
|
||||
"<green>" + getStep2() + "</green>" : "<red>" + getStep2() + "</red>"),
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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() ?
|
||||
"<green>" + getStep1() + "</green>" : "<red>" + getStep1() + "</red>"),
|
||||
Placeholder.parsed("step_1_total", String.valueOf(collectDropsQuestObject.getAmount())),
|
||||
Placeholder.parsed("step_2_progress", getStep2() == collectDropsQuestObject.getAmount() ?
|
||||
"<green>" + getStep2() + "</green>" : "<red>" + getStep2() + "</red>"),
|
||||
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<ItemStack> 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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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() ?
|
||||
"<green>" + getStep1() + "</green>" : "<red>" + getStep1() + "</red>"),
|
||||
Placeholder.parsed("step_1_total", String.valueOf(killMobsQuestObject.getAmount())),
|
||||
Placeholder.parsed("step_2_progress", getStep2() == killMobsQuestObject.getAmount() ?
|
||||
"<green>" + getStep2() + "</green>" : "<red>" + getStep2() + "</red>"),
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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<String> questPages, List<String> donePages) {
|
||||
super(internalName, name, amount, questPages, donePages);
|
||||
this.entityType = entityType;
|
||||
}
|
||||
|
||||
public EntityType getEntityType() {
|
||||
return entityType;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String> questPages, List<String> donePages) {
|
||||
super(internalName, name, amount, questPages, donePages);
|
||||
this.material = item;
|
||||
}
|
||||
|
||||
public Material getMaterial() {
|
||||
return material;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<String> questPages, List<String> donePages) {
|
||||
super(internalName, name, amount, questPages, donePages);
|
||||
this.entityType = entityType;
|
||||
}
|
||||
|
||||
public EntityType getEntityType() {
|
||||
return entityType;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user