aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java44
1 files changed, 26 insertions, 18 deletions
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);
}
}
}
-
}