diff options
Diffstat (limited to 'src')
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); + } + } + } |
