summaryrefslogtreecommitdiffstats
path: root/bukkit/src/main
diff options
context:
space:
mode:
authorKrakenied <Krakenied1@gmail.com>2023-09-18 17:07:06 +0200
committerKrakenied <Krakenied1@gmail.com>2023-09-24 15:57:11 +0200
commitb462fe255b3c9b267b300cefded4cec05ff86222 (patch)
tree6935a34349ac4b1c629926e2380f02e7bb5d7a10 /bukkit/src/main
parent68010d38ed3f43c1f21be0d98d49ecf159b28615 (diff)
Farming task type rework
Closes https://github.com/LMBishop/Quests/issues/548
Diffstat (limited to 'bukkit/src/main')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/bossbar/BossBar_Bukkit.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java65
2 files changed, 58 insertions, 9 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/bossbar/BossBar_Bukkit.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/bossbar/BossBar_Bukkit.java
index 7ac96848..7aa3244d 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/bossbar/BossBar_Bukkit.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/bossbar/BossBar_Bukkit.java
@@ -39,7 +39,7 @@ public class BossBar_Bukkit implements QuestsBossBar {
@Override
public void sendBossBar(Player player, String questId, String title, int time, float progress) {
- this.plugin.getScheduler().runTaskAsynchronously(() -> {
+ plugin.getScheduler().runTaskAsynchronously(() -> {
Cache<String, BossBar> questBarCache = playerQuestBarCache.asMap()
.computeIfAbsent(player, k -> {
//noinspection CodeBlock2Expr (for readability)
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 c181a883..0b534915 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
@@ -8,7 +8,9 @@ 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.block.BlockFace;
import org.bukkit.block.data.Ageable;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Player;
@@ -17,7 +19,10 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
public final class FarmingTaskType extends BukkitTaskType {
@@ -35,26 +40,57 @@ public final class FarmingTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, TaskUtils.MaterialListConfigValidatorMode.BLOCK, "block", "blocks"));
- super.addConfigValidator(TaskUtils.useAcceptedValuesConfigValidator(this, Arrays.asList("break", "harvest"), "mode"));
+ super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "data"));
+ super.addConfigValidator(TaskUtils.useAcceptedValuesConfigValidator(this, Arrays.asList(
+ "break",
+ "harvest"
+ ), "mode"));
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
- handle(event.getPlayer(), event.getBlock(), event.getBlock().getBlockData(), "break");
+ Block block = event.getBlock();
+ Material type = block.getType();
+
+ List<Block> brokenBlocks = new ArrayList<>();
+ brokenBlocks.add(block);
+
+ boolean performAgeCheck = true;
+
+ if (type == Material.BAMBOO || type == Material.CACTUS || type == Material.KELP || type == Material.SUGAR_CANE) {
+ performAgeCheck = false;
+
+ Block anotherBlock = block.getRelative(BlockFace.UP);
+
+ while (true) {
+ Material anotherType = anotherBlock.getType();
+
+ if (anotherType == type) {
+ brokenBlocks.add(anotherBlock);
+ } else {
+ break;
+ }
+
+ anotherBlock = anotherBlock.getRelative(BlockFace.UP);
+ }
+ }
+
+ handle(event.getPlayer(), brokenBlocks, "break", performAgeCheck);
}
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(), event.getHarvestedBlock().getBlockData(), "harvest");
+ handle(event.getPlayer(), event.getHarvestedBlock(), "harvest", true);
}
}
- private void handle(Player player, Block block, BlockData blockData, String mode) {
- if (!(blockData instanceof Ageable crop && crop.getAge() == crop.getMaximumAge() || plugin.getVersionSpecificHandler().isCaveVinesPlantWithBerries(blockData))) {
- return;
- }
+ @SuppressWarnings("SameParameterValue")
+ private void handle(Player player, Block block, String mode, boolean performAgeCheck) {
+ handle(player, Collections.singletonList(block), mode, performAgeCheck);
+ }
+ private void handle(Player player, List<Block> blocks, String mode, boolean performAgeCheck) {
if (player.hasMetadata("NPC")) {
return;
}
@@ -64,6 +100,19 @@ public final class FarmingTaskType extends BukkitTaskType {
return;
}
+ for (Block block : blocks) {
+ handle(player, qPlayer, block, mode, performAgeCheck);
+ }
+ }
+
+ private void handle(Player player, QPlayer qPlayer, Block block, String mode, boolean performAgeCheck) {
+ if (performAgeCheck) {
+ BlockData blockData = block.getBlockData();
+ if (!(blockData instanceof Ageable crop && crop.getAge() == crop.getMaximumAge() || plugin.getVersionSpecificHandler().isCaveVinesPlantWithBerries(blockData))) {
+ return;
+ }
+ }
+
for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this, TaskConstraintSet.ALL)) {
Quest quest = pendingTask.quest();
Task task = pendingTask.task();
@@ -71,7 +120,7 @@ public final class FarmingTaskType extends BukkitTaskType {
super.debug("Player farmed a crop " + block.getType() + " (mode = " + mode + ")", quest.getId(), task.getId(), player.getUniqueId());
- final String requiredMode = (String) task.getConfigValue("mode");
+ String requiredMode = (String) task.getConfigValue("mode");
if (requiredMode != null && !mode.equals(requiredMode)) {
super.debug("Mode does not match the required mode, continuing...", quest.getId(), task.getId(), player.getUniqueId());
}