summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingCertainTaskType.java86
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningCertainTaskType.java88
2 files changed, 125 insertions, 49 deletions
diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingCertainTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingCertainTaskType.java
index fcd4b08a..a4b0d1d5 100644
--- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingCertainTaskType.java
+++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingCertainTaskType.java
@@ -10,8 +10,10 @@ import com.leonardobishop.quests.quests.Task;
import com.leonardobishop.quests.quests.tasktypes.ConfigValue;
import com.leonardobishop.quests.quests.tasktypes.TaskType;
import org.bukkit.Material;
+import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
+import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import java.util.ArrayList;
@@ -26,6 +28,7 @@ public final class BuildingCertainTaskType extends TaskType {
this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of blocks to be placed."));
this.creatorConfigValues.add(new ConfigValue("block", true, "Name or ID of block."));
this.creatorConfigValues.add(new ConfigValue("data", false, "Data code for block."));
+ this.creatorConfigValues.add(new ConfigValue("reverse-if-broken", false, "Will reverse progression if block of same type is broken."));
this.creatorConfigValues.add(new ConfigValue("use-similar-blocks", false, "(Deprecated) If true, this will ignore orientation of doors, logs etc."));
}
@@ -50,39 +53,74 @@ public final class BuildingCertainTaskType extends TaskType {
continue;
}
- Material material;
- Object configBlock = task.getConfigValue("block");
- Object configData = task.getConfigValue("data");
- Object configSimilarBlocks = task.getConfigValue("use-similar-blocks");
-
- material = Material.matchMaterial(String.valueOf(configBlock));
-
+ if (matchBlock(task, event.getBlock())) {
+ increment(task, taskProgress, 1);
+ }
+ }
+ }
+ }
+ }
- Material blockType = event.getBlock().getType();
- short blockData = event.getBlock().getData();
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onBlockBreak(BlockBreakEvent event) {
+ QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
- if (blockType.equals(material)) {
- if (configData != null && (((int) blockData) != ((int) configData))) {
- continue;
- }
- int brokenBlocksNeeded = (int) task.getConfigValue("amount");
+ for (Quest quest : super.getRegisteredQuests()) {
+ if (questProgressFile.hasStartedQuest(quest)) {
+ QuestProgress questProgress = questProgressFile.getQuestProgress(quest);
- int progressBlocksBroken;
- if (taskProgress.getProgress() == null) {
- progressBlocksBroken = 0;
- } else {
- progressBlocksBroken = (int) taskProgress.getProgress();
- }
+ for (Task task : quest.getTasksOfType(super.getType())) {
+ TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
- taskProgress.setProgress(progressBlocksBroken + 1);
+ if (taskProgress.isCompleted()) {
+ continue;
+ }
- if (((int) taskProgress.getProgress()) >= brokenBlocksNeeded) {
- taskProgress.setCompleted(true);
- }
+ if (matchBlock(task, event.getBlock())) {
+ increment(task, taskProgress, -1);
}
}
}
}
}
+ private boolean matchBlock(Task task, Block block) {
+ Material material;
+ Object configBlock = task.getConfigValue("block");
+ Object configData = task.getConfigValue("data");
+ Object configSimilarBlocks = task.getConfigValue("use-similar-blocks");
+
+ material = Material.matchMaterial(String.valueOf(configBlock));
+
+ Material blockType = block.getType();
+ short blockData = block.getData();
+
+ if (blockType.equals(material)) {
+ if (configData != null && (((int) blockData) != ((int) configData))) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void increment(Task task, TaskProgress taskProgress, int amount) {
+ int brokenBlocksNeeded = (int) task.getConfigValue("amount");
+
+ int progressBlocksBroken;
+ if (taskProgress.getProgress() == null) {
+ progressBlocksBroken = 0;
+ } else {
+ progressBlocksBroken = (int) taskProgress.getProgress();
+ }
+
+ taskProgress.setProgress(progressBlocksBroken + amount);
+
+ if (((int) taskProgress.getProgress()) >= brokenBlocksNeeded) {
+ taskProgress.setCompleted(true);
+ }
+ }
+
}
diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningCertainTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningCertainTaskType.java
index 544c5341..eebabd98 100644
--- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningCertainTaskType.java
+++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningCertainTaskType.java
@@ -1,7 +1,6 @@
package com.leonardobishop.quests.quests.tasktypes.types;
import com.leonardobishop.quests.QuestsAPI;
-import com.leonardobishop.quests.blocktype.Block;
import com.leonardobishop.quests.player.QPlayer;
import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
@@ -10,11 +9,12 @@ import com.leonardobishop.quests.quests.Quest;
import com.leonardobishop.quests.quests.Task;
import com.leonardobishop.quests.quests.tasktypes.ConfigValue;
import com.leonardobishop.quests.quests.tasktypes.TaskType;
-import org.apache.commons.lang.StringUtils;
import org.bukkit.Material;
+import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.event.block.BlockPlaceEvent;
import java.util.ArrayList;
import java.util.List;
@@ -28,6 +28,7 @@ public final class MiningCertainTaskType extends TaskType {
this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of blocks to be broken."));
this.creatorConfigValues.add(new ConfigValue("block", true, "Name or ID of block."));
this.creatorConfigValues.add(new ConfigValue("data", false, "Data code for block."));
+ this.creatorConfigValues.add(new ConfigValue("reverse-if-placed", false, "Will reverse progression if block of same type is placed."));
this.creatorConfigValues.add(new ConfigValue("use-similar-blocks", false, "(Deprecated) If true, this will ignore orientation of doors, logs etc."));
}
@@ -52,34 +53,33 @@ public final class MiningCertainTaskType extends TaskType {
continue;
}
- Material material;
- Object configBlock = task.getConfigValue("block");
- Object configData = task.getConfigValue("data");
- Object configSimilarBlocks = task.getConfigValue("use-similar-blocks");
-
- material = Material.matchMaterial(String.valueOf(configBlock));
-
+ if (matchBlock(task, event.getBlock())) {
+ increment(task, taskProgress, 1);
+ }
+ }
+ }
+ }
+ }
- Material blockType = event.getBlock().getType();
- short blockData = event.getBlock().getData();
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onBlockPlace(BlockPlaceEvent event) {
+ QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
- if (blockType.equals(material)) {
- if (configData != null && (((int) blockData) != ((int) configData))) {
- continue;
- }
- int brokenBlocksNeeded = (int) task.getConfigValue("amount");
+ for (Quest quest : super.getRegisteredQuests()) {
+ if (questProgressFile.hasStartedQuest(quest)) {
+ QuestProgress questProgress = questProgressFile.getQuestProgress(quest);
- int progressBlocksBroken;
- if (taskProgress.getProgress() == null) {
- progressBlocksBroken = 0;
- } else {
- progressBlocksBroken = (int) taskProgress.getProgress();
- }
+ for (Task task : quest.getTasksOfType(super.getType())) {
+ TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
- taskProgress.setProgress(progressBlocksBroken + 1);
+ if (taskProgress.isCompleted()) {
+ continue;
+ }
- if (((int) taskProgress.getProgress()) >= brokenBlocksNeeded) {
- taskProgress.setCompleted(true);
+ if (task.getConfigValue("reverse-if-placed") != null && ((boolean) task.getConfigValue("reverse-if-placed"))) {
+ if (matchBlock(task, event.getBlock())) {
+ increment(task, taskProgress, -1);
}
}
}
@@ -87,4 +87,42 @@ public final class MiningCertainTaskType extends TaskType {
}
}
+ private boolean matchBlock(Task task, Block block) {
+ Material material;
+ Object configBlock = task.getConfigValue("block");
+ Object configData = task.getConfigValue("data");
+ Object configSimilarBlocks = task.getConfigValue("use-similar-blocks");
+
+ material = Material.matchMaterial(String.valueOf(configBlock));
+
+ Material blockType = block.getType();
+ short blockData = block.getData();
+
+ if (blockType.equals(material)) {
+ if (configData != null && (((int) blockData) != ((int) configData))) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void increment(Task task, TaskProgress taskProgress, int amount) {
+ int brokenBlocksNeeded = (int) task.getConfigValue("amount");
+
+ int progressBlocksBroken;
+ if (taskProgress.getProgress() == null) {
+ progressBlocksBroken = 0;
+ } else {
+ progressBlocksBroken = (int) taskProgress.getProgress();
+ }
+
+ taskProgress.setProgress(progressBlocksBroken + amount);
+
+ if (((int) taskProgress.getProgress()) >= brokenBlocksNeeded) {
+ taskProgress.setCompleted(true);
+ }
+ }
+
}