aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit/src')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java11
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler17.java7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ConsumeTaskType.java31
4 files changed, 51 insertions, 4 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java
index c84bc315..0ee41be2 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java
@@ -1,7 +1,10 @@
package com.leonardobishop.quests.bukkit.hook.versionspecific;
+import org.bukkit.Material;
+import org.bukkit.Tag;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.CaveVinesPlant;
+import org.bukkit.damage.DamageSource;
import org.bukkit.entity.AbstractHorse;
import org.bukkit.entity.Camel;
import org.bukkit.entity.Donkey;
@@ -238,7 +241,13 @@ public interface VersionSpecificHandler {
List<Entity> getPassengers(Entity entity);
/**
- * DamageSources were introduced in {@code 1.20.4}.
+ * {@link DamageSource}s were introduced in {@code 1.20.4}.
*/
+ @SuppressWarnings("UnstableApiUsage")
@Nullable Player getDamager(@Nullable EntityDamageEvent lastDamageCause);
+
+ /**
+ * {@link Tag#CANDLE_CAKES} was introduced in {@code 1.17}.
+ */
+ boolean isCake(Material type);
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler17.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler17.java
index 731b29f6..471e6a74 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler17.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler17.java
@@ -1,5 +1,7 @@
package com.leonardobishop.quests.bukkit.hook.versionspecific;
+import org.bukkit.Material;
+import org.bukkit.Tag;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.CaveVinesPlant;
import org.bukkit.entity.Entity;
@@ -21,4 +23,9 @@ public class VersionSpecificHandler17 extends VersionSpecificHandler16 implement
public boolean isGoat(Entity entity) {
return entity instanceof Goat;
}
+
+ @Override
+ public boolean isCake(Material type) {
+ return super.isCake(type) || Tag.CANDLE_CAKES.isTagged(type);
+ }
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java
index 70e02257..800ae161 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java
@@ -1,5 +1,6 @@
package com.leonardobishop.quests.bukkit.hook.versionspecific;
+import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Horse;
@@ -223,4 +224,9 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler {
return null;
}
+
+ @Override
+ public boolean isCake(Material type) {
+ return type == Material.CAKE;
+ }
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ConsumeTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ConsumeTaskType.java
index 4fbcb5e4..866f6132 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ConsumeTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ConsumeTaskType.java
@@ -11,14 +11,20 @@ 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.block.Block;
+import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
+import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.ItemStack;
public final class ConsumeTaskType extends BukkitTaskType {
+ private static final ItemStack CAKE_ITEM = new ItemStack(Material.CAKE);
+
private final BukkitQuestsPlugin plugin;
private final Table<String, String, QuestItem> fixedQuestItemCache = HashBasedTable.create();
@@ -40,7 +46,28 @@ public final class ConsumeTaskType extends BukkitTaskType {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerItemConsume(PlayerItemConsumeEvent event) {
- Player player = event.getPlayer();
+ this.handle(event.getPlayer(), event.getItem());
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onEntityChangeBlock(EntityChangeBlockEvent event) {
+ Block block = event.getBlock();
+ Material type = block.getType();
+
+ if (!plugin.getVersionSpecificHandler().isCake(type)) {
+ return;
+ }
+
+ Entity entity = event.getEntity();
+
+ if (!(entity instanceof Player player)) {
+ return;
+ }
+
+ this.handle(player, CAKE_ITEM);
+ }
+
+ public void handle(Player player, ItemStack item) {
if (player.hasMetadata("NPC")) {
return;
}
@@ -50,8 +77,6 @@ public final class ConsumeTaskType extends BukkitTaskType {
return;
}
- ItemStack item = event.getItem();
-
for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this, TaskConstraintSet.ALL)) {
Quest quest = pendingTask.quest();
Task task = pendingTask.task();