From 9e7fb3028790a4f2a24d98168ba9a803c0a59f50 Mon Sep 17 00:00:00 2001 From: Krakenied Date: Fri, 26 May 2023 14:20:00 +0200 Subject: Add support for shearing other entities (i.e. mushroom cows and snowmen) --- .../bukkit/tasktype/type/ShearingTaskType.java | 44 +++++++++++++--------- 1 file changed, 26 insertions(+), 18 deletions(-) (limited to 'bukkit') diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java index 7cc3fc88..815253b2 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java @@ -7,59 +7,67 @@ import com.leonardobishop.quests.common.player.QPlayer; 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.entity.Entity; import org.bukkit.entity.Player; -import org.bukkit.entity.Sheep; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerShearEntityEvent; +import org.bukkit.material.Colorable; public final class ShearingTaskType extends BukkitTaskType { private final BukkitQuestsPlugin plugin; public ShearingTaskType(BukkitQuestsPlugin plugin) { - super("shearing", TaskUtils.TASK_ATTRIBUTION_STRING, "Shear a set amount of sheep."); + super("shearing", TaskUtils.TASK_ATTRIBUTION_STRING, "Shear a set amount of colorables and shearables."); this.plugin = plugin; super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount")); super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount")); super.addConfigValidator(TaskUtils.useDyeColorConfigValidator(this, "color", "colors")); + super.addConfigValidator(TaskUtils.useEntityListConfigValidator(this, "mob", "mobs")); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onShear(PlayerShearEntityEvent event) { - if (!(event.getEntity() instanceof Sheep sheep)) { + public void onPlayerShearEntity(PlayerShearEntityEvent event) { + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) { return; } - if (event.getPlayer().hasMetadata("NPC")) return; - - Player player = event.getPlayer(); - QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); if (qPlayer == null) { return; } + final Entity entity = event.getEntity(); + for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player.getPlayer(), qPlayer, this, TaskUtils.TaskConstraint.WORLD)) { Quest quest = pendingTask.quest(); Task task = pendingTask.task(); TaskProgress taskProgress = pendingTask.taskProgress(); - super.debug("Player sheared animal", quest.getId(), task.getId(), player.getUniqueId()); + super.debug("Player sheared a mob", quest.getId(), task.getId(), player.getUniqueId()); - if (TaskUtils.matchDyeColor(this, pendingTask, sheep, player.getUniqueId())) { - int progress = TaskUtils.incrementIntegerTaskProgress(taskProgress); - super.debug("Incrementing task progress (now " + progress + ")", quest.getId(), task.getId(), player.getUniqueId()); + if (!TaskUtils.matchEntity(this, pendingTask, entity, player.getUniqueId())) { + super.debug("Continuing...", quest.getId(), task.getId(), player.getUniqueId()); + continue; + } + + if (entity instanceof final Colorable colorable && !TaskUtils.matchColorable(this, pendingTask, colorable, player.getUniqueId())) { + super.debug("Continuing...", quest.getId(), task.getId(), player.getUniqueId()); + continue; + } - int sheepNeeded = (int) task.getConfigValue("amount"); + int progress = TaskUtils.incrementIntegerTaskProgress(taskProgress); + super.debug("Incrementing task progress (now " + progress + ")", quest.getId(), task.getId(), player.getUniqueId()); - if (progress >= sheepNeeded) { - super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId()); - taskProgress.setCompleted(true); - } + int amount = (int) task.getConfigValue("amount"); + + if (progress >= amount) { + super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId()); + taskProgress.setCompleted(true); } } } - } -- cgit v1.2.3-70-g09d2