From 80e4381b4c7729c8e43af23386876906edd23ac5 Mon Sep 17 00:00:00 2001 From: Krakenied Date: Tue, 22 Jul 2025 16:39:39 +0200 Subject: Add cake support to consume task type Closes https://github.com/LMBishop/Quests/issues/261 --- .../versionspecific/VersionSpecificHandler.java | 11 +++++++- .../versionspecific/VersionSpecificHandler17.java | 7 +++++ .../versionspecific/VersionSpecificHandler8.java | 6 +++++ .../bukkit/tasktype/type/ConsumeTaskType.java | 31 +++++++++++++++++++--- 4 files changed, 51 insertions(+), 4 deletions(-) (limited to 'bukkit') 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 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 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(); -- cgit v1.2.3-70-g09d2