diff options
| author | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2021-06-22 22:34:06 +0100 |
|---|---|---|
| committer | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2021-06-22 22:34:06 +0100 |
| commit | 324c150795007853f310349dce694bdace0b1da4 (patch) | |
| tree | 3c4cbfd79fe2b2cc39fc2fb9201c77511ee9a1b0 | |
| parent | 3bc95177b17a23e2dbdce9bd816db779daf2c086 (diff) | |
Add fishingcertain task type
- Closes #182
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java | 2 | ||||
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingCertainTaskType.java | 104 |
2 files changed, 106 insertions, 0 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java index 48a9d0ef..e971b4de 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -36,6 +36,7 @@ import com.leonardobishop.quests.bukkit.tasktype.type.DealDamageTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.DistancefromTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.EnchantingTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.ExpEarnTaskType; +import com.leonardobishop.quests.bukkit.tasktype.type.FishingCertainTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.FishingTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.InventoryTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.MilkingTaskType; @@ -260,6 +261,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { taskTypeManager.registerTaskType(new MobkillingCertainTaskType(this)); taskTypeManager.registerTaskType(new PlayerkillingTaskType(this)); taskTypeManager.registerTaskType(new FishingTaskType(this)); + taskTypeManager.registerTaskType(new FishingCertainTaskType(this)); taskTypeManager.registerTaskType(new InventoryTaskType(this)); taskTypeManager.registerTaskType(new WalkingTaskType(this)); taskTypeManager.registerTaskType(new TamingTaskType(this)); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingCertainTaskType.java new file mode 100644 index 00000000..35651809 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingCertainTaskType.java @@ -0,0 +1,104 @@ +package com.leonardobishop.quests.bukkit.tasktype.type; + +import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType; +import com.leonardobishop.quests.bukkit.util.TaskUtils; +import com.leonardobishop.quests.common.config.ConfigProblem; +import com.leonardobishop.quests.common.config.ConfigProblemDescriptions; +import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; +import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.common.quest.Quest; +import com.leonardobishop.quests.common.quest.Task; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerFishEvent; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public final class FishingCertainTaskType extends BukkitTaskType { + + private final BukkitQuestsPlugin plugin; + + public FishingCertainTaskType(BukkitQuestsPlugin plugin) { + super("fishingcertain", TaskUtils.TASK_ATTRIBUTION_STRING, "Catch a set amount of a specific item from the sea."); + this.plugin = plugin; + } + + @Override + public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) { + ArrayList<ConfigProblem> problems = new ArrayList<>(); + if (TaskUtils.configValidateExists(root + ".item", config.get("item"), problems, "item", super.getType())) { + if (Material.getMaterial(String.valueOf(config.get("item"))) == null) { + problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING, + ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(String.valueOf(config.get("item"))), root + ".item.item")); + } + } + if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) + TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); + return problems; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFishCaught(PlayerFishEvent event) { + if (event.getPlayer().hasMetadata("NPC")) return; + + if (event.getState() != PlayerFishEvent.State.CAUGHT_FISH) { + return; + } + + Player player = event.getPlayer(); + if (!(event.getCaught() instanceof Item)) { + return; + } + Item caught = (Item) event.getCaught(); + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + return; + } + + for (Quest quest : super.getRegisteredQuests()) { + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); + + for (Task task : quest.getTasksOfType(super.getType())) { + if (!TaskUtils.validateWorld(player, task)) continue; + + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + + int catchesNeeded = (int) task.getConfigValue("amount"); + String configItem = (String) task.getConfigValue("item"); + if (caught.getItemStack().getType() != Material.getMaterial(String.valueOf(configItem))) { + return; + } + + int progressCatches; + if (taskProgress.getProgress() == null) { + progressCatches = 0; + } else { + progressCatches = (int) taskProgress.getProgress(); + } + + taskProgress.setProgress(progressCatches + 1); + + if (((int) taskProgress.getProgress()) >= catchesNeeded) { + taskProgress.setCompleted(true); + } + } + } + } + } + +} |
