aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src/main/java/com
diff options
context:
space:
mode:
authorKrakenied <Krakenied1@gmail.com>2022-04-18 04:24:19 +0200
committerKrakenied <Krakenied1@gmail.com>2022-04-18 04:24:19 +0200
commit1172009251e89bc8728338a864c998ce42bc5207 (patch)
tree7dc2b53b6823dda529af31d74dbfc4809c4d3c46 /bukkit/src/main/java/com
parentf0edeee46353c15c81083708ca52f17fa1d46647 (diff)
Add farming task type modes for harvestable blocks support
Fixes https://github.com/LMBishop/Quests/issues/363
Diffstat (limited to 'bukkit/src/main/java/com')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingCertainTaskType.java54
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java52
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