diff options
Diffstat (limited to 'bukkit/src')
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java | 45 |
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); } } } |
