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/MilkingTaskType.java45
1 files changed, 38 insertions, 7 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java
index 388247d2..956978bf 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java
@@ -9,11 +9,16 @@ 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.entity.Animals;
import org.bukkit.entity.Cow;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Goat;
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.player.PlayerInteractEntityEvent;
+import org.bukkit.inventory.ItemStack;
public final class MilkingTaskType extends BukkitTaskType {
@@ -25,41 +30,67 @@ public final class MilkingTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
+ super.addConfigValidator(TaskUtils.useEntityListConfigValidator(this, "mob", "mobs"));
+ super.addConfigValidator(TaskUtils.useSpawnReasonListConfigValidator(this, "spawn-reason", "spawn-reasons"));
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void onMilk(PlayerInteractEntityEvent event) {
- if (!(event.getRightClicked() instanceof Cow) || (plugin.getVersionSpecificHandler().getItemInMainHand(event.getPlayer()).getType() != Material.BUCKET)) {
+ public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
+ Entity entity = event.getRightClicked();
+ if (!(entity instanceof Cow || entity instanceof Goat)) {
return;
}
- if (event.getPlayer().hasMetadata("NPC")) return;
+ Animals animals = (Animals) entity;
+ if (!animals.isAdult()) {
+ return;
+ }
Player player = event.getPlayer();
+ if (player.hasMetadata("NPC")) {
+ return;
+ }
+
+ ItemStack item = plugin.getVersionSpecificHandler().getItemInMainHand(player);
+ if (item.getType() != Material.BUCKET) {
+ return;
+ }
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
+ CreatureSpawnEvent.SpawnReason spawnReason = entity.getEntitySpawnReason();
+
for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this, TaskConstraintSet.ALL)) {
Quest quest = pendingTask.quest();
Task task = pendingTask.task();
TaskProgress taskProgress = pendingTask.taskProgress();
- super.debug("Player milked cow", quest.getId(), task.getId(), player.getUniqueId());
+ super.debug("Player milked " + entity.getType(), 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 (!TaskUtils.matchSpawnReason(this, pendingTask, spawnReason, player.getUniqueId())) {
+ super.debug("Continuing...", quest.getId(), task.getId(), player.getUniqueId());
+ continue;
+ }
int progress = TaskUtils.incrementIntegerTaskProgress(taskProgress);
super.debug("Incrementing task progress (now " + progress + ")", quest.getId(), task.getId(), player.getUniqueId());
- int breedingNeeded = (int) task.getConfigValue("amount");
+ int amount = (int) task.getConfigValue("amount");
- if (progress >= breedingNeeded) {
+ if (progress >= amount) {
super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId());
taskProgress.setCompleted(true);
}
- TaskUtils.sendTrackAdvancement(player, quest, task, taskProgress, breedingNeeded);
+ TaskUtils.sendTrackAdvancement(player, quest, task, taskProgress, amount);
}
}
}