summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java34
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);
}
}
}
-
}