diff options
| author | Krakenied <Krakenied1@gmail.com> | 2022-04-18 04:24:19 +0200 |
|---|---|---|
| committer | Krakenied <Krakenied1@gmail.com> | 2022-04-18 04:24:19 +0200 |
| commit | 1172009251e89bc8728338a864c998ce42bc5207 (patch) | |
| tree | 7dc2b53b6823dda529af31d74dbfc4809c4d3c46 /bukkit/src/main | |
| parent | f0edeee46353c15c81083708ca52f17fa1d46647 (diff) | |
Add farming task type modes for harvestable blocks support
Fixes https://github.com/LMBishop/Quests/issues/363
Diffstat (limited to 'bukkit/src/main')
2 files changed, 76 insertions, 30 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingCertainTaskType.java index fa43d6e5..19dbc2ff 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingCertainTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingCertainTaskType.java @@ -13,8 +13,10 @@ import com.leonardobishop.quests.common.quest.Task; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.data.Ageable; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.jetbrains.annotations.NotNull; @@ -27,13 +29,17 @@ public final class FarmingCertainTaskType extends BukkitTaskType { private final BukkitQuestsPlugin plugin; public FarmingCertainTaskType(BukkitQuestsPlugin plugin) { - super("farmingcertain", TaskUtils.TASK_ATTRIBUTION_STRING, "Break a set amount of a certain crop."); + super("farmingcertain", TaskUtils.TASK_ATTRIBUTION_STRING, "Break or harvest a set amount of a certain crop."); this.plugin = plugin; + + try { + Class.forName("org.bukkit.event.player.PlayerHarvestBlockEvent"); + plugin.getServer().getPluginManager().registerEvents(new FarmingCertainTaskType.HarvestBlockListener(), plugin); + } catch (ClassNotFoundException ignored) { } // server version cannot support event } @Override public @NotNull List<ConfigProblem> validateConfig(@NotNull String root, @NotNull HashMap<String, Object> config) { - //TODO add world validation ArrayList<ConfigProblem> problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); @@ -67,26 +73,37 @@ public final class FarmingCertainTaskType extends BukkitTaskType { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { - if (!(event.getBlock().getState().getBlockData() instanceof Ageable)) { - return; + handle(event.getPlayer(), event.getBlock(), "break"); + } + + private final class HarvestBlockListener implements Listener { + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onHarvestBlock(org.bukkit.event.player.PlayerHarvestBlockEvent event) { + handle(event.getPlayer(), event.getHarvestedBlock(), "harvest"); } + } - QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); - if (qPlayer == null) { + private void handle(Player player, Block block, String mode) { + if (!(block.getState().getBlockData() instanceof Ageable)) { return; } - Ageable crop = (Ageable) event.getBlock().getState().getBlockData(); + Ageable crop = (Ageable) block.getState().getBlockData(); if (crop.getAge() != crop.getMaximumAge()) { return; } + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + return; + } + for (Quest quest : super.getRegisteredQuests()) { if (qPlayer.hasStartedQuest(quest)) { QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { - if (!TaskUtils.validateWorld(event.getPlayer(), task)) continue; + if (!TaskUtils.validateWorld(player, task)) continue; TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); @@ -94,19 +111,24 @@ public final class FarmingCertainTaskType extends BukkitTaskType { continue; } - if (matchBlock(task, event.getBlock())) { - int brokenBlocksNeeded = (int) task.getConfigValue("amount"); + if (task.getConfigValue("mode") != null + && !mode.equalsIgnoreCase(task.getConfigValue("mode").toString())) { + continue; + } + + if (matchBlock(task, block)) { + int blocksNeeded = (int) task.getConfigValue("amount"); - int progressBlocksBroken; + int progressBlocks; if (taskProgress.getProgress() == null) { - progressBlocksBroken = 0; + progressBlocks = 0; } else { - progressBlocksBroken = (int) taskProgress.getProgress(); + progressBlocks = (int) taskProgress.getProgress(); } - taskProgress.setProgress(progressBlocksBroken + 1); + taskProgress.setProgress(progressBlocks + 1); - if (((int) taskProgress.getProgress()) >= brokenBlocksNeeded) { + if (((int) taskProgress.getProgress()) >= blocksNeeded) { taskProgress.setCompleted(true); } } @@ -139,4 +161,4 @@ public final class FarmingCertainTaskType extends BukkitTaskType { return false; } -} +}
\ No newline at end of file diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java index dda67f0e..1e5454bf 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java @@ -9,9 +9,12 @@ import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; 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.block.Block; import org.bukkit.block.data.Ageable; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.jetbrains.annotations.NotNull; @@ -24,8 +27,13 @@ public final class FarmingTaskType extends BukkitTaskType { private final BukkitQuestsPlugin plugin; public FarmingTaskType(BukkitQuestsPlugin plugin) { - super("farming", TaskUtils.TASK_ATTRIBUTION_STRING, "Break a set amount of any crop."); + super("farming", TaskUtils.TASK_ATTRIBUTION_STRING, "Break or harvest a set amount of any crop."); this.plugin = plugin; + + try { + Class.forName("org.bukkit.event.player.PlayerHarvestBlockEvent"); + plugin.getServer().getPluginManager().registerEvents(new FarmingTaskType.HarvestBlockListener(), plugin); + } catch (ClassNotFoundException ignored) { } // server version cannot support event } @Override @@ -38,26 +46,37 @@ public final class FarmingTaskType extends BukkitTaskType { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent event) { - if (!(event.getBlock().getState().getBlockData() instanceof Ageable)) { - return; + handle(event.getPlayer(), event.getBlock(), "break"); + } + + private final class HarvestBlockListener implements Listener { + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onHarvestBlock(org.bukkit.event.player.PlayerHarvestBlockEvent event) { + handle(event.getPlayer(), event.getHarvestedBlock(), "harvest"); } + } - QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); - if (qPlayer == null) { + private void handle(Player player, Block block, String mode) { + if (!(block.getState().getBlockData() instanceof Ageable)) { return; } - Ageable crop = (Ageable) event.getBlock().getState().getBlockData(); + Ageable crop = (Ageable) block.getState().getBlockData(); if (crop.getAge() != crop.getMaximumAge()) { return; } + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + return; + } + for (Quest quest : super.getRegisteredQuests()) { if (qPlayer.hasStartedQuest(quest)) { QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { - if (!TaskUtils.validateWorld(event.getPlayer(), task)) continue; + if (!TaskUtils.validateWorld(player, task)) continue; TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); @@ -65,18 +84,23 @@ public final class FarmingTaskType extends BukkitTaskType { continue; } - int brokenBlocksNeeded = (int) task.getConfigValue("amount"); + if (task.getConfigValue("mode") != null + && !mode.equalsIgnoreCase(task.getConfigValue("mode").toString())) { + continue; + } + + int blocksNeeded = (int) task.getConfigValue("amount"); - int progressBlocksBroken; + int progressBlocks; if (taskProgress.getProgress() == null) { - progressBlocksBroken = 0; + progressBlocks = 0; } else { - progressBlocksBroken = (int) taskProgress.getProgress(); + progressBlocks = (int) taskProgress.getProgress(); } - taskProgress.setProgress(progressBlocksBroken + 1); + taskProgress.setProgress(progressBlocks + 1); - if (((int) taskProgress.getProgress()) >= brokenBlocksNeeded) { + if (((int) taskProgress.getProgress()) >= blocksNeeded) { taskProgress.setCompleted(true); } } @@ -84,4 +108,4 @@ public final class FarmingTaskType extends BukkitTaskType { } } -} +}
\ No newline at end of file |
