aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src/main
diff options
context:
space:
mode:
authorKrakenied <Krakenied1@gmail.com>2024-04-29 09:08:46 +0200
committerLeonardo Bishop <13875753+LMBishop@users.noreply.github.com>2024-06-03 18:48:22 +0100
commit2bebaf5d2cc0ad49192f27d4e4949348180dead7 (patch)
treecab6f00a276122e5e965cc64c3742bcf9c2f89eb /bukkit/src/main
parentcbdef13fd9bc2265335ef70efc1698c5b5dfecf5 (diff)
Finished bucket task types rework
Diffstat (limited to 'bukkit/src/main')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketEmptyTaskType.java32
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketEntityTaskType.java33
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketFillTaskType.java33
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketInteractionTaskType.java47
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CuringTaskType.java4
6 files changed, 52 insertions, 99 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
index 947d16c0..378c2bd2 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
@@ -64,6 +64,7 @@ import com.leonardobishop.quests.bukkit.tasktype.type.BlockshearingTaskType;
import com.leonardobishop.quests.bukkit.tasktype.type.BreedingTaskType;
import com.leonardobishop.quests.bukkit.tasktype.type.BrewingTaskType;
import com.leonardobishop.quests.bukkit.tasktype.type.BucketEmptyTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.BucketEntityTaskType;
import com.leonardobishop.quests.bukkit.tasktype.type.BucketFillTaskType;
import com.leonardobishop.quests.bukkit.tasktype.type.BuildingTaskType;
import com.leonardobishop.quests.bukkit.tasktype.type.CommandTaskType;
@@ -444,6 +445,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
taskTypeManager.registerTaskType(() -> new BlockItemdroppingTaskType(this), () -> CompatUtils.classExists("org.bukkit.event.block.BlockDropItemEvent"));
taskTypeManager.registerTaskType(() -> new BlockshearingTaskType(this), () -> CompatUtils.classExists("io.papermc.paper.event.block.PlayerShearBlockEvent"));
taskTypeManager.registerTaskType(() -> new BrewingTaskType(this), () -> CompatUtils.classWithMethodExists("org.bukkit.event.inventory.BrewEvent", "getResults"));
+ taskTypeManager.registerTaskType(() -> new BucketEntityTaskType(this), () -> CompatUtils.classExists("org.bukkit.event.player.PlayerBucketEntityEvent"));
taskTypeManager.registerTaskType(() -> new CompostingTaskType(this), () -> CompatUtils.classExists("io.papermc.paper.event.entity.EntityCompostItemEvent"));
taskTypeManager.registerTaskType(() -> new CuringTaskType(this), () -> CompatUtils.classExists("org.bukkit.event.entity.EntityTransformEvent"));
taskTypeManager.registerTaskType(() -> new FarmingTaskType(this), () -> CompatUtils.classExists("org.bukkit.block.data.Ageable"));
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketEmptyTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketEmptyTaskType.java
index 37c95148..61708243 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketEmptyTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketEmptyTaskType.java
@@ -1,44 +1,26 @@
package com.leonardobishop.quests.bukkit.tasktype.type;
import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
-import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
import com.leonardobishop.quests.bukkit.util.TaskUtils;
-import com.leonardobishop.quests.bukkit.util.constraint.TaskConstraintSet;
-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.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
+import org.bukkit.inventory.EquipmentSlot;
+import org.bukkit.inventory.PlayerInventory;
-public final class BucketEmptyTaskType extends BukkitTaskType {
-
- private final BukkitQuestsPlugin plugin;
+public final class BucketEmptyTaskType extends BucketInteractionTaskType {
public BucketEmptyTaskType(BukkitQuestsPlugin plugin) {
- super("bucketempty", TaskUtils.TASK_ATTRIBUTION_STRING, "Empty a specific bucket.");
- this.plugin = plugin;
+ super(plugin, "bucketempty", TaskUtils.TASK_ATTRIBUTION_STRING, "Empty a specific bucket.");
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
Player player = event.getPlayer();
- 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, TaskConstraintSet.ALL)) {
- Quest quest = pendingTask.quest();
- Task task = pendingTask.task();
- TaskProgress taskProgress = pendingTask.taskProgress();
+ PlayerInventory inventory = player.getInventory();
+ EquipmentSlot slot = event.getHand();
- }
+ handle(player, inventory.getItem(slot));
}
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketEntityTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketEntityTaskType.java
index cb3c8fe8..84ce41df 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketEntityTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketEntityTaskType.java
@@ -1,44 +1,19 @@
package com.leonardobishop.quests.bukkit.tasktype.type;
import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
-import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
import com.leonardobishop.quests.bukkit.util.TaskUtils;
-import com.leonardobishop.quests.bukkit.util.constraint.TaskConstraintSet;
-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.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerBucketEntityEvent;
-public final class BucketEntityTaskType extends BukkitTaskType {
-
- private final BukkitQuestsPlugin plugin;
+public final class BucketEntityTaskType extends BucketInteractionTaskType {
public BucketEntityTaskType(BukkitQuestsPlugin plugin) {
- super("bucketentity", TaskUtils.TASK_ATTRIBUTION_STRING, "Capture entity with a bucket.");
- this.plugin = plugin;
+ super(plugin, "bucketentity", TaskUtils.TASK_ATTRIBUTION_STRING, "Capture specific entity in a bucket.");
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void onPlayerBucketEntity(PlayerBucketEntityEvent event) {
- Player player = event.getPlayer();
- 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, TaskConstraintSet.ALL)) {
- Quest quest = pendingTask.quest();
- Task task = pendingTask.task();
- TaskProgress taskProgress = pendingTask.taskProgress();
-
- }
+ public void onPlayerBucketEmpty(PlayerBucketEntityEvent event) {
+ handle(event.getPlayer(), event.getEntityBucket());
}
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketFillTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketFillTaskType.java
index a05a62a0..3a6fdb28 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketFillTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketFillTaskType.java
@@ -2,47 +2,18 @@ package com.leonardobishop.quests.bukkit.tasktype.type;
import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
import com.leonardobishop.quests.bukkit.util.TaskUtils;
-import com.leonardobishop.quests.bukkit.util.constraint.TaskConstraintSet;
-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.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerBucketFillEvent;
public final class BucketFillTaskType extends BucketInteractionTaskType {
- private final BukkitQuestsPlugin plugin;
-
public BucketFillTaskType(BukkitQuestsPlugin plugin) {
- super("bucketfill", TaskUtils.TASK_ATTRIBUTION_STRING, "Fill a specific bucket.");
- this.plugin = plugin;
-
- super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
- super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
- super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "bucket"));
- super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, TaskUtils.MaterialListConfigValidatorMode.ITEM, "bucket"));
+ super(plugin, "bucketfill", TaskUtils.TASK_ATTRIBUTION_STRING, "Fill a specific bucket.");
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerBucketFill(PlayerBucketFillEvent event) {
- Player player = event.getPlayer();
- 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, TaskConstraintSet.ALL)) {
- Quest quest = pendingTask.quest();
- Task task = pendingTask.task();
- TaskProgress taskProgress = pendingTask.taskProgress();
-
- }
+ handle(event.getPlayer(), event.getItemStack());
}
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketInteractionTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketInteractionTaskType.java
index 1dc336c2..b4f0191a 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketInteractionTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketInteractionTaskType.java
@@ -1,6 +1,9 @@
package com.leonardobishop.quests.bukkit.tasktype.type;
+import com.google.common.collect.HashBasedTable;
+import com.google.common.collect.Table;
import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.item.QuestItem;
import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
import com.leonardobishop.quests.bukkit.util.TaskUtils;
import com.leonardobishop.quests.bukkit.util.constraint.TaskConstraintSet;
@@ -8,22 +11,31 @@ 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.Material;
import org.bukkit.entity.Player;
-import org.jetbrains.annotations.NotNull;
+import org.bukkit.inventory.ItemStack;
public abstract class BucketInteractionTaskType extends BukkitTaskType {
- public BucketInteractionTaskType(@NotNull String type, String author, String description) {
+ private final BukkitQuestsPlugin plugin;
+ private final Table<String, String, QuestItem> fixedQuestItemCache = HashBasedTable.create();
+
+ public BucketInteractionTaskType(BukkitQuestsPlugin plugin, String type, String author, String description) {
super(type, author, description);
+ this.plugin = plugin;
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
- super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "bucket"));
- super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, TaskUtils.MaterialListConfigValidatorMode.ITEM, "bucket"));
+ super.addConfigValidator(TaskUtils.useItemStackConfigValidator(this, "bucket"));
+ super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "data"));
+ super.addConfigValidator(TaskUtils.useBooleanConfigValidator(this, "exact-match"));
+ }
+
+ @Override
+ public void onReady() {
+ fixedQuestItemCache.clear();
}
- public void onBucket(Player player, Material bucket, BukkitQuestsPlugin plugin) {
+ protected void handle(Player player, ItemStack item) {
if (player.hasMetadata("NPC")) {
return;
}
@@ -38,21 +50,28 @@ public abstract class BucketInteractionTaskType extends BukkitTaskType {
Task task = pendingTask.task();
TaskProgress taskProgress = pendingTask.taskProgress();
- int amount = (int) task.getConfigValue("amount");
- Object configBucket = task.getConfigValue("bucket");
- Material material = Material.getMaterial((String) configBucket);
+ if (task.hasConfigKey("bucket")) {
+ QuestItem qi;
+ if ((qi = fixedQuestItemCache.get(quest.getId(), task.getId())) == null) {
+ QuestItem fetchedItem = TaskUtils.getConfigQuestItem(task, "bucket", "data");
+ fixedQuestItemCache.put(quest.getId(), task.getId(), fetchedItem);
+ qi = fetchedItem;
+ }
- super.debug("Player used bucket of type " + bucket, quest.getId(), task.getId(), player.getUniqueId());
+ super.debug("Player interacted with bucket of type " + item.getType(), quest.getId(), task.getId(), player.getUniqueId());
- if (bucket != material) {
- super.debug("Player bucket does not match required bucket '" + material + "', continuing...", quest.getId(), task.getId(), player.getUniqueId());
- continue;
+ boolean exactMatch = TaskUtils.getConfigBoolean(task, "exact-match", true);
+ if (!qi.compareItemStack(item, exactMatch)) {
+ super.debug("Item does not match, 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());
- if ((int) taskProgress.getProgress() >= amount) {
+ int amount = (int) task.getConfigValue("amount");
+ if (progress >= amount) {
super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId());
taskProgress.setCompleted(true);
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CuringTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CuringTaskType.java
index 1f4135b2..6d17c4e3 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CuringTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CuringTaskType.java
@@ -65,6 +65,10 @@ public final class CuringTaskType extends BukkitTaskType {
// I don't know why my IDE thinks profession
// is always null, probably a bad API design.
+ //
+ // Yeah, ZombieVillager is missing an override
+ // for annotation from the Zombie interface.
+ //
//noinspection ConstantValue
super.debug("Player cured " + zombieVillager.getType() + " of profession " + profession + " and type " + type, quest.getId(), task.getId(), player.getUniqueId());