diff options
Diffstat (limited to 'bukkit')
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java index 81a8de07..0ebbde61 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java @@ -10,11 +10,13 @@ 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.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerFishEvent; +import org.bukkit.inventory.ItemStack; public final class FishingTaskType extends BukkitTaskType { @@ -29,6 +31,7 @@ public final class FishingTaskType extends BukkitTaskType { super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount")); super.addConfigValidator(TaskUtils.useItemStackConfigValidator(this, "item")); super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "data")); + super.addConfigValidator(TaskUtils.useBooleanConfigValidator(this, "exact-match")); } @Override @@ -38,28 +41,33 @@ public final class FishingTaskType extends BukkitTaskType { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFishCaught(PlayerFishEvent event) { - if (event.getPlayer().hasMetadata("NPC")) return; + PlayerFishEvent.State state = event.getState(); + if (state != PlayerFishEvent.State.CAUGHT_FISH) { + return; + } - if (event.getState() != PlayerFishEvent.State.CAUGHT_FISH) { + final Entity entity = event.getCaught(); + if (!(entity instanceof Item caught)) { return; } - + Player player = event.getPlayer(); - if (!(event.getCaught() instanceof Item caught)) { + if (player.hasMetadata("NPC")) { return; } + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); if (qPlayer == null) { return; } - for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this)) { + ItemStack item = caught.getItemStack(); + + for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this, TaskUtils.TaskConstraint.WORLD)) { Quest quest = pendingTask.quest(); Task task = pendingTask.task(); TaskProgress taskProgress = pendingTask.taskProgress(); - super.debug("Player fished item of type " + caught.getItemStack().getType(), quest.getId(), task.getId(), event.getPlayer().getUniqueId()); - if (task.hasConfigKey("item")) { QuestItem qi; if ((qi = fixedQuestItemCache.get(quest.getId(), task.getId())) == null) { @@ -68,8 +76,11 @@ public final class FishingTaskType extends BukkitTaskType { qi = fetchedItem; } - if (!qi.compareItemStack(caught.getItemStack())) { - super.debug("Item does not match required item, continuing...", quest.getId(), task.getId(), event.getPlayer().getUniqueId()); + super.debug("Player fished item of type " + item.getType(), quest.getId(), task.getId(), player.getUniqueId()); + + boolean exactMatch = TaskUtils.getConfigBoolean(task, "exact-match", true); + if (!qi.compareItemStack(item, exactMatch)) { + super.debug("Item does not match required item, continuing...", quest.getId(), task.getId(), player.getUniqueId()); continue; } } @@ -77,13 +88,12 @@ public final class FishingTaskType extends BukkitTaskType { int progress = TaskUtils.incrementIntegerTaskProgress(taskProgress); super.debug("Incrementing task progress (now " + progress + ")", quest.getId(), task.getId(), player.getUniqueId()); - int catchesNeeded = (int) task.getConfigValue("amount"); + int amount = (int) task.getConfigValue("amount"); - if (progress >= catchesNeeded) { + if (progress >= amount) { super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId()); taskProgress.setCompleted(true); } } } - } |
