From 5ccbced69af227f3d3846974bb6f4e9fc9e2fb68 Mon Sep 17 00:00:00 2001 From: ToastedCoconut Date: Sat, 29 Jun 2019 21:24:51 +0200 Subject: New tasks: breeding and xpearn (#44) --- .../quests/tasktypes/types/BreedingTaskType.java | 88 ++++++++++++++++++++++ .../quests/tasktypes/types/ExpEarnTaskType.java | 68 +++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BreedingTaskType.java create mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ExpEarnTaskType.java (limited to 'src/main/java/com/leonardobishop') diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BreedingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BreedingTaskType.java new file mode 100644 index 00000000..b77b05c6 --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BreedingTaskType.java @@ -0,0 +1,88 @@ +package com.leonardobishop.quests.quests.tasktypes.types; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; + +import com.leonardobishop.quests.Quests; +import com.leonardobishop.quests.player.QPlayer; +import com.leonardobishop.quests.player.questprogressfile.QuestProgress; +import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; +import com.leonardobishop.quests.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.quests.Quest; +import com.leonardobishop.quests.quests.Task; +import com.leonardobishop.quests.quests.tasktypes.ConfigValue; +import com.leonardobishop.quests.quests.tasktypes.TaskType; + +public final class BreedingTaskType extends TaskType { + + private List creatorConfigValues = new ArrayList<>(); + + public BreedingTaskType() { + super("breeding", "toasted", "Breed a set amount of animals."); + this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of animals to be bred")); + } + + @Override + public List getCreatorConfigValues() { + return creatorConfigValues; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onBreed(CreatureSpawnEvent e) { + if (!e.getSpawnReason().equals(SpawnReason.BREEDING)) { + return; + } + + Entity ent = e.getEntity(); + List entList = ent.getNearbyEntities(10, 10, 10); + + if (entList.isEmpty()) { + return; + } + // Check if there is a player in the list, otherwise: return. + for (Entity current : entList) { + + if (current instanceof Player) { + Player player = (Player) current; + QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId()); + QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); + + for (Quest quest : super.getRegisteredQuests()) { + if (questProgressFile.hasStartedQuest(quest)) { + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + + for (Task task : quest.getTasksOfType(super.getType())) { + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + + int breedingNeeded = (int) task.getConfigValue("amount"); + int breedingProgress; + + if (taskProgress.getProgress() == null) { + breedingProgress = 0; + } else { + breedingProgress = (int) taskProgress.getProgress(); + } + + taskProgress.setProgress(breedingProgress + 1); + + if (((int) taskProgress.getProgress()) >= breedingNeeded) { + taskProgress.setCompleted(true); + } + } + } + } + } + } + } +} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ExpEarnTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ExpEarnTaskType.java new file mode 100644 index 00000000..f186c9f9 --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ExpEarnTaskType.java @@ -0,0 +1,68 @@ +package com.leonardobishop.quests.quests.tasktypes.types; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerExpChangeEvent; + +import com.leonardobishop.quests.Quests; +import com.leonardobishop.quests.player.QPlayer; +import com.leonardobishop.quests.player.questprogressfile.QuestProgress; +import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; +import com.leonardobishop.quests.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.quests.Quest; +import com.leonardobishop.quests.quests.Task; +import com.leonardobishop.quests.quests.tasktypes.ConfigValue; +import com.leonardobishop.quests.quests.tasktypes.TaskType; + +public final class ExpEarnTaskType extends TaskType { + + private List creatorConfigValues = new ArrayList<>(); + + public ExpEarnTaskType() { + super("expearn", "toasted", "Earn a set amount of exp."); + this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of exp that needs to be earned.")); + } + + @Override + public List getCreatorConfigValues() { + return creatorConfigValues; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onExpEarn(PlayerExpChangeEvent e) { + QPlayer qPlayer = Quests.getPlayerManager().getPlayer(e.getPlayer().getUniqueId()); + QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); + + for (Quest quest : super.getRegisteredQuests()) { + if (questProgressFile.hasStartedQuest(quest)) { + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + + for (Task task : quest.getTasksOfType(super.getType())) { + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + int amount = e.getAmount(); + int expNeeded = (int) task.getConfigValue("amount"); + + int progressExp; + if (taskProgress.getProgress() == null) { + progressExp = 0; + } else { + progressExp = (int) taskProgress.getProgress(); + } + + taskProgress.setProgress(progressExp + amount); + + if (((int) taskProgress.getProgress()) >= expNeeded) { + taskProgress.setCompleted(true); + } + } + } + } + } +} -- cgit v1.2.3-70-g09d2