From a1c3ac868ac13732f6f82f9074c2c27e3fde9ecd Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Wed, 3 Mar 2021 18:02:11 +0000 Subject: Add support for CoreProtect + cleanup --- build.gradle | 6 ++ .../java/com/leonardobishop/quests/Quests.java | 67 ++++++++++++++++++++-- .../quests/QuestsAutosaveRunnable.java | 2 +- .../leonardobishop/quests/QuestsConfigLoader.java | 2 +- .../quests/api/QuestsPlaceholders.java | 8 ++- .../com/leonardobishop/quests/bstats/Metrics.java | 16 +++++- .../quests/commands/CommandQuests.java | 21 +++++-- .../quests/events/MenuController.java | 9 +-- .../quests/hooks/coreprotect/CoreProtectHook.java | 29 ++++++++++ .../hooks/coreprotect/CoreProtectNoHook.java | 10 ++++ .../quests/hooks/coreprotect/ICoreProtectHook.java | 16 ++++++ .../quests/hooks/itemgetter/ItemGetterLatest.java | 6 +- .../quests/hooks/itemgetter/ItemGetter_1_13.java | 6 +- .../quests/hooks/papi/PlaceholderAPIHook.java | 1 - .../com/leonardobishop/quests/menu/QItemStack.java | 2 +- .../leonardobishop/quests/menu/QMenuCancel.java | 4 +- .../leonardobishop/quests/menu/QMenuCategory.java | 4 +- .../com/leonardobishop/quests/menu/QMenuQuest.java | 10 +++- .../leonardobishop/quests/menu/QMenuStarted.java | 10 +++- .../com/leonardobishop/quests/player/QPlayer.java | 2 +- .../quests/player/QPlayerManager.java | 2 +- .../questprogressfile/QuestProgressFile.java | 4 +- .../com/leonardobishop/quests/quests/Quest.java | 6 +- .../com/leonardobishop/quests/quests/Task.java | 2 +- .../quests/quests/tasktypes/TaskType.java | 6 +- .../tasktypes/types/MiningCertainTaskType.java | 11 ++++ .../types/dependent/BentoBoxLevelTaskType.java | 6 +- src/main/resources/plugin.yml | 2 +- 28 files changed, 223 insertions(+), 47 deletions(-) create mode 100644 src/main/java/com/leonardobishop/quests/hooks/coreprotect/CoreProtectHook.java create mode 100644 src/main/java/com/leonardobishop/quests/hooks/coreprotect/CoreProtectNoHook.java create mode 100644 src/main/java/com/leonardobishop/quests/hooks/coreprotect/ICoreProtectHook.java diff --git a/build.gradle b/build.gradle index 2af494ef..f2e2c2b3 100644 --- a/build.gradle +++ b/build.gradle @@ -36,6 +36,8 @@ repositories { maven { url = 'https://repo.essentialsx.net/releases/' } // JitPack (IridiumSkyblock, ShopGUI+) maven { url = 'https://jitpack.io' } + // CoreProtect + maven { url = 'https://maven.playpro.com/' } mavenCentral() } @@ -79,6 +81,10 @@ dependencies { compileOnly "net.ess3:EssentialsX:2.18.2" // ShopGUI+ compileOnly 'com.github.brcdev-minecraft:shopgui-api:master-SNAPSHOT' + // CoreProtect + compileOnly ('net.coreprotect:coreprotect:2.18.2') { + exclude group: 'com.sk89q.worldedit', module: 'worldedit-bukkit' + } compileOnly fileTree(dir: 'libs', includes: ['*.jar']) } diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java index eee970b3..d7c4bda4 100644 --- a/src/main/java/com/leonardobishop/quests/Quests.java +++ b/src/main/java/com/leonardobishop/quests/Quests.java @@ -2,9 +2,12 @@ package com.leonardobishop.quests; import com.leonardobishop.quests.bstats.Metrics; import com.leonardobishop.quests.commands.CommandQuests; -import com.leonardobishop.quests.events.MenuController; import com.leonardobishop.quests.events.EventPlayerJoin; import com.leonardobishop.quests.events.EventPlayerLeave; +import com.leonardobishop.quests.events.MenuController; +import com.leonardobishop.quests.hooks.coreprotect.CoreProtectHook; +import com.leonardobishop.quests.hooks.coreprotect.CoreProtectNoHook; +import com.leonardobishop.quests.hooks.coreprotect.ICoreProtectHook; import com.leonardobishop.quests.hooks.itemgetter.ItemGetter; import com.leonardobishop.quests.hooks.itemgetter.ItemGetterLatest; import com.leonardobishop.quests.hooks.itemgetter.ItemGetter_1_13; @@ -15,15 +18,48 @@ import com.leonardobishop.quests.hooks.title.Title; import com.leonardobishop.quests.hooks.title.Title_Bukkit; import com.leonardobishop.quests.hooks.title.Title_BukkitNoTimings; import com.leonardobishop.quests.hooks.title.Title_Other; -import com.leonardobishop.quests.util.Messages; import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.player.QPlayerManager; import com.leonardobishop.quests.quests.QuestManager; import com.leonardobishop.quests.quests.tasktypes.TaskType; import com.leonardobishop.quests.quests.tasktypes.TaskTypeManager; -import com.leonardobishop.quests.quests.tasktypes.types.*; -import com.leonardobishop.quests.quests.tasktypes.types.dependent.*; +import com.leonardobishop.quests.quests.tasktypes.types.BreedingTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.BrewingTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.BuildingCertainTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.BuildingTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.CommandTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.DealDamageTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.DistancefromTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.EnchantingTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.ExpEarnTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.FishingTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.InventoryTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.MilkingTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.MiningCertainTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.MiningTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.MobkillingCertainTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.MobkillingTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.PermissionTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.PlayerkillingTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.PlaytimeTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.PositionTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.ShearingTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.TamingTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.WalkingTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.ASkyBlockLevelType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.BentoBoxLevelTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.CitizensDeliverTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.CitizensInteractTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.EssentialsBalanceTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.EssentialsMoneyEarnTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.IridiumSkyblockValueType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.MythicMobsKillingType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.PlaceholderAPIEvaluateTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.ShopGUIPlusBuyTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.ShopGUIPlusSellTaskType; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.uSkyBlockLevelType; import com.leonardobishop.quests.updater.Updater; +import com.leonardobishop.quests.util.Messages; import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; @@ -31,7 +67,11 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; -import java.io.*; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.ArrayList; public class Quests extends JavaPlugin { @@ -40,20 +80,23 @@ public class Quests extends JavaPlugin { private static QPlayerManager qPlayerManager; private static TaskTypeManager taskTypeManager; + private static Quests instance; private static Updater updater; private static Title title; private ItemGetter itemGetter; private QuestCompleter questCompleter; private QuestsConfigLoader questsConfigLoader; private QuestsLogger questsLogger; + private IPlaceholderAPIHook placeholderAPIHook; + private ICoreProtectHook coreProtectHook; private boolean brokenConfig = false; private BukkitTask questAutosaveTask; private BukkitTask questQueuePollTask; public static Quests get() { - return (Quests) Bukkit.getPluginManager().getPlugin("Quests"); + return instance; } public QuestManager getQuestManager() { @@ -101,6 +144,8 @@ public class Quests extends JavaPlugin { @Override public void onEnable() { + instance = this; + questsLogger = new QuestsLogger(this, QuestsLogger.LoggingLevel.INFO); questCompleter = new QuestCompleter(this); @@ -201,6 +246,12 @@ public class Quests extends JavaPlugin { this.placeholderAPIHook.registerExpansion(this); } + if (Bukkit.getPluginManager().isPluginEnabled("CoreProtect")) { + this.coreProtectHook = new CoreProtectHook(); + } else { + this.coreProtectHook = new CoreProtectNoHook(); + } + // this intentionally should not be documented boolean ignoreUpdates = false; try { @@ -220,6 +271,10 @@ public class Quests extends JavaPlugin { return placeholderAPIHook; } + public ICoreProtectHook getCoreProtectHook() { + return coreProtectHook; + } + @Override public void onDisable() { for (TaskType taskType : getTaskTypeManager().getTaskTypes()) { diff --git a/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java b/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java index 67b545f6..c7688e8e 100644 --- a/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java +++ b/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java @@ -1,7 +1,7 @@ package com.leonardobishop.quests; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.player.QPlayer; +import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; diff --git a/src/main/java/com/leonardobishop/quests/QuestsConfigLoader.java b/src/main/java/com/leonardobishop/quests/QuestsConfigLoader.java index 1ad75d2a..c279ec96 100644 --- a/src/main/java/com/leonardobishop/quests/QuestsConfigLoader.java +++ b/src/main/java/com/leonardobishop/quests/QuestsConfigLoader.java @@ -1,12 +1,12 @@ package com.leonardobishop.quests; import com.leonardobishop.quests.hooks.itemgetter.ItemGetter; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.menu.QItemStack; import com.leonardobishop.quests.quests.Category; import com.leonardobishop.quests.quests.Quest; import com.leonardobishop.quests.quests.Task; import com.leonardobishop.quests.quests.tasktypes.TaskType; +import com.leonardobishop.quests.util.Options; import org.apache.commons.lang.StringUtils; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; diff --git a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java b/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java index b45919b1..0b6fd924 100644 --- a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java +++ b/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java @@ -2,19 +2,23 @@ package com.leonardobishop.quests.api; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.api.enums.QuestStartResult; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.menu.QItemStack; import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.quests.Category; import com.leonardobishop.quests.quests.Quest; +import com.leonardobishop.quests.util.Options; import me.clip.placeholderapi.expansion.Cacheable; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheable { diff --git a/src/main/java/com/leonardobishop/quests/bstats/Metrics.java b/src/main/java/com/leonardobishop/quests/bstats/Metrics.java index c2fdf1ae..b0585cb2 100644 --- a/src/main/java/com/leonardobishop/quests/bstats/Metrics.java +++ b/src/main/java/com/leonardobishop/quests/bstats/Metrics.java @@ -11,12 +11,24 @@ import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.ServicePriority; import javax.net.ssl.HttpsURLConnection; -import java.io.*; +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; import java.util.concurrent.Callable; import java.util.logging.Level; import java.util.zip.GZIPOutputStream; diff --git a/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java b/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java index 00b7640e..2490795a 100644 --- a/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java +++ b/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java @@ -3,14 +3,14 @@ package com.leonardobishop.quests.commands; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.QuestsConfigLoader; import com.leonardobishop.quests.api.enums.QuestStartResult; -import com.leonardobishop.quests.util.Messages; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.quests.Category; import com.leonardobishop.quests.quests.Quest; import com.leonardobishop.quests.quests.Task; import com.leonardobishop.quests.quests.tasktypes.TaskType; +import com.leonardobishop.quests.util.Messages; +import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; @@ -24,9 +24,22 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; -import java.nio.file.*; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; public class CommandQuests implements TabExecutor { diff --git a/src/main/java/com/leonardobishop/quests/events/MenuController.java b/src/main/java/com/leonardobishop/quests/events/MenuController.java index b25bcd89..a6d498ae 100644 --- a/src/main/java/com/leonardobishop/quests/events/MenuController.java +++ b/src/main/java/com/leonardobishop/quests/events/MenuController.java @@ -1,20 +1,13 @@ package com.leonardobishop.quests.events; import com.leonardobishop.quests.Quests; -import com.leonardobishop.quests.api.enums.QuestStartResult; import com.leonardobishop.quests.menu.QMenu; import com.leonardobishop.quests.menu.QMenuCancel; -import com.leonardobishop.quests.menu.QMenuCategory; -import com.leonardobishop.quests.menu.QMenuQuest; -import com.leonardobishop.quests.menu.QMenuStarted; -import com.leonardobishop.quests.util.Messages; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.quests.Quest; -import org.bukkit.Bukkit; +import com.leonardobishop.quests.util.Options; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryType; diff --git a/src/main/java/com/leonardobishop/quests/hooks/coreprotect/CoreProtectHook.java b/src/main/java/com/leonardobishop/quests/hooks/coreprotect/CoreProtectHook.java new file mode 100644 index 00000000..4010c4f1 --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/hooks/coreprotect/CoreProtectHook.java @@ -0,0 +1,29 @@ +package com.leonardobishop.quests.hooks.coreprotect; + +import net.coreprotect.CoreProtect; +import net.coreprotect.CoreProtectAPI; +import org.bukkit.Bukkit; +import org.bukkit.block.Block; + +import java.util.List; + +public class CoreProtectHook implements ICoreProtectHook { + + private final CoreProtectAPI api; + + public CoreProtectHook() { + api = ((CoreProtect) Bukkit.getPluginManager().getPlugin("CoreProtect")).getAPI(); + } + + @Override + public boolean checkBlock(Block block, int time) { + List lookup = api.blockLookup(block, time); + if (lookup.isEmpty()) return false; + + String[] result = lookup.get(0); + CoreProtectAPI.ParseResult parseResult = api.parseResult(result); + + return !parseResult.getPlayer().isEmpty() && parseResult.getActionId() == 1; + } + +} diff --git a/src/main/java/com/leonardobishop/quests/hooks/coreprotect/CoreProtectNoHook.java b/src/main/java/com/leonardobishop/quests/hooks/coreprotect/CoreProtectNoHook.java new file mode 100644 index 00000000..1587d726 --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/hooks/coreprotect/CoreProtectNoHook.java @@ -0,0 +1,10 @@ +package com.leonardobishop.quests.hooks.coreprotect; + +import org.bukkit.block.Block; + +public class CoreProtectNoHook implements ICoreProtectHook { + @Override + public boolean checkBlock(Block block, int time) { + return false; + } +} diff --git a/src/main/java/com/leonardobishop/quests/hooks/coreprotect/ICoreProtectHook.java b/src/main/java/com/leonardobishop/quests/hooks/coreprotect/ICoreProtectHook.java new file mode 100644 index 00000000..b69a1b46 --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/hooks/coreprotect/ICoreProtectHook.java @@ -0,0 +1,16 @@ +package com.leonardobishop.quests.hooks.coreprotect; + +import org.bukkit.block.Block; + +public interface ICoreProtectHook { + + /** + * Check whether or not the most recent edit to a block was the result of a player. + * + * @param block the block + * @param time the time to look back in seconds + * @return true if from a player + */ + boolean checkBlock(Block block, int time); + +} diff --git a/src/main/java/com/leonardobishop/quests/hooks/itemgetter/ItemGetterLatest.java b/src/main/java/com/leonardobishop/quests/hooks/itemgetter/ItemGetterLatest.java index c33baac7..615d1741 100644 --- a/src/main/java/com/leonardobishop/quests/hooks/itemgetter/ItemGetterLatest.java +++ b/src/main/java/com/leonardobishop/quests/hooks/itemgetter/ItemGetterLatest.java @@ -13,7 +13,11 @@ import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.UUID; public class ItemGetterLatest implements ItemGetter { diff --git a/src/main/java/com/leonardobishop/quests/hooks/itemgetter/ItemGetter_1_13.java b/src/main/java/com/leonardobishop/quests/hooks/itemgetter/ItemGetter_1_13.java index 0e0850cd..aac4fec4 100644 --- a/src/main/java/com/leonardobishop/quests/hooks/itemgetter/ItemGetter_1_13.java +++ b/src/main/java/com/leonardobishop/quests/hooks/itemgetter/ItemGetter_1_13.java @@ -13,7 +13,11 @@ import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.UUID; public class ItemGetter_1_13 implements ItemGetter { /* diff --git a/src/main/java/com/leonardobishop/quests/hooks/papi/PlaceholderAPIHook.java b/src/main/java/com/leonardobishop/quests/hooks/papi/PlaceholderAPIHook.java index 13542b28..66e93109 100644 --- a/src/main/java/com/leonardobishop/quests/hooks/papi/PlaceholderAPIHook.java +++ b/src/main/java/com/leonardobishop/quests/hooks/papi/PlaceholderAPIHook.java @@ -19,7 +19,6 @@ public class PlaceholderAPIHook implements IPlaceholderAPIHook { placeholder.register(); } - @Override public void unregisterExpansion() { placeholder.unregister(); diff --git a/src/main/java/com/leonardobishop/quests/menu/QItemStack.java b/src/main/java/com/leonardobishop/quests/menu/QItemStack.java index 4577bd59..775e5cc1 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QItemStack.java +++ b/src/main/java/com/leonardobishop/quests/menu/QItemStack.java @@ -1,10 +1,10 @@ package com.leonardobishop.quests.menu; import com.leonardobishop.quests.Quests; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.quests.Quest; +import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenuCancel.java b/src/main/java/com/leonardobishop/quests/menu/QMenuCancel.java index 797223cc..607f6cf6 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QMenuCancel.java +++ b/src/main/java/com/leonardobishop/quests/menu/QMenuCancel.java @@ -1,10 +1,10 @@ package com.leonardobishop.quests.menu; import com.leonardobishop.quests.events.MenuController; -import com.leonardobishop.quests.util.Items; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.quests.Quest; +import com.leonardobishop.quests.util.Items; +import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenuCategory.java b/src/main/java/com/leonardobishop/quests/menu/QMenuCategory.java index f8b4cd8a..a9301b7e 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QMenuCategory.java +++ b/src/main/java/com/leonardobishop/quests/menu/QMenuCategory.java @@ -2,10 +2,10 @@ package com.leonardobishop.quests.menu; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.events.MenuController; -import com.leonardobishop.quests.util.Messages; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.quests.Category; +import com.leonardobishop.quests.util.Messages; +import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenuQuest.java b/src/main/java/com/leonardobishop/quests/menu/QMenuQuest.java index bdcf20c7..bbdd6f60 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QMenuQuest.java +++ b/src/main/java/com/leonardobishop/quests/menu/QMenuQuest.java @@ -3,11 +3,11 @@ package com.leonardobishop.quests.menu; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.api.enums.QuestStartResult; import com.leonardobishop.quests.events.MenuController; -import com.leonardobishop.quests.util.Items; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.quests.Quest; +import com.leonardobishop.quests.util.Items; +import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; @@ -16,7 +16,11 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; /** diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenuStarted.java b/src/main/java/com/leonardobishop/quests/menu/QMenuStarted.java index 5faf2b5b..eb3d82aa 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QMenuStarted.java +++ b/src/main/java/com/leonardobishop/quests/menu/QMenuStarted.java @@ -2,11 +2,11 @@ package com.leonardobishop.quests.menu; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.events.MenuController; -import com.leonardobishop.quests.util.Items; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.quests.Quest; +import com.leonardobishop.quests.util.Items; +import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; @@ -15,7 +15,11 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class QMenuStarted implements QMenu { diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayer.java b/src/main/java/com/leonardobishop/quests/player/QPlayer.java index d5d5b66a..b2dba6fe 100644 --- a/src/main/java/com/leonardobishop/quests/player/QPlayer.java +++ b/src/main/java/com/leonardobishop/quests/player/QPlayer.java @@ -2,7 +2,6 @@ package com.leonardobishop.quests.player; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.events.MenuController; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.menu.QMenuCategory; import com.leonardobishop.quests.menu.QMenuQuest; import com.leonardobishop.quests.menu.QMenuStarted; @@ -10,6 +9,7 @@ import com.leonardobishop.quests.menu.QuestSortWrapper; import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.quests.Category; import com.leonardobishop.quests.quests.Quest; +import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; import org.bukkit.entity.Player; diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java b/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java index cc33b0ff..bc79651e 100644 --- a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java +++ b/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java @@ -2,11 +2,11 @@ package com.leonardobishop.quests.player; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.QuestsLogger; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.player.questprogressfile.QPlayerPreferences; import com.leonardobishop.quests.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java index c2bf0c53..a7ee6502 100644 --- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java +++ b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java @@ -9,11 +9,11 @@ import com.leonardobishop.quests.api.events.PlayerStartQuestEvent; import com.leonardobishop.quests.api.events.PlayerStartTrackQuestEvent; import com.leonardobishop.quests.api.events.PlayerStopTrackQuestEvent; import com.leonardobishop.quests.api.events.PreStartQuestEvent; -import com.leonardobishop.quests.util.Messages; -import com.leonardobishop.quests.util.Options; import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.quests.Quest; import com.leonardobishop.quests.quests.Task; +import com.leonardobishop.quests.util.Messages; +import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/src/main/java/com/leonardobishop/quests/quests/Quest.java b/src/main/java/com/leonardobishop/quests/quests/Quest.java index eddeaa8b..b978f834 100644 --- a/src/main/java/com/leonardobishop/quests/quests/Quest.java +++ b/src/main/java/com/leonardobishop/quests/quests/Quest.java @@ -3,7 +3,11 @@ package com.leonardobishop.quests.quests; import com.leonardobishop.quests.menu.QItemStack; import org.bukkit.ChatColor; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class Quest implements Comparable { diff --git a/src/main/java/com/leonardobishop/quests/quests/Task.java b/src/main/java/com/leonardobishop/quests/quests/Task.java index ca0f7150..cc93a8cf 100644 --- a/src/main/java/com/leonardobishop/quests/quests/Task.java +++ b/src/main/java/com/leonardobishop/quests/quests/Task.java @@ -26,7 +26,7 @@ public class Task { return configValues.getOrDefault(key, null); //??? this will return null without the need of `OrDefault(key, null)` } - public Object getConfigValue(String key, boolean def) { + public Object getConfigValue(String key, Object def) { return configValues.getOrDefault(key, def); } diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java index ae1ec467..0edec531 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java @@ -5,7 +5,11 @@ import com.leonardobishop.quests.quests.Quest; import com.leonardobishop.quests.quests.Task; import org.bukkit.event.Listener; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; /** * A task type which can be used within Quests. A {@link Quest} 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 6faaa6fc..8be6dc0e 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,5 +1,6 @@ package com.leonardobishop.quests.quests.tasktypes.types; +import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.QuestsConfigLoader; import com.leonardobishop.quests.api.QuestsAPI; import com.leonardobishop.quests.player.QPlayer; @@ -33,6 +34,8 @@ public final class MiningCertainTaskType extends TaskType { this.creatorConfigValues.add(new ConfigValue("blocks", true, "List of blocks (alias for block for config readability).", "block")); this.creatorConfigValues.add(new ConfigValue("data", false, "Data code for block.")); // only used if no datacode provided in block or blocks this.creatorConfigValues.add(new ConfigValue("reverse-if-placed", false, "Will reverse progression if block of same type is placed.")); + this.creatorConfigValues.add(new ConfigValue("check-coreprotect", false, "Use coreprotect to check for blocks placed by a player")); + this.creatorConfigValues.add(new ConfigValue("check-coreprotect-time", false, "Time period for coreprotect check")); this.creatorConfigValues.add(new ConfigValue("use-similar-blocks", false, "(Deprecated) If true, this will ignore orientation of doors, logs etc.")); this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in.")); } @@ -69,6 +72,8 @@ public final class MiningCertainTaskType extends TaskType { } } TaskUtils.configValidateBoolean(root + ".reverse-if-broken", config.get("reverse-if-broken"), problems, true,"reverse-if-broken"); + TaskUtils.configValidateBoolean(root + ".check-coreprotect", config.get("check-coreprotect"), problems, true,"check-coreprotect"); + TaskUtils.configValidateInt(root + ".check-coreprotect-time", config.get("check-coreprotect-time"), problems, true,true, "check-coreprotect-time"); TaskUtils.configValidateBoolean(root + ".use-similar-blocks", config.get("use-similar-blocks"), problems, true,"use-similar-blocks"); TaskUtils.configValidateInt(root + ".data", config.get("data"), problems, true,true, "data"); return problems; @@ -102,6 +107,12 @@ public final class MiningCertainTaskType extends TaskType { } if (matchBlock(task, event.getBlock())) { + boolean coreProtectEnabled = (boolean) task.getConfigValue("check-coreprotect", false); + int coreProtectTime = (int) task.getConfigValue("check-coreprotect-time", 3600); + + if (coreProtectEnabled && Quests.get().getCoreProtectHook().checkBlock(event.getBlock(), coreProtectTime)) { + continue; + } increment(task, taskProgress, 1); } } diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java index 2255ead6..ca6f5b61 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java @@ -18,7 +18,11 @@ import world.bentobox.bentobox.api.events.BentoBoxEvent; import world.bentobox.bentobox.database.objects.Island; import java.lang.reflect.Field; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; public final class BentoBoxLevelTaskType extends TaskType { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 5c72ebd6..bd9a7f6a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -6,7 +6,7 @@ version: ${version} main: com.leonardobishop.quests.Quests website: https://github.com/LMBishop/Quests authors: [LMBishop, NicoNekoDev, nivcoo, Rubenicos, RodneyMKay, Auxilor, BavoVanMeel, SuSeu1414, Reinatix] -softdepend: [ASkyBlock, BentoBox, IridiumSkyblock, uSkyBlock, Citizens, MythicMobs, PlaceholderAPI, Essentials] +softdepend: [ASkyBlock, BentoBox, IridiumSkyblock, uSkyBlock, Citizens, MythicMobs, PlaceholderAPI, Essentials, CoreProtect] prefix: Quests api-version: "1.13" # allows new API features but Quests will still work pre-1.13 -- cgit v1.2.3-70-g09d2