summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build.gradle138
-rw-r--r--bukkit/build.gradle102
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsLogger.java (renamed from src/main/java/com/leonardobishop/quests/util/QuestsLogger.java)45
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java515
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitServerSchedulerAdapter.java22
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerCancelQuestEvent.java (renamed from src/main/java/com/leonardobishop/quests/api/events/PlayerCancelQuestEvent.java)6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerFinishQuestEvent.java (renamed from src/main/java/com/leonardobishop/quests/api/events/PlayerFinishQuestEvent.java)6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerQuestEvent.java (renamed from src/main/java/com/leonardobishop/quests/api/events/PlayerQuestEvent.java)4
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerStartQuestEvent.java (renamed from src/main/java/com/leonardobishop/quests/api/events/PlayerStartQuestEvent.java)7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerStartTrackQuestEvent.java (renamed from src/main/java/com/leonardobishop/quests/api/events/PlayerStartTrackQuestEvent.java)6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerStopTrackQuestEvent.java (renamed from src/main/java/com/leonardobishop/quests/api/events/PlayerStopTrackQuestEvent.java)6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PreStartQuestEvent.java (renamed from src/main/java/com/leonardobishop/quests/api/events/PreStartQuestEvent.java)6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java (renamed from src/main/java/com/leonardobishop/quests/command/QuestsCommand.java)106
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsConfig.java91
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java331
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/AbstractCoreProtectHook.java (renamed from src/main/java/com/leonardobishop/quests/hook/coreprotect/ICoreProtectHook.java)4
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectHook.java (renamed from src/main/java/com/leonardobishop/quests/hook/coreprotect/CoreProtectHook.java)4
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectNoHook.java (renamed from src/main/java/com/leonardobishop/quests/hook/coreprotect/CoreProtectNoHook.java)4
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter.java (renamed from src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetter.java)12
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetterLatest.java (renamed from src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetterLatest.java)12
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_1_13.java (renamed from src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetter_1_13.java)12
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_Late_1_8.java (renamed from src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetter_Late_1_8.java)11
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/AbstractPlaceholderAPIHook.java14
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/PlaceholderAPIHook.java (renamed from src/main/java/com/leonardobishop/quests/hook/papi/PlaceholderAPIHook.java)9
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/QuestsPlaceholders.java (renamed from src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java)50
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title.java (renamed from src/main/java/com/leonardobishop/quests/hook/title/Title.java)2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title_Bukkit.java (renamed from src/main/java/com/leonardobishop/quests/hook/title/Title_Bukkit.java)2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title_BukkitNoTimings.java (renamed from src/main/java/com/leonardobishop/quests/hook/title/Title_BukkitNoTimings.java)2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title_Other.java (renamed from src/main/java/com/leonardobishop/quests/hook/title/Title_Other.java)2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java (renamed from src/main/java/com/leonardobishop/quests/listener/PlayerJoinListener.java)19
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java (renamed from src/main/java/com/leonardobishop/quests/listener/PlayerLeaveListener.java)12
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java (renamed from src/main/java/com/leonardobishop/quests/menu/CancelQMenu.java)30
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java (renamed from src/main/java/com/leonardobishop/quests/menu/CategoryQMenu.java)55
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/DailyQMenu.java97
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java176
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QMenu.java (renamed from src/main/java/com/leonardobishop/quests/menu/QMenu.java)5
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java (renamed from src/main/java/com/leonardobishop/quests/menu/QuestQMenu.java)72
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestSortWrapper.java (renamed from src/main/java/com/leonardobishop/quests/menu/QuestSortWrapper.java)8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java (renamed from src/main/java/com/leonardobishop/quests/menu/StartedQMenu.java)46
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CategoryMenuElement.java (renamed from src/main/java/com/leonardobishop/quests/menu/element/CategoryMenuElement.java)17
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CustomMenuElement.java (renamed from src/main/java/com/leonardobishop/quests/menu/element/CustomMenuElement.java)2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/MenuElement.java (renamed from src/main/java/com/leonardobishop/quests/menu/element/MenuElement.java)2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java (renamed from src/main/java/com/leonardobishop/quests/menu/element/QuestMenuElement.java)54
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/SpacerMenuElement.java (renamed from src/main/java/com/leonardobishop/quests/menu/element/SpacerMenuElement.java)2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java (renamed from src/main/java/com/leonardobishop/quests/menu/QItemStack.java)36
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStackRegistry.java36
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcompleter/BukkitQuestCompleter.java (renamed from src/main/java/com/leonardobishop/quests/util/QuestCompleter.java)29
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/DailyQuestController.java184
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java (renamed from src/main/java/com/leonardobishop/quests/quest/controller/NormalQuestController.java)118
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/runnable/QuestsAutoSaveRunnable.java (renamed from src/main/java/com/leonardobishop/quests/util/QuestsAutosaveRunnable.java)13
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java (renamed from src/main/java/com/leonardobishop/quests/storage/MySqlStorageProvider.java)18
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java (renamed from src/main/java/com/leonardobishop/quests/storage/YamlStorageProvider.java)15
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java16
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java25
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BreedingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/BreedingTaskType.java)41
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BrewingCertainTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/BrewingCertainTaskType.java)2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BrewingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/BrewingTaskType.java)43
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingCertainTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/BuildingCertainTaskType.java)52
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/BuildingTaskType.java)41
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/CommandTaskType.java)42
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/DealDamageTaskType.java)41
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DistancefromTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/DistancefromTaskType.java)44
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/EnchantingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/EnchantingTaskType.java)41
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ExpEarnTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/ExpEarnTaskType.java)45
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/FarmingTaskType.java)39
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/FishingTaskType.java)41
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InventoryTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/InventoryTaskType.java)63
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/MilkingTaskType.java)43
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningCertainTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/MiningCertainTaskType.java)56
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/MiningTaskType.java)43
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingCertainTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/MobkillingCertainTaskType.java)48
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/MobkillingTaskType.java)41
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PermissionTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/PermissionTaskType.java)37
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlayerkillingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/PlayerkillingTaskType.java)40
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlaytimeTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/PlaytimeTaskType.java)40
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PositionTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/PositionTaskType.java)44
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/ShearingTaskType.java)41
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/TamingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/TamingTaskType.java)41
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/WalkingTaskType.java)41
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ASkyBlockLevelTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/ASkyBlockLevelType.java)40
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/BentoBoxLevelTaskType.java)45
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensDeliverTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/CitizensDeliverTaskType.java)58
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensInteractTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/CitizensInteractTaskType.java)42
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/EssentialsBalanceTaskType.java)44
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java)41
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/IridiumSkyblockValueType.java87
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/MythicMobsKillingType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/MythicMobsKillingType.java)42
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PlaceholderAPIEvaluateTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/PlaceholderAPIEvaluateTaskType.java)47
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java)33
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java)33
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/uSkyBlockLevelTaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/uSkyBlockLevelType.java)41
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Chat.java40
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java (renamed from src/main/java/com/leonardobishop/quests/menu/MenuUtil.java)29
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java (renamed from src/main/java/com/leonardobishop/quests/util/Messages.java)15
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/TaskUtils.java)27
-rw-r--r--bukkit/src/main/resources/plugin.yml (renamed from src/main/resources/plugin.yml)4
-rw-r--r--bukkit/src/main/resources/resources/bukkit/config.yml (renamed from src/main/resources/config.yml)0
-rw-r--r--bukkit/src/main/resources/resources/bukkit/quests/README.txt (renamed from src/main/resources/quests/README.txt)0
-rw-r--r--bukkit/src/main/resources/resources/bukkit/quests/example1.yml (renamed from src/main/resources/quests/example1.yml)0
-rw-r--r--bukkit/src/main/resources/resources/bukkit/quests/example2.yml (renamed from src/main/resources/quests/example2.yml)0
-rw-r--r--bukkit/src/main/resources/resources/bukkit/quests/example3.yml (renamed from src/main/resources/quests/example3.yml)0
-rw-r--r--bukkit/src/main/resources/resources/bukkit/quests/example4.yml (renamed from src/main/resources/quests/example4.yml)0
-rw-r--r--bukkit/src/main/resources/resources/bukkit/quests/example5.yml (renamed from src/main/resources/quests/example5.yml)0
-rw-r--r--bukkit/src/main/resources/resources/bukkit/quests/example6.yml (renamed from src/main/resources/quests/example6.yml)0
-rw-r--r--bukkit/src/main/resources/resources/bukkit/quests/example7.yml (renamed from src/main/resources/quests/example7.yml)0
-rw-r--r--bungee/build.gradle0
-rw-r--r--common/build.gradle0
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblem.java63
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblemDescriptions.java35
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/config/QuestsConfig.java25
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/config/QuestsLoader.java11
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/enums/QuestStartResult.java (renamed from src/main/java/com/leonardobishop/quests/api/enums/QuestStartResult.java)2
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/logger/QuestsLogger.java44
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/player/QPlayer.java127
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java (renamed from src/main/java/com/leonardobishop/quests/player/QPlayerManager.java)49
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java (renamed from src/main/java/com/leonardobishop/quests/player/questprogressfile/QPlayerPreferences.java)2
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgress.java (renamed from src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgress.java)4
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java (renamed from src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java)22
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/TaskProgress.java (renamed from src/main/java/com/leonardobishop/quests/player/questprogressfile/TaskProgress.java)2
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/plugin/Quests.java38
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/quest/Category.java (renamed from src/main/java/com/leonardobishop/quests/quest/Category.java)17
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java (renamed from src/main/java/com/leonardobishop/quests/quest/Quest.java)21
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/quest/QuestCompleter.java11
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/quest/QuestManager.java (renamed from src/main/java/com/leonardobishop/quests/quest/QuestManager.java)4
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/quest/Task.java (renamed from src/main/java/com/leonardobishop/quests/quest/Task.java)2
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/questcontroller/QuestController.java (renamed from src/main/java/com/leonardobishop/quests/quest/controller/QuestController.java)16
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/scheduler/ServerScheduler.java8
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java (renamed from src/main/java/com/leonardobishop/quests/storage/StorageProvider.java)7
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskType.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/TaskType.java)20
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskTypeManager.java (renamed from src/main/java/com/leonardobishop/quests/quest/tasktype/TaskTypeManager.java)12
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/updater/Updater.java (renamed from src/main/java/com/leonardobishop/quests/updater/Updater.java)24
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/util/Format.java21
-rw-r--r--settings.gradle4
-rw-r--r--src/main/java/com/leonardobishop/quests/Quests.java493
-rw-r--r--src/main/java/com/leonardobishop/quests/api/QuestsAPI.java35
-rw-r--r--src/main/java/com/leonardobishop/quests/blocktype/Block.java35
-rw-r--r--src/main/java/com/leonardobishop/quests/blocktype/SimilarBlocks.java93
-rw-r--r--src/main/java/com/leonardobishop/quests/hook/papi/IPlaceholderAPIHook.java14
-rw-r--r--src/main/java/com/leonardobishop/quests/listener/MenuController.java49
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/DailyQMenu.java98
-rw-r--r--src/main/java/com/leonardobishop/quests/player/QPlayer.java279
-rw-r--r--src/main/java/com/leonardobishop/quests/quest/controller/DailyQuestController.java186
-rw-r--r--src/main/java/com/leonardobishop/quests/quest/tasktype/ConfigValue.java35
-rw-r--r--src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/IridiumSkyblockValueType.java85
-rw-r--r--src/main/java/com/leonardobishop/quests/util/Items.java36
-rw-r--r--src/main/java/com/leonardobishop/quests/util/Options.java93
-rw-r--r--src/main/java/com/leonardobishop/quests/util/QuestMode.java8
-rw-r--r--src/main/java/com/leonardobishop/quests/util/QuestsConfigLoader.java454
148 files changed, 3340 insertions, 3580 deletions
diff --git a/build.gradle b/build.gradle
index 7bb52b03..c6183574 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,139 +1,29 @@
plugins {
id 'java'
- id 'com.github.johnrengelman.shadow' version '6.1.0'
- id 'maven-publish'
+ id 'com.github.johnrengelman.shadow' version '7.0.0'
}
-group = 'com.leonardobishop'
-version = '2.18'
+defaultTasks 'allJar'
-processResources {
- duplicatesStrategy = 'include'
- from(sourceSets.main.resources.srcDirs) {
- include 'plugin.yml'
- expand('version': project.version)
- }
-}
+subprojects {
+ apply plugin: 'java'
-repositories {
- // Spigot
- maven { url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
- // ASkyBlock, BentoBox
- maven { url = 'https://repo.codemc.org/repository/maven-public/' }
- // uSkyBlock
- maven { url = 'https://raw.github.com/rlf/uSkyBlock/mvn-repo/' }
- // Citizens
- maven { url = 'https://repo.citizensnpcs.co/' }
- // MythicMobs
- maven { url = 'https://mvn.lumine.io/repository/maven-public/' }
- // PlaceholderAPI
- maven { url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/' }
- // EssentialsX
- maven { url = 'https://repo.essentialsx.net/releases/' }
- // JitPack (IridiumSkyblock, ShopGUI+)
- maven { url = 'https://jitpack.io' }
- // CoreProtect
- maven { url = 'https://maven.playpro.com/' }
- // bStats
- maven { url = uri('https://repo.codemc.org/repository/maven-public') }
- mavenCentral()
-}
+ group = 'com.leonardobishop'
+ version = '3.0'
-dependencies {
- // Spigot
- compileOnly ('org.spigotmc:spigot-api:1.16.4-R0.1-SNAPSHOT') {
- exclude group: 'net.md-5', module: 'bungeecord-chat'
- exclude group: 'com.google.guava', module: 'guava'
- exclude group: 'org.yaml', module: 'snakeyaml'
- }
- // ASkyBlock
- compileOnly ('com.wasteofplastic:askyblock:3.0.9.4') {
- exclude group: 'net.milkbowl.vault', module: 'VaultAPI'
- }
- // BentoBox (bSkyBlock)
- compileOnly ('world.bentobox:bentobox:1.15.5-SNAPSHOT') {
- exclude group: 'org.eclipse.jdt', module: 'org.eclipse.jdt.annotation'
- exclude group: 'org.mongodb', module: 'mongodb-driver'
- }
- // IridiumSkyblock
- // TODO fix whenever repo is up
- // compileOnly 'com.github.Iridium-Development:IridiumSkyblock:master-SNAPSHOT'
- // download from spigot and add to /libs/ yourself
- // uSkyBlock
- compileOnly 'com.github.rlf:uSkyBlock-API:2.6.4'
- // MythicMobs
- compileOnly 'io.lumine.xikage:MythicMobs:4.11.0-BETA'
- // Citizens
- compileOnly ('net.citizensnpcs:citizens:2.0.27-SNAPSHOT') {
- exclude group: 'net.citizensnpcs', module: 'citizens-main'
- exclude group: 'net.citizensnpcs', module: 'citizens-v1_8_R3'
- exclude group: 'net.citizensnpcs', module: 'citizens-v1_12_R1'
- exclude group: 'net.citizensnpcs', module: 'citizens-v1_13_R2'
- exclude group: 'net.citizensnpcs', module: 'citizens-v1_14_R1'
- exclude group: 'net.citizensnpcs', module: 'citizens-v1_15_R1'
- exclude group: 'net.citizensnpcs', module: 'citizens-v1_16_R3'
- }
- // PlaceholderAPI
- compileOnly 'me.clip:placeholderapi:2.10.9'
- // EssentialsX
- 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'
- }
- // bStats
- implementation 'org.bstats:bstats-bukkit-lite:1.8'
- // HikariCP
- implementation 'com.zaxxer:HikariCP:4.0.3'
- // slf4j
- implementation 'org.slf4j:slf4j-simple:1.7.30'
+ sourceCompatibility = 1.8
+ targetCompatibility = 1.8
- compileOnly fileTree(dir: 'libs', includes: ['*.jar'])
}
-shadowJar {
- relocate 'org.bstats', 'com.leonardobishop.quests.libs.bstats'
- relocate 'com.zaxxer.hikari', 'com.leonardobishop.quests.libs.hikaricp'
- relocate 'org.slf4j', 'com.leonardobishop.quests.libs.slf4j'
- archiveClassifier.set('')
-}
-
-publishing {
- publications {
- maven(MavenPublication) {
- groupId = 'com.leonardobishop'
- artifactId = 'quests'
- version = project.version
-
- from components.java
- pom.withXml {
- asNode().dependencies.dependency.each { dep ->
- dep.parent().remove(dep)
- }
- }
- }
- }
-
- repositories {
- maven {
- credentials {
- username = project.findProperty('mavenUser') ?: System.getenv('MAVEN_USER')
- password = project.findProperty('mavenPassword') ?: System.getenv('MAVEN_PASSWORD')
- }
- url = "https://repo.leonardobishop.com/releases/"
+task allJar( type: Jar, dependsOn: subprojects.tasks['build'] ) {
+ subprojects.each { subproject ->
+ from subproject.configurations.archives.allArtifacts.files.collect {
+ zipTree(it)
}
}
}
-jar.enabled = true
-
-tasks.build {
- dependsOn(tasks.shadowJar)
-}
-
-compileJava {
- sourceCompatibility = '1.8'
- targetCompatibility = '1.8'
+artifacts {
+ archives allJar
}
diff --git a/bukkit/build.gradle b/bukkit/build.gradle
new file mode 100644
index 00000000..f12ab459
--- /dev/null
+++ b/bukkit/build.gradle
@@ -0,0 +1,102 @@
+plugins {
+ id 'java'
+ id 'com.github.johnrengelman.shadow'
+}
+
+processResources {
+ duplicatesStrategy = 'include'
+ from(sourceSets.main.resources.srcDirs) {
+ include 'plugin.yml'
+ expand('version': project.version)
+ }
+}
+
+repositories {
+ // Spigot
+ maven { url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
+ // ASkyBlock, BentoBox
+ maven { url = 'https://repo.codemc.org/repository/maven-public/' }
+ // uSkyBlock
+ maven { url = 'https://raw.github.com/rlf/uSkyBlock/mvn-repo/' }
+ // Citizens
+ maven { url = 'https://repo.citizensnpcs.co/' }
+ // MythicMobs
+ maven { url = 'https://mvn.lumine.io/repository/maven-public/' }
+ // PlaceholderAPI
+ maven { url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/' }
+ // EssentialsX
+ maven { url = 'https://repo.essentialsx.net/releases/' }
+ // JitPack (IridiumSkyblock, ShopGUI+)
+ maven { url = 'https://jitpack.io' }
+ // CoreProtect
+ maven { url = 'https://maven.playpro.com/' }
+ // bStats
+ maven { url = uri('https://repo.codemc.org/repository/maven-public') }
+ mavenCentral()
+}
+
+dependencies {
+ compileOnly project(':common')
+ // Spigot
+ compileOnly ('org.spigotmc:spigot-api:1.16.4-R0.1-SNAPSHOT') {
+ exclude group: 'net.md-5', module: 'bungeecord-chat'
+ exclude group: 'com.google.guava', module: 'guava'
+ exclude group: 'org.yaml', module: 'snakeyaml'
+ }
+ // ASkyBlock
+ compileOnly ('com.wasteofplastic:askyblock:3.0.9.4') {
+ exclude group: 'net.milkbowl.vault', module: 'VaultAPI'
+ }
+ // BentoBox (bSkyBlock)
+ compileOnly ('world.bentobox:bentobox:1.15.5-SNAPSHOT') {
+ exclude group: 'org.eclipse.jdt', module: 'org.eclipse.jdt.annotation'
+ exclude group: 'org.mongodb', module: 'mongodb-driver'
+ }
+ // IridiumSkyblock
+ // TODO fix whenever repo is up
+ // compileOnly 'com.github.Iridium-Development:IridiumSkyblock:master-SNAPSHOT'
+ // download from spigot and add to /libs/ yourself
+ // uSkyBlock
+ compileOnly 'com.github.rlf:uSkyBlock-API:2.6.4'
+ // MythicMobs
+ compileOnly 'io.lumine.xikage:MythicMobs:4.11.0-BETA'
+ // Citizens
+ compileOnly ('net.citizensnpcs:citizens:2.0.27-SNAPSHOT') {
+ exclude group: 'net.citizensnpcs', module: 'citizens-main'
+ exclude group: 'net.citizensnpcs', module: 'citizens-v1_8_R3'
+ exclude group: 'net.citizensnpcs', module: 'citizens-v1_12_R1'
+ exclude group: 'net.citizensnpcs', module: 'citizens-v1_13_R2'
+ exclude group: 'net.citizensnpcs', module: 'citizens-v1_14_R1'
+ exclude group: 'net.citizensnpcs', module: 'citizens-v1_15_R1'
+ exclude group: 'net.citizensnpcs', module: 'citizens-v1_16_R3'
+ }
+ // PlaceholderAPI
+ compileOnly 'me.clip:placeholderapi:2.10.9'
+ // EssentialsX
+ 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'
+ }
+ // bStats
+ implementation 'org.bstats:bstats-bukkit-lite:1.8'
+ // HikariCP
+ implementation 'com.zaxxer:HikariCP:4.0.3'
+ // slf4j
+ implementation 'org.slf4j:slf4j-simple:1.7.30'
+
+ compileOnly fileTree(dir: 'libs', includes: ['*.jar'])
+}
+
+tasks.build {
+ dependsOn(tasks.shadowJar)
+}
+
+shadowJar {
+ relocate 'org.bstats', 'com.leonardobishop.quests.libs.bstats'
+ relocate 'com.zaxxer.hikari', 'com.leonardobishop.quests.libs.hikaricp'
+ relocate 'org.slf4j', 'com.leonardobishop.quests.libs.slf4j'
+ archiveClassifier.set('')
+} \ No newline at end of file
diff --git a/src/main/java/com/leonardobishop/quests/util/QuestsLogger.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsLogger.java
index 426a2601..d50752fd 100644
--- a/src/main/java/com/leonardobishop/quests/util/QuestsLogger.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsLogger.java
@@ -1,25 +1,28 @@
-package com.leonardobishop.quests.util;
+package com.leonardobishop.quests.bukkit;
-import com.leonardobishop.quests.Quests;
+import com.leonardobishop.quests.common.logger.QuestsLogger;
-public class QuestsLogger {
+public class BukkitQuestsLogger implements QuestsLogger {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
private LoggingLevel serverLoggingLevel;
- public QuestsLogger(Quests plugin, LoggingLevel serverLoggingLevel) {
+ public BukkitQuestsLogger(BukkitQuestsPlugin plugin) {
this.plugin = plugin;
- this.serverLoggingLevel = serverLoggingLevel;
+ serverLoggingLevel = LoggingLevel.INFO;
}
+ @Override
public LoggingLevel getServerLoggingLevel() {
return serverLoggingLevel;
}
+ @Override
public void setServerLoggingLevel(LoggingLevel serverLoggingLevel) {
this.serverLoggingLevel = serverLoggingLevel;
}
+ @Override
public void log(String str, LoggingLevel level) {
if (serverLoggingLevel.getNumericVerbosity() < level.getNumericVerbosity()) {
return;
@@ -40,46 +43,24 @@ public class QuestsLogger {
}
}
+ @Override
public void debug(String str) {
log(str, LoggingLevel.DEBUG);
}
+ @Override
public void info(String str) {
log(str, LoggingLevel.INFO);
}
+ @Override
public void warning(String str) {
log(str, LoggingLevel.WARNING);
}
+ @Override
public void severe(String str) {
log(str, LoggingLevel.ERROR);
}
- public enum LoggingLevel {
- ERROR(0),
- WARNING(1),
- INFO(2),
- DEBUG(3);
-
- private int numericVerbosity;
-
- LoggingLevel(int number) {
- numericVerbosity = number;
- }
-
- public int getNumericVerbosity() {
- return numericVerbosity;
- }
-
- static LoggingLevel fromNumber(int number) {
- for (LoggingLevel level : LoggingLevel.values()) {
- if (level.getNumericVerbosity() == number) {
- return level;
- }
- }
- return LoggingLevel.INFO;
- }
- }
-
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
new file mode 100644
index 00000000..eeb359bc
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
@@ -0,0 +1,515 @@
+package com.leonardobishop.quests.bukkit;
+
+import com.leonardobishop.quests.bukkit.command.QuestsCommand;
+import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig;
+import com.leonardobishop.quests.bukkit.config.BukkitQuestsLoader;
+import com.leonardobishop.quests.bukkit.hook.coreprotect.AbstractCoreProtectHook;
+import com.leonardobishop.quests.bukkit.hook.coreprotect.CoreProtectHook;
+import com.leonardobishop.quests.bukkit.hook.coreprotect.CoreProtectNoHook;
+import com.leonardobishop.quests.bukkit.hook.itemgetter.ItemGetter;
+import com.leonardobishop.quests.bukkit.hook.itemgetter.ItemGetterLatest;
+import com.leonardobishop.quests.bukkit.hook.itemgetter.ItemGetter_1_13;
+import com.leonardobishop.quests.bukkit.hook.itemgetter.ItemGetter_Late_1_8;
+import com.leonardobishop.quests.bukkit.hook.papi.AbstractPlaceholderAPIHook;
+import com.leonardobishop.quests.bukkit.hook.papi.PlaceholderAPIHook;
+import com.leonardobishop.quests.bukkit.hook.title.Title;
+import com.leonardobishop.quests.bukkit.hook.title.Title_Bukkit;
+import com.leonardobishop.quests.bukkit.hook.title.Title_BukkitNoTimings;
+import com.leonardobishop.quests.bukkit.hook.title.Title_Other;
+import com.leonardobishop.quests.bukkit.listener.PlayerJoinListener;
+import com.leonardobishop.quests.bukkit.listener.PlayerLeaveListener;
+import com.leonardobishop.quests.bukkit.questcompleter.BukkitQuestCompleter;
+import com.leonardobishop.quests.bukkit.menu.MenuController;
+import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStackRegistry;
+import com.leonardobishop.quests.bukkit.questcontroller.NormalQuestController;
+import com.leonardobishop.quests.bukkit.runnable.QuestsAutoSaveRunnable;
+import com.leonardobishop.quests.bukkit.storage.MySqlStorageProvider;
+import com.leonardobishop.quests.bukkit.storage.YamlStorageProvider;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskTypeManager;
+import com.leonardobishop.quests.bukkit.tasktype.type.BreedingTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.BrewingTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.BuildingCertainTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.BuildingTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.CommandTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.DealDamageTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.DistancefromTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.EnchantingTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.ExpEarnTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.FishingTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.InventoryTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.MilkingTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.MiningCertainTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.MiningTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.MobkillingCertainTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.MobkillingTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.PermissionTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.PlayerkillingTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.PlaytimeTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.PositionTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.ShearingTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.TamingTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.WalkingTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ASkyBlockLevelTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.dependent.BentoBoxLevelTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.dependent.CitizensDeliverTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.dependent.CitizensInteractTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.dependent.EssentialsBalanceTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.dependent.EssentialsMoneyEarnTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.dependent.MythicMobsKillingType;
+import com.leonardobishop.quests.bukkit.tasktype.type.dependent.PlaceholderAPIEvaluateTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ShopGUIPlusBuyCertainTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ShopGUIPlusSellCertainTaskType;
+import com.leonardobishop.quests.bukkit.tasktype.type.dependent.uSkyBlockLevelTaskType;
+import com.leonardobishop.quests.bukkit.util.Messages;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.config.ConfigProblemDescriptions;
+import com.leonardobishop.quests.common.config.QuestsConfig;
+import com.leonardobishop.quests.common.logger.QuestsLogger;
+import com.leonardobishop.quests.common.player.QPlayerManager;
+import com.leonardobishop.quests.common.plugin.Quests;
+import com.leonardobishop.quests.common.quest.QuestCompleter;
+import com.leonardobishop.quests.common.quest.QuestManager;
+import com.leonardobishop.quests.common.questcontroller.QuestController;
+import com.leonardobishop.quests.common.scheduler.ServerScheduler;
+import com.leonardobishop.quests.common.storage.StorageProvider;
+import com.leonardobishop.quests.common.tasktype.TaskType;
+import com.leonardobishop.quests.common.tasktype.TaskTypeManager;
+import com.leonardobishop.quests.common.updater.Updater;
+import org.bstats.bukkit.MetricsLite;
+import org.bukkit.Bukkit;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.plugin.java.JavaPlugin;
+import org.bukkit.scheduler.BukkitTask;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
+
+ private QuestsLogger questsLogger;
+ private QuestManager questManager;
+ private TaskTypeManager taskTypeManager;
+ private QPlayerManager qPlayerManager;
+ private QuestController questController;
+ private QuestCompleter questCompleter;
+ private BukkitQuestsConfig questsConfig;
+ private Updater updater;
+ private ServerScheduler serverScheduler;
+ private StorageProvider storageProvider;
+
+ private boolean validConfiguration;
+ private Map<String, List<ConfigProblem>> configProblems;
+
+ private QItemStackRegistry qItemStackRegistry;
+ private MenuController menuController;
+ private AbstractPlaceholderAPIHook placeholderAPIHook;
+ private AbstractCoreProtectHook coreProtectHook;
+ private ItemGetter itemGetter;
+ private Title titleHandle;
+
+ private BukkitTask questAutoSaveTask;
+ private BukkitTask questQueuePollTask;
+
+ @Override
+ public QuestsLogger getQuestsLogger() {
+ return questsLogger;
+ }
+
+ @Override
+ public QuestManager getQuestManager() {
+ return questManager;
+ }
+
+ @Override
+ public TaskTypeManager getTaskTypeManager() {
+ return taskTypeManager;
+ }
+
+ @Override
+ public QPlayerManager getPlayerManager() {
+ return qPlayerManager;
+ }
+
+ @Override
+ public QuestController getQuestController() {
+ return questController;
+ }
+
+ @Override
+ public QuestCompleter getQuestCompleter() {
+ return questCompleter;
+ }
+
+ @Override
+ public QuestsConfig getQuestsConfig() {
+ return questsConfig;
+ }
+
+ @Override
+ public Updater getUpdater() {
+ return updater;
+ }
+
+ @Override
+ public StorageProvider getStorageProvider() {
+ return storageProvider;
+ }
+
+ @Override
+ public ServerScheduler getScheduler() {
+ return serverScheduler;
+ }
+
+ @Override
+ public void onEnable() {
+ this.questsLogger = new BukkitQuestsLogger(this);
+ this.generateConfigurations();
+ this.questsConfig = new BukkitQuestsConfig(new File(super.getDataFolder() + File.separator + "config.yml"));
+ this.questManager = new QuestManager(this);
+ this.taskTypeManager = new BukkitTaskTypeManager(this);
+ this.serverScheduler = new BukkitServerSchedulerAdapter(this);
+
+ if (!this.reloadBaseConfiguration()) {
+ questsLogger.severe("Plugin cannot start into a stable state as the configuration is broken!");
+ super.getServer().getPluginManager().disablePlugin(this);
+ return;
+ }
+
+ String configuredProvider = questsConfig.getString("options.storage.provider", "yaml");
+ switch (configuredProvider.toLowerCase()) {
+ default:
+ questsLogger.warning("No valid storage provider is configured - Quests will use YAML storage as a default");
+ case "yaml":
+ this.storageProvider = new YamlStorageProvider(this);
+ break;
+ case "mysql":
+ this.storageProvider = new MySqlStorageProvider(this, this.getConfig().getConfigurationSection("options.storage.database-settings"));
+ }
+
+ try {
+ storageProvider.init();
+ } catch (Exception e) {
+ questsLogger.severe("An error occurred initialising the storage provider.");
+ e.printStackTrace();
+ }
+
+ this.setupVersionSpecific();
+
+ Messages.setPlugin(this);
+ this.qPlayerManager = new QPlayerManager(this, storageProvider, questController);
+ this.menuController = new MenuController(this);
+ this.qItemStackRegistry = new QItemStackRegistry();
+ this.questCompleter = new BukkitQuestCompleter(this);
+
+ MetricsLite metrics = new MetricsLite(this, 3443);
+ if (metrics.isEnabled()) {
+ this.getQuestsLogger().info("Metrics started. This can be disabled at /plugins/bStats/config.yml.");
+ }
+
+ if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
+ this.placeholderAPIHook = new PlaceholderAPIHook();
+ this.placeholderAPIHook.registerExpansion(this);
+ }
+
+ if (Bukkit.getPluginManager().isPluginEnabled("CoreProtect")) {
+ this.coreProtectHook = new CoreProtectHook();
+ } else {
+ this.coreProtectHook = new CoreProtectNoHook();
+ }
+
+ boolean ignoreUpdates = false;
+ try {
+ ignoreUpdates = new File(this.getDataFolder() + File.separator + "stfuQuestsUpdate").exists();
+ } catch (Throwable ignored) { }
+
+
+ this.updater = new Updater(this, super.getDescription().getVersion(), !ignoreUpdates);
+ if (!ignoreUpdates) {
+ serverScheduler.doAsync(() -> {
+ updater.check();
+ });
+ }
+
+ super.getCommand("quests").setExecutor(new QuestsCommand(this));
+
+ super.getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this);
+ super.getServer().getPluginManager().registerEvents(menuController, this);
+ super.getServer().getPluginManager().registerEvents(new PlayerLeaveListener(this), this);
+
+ // register task types after the server has fully started
+ Bukkit.getScheduler().runTask(this, () -> {
+ taskTypeManager.registerTaskType(new MiningTaskType(this));
+ taskTypeManager.registerTaskType(new MiningCertainTaskType(this));
+ taskTypeManager.registerTaskType(new BuildingTaskType(this));
+ taskTypeManager.registerTaskType(new BuildingCertainTaskType(this));
+ taskTypeManager.registerTaskType(new MobkillingTaskType(this));
+ taskTypeManager.registerTaskType(new MobkillingCertainTaskType(this));
+ taskTypeManager.registerTaskType(new PlayerkillingTaskType(this));
+ taskTypeManager.registerTaskType(new FishingTaskType(this));
+ taskTypeManager.registerTaskType(new InventoryTaskType(this));
+ taskTypeManager.registerTaskType(new WalkingTaskType(this));
+ taskTypeManager.registerTaskType(new TamingTaskType(this));
+ taskTypeManager.registerTaskType(new MilkingTaskType(this));
+ taskTypeManager.registerTaskType(new ShearingTaskType(this));
+ taskTypeManager.registerTaskType(new PositionTaskType(this));
+ taskTypeManager.registerTaskType(new PlaytimeTaskType(this));
+ taskTypeManager.registerTaskType(new BrewingTaskType(this));
+ taskTypeManager.registerTaskType(new ExpEarnTaskType(this));
+ taskTypeManager.registerTaskType(new BreedingTaskType(this));
+ taskTypeManager.registerTaskType(new EnchantingTaskType(this));
+ taskTypeManager.registerTaskType(new DealDamageTaskType(this));
+ taskTypeManager.registerTaskType(new PermissionTaskType(this));
+ taskTypeManager.registerTaskType(new DistancefromTaskType(this));
+ taskTypeManager.registerTaskType(new CommandTaskType(this));
+ // TODO: FIX
+ // taskTypeManager.registerTaskType(new BrewingCertainTaskType());
+ if (Bukkit.getPluginManager().isPluginEnabled("ASkyBlock")) {
+ taskTypeManager.registerTaskType(new ASkyBlockLevelTaskType(this));
+ }
+ if (Bukkit.getPluginManager().isPluginEnabled("BentoBox")) {
+ BentoBoxLevelTaskType.register(this, taskTypeManager);
+ }
+ //TODO FIX
+// if (Bukkit.getPluginManager().isPluginEnabled("IridiumSkyblock")) {
+// taskTypeManager.registerTaskType(new IridiumSkyblockValueType());
+// }
+ if (Bukkit.getPluginManager().isPluginEnabled("uSkyBlock")) {
+ taskTypeManager.registerTaskType(new uSkyBlockLevelTaskType(this));
+ }
+ if (Bukkit.getPluginManager().isPluginEnabled("Citizens")) {
+ taskTypeManager.registerTaskType(new CitizensDeliverTaskType(this));
+ taskTypeManager.registerTaskType(new CitizensInteractTaskType(this));
+ }
+ if (Bukkit.getPluginManager().isPluginEnabled("MythicMobs")) {
+ taskTypeManager.registerTaskType(new MythicMobsKillingType(this));
+ }
+ if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
+ taskTypeManager.registerTaskType(new PlaceholderAPIEvaluateTaskType(this));
+ }
+ if (Bukkit.getPluginManager().isPluginEnabled("Essentials")) {
+ taskTypeManager.registerTaskType(new EssentialsMoneyEarnTaskType(this));
+ taskTypeManager.registerTaskType(new EssentialsBalanceTaskType(this));
+ }
+ if (Bukkit.getPluginManager().isPluginEnabled("ShopGUIPlus")) {
+ // not tested
+ taskTypeManager.registerTaskType(new ShopGUIPlusBuyCertainTaskType(this));
+ taskTypeManager.registerTaskType(new ShopGUIPlusSellCertainTaskType(this));
+ }
+
+ taskTypeManager.closeRegistrations();
+ reloadQuests();
+
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ qPlayerManager.loadPlayer(player.getUniqueId());
+ }
+ });
+ }
+
+ @Override
+ public void reloadQuests() {
+ if (this.reloadBaseConfiguration()) {
+ BukkitQuestsLoader questsLoader = new BukkitQuestsLoader(this);
+ configProblems = questsLoader.loadQuests(new File(super.getDataFolder() + File.separator + "quests"));
+
+ for (TaskType taskType : taskTypeManager.getTaskTypes()) {
+ try {
+ taskType.onReady();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ } else {
+ configProblems = Collections.singletonMap("<MAIN CONFIG> config.yml",
+ Collections.singletonList(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR, ConfigProblemDescriptions.MALFORMED_YAML.getDescription())));
+ }
+ }
+
+ public ItemStack getItemStack(String path, ConfigurationSection config, ItemGetter.Filter... excludes) {
+ return itemGetter.getItem(path, config, excludes);
+ }
+
+ private boolean reloadBaseConfiguration() {
+ this.validConfiguration = questsConfig.loadConfig();
+
+ if (validConfiguration) {
+ int loggingLevel = questsConfig.getInt("options.verbose-logging-level", 2);
+ questsLogger.setServerLoggingLevel(QuestsLogger.LoggingLevel.fromNumber(loggingLevel));
+
+ switch (questsConfig.getString("quest-mode.mode", "normal").toLowerCase()) {
+ default:
+ case "normal":
+ questController = new NormalQuestController(this);
+ //TODO the other one
+ }
+
+ long autoSaveInterval = this.getConfig().getLong("options.performance-tweaking.quest-autosave-interval", 12000);
+ try {
+ if (questAutoSaveTask != null) questAutoSaveTask.cancel();
+ questAutoSaveTask = Bukkit.getScheduler().runTaskTimer(this, () -> new QuestsAutoSaveRunnable(this), autoSaveInterval, autoSaveInterval);
+ } catch (Exception ex) {
+ questsLogger.debug("Cannot cancel and restart quest autosave task");
+ }
+
+ long queueExecuteInterval = this.getConfig().getLong("options.performance-tweaking.quest-queue-executor-interval", 1);
+ try {
+ if (questQueuePollTask != null) questQueuePollTask.cancel();
+ questQueuePollTask = Bukkit.getScheduler().runTaskTimer(this, (BukkitQuestCompleter) questCompleter, queueExecuteInterval, queueExecuteInterval);
+ } catch (Exception ex) {
+ questsLogger.debug("Cannot cancel and restart queue executor task");
+ }
+ }
+ return validConfiguration;
+ }
+
+ private void setupVersionSpecific() {
+ String version;
+ try {
+ version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
+ } catch (ArrayIndexOutOfBoundsException e) {
+ getQuestsLogger().warning("Failed to resolve server version - some features will not work!");
+ titleHandle = new Title_Other();
+ itemGetter = new ItemGetter_Late_1_8();
+ return;
+ }
+
+ getQuestsLogger().info("Your server is running version " + version + ".");
+
+ if (version.startsWith("v1_7")) {
+ titleHandle = new Title_Other();
+ } else if (version.startsWith("v1_8") || version.startsWith("v1_9") || version.startsWith("v1_10")) {
+ titleHandle = new Title_BukkitNoTimings();
+ } else {
+ titleHandle = new Title_Bukkit();
+ }
+
+ if (version.startsWith("v1_7") || version.startsWith("v1_8") || version.startsWith("v1_9")
+ || version.startsWith("v1_10") || version.startsWith("v1_11") || version.startsWith("v1_12")) {
+ itemGetter = new ItemGetter_Late_1_8();
+ } else if (version.startsWith("v1_13")) {
+ itemGetter = new ItemGetter_1_13();
+ } else {
+ itemGetter = new ItemGetterLatest();
+ }
+
+ questsConfig.setItemGetter(itemGetter);
+
+ if (titleHandle instanceof Title_Bukkit) {
+ getQuestsLogger().info("Titles have been enabled.");
+ } else if (titleHandle instanceof Title_BukkitNoTimings) {
+ getQuestsLogger().info("Titles have been enabled, although they have limited timings.");
+ } else {
+ getQuestsLogger().info("Titles are not supported for this version.");
+ }
+ }
+
+ private void generateConfigurations() {
+ File directory = new File(String.valueOf(this.getDataFolder()));
+ if (!directory.exists() && !directory.isDirectory()) {
+ directory.mkdir();
+ }
+
+ File config = new File(this.getDataFolder() + File.separator + "config.yml");
+ if (!config.exists()) {
+ try {
+ config.createNewFile();
+ try (InputStream in = BukkitQuestsPlugin.class.getClassLoader().getResourceAsStream("resources/bukkit/config.yml");
+ OutputStream out = new FileOutputStream(config)) {
+ byte[] buffer = new byte[1024];
+ int lenght = in.read(buffer);
+ while (lenght != -1) {
+ out.write(buffer, 0, lenght);
+ lenght = in.read(buffer);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ File questsDirectory = new File(this.getDataFolder() + File.separator + "quests");
+ if (!questsDirectory.exists() && !questsDirectory.isDirectory()) {
+ questsDirectory.mkdir();
+
+ ArrayList<String> examples = new ArrayList<>();
+ examples.add("example1.yml");
+ examples.add("example2.yml");
+ examples.add("example3.yml");
+ examples.add("example4.yml");
+ examples.add("example5.yml");
+ examples.add("example6.yml");
+ examples.add("example7.yml");
+ examples.add("README.txt");
+
+ for (String name : examples) {
+ File file = new File(this.getDataFolder() + File.separator + "quests" + File.separator + name);
+ try {
+ file.createNewFile();
+ try (InputStream in = BukkitQuestsPlugin.class.getClassLoader().getResourceAsStream("resources/bukkit/quests/" + name);
+ OutputStream out = new FileOutputStream(file)) {
+ byte[] buffer = new byte[1024];
+ int lenght = in.read(buffer);
+ while (lenght != -1) {
+ out.write(buffer, 0, lenght);
+ lenght = in.read(buffer);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ public boolean isValidConfiguration() {
+ return validConfiguration;
+ }
+
+ public Map<String, List<ConfigProblem>> getConfigProblems() {
+ return configProblems;
+ }
+
+ public AbstractPlaceholderAPIHook getPlaceholderAPIHook() {
+ return placeholderAPIHook;
+ }
+
+ public AbstractCoreProtectHook getCoreProtectHook() {
+ return coreProtectHook;
+ }
+
+ public ItemGetter getItemGetter() {
+ return itemGetter;
+ }
+
+ public Title getTitleHandle() {
+ return titleHandle;
+ }
+
+ public QItemStackRegistry getQItemStackRegistry() {
+ return qItemStackRegistry;
+ }
+
+ public MenuController getMenuController() {
+ return menuController;
+ }
+
+ @NotNull
+ @Override
+ public FileConfiguration getConfig() {
+ return questsConfig.getConfig();
+ }
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitServerSchedulerAdapter.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitServerSchedulerAdapter.java
new file mode 100644
index 00000000..8619642b
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitServerSchedulerAdapter.java
@@ -0,0 +1,22 @@
+package com.leonardobishop.quests.bukkit;
+
+import com.leonardobishop.quests.common.scheduler.ServerScheduler;
+
+public class BukkitServerSchedulerAdapter implements ServerScheduler {
+
+ private final BukkitQuestsPlugin plugin;
+
+ public BukkitServerSchedulerAdapter(BukkitQuestsPlugin plugin) {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public void doSync(Runnable runnable) {
+ plugin.getServer().getScheduler().runTask(plugin, runnable);
+ }
+
+ @Override
+ public void doAsync(Runnable runnable) {
+ plugin.getServer().getScheduler().runTaskAsynchronously(plugin, runnable);
+ }
+}
diff --git a/src/main/java/com/leonardobishop/quests/api/events/PlayerCancelQuestEvent.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerCancelQuestEvent.java
index 58e46206..af431626 100644
--- a/src/main/java/com/leonardobishop/quests/api/events/PlayerCancelQuestEvent.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerCancelQuestEvent.java
@@ -1,7 +1,7 @@
-package com.leonardobishop.quests.api.events;
+package com.leonardobishop.quests.bukkit.api.event;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/leonardobishop/quests/api/events/PlayerFinishQuestEvent.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerFinishQuestEvent.java
index 8bd4c5e6..d38d4f78 100644
--- a/src/main/java/com/leonardobishop/quests/api/events/PlayerFinishQuestEvent.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerFinishQuestEvent.java
@@ -1,7 +1,7 @@
-package com.leonardobishop.quests.api.events;
+package com.leonardobishop.quests.bukkit.api.event;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/leonardobishop/quests/api/events/PlayerQuestEvent.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerQuestEvent.java
index b78726ef..a6a0a26a 100644
--- a/src/main/java/com/leonardobishop/quests/api/events/PlayerQuestEvent.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerQuestEvent.java
@@ -1,6 +1,6 @@
-package com.leonardobishop.quests.api.events;
+package com.leonardobishop.quests.bukkit.api.event;
-import com.leonardobishop.quests.player.QPlayer;
+import com.leonardobishop.quests.common.player.QPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerEvent;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/leonardobishop/quests/api/events/PlayerStartQuestEvent.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerStartQuestEvent.java
index 3602979f..87f01ce1 100644
--- a/src/main/java/com/leonardobishop/quests/api/events/PlayerStartQuestEvent.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerStartQuestEvent.java
@@ -1,12 +1,13 @@
-package com.leonardobishop.quests.api.events;
+package com.leonardobishop.quests.bukkit.api.event;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
public class PlayerStartQuestEvent extends PlayerQuestEvent {
+
private final static HandlerList handlers = new HandlerList();
private final QuestProgress questProgress;
private String questStartMessage;
diff --git a/src/main/java/com/leonardobishop/quests/api/events/PlayerStartTrackQuestEvent.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerStartTrackQuestEvent.java
index 70b14dce..107924a6 100644
--- a/src/main/java/com/leonardobishop/quests/api/events/PlayerStartTrackQuestEvent.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerStartTrackQuestEvent.java
@@ -1,10 +1,8 @@
-package com.leonardobishop.quests.api.events;
+package com.leonardobishop.quests.bukkit.api.event;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.player.QPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
-import org.bukkit.event.player.PlayerEvent;
import org.jetbrains.annotations.NotNull;
public class PlayerStartTrackQuestEvent extends PlayerQuestEvent {
diff --git a/src/main/java/com/leonardobishop/quests/api/events/PlayerStopTrackQuestEvent.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerStopTrackQuestEvent.java
index 42b3d263..288013b7 100644
--- a/src/main/java/com/leonardobishop/quests/api/events/PlayerStopTrackQuestEvent.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PlayerStopTrackQuestEvent.java
@@ -1,10 +1,8 @@
-package com.leonardobishop.quests.api.events;
+package com.leonardobishop.quests.bukkit.api.event;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.player.QPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
-import org.bukkit.event.player.PlayerEvent;
import org.jetbrains.annotations.NotNull;
public class PlayerStopTrackQuestEvent extends PlayerQuestEvent {
diff --git a/src/main/java/com/leonardobishop/quests/api/events/PreStartQuestEvent.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PreStartQuestEvent.java
index abbbd77d..b2513415 100644
--- a/src/main/java/com/leonardobishop/quests/api/events/PreStartQuestEvent.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/api/event/PreStartQuestEvent.java
@@ -1,7 +1,7 @@
-package com.leonardobishop.quests.api.events;
+package com.leonardobishop.quests.bukkit.api.event;
-import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.player.QPlayer;
+import com.leonardobishop.quests.common.enums.QuestStartResult;
+import com.leonardobishop.quests.common.player.QPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/leonardobishop/quests/command/QuestsCommand.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java
index 0906b3c9..37a388fb 100644
--- a/src/main/java/com/leonardobishop/quests/command/QuestsCommand.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java
@@ -1,16 +1,16 @@
-package com.leonardobishop.quests.command;
+package com.leonardobishop.quests.bukkit.command;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
-import com.leonardobishop.quests.quest.Category;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.util.Messages;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.util.Chat;
+import com.leonardobishop.quests.bukkit.util.Messages;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.enums.QuestStartResult;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.quest.Category;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.quest.Task;
+import com.leonardobishop.quests.common.tasktype.TaskType;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
@@ -35,9 +35,9 @@ import java.util.concurrent.ThreadLocalRandom;
public class QuestsCommand implements TabExecutor {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
- public QuestsCommand(Quests plugin) {
+ public QuestsCommand(BukkitQuestsPlugin plugin) {
this.plugin = plugin;
}
@@ -48,10 +48,10 @@ public class QuestsCommand implements TabExecutor {
sender.sendMessage(ChatColor.RED + "Quests is not ready yet.");
return true;
}
- if (plugin.isBrokenConfig() &&
- !(args.length >= 2 &&
- (args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("admin")) &&
- args[1].equalsIgnoreCase("reload"))) {
+ if (!plugin.isValidConfiguration()
+ && !(args.length >= 2
+ && (args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("admin"))
+ && args[1].equalsIgnoreCase("reload"))) {
sender.sendMessage(ChatColor.RED + "Quests cannot be used right now. Please speak to an administrator.");
if (sender.hasPermission("quests.admin")) {
showProblems(sender);
@@ -73,7 +73,7 @@ public class QuestsCommand implements TabExecutor {
player.sendMessage(Messages.COMMAND_DATA_NOT_LOADED.getMessage());
return true;
}
- qPlayer.openQuests();
+ plugin.getMenuController().openMainMenu(qPlayer);
return true;
} else if (args.length >= 1) {
if ((args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("admin")) && sender.hasPermission("quests.admin")) {
@@ -88,7 +88,7 @@ public class QuestsCommand implements TabExecutor {
sender.sendMessage(ChatColor.GRAY + "Please note that some options, such as storage, require a full restart for chances to take effect.");
plugin.reloadConfig();
plugin.reloadQuests();
- if (!plugin.getQuestsConfigLoader().getFilesWithProblems().isEmpty()) showProblems(sender);
+ if (!plugin.getConfigProblems().isEmpty()) showProblems(sender);
sender.sendMessage(ChatColor.GREEN + "Quests successfully reloaded.");
return true;
} else if (args[1].equalsIgnoreCase("config")) {
@@ -117,7 +117,7 @@ public class QuestsCommand implements TabExecutor {
sender.sendMessage(ChatColor.DARK_GRAY + "View info using /q a types [type].");
return true;
} else if (args[1].equalsIgnoreCase("info")) {
- sender.sendMessage(ChatColor.RED + "Quest mode: " + plugin.getQuestMode().toString());
+ sender.sendMessage(ChatColor.RED + "Quest controller: " + plugin.getQuestController().getName());
sender.sendMessage(ChatColor.GRAY + "Loaded quests:");
for (Quest quest : plugin.getQuestManager().getQuests().values()) {
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + quest.getId() + ChatColor.GRAY + " [" + quest.getTasks().size() + " tasks]");
@@ -129,7 +129,11 @@ public class QuestsCommand implements TabExecutor {
Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> {
plugin.getUpdater().check();
if (plugin.getUpdater().isUpdateReady()) {
- sender.sendMessage(plugin.getUpdater().getMessage());
+ String updateMessage = Messages.QUEST_UPDATER.getMessage()
+ .replace("{newver}", plugin.getUpdater().getReturnedVersion())
+ .replace("{oldver}", plugin.getUpdater().getInstalledVersion())
+ .replace("{link}", plugin.getUpdater().getUpdateLink());
+ sender.sendMessage(updateMessage);
} else {
sender.sendMessage(ChatColor.GRAY + "No updates were found.");
}
@@ -206,12 +210,12 @@ public class QuestsCommand implements TabExecutor {
}
} else if (args.length == 4) {
if (args[1].equalsIgnoreCase("opengui")) {
- if (args[2].equalsIgnoreCase("q") || args[2].equalsIgnoreCase("quests")) {
+ if (args[2].equalsIgnoreCase("q") || args[2].equalsIgnoreCase("resources/bukkit/quests")) {
Player player = Bukkit.getPlayer(args[3]);
if (player != null) {
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer != null) {
- qPlayer.openQuests();
+ plugin.getMenuController().openMainMenu(qPlayer);
sender.sendMessage(Messages.COMMAND_QUEST_OPENQUESTS_ADMIN_SUCCESS.getMessage().replace("{player}", player.getName()));
return true;
}
@@ -240,7 +244,7 @@ public class QuestsCommand implements TabExecutor {
} else if (args.length == 5) {
if (args[1].equalsIgnoreCase("opengui")) {
if (args[2].equalsIgnoreCase("c") || args[2].equalsIgnoreCase("category")) {
- if (!Options.CATEGORIES_ENABLED.getBooleanValue()) {
+ if (!plugin.getQuestsConfig().getBoolean("options.categories-enabled")) {
sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DISABLED.getMessage());
return true;
}
@@ -253,7 +257,7 @@ public class QuestsCommand implements TabExecutor {
if (player != null) {
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer != null) {
- if (qPlayer.openCategory(category, null, false) == 0) {
+ if (plugin.getMenuController().openQuestCategory(qPlayer, category, null, false) == 0) {
sender.sendMessage(Messages.COMMAND_QUEST_OPENCATEGORY_ADMIN_SUCCESS.getMessage().replace("{player}", player.getName())
.replace("{category}", category.getId()));
} else {
@@ -327,7 +331,7 @@ public class QuestsCommand implements TabExecutor {
showAdminHelp(sender, null);
return true;
}
- if (sender instanceof Player && (args[0].equalsIgnoreCase("q") || args[0].equalsIgnoreCase("quests") || args[0].equalsIgnoreCase("quest"))) {
+ if (sender instanceof Player && (args[0].equalsIgnoreCase("q") || args[0].equalsIgnoreCase("resources/bukkit/quests") || args[0].equalsIgnoreCase("quest"))) {
Player player = (Player) sender;
if (args.length >= 3) {
Quest quest = plugin.getQuestManager().getQuestById(args[1]);
@@ -351,7 +355,7 @@ public class QuestsCommand implements TabExecutor {
return true;
}
} else if (sender instanceof Player && (args[0].equalsIgnoreCase("c") || args[0].equalsIgnoreCase("category"))) {
- if (!Options.CATEGORIES_ENABLED.getBooleanValue()) {
+ if (!plugin.getQuestsConfig().getBoolean("options.categories-enabled")) {
sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DISABLED.getMessage());
return true;
}
@@ -366,7 +370,7 @@ public class QuestsCommand implements TabExecutor {
if (category == null) {
sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.getMessage().replace("{category}", args[1]));
} else {
- qPlayer.openCategory(category, null, false);
+ plugin.getMenuController().openQuestCategory(qPlayer, category, null, false);
return true;
}
return true;
@@ -399,7 +403,7 @@ public class QuestsCommand implements TabExecutor {
player.sendMessage(Messages.COMMAND_DATA_NOT_LOADED.getMessage());
return true;
}
- qPlayer.openStartedQuests();
+ plugin.getMenuController().openStartedQuests(qPlayer);
return true;
}
showHelp(sender);
@@ -434,24 +438,25 @@ public class QuestsCommand implements TabExecutor {
}
private void showProblems(CommandSender sender) {
- if (!plugin.getQuestsConfigLoader().getFilesWithProblems().isEmpty()) {
+ if (!plugin.getConfigProblems().isEmpty()) {
// sender.sendMessage(ChatColor.DARK_GRAY.toString() + "----");
sender.sendMessage(ChatColor.GRAY + "Detected problems and potential issues:");
- Set<QuestsConfigLoader.ConfigProblemType> problemTypes = new HashSet<>();
- for (Map.Entry<String, List<QuestsConfigLoader.ConfigProblem>> entry : plugin.getQuestsConfigLoader().getFilesWithProblems().entrySet()) {
- HashMap<QuestsConfigLoader.ConfigProblemType, List<QuestsConfigLoader.ConfigProblem>> sortedProblems = new HashMap<>();
- for (QuestsConfigLoader.ConfigProblem problem : entry.getValue()) {
+ Set<ConfigProblem.ConfigProblemType> problemTypes = new HashSet<>();
+ int count = 0;
+ for (Map.Entry<String, List<ConfigProblem>> entry : plugin.getConfigProblems().entrySet()) {
+ HashMap<ConfigProblem.ConfigProblemType, List<ConfigProblem>> sortedProblems = new HashMap<>();
+ for (ConfigProblem problem : entry.getValue()) {
if (sortedProblems.containsKey(problem.getType())) {
sortedProblems.get(problem.getType()).add(problem);
} else {
- List<QuestsConfigLoader.ConfigProblem> specificProblems = new ArrayList<>();
+ List<ConfigProblem> specificProblems = new ArrayList<>();
specificProblems.add(problem);
sortedProblems.put(problem.getType(), specificProblems);
}
problemTypes.add(problem.getType());
}
- QuestsConfigLoader.ConfigProblemType highest = null;
- for (QuestsConfigLoader.ConfigProblemType type : QuestsConfigLoader.ConfigProblemType.values()) {
+ ConfigProblem.ConfigProblemType highest = null;
+ for (ConfigProblem.ConfigProblemType type : ConfigProblem.ConfigProblemType.values()) {
if (sortedProblems.containsKey(type)) {
highest = type;
break;
@@ -459,27 +464,30 @@ public class QuestsCommand implements TabExecutor {
}
ChatColor highestColor = ChatColor.WHITE;
if (highest != null) {
- highestColor = highest.getColor();
+ highestColor = Chat.matchConfigProblemToColor(highest);
}
sender.sendMessage(highestColor + entry.getKey() + ChatColor.DARK_GRAY + " ----");
- for (QuestsConfigLoader.ConfigProblemType type : QuestsConfigLoader.ConfigProblemType.values()) {
+ for (ConfigProblem.ConfigProblemType type : ConfigProblem.ConfigProblemType.values()) {
if (sortedProblems.containsKey(type)) {
- for (QuestsConfigLoader.ConfigProblem problem : sortedProblems.get(type)) {
- sender.sendMessage(ChatColor.DARK_GRAY + " | - " + problem.getType().getColor()
+ for (ConfigProblem problem : sortedProblems.get(type)) {
+ sender.sendMessage(ChatColor.DARK_GRAY + " | - " + Chat.matchConfigProblemToColor(problem.getType())
+ problem.getType().getShortened() + ChatColor.DARK_GRAY + ": "
+ ChatColor.GRAY + problem.getDescription() + ChatColor.DARK_GRAY + " :" + problem.getLocation());
+ count++;
}
}
}
}
// sender.sendMessage(ChatColor.DARK_GRAY.toString() + "----");
List<String> legend = new ArrayList<>();
- for (QuestsConfigLoader.ConfigProblemType type : QuestsConfigLoader.ConfigProblemType.values()) {
- if (problemTypes.contains(type))
- legend.add(type.getColor() + type.getShortened() + ChatColor.DARK_GRAY + " = " + type.getColor() + type.getTitle());
+ for (ConfigProblem.ConfigProblemType type : ConfigProblem.ConfigProblemType.values()) {
+ if (problemTypes.contains(type)) {
+ legend.add(Chat.matchConfigProblemToColor(type) + type.getShortened() + ChatColor.DARK_GRAY + " = " + Chat.matchConfigProblemToColor(type) + type.getTitle());
+ }
}
sender.sendMessage(ChatColor.DARK_GRAY.toString() + "----");
- sender.sendMessage(ChatColor.GRAY.toString() + plugin.getQuestsConfigLoader().getProblemsCount() + " problem(s) | " + String.join(ChatColor.DARK_GRAY + ", ", legend));
+
+ sender.sendMessage(ChatColor.GRAY.toString() + count + " problem(s) | " + String.join(ChatColor.DARK_GRAY + ", ", legend));
} else {
sender.sendMessage(ChatColor.GRAY + "Quests did not detect any problems with your configuration.");
}
@@ -489,7 +497,7 @@ public class QuestsCommand implements TabExecutor {
sender.sendMessage(ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "------------=[" + ChatColor.RED + " Quests v" + plugin
.getDescription().getVersion() + " " + ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "]=------------");
sender.sendMessage(ChatColor.GRAY + "The following commands are available: ");
- sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests " + ChatColor.DARK_GRAY + ": show quests");
+ sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/resources/bukkit/quests " + ChatColor.DARK_GRAY + ": show quests");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests c/category <categoryid> " + ChatColor.DARK_GRAY + ": open category by ID");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests q/quest <questid> <start|cancel|track>" + ChatColor.DARK_GRAY + ": start, cancel or track quest by ID");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a/admin " + ChatColor.DARK_GRAY + ": view help for admins");
@@ -563,7 +571,7 @@ public class QuestsCommand implements TabExecutor {
@Nullable
@Override
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
- if (!Options.TAB_COMPLETE_ENABLED.getBooleanValue(true)) {
+ if (!plugin.getQuestsConfig().getBoolean("options.tab-completion.enabled")) {
return null;
}
if (sender instanceof Player) {
@@ -603,7 +611,7 @@ public class QuestsCommand implements TabExecutor {
}
return matchTabComplete(args[2], options);
} else if (args[1].equalsIgnoreCase("opengui")) {
- List<String> options = Arrays.asList("quests", "category");
+ List<String> options = Arrays.asList("resources/bukkit/quests", "category");
return matchTabComplete(args[2], options);
} else if (args[1].equalsIgnoreCase("moddata")) {
List<String> options = Arrays.asList("fullreset", "reset", "start", "complete");
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsConfig.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsConfig.java
new file mode 100644
index 00000000..add7c33e
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsConfig.java
@@ -0,0 +1,91 @@
+package com.leonardobishop.quests.bukkit.config;
+
+import com.leonardobishop.quests.bukkit.hook.itemgetter.ItemGetter;
+import com.leonardobishop.quests.common.config.QuestsConfig;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.inventory.ItemStack;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class BukkitQuestsConfig implements QuestsConfig {
+
+ private final Map<String, ItemStack> cachedItemStacks = new HashMap<>();
+ // this is faster than just relying on the YamlConfiguration to cache it for some reason
+ private final Map<String, Boolean> cachedBooleans = new HashMap<>();
+ private YamlConfiguration config;
+ private File file;
+ private ItemGetter itemGetter;
+
+ public BukkitQuestsConfig(File file) {
+ this.file = file;
+ }
+
+ public void setItemGetter(ItemGetter itemGetter) {
+ this.itemGetter = itemGetter;
+ }
+
+ @Override
+ public boolean loadConfig() {
+ this.cachedBooleans.clear();
+ this.cachedItemStacks.clear();
+ try {
+ config = YamlConfiguration.loadConfiguration(file);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ public YamlConfiguration getConfig() {
+ return config;
+ }
+
+ @Override
+ public String getString(String path) {
+ return config.getString(path);
+ }
+
+ @Override
+ public String getString(String path, String def) {
+ return config.getString(path, def);
+ }
+
+ @Override
+ public boolean getBoolean(String path) {
+ return config.getBoolean(path);
+ }
+
+ @Override
+ public boolean getBoolean(String path, boolean def) {
+ return config.getBoolean(path, def);
+ }
+
+ @Override
+ public int getInt(String path) {
+ return config.getInt(path);
+ }
+
+ @Override
+ public int getInt(String path, int def) {
+ return config.getInt(path, def);
+ }
+
+ @Override
+ public List<String> getStringList(String path) {
+ return config.getStringList(path);
+ }
+
+ @Override
+ public List<String> getStringList(String path, List<String> def) {
+ List<String> list = config.getStringList(path);
+ return list.isEmpty() ? def : list;
+ }
+
+ public ItemStack getItem(String path) {
+ return new ItemStack(cachedItemStacks.computeIfAbsent(path, s -> itemGetter.getItem(path, config)));
+ }
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java
new file mode 100644
index 00000000..f80ec3f0
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java
@@ -0,0 +1,331 @@
+package com.leonardobishop.quests.bukkit.config;
+
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.hook.itemgetter.ItemGetter;
+import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStack;
+import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStackRegistry;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.config.ConfigProblemDescriptions;
+import com.leonardobishop.quests.common.config.QuestsLoader;
+import com.leonardobishop.quests.common.logger.QuestsLogger;
+import com.leonardobishop.quests.common.quest.Category;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.quest.QuestManager;
+import com.leonardobishop.quests.common.quest.Task;
+import com.leonardobishop.quests.common.questcontroller.QuestController;
+import com.leonardobishop.quests.common.tasktype.TaskType;
+import com.leonardobishop.quests.common.tasktype.TaskTypeManager;
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.ChatColor;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.inventory.ItemStack;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.FileVisitResult;
+import java.nio.file.FileVisitor;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class BukkitQuestsLoader implements QuestsLoader {
+
+ private final BukkitQuestsPlugin plugin;
+ private final BukkitQuestsConfig questsConfig;
+ private final QuestManager questManager;
+ private final TaskTypeManager taskTypeManager;
+ private final QuestController questController;
+ private final QuestsLogger questsLogger;
+ private final QItemStackRegistry qItemStackRegistry;
+
+ public BukkitQuestsLoader(BukkitQuestsPlugin plugin) {
+ this.plugin = plugin;
+ this.questsConfig = (BukkitQuestsConfig) plugin.getQuestsConfig();
+ this.questManager = plugin.getQuestManager();
+ this.taskTypeManager = plugin.getTaskTypeManager();
+ this.questController = plugin.getQuestController();
+ this.questsLogger = plugin.getQuestsLogger();
+ this.qItemStackRegistry = plugin.getQItemStackRegistry();
+ }
+
+ @Override
+ public Map<String, List<ConfigProblem>> loadQuests(File root) {
+ qItemStackRegistry.clearRegistry();
+ questManager.getQuests().clear();
+ questManager.getCategories().clear();
+ taskTypeManager.resetTaskTypes();
+
+ Map<String, List<ConfigProblem>> configProblems = new HashMap<>();
+ HashMap<String, Quest> pathToQuest = new HashMap<>();
+ HashMap<String, Map<String, Object>> globalTaskConfig = new HashMap<>();
+
+ if (questsConfig.getConfig().isConfigurationSection("global-task-configuration.types")) {
+ for (String type : questsConfig.getConfig().getConfigurationSection("global-task-configuration.types").getKeys(false)) {
+ HashMap<String, Object> configValues = new HashMap<>();
+ for (String key : questsConfig.getConfig().getConfigurationSection("global-task-configuration.types." + type).getKeys(false)) {
+ configValues.put(key, questsConfig.getConfig().get("global-task-configuration.types." + type + "." + key));
+ }
+ globalTaskConfig.putIfAbsent(type, configValues);
+ }
+ }
+
+ for (String id : plugin.getConfig().getConfigurationSection("categories").getKeys(false)) {
+ ItemStack displayItem = plugin.getItemStack("categories." + id + ".display", plugin.getConfig());
+ boolean permissionRequired = plugin.getConfig().getBoolean("categories." + id + ".permission-required", false);
+
+ Category category = new Category(id, permissionRequired);
+ questManager.registerCategory(category);
+ qItemStackRegistry.register(category, displayItem);
+ }
+
+ FileVisitor<Path> fileVisitor = new SimpleFileVisitor<Path>() {
+ @Override
+ public FileVisitResult visitFile(Path path, BasicFileAttributes attributes) {
+ try {
+ File questFile = new File(path.toUri());
+ URI relativeLocation = root.toURI().relativize(path.toUri());
+
+ if (!questFile.getName().toLowerCase().endsWith(".yml")) return FileVisitResult.CONTINUE;
+
+ YamlConfiguration config = new YamlConfiguration();
+ // test QUEST file integrity
+ try {
+ config.load(questFile);
+ } catch (Exception ex) {
+ configProblems.put(relativeLocation.getPath(), Collections.singletonList(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR, ConfigProblemDescriptions.MALFORMED_YAML.getDescription())));
+ return FileVisitResult.CONTINUE;
+ }
+
+ String id = questFile.getName().replace(".yml", "");
+
+ List<ConfigProblem> problems = new ArrayList<>();
+
+ if (!StringUtils.isAlphanumeric(id)) {
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR, ConfigProblemDescriptions.INVALID_QUEST_ID.getDescription(id)));
+ }
+
+ // CHECK EVERYTHING WRONG WITH THE QUEST FILE BEFORE ACTUALLY LOADING THE QUEST
+
+ if (!config.isConfigurationSection("tasks")) {
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR, ConfigProblemDescriptions.NO_TASKS.getDescription(), "tasks"));
+ } else { //continue
+ int validTasks = 0;
+ for (String taskId : config.getConfigurationSection("tasks").getKeys(false)) {
+ boolean isValid = true;
+ String taskRoot = "tasks." + taskId;
+ String taskType = config.getString(taskRoot + ".type");
+
+ if (!config.isConfigurationSection(taskRoot)) {
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING, ConfigProblemDescriptions.TASK_MALFORMED_NOT_SECTION.getDescription(taskId), taskRoot));
+ continue;
+ }
+
+ if (taskType == null) {
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING, ConfigProblemDescriptions.NO_TASK_TYPE.getDescription(), taskRoot));
+ continue;
+ }
+
+ // check the tasks
+ TaskType t = taskTypeManager.getTaskType(taskType);
+ if (t != null) {
+ HashMap<String, Object> configValues = new HashMap<>();
+ for (String key : config.getConfigurationSection(taskRoot).getKeys(false)) {
+ configValues.put(key, config.get(taskRoot + "." + key));
+ }
+
+ problems.addAll(t.validateConfig(taskRoot, configValues));
+ } else {
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING, ConfigProblemDescriptions.UNKNOWN_TASK_TYPE.getDescription(taskType), taskRoot));
+ isValid = false;
+ }
+
+ if (isValid) {
+ validTasks++;
+ }
+ }
+ if (validTasks == 0) {
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR, ConfigProblemDescriptions.NO_TASKS.getDescription(), "tasks"));
+ }
+ }
+
+ boolean error = false;
+ for (ConfigProblem problem : problems) {
+ if (problem.getType() == ConfigProblem.ConfigProblemType.ERROR) {
+ error = true;
+ break;
+ }
+ }
+
+ // END OF THE CHECKING
+ if (!error && !questsConfig.getBoolean("options.error-checking.override-errors", false)) {
+ QItemStack displayItem = getQItemStack("display", config);
+ List<String> rewards = config.getStringList("rewards");
+ List<String> requirements = config.getStringList("options.requires");
+ List<String> rewardString = config.getStringList("rewardstring");
+ List<String> startString = config.getStringList("startstring");
+ boolean repeatable = config.getBoolean("options.repeatable", false);
+ boolean cooldown = config.getBoolean("options.cooldown.enabled", false);
+ boolean permissionRequired = config.getBoolean("options.permission-required", false);
+ int cooldownTime = config.getInt("options.cooldown.time", 10);
+ int sortOrder = config.getInt("options.sort-order", 1);
+ String category = config.getString("options.category");
+ Map<String, String> placeholders = new HashMap<>();
+
+ if (category == null) category = "";
+
+ if (questController.getName().equals("daily")) {
+ repeatable = true;
+ cooldown = true;
+ cooldownTime = 0;
+ requirements = Collections.emptyList();
+ permissionRequired = false;
+ }
+
+ Quest quest;
+ if (category.equals("")) {
+ quest = new Quest(id, rewards, requirements, repeatable, cooldown, cooldownTime, permissionRequired, rewardString, startString, placeholders, sortOrder);
+ } else {
+ quest = new Quest(id, rewards, requirements, repeatable, cooldown, cooldownTime, permissionRequired, rewardString, startString, placeholders, category, sortOrder);
+ Category c = questManager.getCategoryById(category);
+ if (c != null) {
+ c.registerQuestId(id);
+ } else {
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING, ConfigProblemDescriptions.UNKNOWN_CATEGORY.getDescription(category), "options.category"));
+ }
+ }
+
+ for (String taskId : config.getConfigurationSection("tasks").getKeys(false)) {
+ String taskRoot = "tasks." + taskId;
+ String taskType = config.getString(taskRoot + ".type");
+
+ Task task = new Task(taskId, taskType);
+
+ for (String key : config.getConfigurationSection(taskRoot).getKeys(false)) {
+ task.addConfigValue(key, config.get(taskRoot + "." + key));
+ }
+
+ if (globalTaskConfig.containsKey(taskType)) {
+ for (Map.Entry<String, Object> entry : globalTaskConfig.get(taskType).entrySet()) {
+ if (questsConfig.getBoolean("options.global-task-configuration-override") && task.getConfigValue(entry.getKey()) != null)
+ continue;
+ task.addConfigValue(entry.getKey(), entry.getValue());
+ }
+ }
+
+ quest.registerTask(task);
+ }
+
+
+ for (String line : displayItem.getLoreNormal()) {
+ findInvalidTaskReferences(quest, line, problems, "display.lore-normal");
+ }
+ for (String line : displayItem.getLoreStarted()) {
+ findInvalidTaskReferences(quest, line, problems, "display.lore-started");
+ }
+
+ if (config.isConfigurationSection("placeholders")) {
+ for (String p : config.getConfigurationSection("placeholders").getKeys(false)) {
+ placeholders.put(p, config.getString("placeholders." + p));
+ findInvalidTaskReferences(quest, config.getString("placeholders." + p), problems, "placeholders." + p);
+ }
+ }
+ if (questsConfig.getBoolean("options.show-quest-registrations")) {
+ questsLogger.info("Registering quest " + quest.getId() + " with " + quest.getTasks().size() + " tasks.");
+ }
+ questManager.registerQuest(quest);
+ taskTypeManager.registerQuestTasksWithTaskTypes(quest);
+ qItemStackRegistry.register(quest, displayItem);
+ pathToQuest.put(relativeLocation.getPath(), quest);
+ }
+ if (!problems.isEmpty()) {
+ configProblems.put(relativeLocation.getPath(), problems);
+ }
+ } catch (Exception e) {
+ questsLogger.severe("An exception occurred when attempting to load quest '" + path + "' (will be ignored)");
+ e.printStackTrace();
+ }
+ return FileVisitResult.CONTINUE;
+ }
+ };
+
+ try {
+ Files.walkFileTree(root.toPath(), fileVisitor);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ // post-load checks
+ for (Map.Entry<String, Quest> loadedQuest : pathToQuest.entrySet()) {
+ List<ConfigProblem> problems = new ArrayList<>();
+ for (String req : loadedQuest.getValue().getRequirements()) {
+ if (questManager.getQuestById(req) == null) {
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING, ConfigProblemDescriptions.UNKNOWN_REQUIREMENT.getDescription(req), "options.requires"));
+ }
+ }
+
+ if (!problems.isEmpty()) {
+ if (configProblems.containsKey(loadedQuest.getKey())) {
+ configProblems.get(loadedQuest.getKey()).addAll(problems);
+ } else {
+ configProblems.put(loadedQuest.getKey(), problems);
+ }
+ }
+ }
+
+ return configProblems;
+ }
+
+ private void findInvalidTaskReferences(Quest quest, String s, List<ConfigProblem> configProblems, String location) {
+ Pattern pattern = Pattern.compile("\\{([^}]+)}");
+
+ Matcher matcher = pattern.matcher(s);
+ while (matcher.find()) {
+ String[] parts = matcher.group(1).split(":");
+ boolean match = false;
+ for (Task t : quest.getTasks()) {
+ if (t.getId().equals(parts[0])) {
+ match = true;
+ break;
+ }
+ }
+ if (!match)
+ configProblems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
+ ConfigProblemDescriptions.UNKNOWN_TASK_REFERENCE.getDescription(parts[0]), location));
+ }
+ }
+
+ private QItemStack getQItemStack(String path, FileConfiguration config) {
+ String cName = config.getString(path + ".name", path + ".name");
+ List<String> cLoreNormal = config.getStringList(path + ".lore-normal");
+ List<String> cLoreStarted = config.getStringList(path + ".lore-started");
+
+ List<String> loreNormal = translateColoursInList(cLoreNormal);
+ List<String> loreStarted = translateColoursInList(cLoreStarted);
+
+ String name;
+ name = ChatColor.translateAlternateColorCodes('&', cName);
+
+ ItemStack is = plugin.getItemStack(path, config,
+ ItemGetter.Filter.DISPLAY_NAME, ItemGetter.Filter.LORE, ItemGetter.Filter.ENCHANTMENTS, ItemGetter.Filter.ITEM_FLAGS);
+
+ return new QItemStack(plugin, name, loreNormal, loreStarted, is);
+ }
+
+ private List<String> translateColoursInList(List<String> list) {
+ List<String> coloured = new ArrayList<>();
+ for (String s : list) {
+ coloured.add(ChatColor.translateAlternateColorCodes('&', s));
+ }
+ return coloured;
+ }
+}
diff --git a/src/main/java/com/leonardobishop/quests/hook/coreprotect/ICoreProtectHook.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/AbstractCoreProtectHook.java
index 5dc1fa36..75f96ecd 100644
--- a/src/main/java/com/leonardobishop/quests/hook/coreprotect/ICoreProtectHook.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/AbstractCoreProtectHook.java
@@ -1,8 +1,8 @@
-package com.leonardobishop.quests.hook.coreprotect;
+package com.leonardobishop.quests.bukkit.hook.coreprotect;
import org.bukkit.block.Block;
-public interface ICoreProtectHook {
+public interface AbstractCoreProtectHook {
/**
* Check whether or not the most recent edit to a block was the result of a player.
diff --git a/src/main/java/com/leonardobishop/quests/hook/coreprotect/CoreProtectHook.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectHook.java
index 60f4e0a4..1dbfe3bd 100644
--- a/src/main/java/com/leonardobishop/quests/hook/coreprotect/CoreProtectHook.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectHook.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.hook.coreprotect;
+package com.leonardobishop.quests.bukkit.hook.coreprotect;
import net.coreprotect.CoreProtect;
import net.coreprotect.CoreProtectAPI;
@@ -7,7 +7,7 @@ import org.bukkit.block.Block;
import java.util.List;
-public class CoreProtectHook implements ICoreProtectHook {
+public class CoreProtectHook implements AbstractCoreProtectHook {
private final CoreProtectAPI api;
diff --git a/src/main/java/com/leonardobishop/quests/hook/coreprotect/CoreProtectNoHook.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectNoHook.java
index 32916934..4fc0eae9 100644
--- a/src/main/java/com/leonardobishop/quests/hook/coreprotect/CoreProtectNoHook.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectNoHook.java
@@ -1,8 +1,8 @@
-package com.leonardobishop.quests.hook.coreprotect;
+package com.leonardobishop.quests.bukkit.hook.coreprotect;
import org.bukkit.block.Block;
-public class CoreProtectNoHook implements ICoreProtectHook {
+public class CoreProtectNoHook implements AbstractCoreProtectHook {
@Override
public boolean checkBlock(Block block, int time) {
return false;
diff --git a/src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetter.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter.java
index f3a6fc7e..efbd1a36 100644
--- a/src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetter.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter.java
@@ -1,6 +1,5 @@
-package com.leonardobishop.quests.hook.itemgetter;
+package com.leonardobishop.quests.bukkit.hook.itemgetter;
-import com.leonardobishop.quests.Quests;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack;
@@ -12,20 +11,19 @@ public interface ItemGetter {
*
* @param path the path to where the item is defined in the config (null if item is defined in second param)
* @param config the configuration file
- * @param plugin Quests plugin instance
* @param excludes exclude certain fields in the configuration
- * @return {@link org.bukkit.inventory.ItemStack}
+ * @return {@link ItemStack}
*/
- ItemStack getItem(String path, ConfigurationSection config, Quests plugin, Filter... excludes);
+ ItemStack getItem(String path, ConfigurationSection config, Filter... excludes);
/**
* Gets an ItemStack from a given string (which represents a material).
* For pre-1.13 server implementations, the string may use a data code.
*
* @param material the string
- * @return {@link org.bukkit.inventory.ItemStack}
+ * @return {@link ItemStack}
*/
- ItemStack getItemStack(String material, Quests plugin);
+ ItemStack getItemStack(String material);
/**
* Validates a material from a string.
diff --git a/src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetterLatest.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetterLatest.java
index e1215388..4f87c2ac 100644
--- a/src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetterLatest.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetterLatest.java
@@ -1,6 +1,5 @@
-package com.leonardobishop.quests.hook.itemgetter;
+package com.leonardobishop.quests.bukkit.hook.itemgetter;
-import com.leonardobishop.quests.Quests;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
@@ -34,7 +33,7 @@ public class ItemGetterLatest implements ItemGetter {
requires at least API version 1.14
*/
@Override
- public ItemStack getItem(String path, ConfigurationSection config, Quests plugin, ItemGetter.Filter... excludes) {
+ public ItemStack getItem(String path, ConfigurationSection config, ItemGetter.Filter... excludes) {
if (path != null && !path.equals("")) {
path = path + ".";
}
@@ -55,7 +54,7 @@ public class ItemGetterLatest implements ItemGetter {
int data = 0;
// material
- ItemStack is = getItemStack(cType, plugin);
+ ItemStack is = getItemStack(cType);
ItemMeta ism = is.getItemMeta();
// name
@@ -177,7 +176,6 @@ public class ItemGetterLatest implements ItemGetter {
for (String key : config.getStringList(path + "enchantments")) {
String[] split = key.split(":");
if (split.length < 2) {
- plugin.getQuestsLogger().debug("Enchantment does not follow format {namespace}:{name}:{level} : " + key);
continue;
}
String namespace = split[0];
@@ -200,7 +198,6 @@ public class ItemGetterLatest implements ItemGetter {
// }
Enchantment enchantment;
if ((enchantment = Enchantment.getByName(ench)) == null) {
- plugin.getQuestsLogger().debug("Unrecognised enchantment: " + ench);
continue;
}
@@ -221,12 +218,11 @@ public class ItemGetterLatest implements ItemGetter {
}
@Override
- public ItemStack getItemStack(String material, Quests plugin) {
+ public ItemStack getItemStack(String material) {
Material type;
try {
type = Material.valueOf(material);
} catch (Exception e) {
- plugin.getQuestsLogger().debug("Unrecognised material: " + material);
type = Material.STONE;
}
return new ItemStack(type, 1);
diff --git a/src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetter_1_13.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_1_13.java
index f25aab0c..a645f810 100644
--- a/src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetter_1_13.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_1_13.java
@@ -1,6 +1,5 @@
-package com.leonardobishop.quests.hook.itemgetter;
+package com.leonardobishop.quests.bukkit.hook.itemgetter;
-import com.leonardobishop.quests.Quests;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
@@ -32,7 +31,7 @@ public class ItemGetter_1_13 implements ItemGetter {
requires at least API version 1.13
*/
@Override
- public ItemStack getItem(String path, ConfigurationSection config, Quests plugin, ItemGetter.Filter... excludes) {
+ public ItemStack getItem(String path, ConfigurationSection config, ItemGetter.Filter... excludes) {
if (path != null && !path.equals("")) {
path = path + ".";
}
@@ -51,7 +50,7 @@ public class ItemGetter_1_13 implements ItemGetter {
int data = 0;
// material
- ItemStack is = getItemStack(cType, plugin);
+ ItemStack is = getItemStack(cType);
ItemMeta ism = is.getItemMeta();
// name
@@ -166,7 +165,6 @@ public class ItemGetter_1_13 implements ItemGetter {
for (String key : config.getStringList(path + "enchantments")) {
String[] split = key.split(":");
if (split.length < 2) {
- plugin.getQuestsLogger().debug("Enchantment does not follow format {namespace}:{name}:{level} : " + key);
continue;
}
String namespace = split[0];
@@ -189,7 +187,6 @@ public class ItemGetter_1_13 implements ItemGetter {
// }
Enchantment enchantment;
if ((enchantment = Enchantment.getByName(ench)) == null) {
- plugin.getQuestsLogger().debug("Unrecognised enchantment: " + ench);
continue;
}
@@ -210,12 +207,11 @@ public class ItemGetter_1_13 implements ItemGetter {
}
@Override
- public ItemStack getItemStack(String material, Quests plugin) {
+ public ItemStack getItemStack(String material) {
Material type;
try {
type = Material.valueOf(material);
} catch (Exception e) {
- plugin.getQuestsLogger().debug("Unrecognised material: " + material);
type = Material.STONE;
}
return new ItemStack(type, 1);
diff --git a/src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetter_Late_1_8.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_Late_1_8.java
index 84525cfb..ea80deea 100644
--- a/src/main/java/com/leonardobishop/quests/hook/itemgetter/ItemGetter_Late_1_8.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_Late_1_8.java
@@ -1,6 +1,5 @@
-package com.leonardobishop.quests.hook.itemgetter;
+package com.leonardobishop.quests.bukkit.hook.itemgetter;
-import com.leonardobishop.quests.Quests;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@@ -27,7 +26,7 @@ public class ItemGetter_Late_1_8 implements ItemGetter {
requires at least API version 1.8 (?)
*/
@Override
- public ItemStack getItem(String path, ConfigurationSection config, Quests plugin, Filter... excludes) {
+ public ItemStack getItem(String path, ConfigurationSection config, Filter... excludes) {
if (path != null && !path.equals("")) {
path = path + ".";
}
@@ -44,7 +43,7 @@ public class ItemGetter_Late_1_8 implements ItemGetter {
int data = 0;
// material
- ItemStack is = getItemStack(cType, plugin);
+ ItemStack is = getItemStack(cType);
ItemMeta ism = is.getItemMeta();
// lore
@@ -94,7 +93,6 @@ public class ItemGetter_Late_1_8 implements ItemGetter {
Enchantment enchantment;
if ((enchantment = Enchantment.getByName(ench)) == null) {
- plugin.getQuestsLogger().debug("Unrecognised enchantment: " + ench);
continue;
}
@@ -116,7 +114,7 @@ public class ItemGetter_Late_1_8 implements ItemGetter {
@Override
- public ItemStack getItemStack(String material, Quests plugin) {
+ public ItemStack getItemStack(String material) {
Material type = null;
int data = 0;
@@ -135,7 +133,6 @@ public class ItemGetter_Late_1_8 implements ItemGetter {
}
if (type == null) {
- plugin.getQuestsLogger().debug("Unrecognised material: " + material);
type = Material.STONE;
}
return new ItemStack(type, 1, (short) data);
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/AbstractPlaceholderAPIHook.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/AbstractPlaceholderAPIHook.java
new file mode 100644
index 00000000..144c2ecd
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/AbstractPlaceholderAPIHook.java
@@ -0,0 +1,14 @@
+package com.leonardobishop.quests.bukkit.hook.papi;
+
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import org.bukkit.entity.Player;
+
+public interface AbstractPlaceholderAPIHook {
+
+ String replacePlaceholders(Player player, String text);
+
+ void registerExpansion(BukkitQuestsPlugin plugin);
+
+ void unregisterExpansion();
+
+}
diff --git a/src/main/java/com/leonardobishop/quests/hook/papi/PlaceholderAPIHook.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/PlaceholderAPIHook.java
index 8fd86efc..c9102127 100644
--- a/src/main/java/com/leonardobishop/quests/hook/papi/PlaceholderAPIHook.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/PlaceholderAPIHook.java
@@ -1,11 +1,10 @@
-package com.leonardobishop.quests.hook.papi;
+package com.leonardobishop.quests.bukkit.hook.papi;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.api.QuestsPlaceholders;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.entity.Player;
-public class PlaceholderAPIHook implements IPlaceholderAPIHook {
+public class PlaceholderAPIHook implements AbstractPlaceholderAPIHook {
private QuestsPlaceholders placeholder;
@@ -14,7 +13,7 @@ public class PlaceholderAPIHook implements IPlaceholderAPIHook {
}
@Override
- public void registerExpansion(Quests plugin) {
+ public void registerExpansion(BukkitQuestsPlugin plugin) {
placeholder = new QuestsPlaceholders(plugin);
placeholder.register();
}
diff --git a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/QuestsPlaceholders.java
index 5c82cf6b..7428d860 100644
--- a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/QuestsPlaceholders.java
@@ -1,17 +1,19 @@
-package com.leonardobishop.quests.api;
+package com.leonardobishop.quests.bukkit.hook.papi;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.menu.QItemStack;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
-import com.leonardobishop.quests.quest.Category;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStack;
+import com.leonardobishop.quests.bukkit.util.Chat;
+import com.leonardobishop.quests.common.enums.QuestStartResult;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.quest.Category;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.util.Format;
import me.clip.placeholderapi.expansion.Cacheable;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -23,11 +25,11 @@ import java.util.concurrent.TimeUnit;
public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheable {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
private final Map<String, Map<String, String>> cache = new HashMap<>();
private final Map<String, SimpleDateFormat> formats = new HashMap<>();
- public QuestsPlaceholders(Quests plugin) {
+ public QuestsPlaceholders(BukkitQuestsPlugin plugin) {
this.plugin = plugin;
}
@@ -39,7 +41,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl
@Override
public String getIdentifier() {
- return "quests";
+ return "resources/bukkit/quests";
}
@Override
@@ -106,7 +108,10 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl
switch (args[1].toLowerCase()) {
case "list":
case "l":
- plugin.getQuestManager().getCategories().forEach(c -> listCategories.add(c.getDisplayNameStripped()));
+ plugin.getQuestManager().getCategories().forEach(c -> {
+ ItemStack itemStack = plugin.getQItemStackRegistry().getCategoryItemStack(c);
+ listCategories.add(Chat.strip(itemStack.getItemMeta().getDisplayName()));
+ });
break;
case "listid":
case "lid":
@@ -145,7 +150,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl
}
if (args.length == 1) {
- result = quest.getDisplayNameStripped();
+ result = getQuestDisplayNameStripped(quest);
} else {
switch (args[1].toLowerCase()) {
case "started":
@@ -170,7 +175,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl
break;
case "cooldown":
if (qPlayer.getQuestProgressFile().getQuestProgress(quest).isCompleted()) {
- final String time = plugin.convertToFormat(TimeUnit.SECONDS.convert(qPlayer.getQuestProgressFile().getCooldownFor(quest), TimeUnit.MILLISECONDS));
+ final String time = Format.formatTime(TimeUnit.SECONDS.convert(qPlayer.getQuestProgressFile().getCooldownFor(quest), TimeUnit.MILLISECONDS));
if (!time.startsWith("-")) result = time;
} else {
result = "0";
@@ -214,7 +219,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl
if (placeholder == null) {
return t[1] + " is not a valid placeholder within quest " + quest.getId();
}
- placeholder = QItemStack.processPlaceholders(Options.color(placeholder), qPlayer.getQuestProgressFile().getQuestProgress(quest));
+ placeholder = QItemStack.processPlaceholders(Chat.color(placeholder), qPlayer.getQuestProgressFile().getQuestProgress(quest));
return placeholder;
} else {
return args[0] + "_" + args[1] + " is not a valid placeholder";
@@ -224,14 +229,15 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl
break;
case "category":
case "c":
- if (!Options.CATEGORIES_ENABLED.getBooleanValue()) return "Categories Disabled";
+ if (!plugin.getQuestsConfig().getBoolean("options.categories-enabled")) return "Categories Disabled";
if (key.length == 1) return "Please specify category name";
final Category category = plugin.getQuestManager().getCategoryById(key[1]);
if (category == null) return key[1] + " is not a category";
if (args.length == 1) {
- result = category.getDisplayNameStripped();
+ ItemStack itemStack = plugin.getQItemStackRegistry().getCategoryItemStack(category);
+ result = Chat.strip(itemStack.getItemMeta().getDisplayName());
} else {
if (args.length > 2 && split.equals(args[2])) split = ",";
switch (args[1].toLowerCase()) {
@@ -294,7 +300,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl
switch (type.toLowerCase()) {
case "list":
case "l":
- list.forEach(q -> quests.add(q.getDisplayNameStripped()));
+ list.forEach(q -> quests.add(getQuestDisplayNameStripped(q)));
break;
case "listid":
case "lid":
@@ -306,6 +312,12 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl
return String.join(separator, quests);
}
+ private String getQuestDisplayNameStripped(Quest quest) {
+ QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest);
+ if (qItemStack != null) return Chat.strip(qItemStack.getName());
+ return null;
+ }
+
private List<Quest> getCategoryQuests(QPlayer questP, Category category, QuestProgressFile.QuestsProgressFilter filter) {
final List<Quest> categoryQuests = new ArrayList<>();
category.getRegisteredQuestIds().forEach(q -> {
diff --git a/src/main/java/com/leonardobishop/quests/hook/title/Title.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title.java
index ea8f1f57..49c4613b 100644
--- a/src/main/java/com/leonardobishop/quests/hook/title/Title.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.hook.title;
+package com.leonardobishop.quests.bukkit.hook.title;
import org.bukkit.entity.Player;
diff --git a/src/main/java/com/leonardobishop/quests/hook/title/Title_Bukkit.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title_Bukkit.java
index 34b22f6b..6975700e 100644
--- a/src/main/java/com/leonardobishop/quests/hook/title/Title_Bukkit.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title_Bukkit.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.hook.title;
+package com.leonardobishop.quests.bukkit.hook.title;
import org.bukkit.entity.Player;
diff --git a/src/main/java/com/leonardobishop/quests/hook/title/Title_BukkitNoTimings.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title_BukkitNoTimings.java
index d0f44fe6..64c91ea6 100644
--- a/src/main/java/com/leonardobishop/quests/hook/title/Title_BukkitNoTimings.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title_BukkitNoTimings.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.hook.title;
+package com.leonardobishop.quests.bukkit.hook.title;
import org.bukkit.entity.Player;
diff --git a/src/main/java/com/leonardobishop/quests/hook/title/Title_Other.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title_Other.java
index 419bf657..cdc8d7bf 100644
--- a/src/main/java/com/leonardobishop/quests/hook/title/Title_Other.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/title/Title_Other.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.hook.title;
+package com.leonardobishop.quests.bukkit.hook.title;
import org.bukkit.entity.Player;
diff --git a/src/main/java/com/leonardobishop/quests/listener/PlayerJoinListener.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java
index 53916c32..2fe15860 100644
--- a/src/main/java/com/leonardobishop/quests/listener/PlayerJoinListener.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java
@@ -1,9 +1,8 @@
-package com.leonardobishop.quests.listener;
+package com.leonardobishop.quests.bukkit.listener;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.util.Messages;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.util.Messages;
+import com.leonardobishop.quests.common.player.QPlayer;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -15,9 +14,9 @@ import java.util.UUID;
public class PlayerJoinListener implements Listener {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
- public PlayerJoinListener(Quests plugin) {
+ public PlayerJoinListener(BukkitQuestsPlugin plugin) {
this.plugin = plugin;
}
@@ -35,7 +34,11 @@ public class PlayerJoinListener implements Listener {
}
if (plugin.getUpdater().isUpdateReady() && event.getPlayer().hasPermission("quests.admin")) {
// delay for a bit so they actually see the message
- Bukkit.getScheduler().runTaskLater(this.plugin, () -> event.getPlayer().sendMessage(plugin.getUpdater().getMessage()), 50L);
+ String updateMessage = Messages.QUEST_UPDATER.getMessage()
+ .replace("{newver}", plugin.getUpdater().getReturnedVersion())
+ .replace("{oldver}", plugin.getUpdater().getInstalledVersion())
+ .replace("{link}", plugin.getUpdater().getUpdateLink());
+ Bukkit.getScheduler().runTaskLater(this.plugin, () -> event.getPlayer().sendMessage(updateMessage), 50L);
}
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(playerUuid);
diff --git a/src/main/java/com/leonardobishop/quests/listener/PlayerLeaveListener.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java
index d246e1f6..1f41344a 100644
--- a/src/main/java/com/leonardobishop/quests/listener/PlayerLeaveListener.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java
@@ -1,18 +1,16 @@
-package com.leonardobishop.quests.listener;
+package com.leonardobishop.quests.bukkit.listener;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
-import org.bukkit.Bukkit;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.common.player.QPlayer;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
public class PlayerLeaveListener implements Listener {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
- public PlayerLeaveListener(Quests plugin) {
+ public PlayerLeaveListener(BukkitQuestsPlugin plugin) {
this.plugin = plugin;
}
diff --git a/src/main/java/com/leonardobishop/quests/menu/CancelQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java
index 12186348..3c811bff 100644
--- a/src/main/java/com/leonardobishop/quests/menu/CancelQMenu.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CancelQMenu.java
@@ -1,10 +1,10 @@
-package com.leonardobishop.quests.menu;
+package com.leonardobishop.quests.bukkit.menu;
-import com.leonardobishop.quests.listener.MenuController;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.util.Items;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig;
+import com.leonardobishop.quests.bukkit.util.Chat;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.quest.Quest;
import org.bukkit.Bukkit;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
@@ -16,13 +16,17 @@ import org.bukkit.inventory.meta.ItemMeta;
*/
public class CancelQMenu implements QMenu {
+ private final BukkitQuestsPlugin plugin;
+ private final BukkitQuestsConfig config;
private final QMenu superMenu;
private final QPlayer owner;
private final Quest quest;
- public CancelQMenu(QPlayer owner, QMenu superMenu, Quest quest) {
- this.owner = owner;
+ public CancelQMenu(BukkitQuestsPlugin plugin, QMenu superMenu, QPlayer owner, Quest quest) {
+ this.plugin = plugin;
+ this.config = (BukkitQuestsConfig) plugin.getQuestsConfig();
this.superMenu = superMenu;
+ this.owner = owner;
this.quest = quest;
}
@@ -36,12 +40,12 @@ public class CancelQMenu implements QMenu {
}
public Inventory toInventory(int page) {
- String title = Options.color(Options.GUITITLE_QUEST_CANCEL.getStringValue());
+ String title = Chat.color(config.getString("options.guinames.quest-cancel"));
- ItemStack yes = Items.QUEST_CANCEL_YES.getItem();
- ItemStack no = Items.QUEST_CANCEL_NO.getItem();
+ ItemStack yes = config.getItem("gui.quest-cancel-yes");
+ ItemStack no = config.getItem("gui.quest-cancel-no");
- ItemStack background = Items.QUEST_CANCEL_BACKGROUND.getItem();
+ ItemStack background = config.getItem("gui.quest-cancel-background");
ItemMeta backgroundMeta = background.getItemMeta();
backgroundMeta.setDisplayName(" ");
background.setItemMeta(backgroundMeta);
@@ -55,7 +59,7 @@ public class CancelQMenu implements QMenu {
inventory.setItem(10, no);
inventory.setItem(11, no);
inventory.setItem(12, no);
- inventory.setItem(13, quest.getDisplayItem().toItemStack(quest, owner, owner.getQuestProgressFile().getQuestProgress(quest)));
+ inventory.setItem(13, plugin.getQItemStackRegistry().getQuestItemStack(quest).toItemStack(quest, owner, owner.getQuestProgressFile().getQuestProgress(quest)));
inventory.setItem(14, yes);
inventory.setItem(15, yes);
inventory.setItem(16, yes);
diff --git a/src/main/java/com/leonardobishop/quests/menu/CategoryQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java
index 3afb4eb4..03693657 100644
--- a/src/main/java/com/leonardobishop/quests/menu/CategoryQMenu.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java
@@ -1,15 +1,15 @@
-package com.leonardobishop.quests.menu;
+package com.leonardobishop.quests.bukkit.menu;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.listener.MenuController;
-import com.leonardobishop.quests.menu.element.CategoryMenuElement;
-import com.leonardobishop.quests.menu.element.CustomMenuElement;
-import com.leonardobishop.quests.menu.element.MenuElement;
-import com.leonardobishop.quests.menu.element.SpacerMenuElement;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.util.Items;
-import com.leonardobishop.quests.util.Messages;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig;
+import com.leonardobishop.quests.bukkit.menu.element.CategoryMenuElement;
+import com.leonardobishop.quests.bukkit.menu.element.CustomMenuElement;
+import com.leonardobishop.quests.bukkit.menu.element.MenuElement;
+import com.leonardobishop.quests.bukkit.menu.element.SpacerMenuElement;
+import com.leonardobishop.quests.bukkit.util.Chat;
+import com.leonardobishop.quests.bukkit.util.MenuUtils;
+import com.leonardobishop.quests.bukkit.util.Messages;
+import com.leonardobishop.quests.common.player.QPlayer;
import org.apache.commons.lang.math.NumberUtils;
import org.bukkit.Bukkit;
import org.bukkit.event.inventory.InventoryClickEvent;
@@ -25,7 +25,8 @@ import java.util.Map;
*/
public class CategoryQMenu implements QMenu {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
+ private final BukkitQuestsConfig config;
private final HashMap<Integer, MenuElement> menuElements = new HashMap<>();
private final QPlayer owner;
@@ -35,22 +36,23 @@ public class CategoryQMenu implements QMenu {
private int pageNextLocation = -1;
private int currentPage = -1;
- public CategoryQMenu(Quests plugin, QPlayer owner) {
+ public CategoryQMenu(BukkitQuestsPlugin plugin, QPlayer owner) {
this.plugin = plugin;
+ this.config = (BukkitQuestsConfig) plugin.getQuestsConfig();
this.owner = owner;
}
public void populate(List<QuestQMenu> menuQuests) {
- if (plugin.getConfig().isConfigurationSection("custom-elements.categories")) {
- for (String s : plugin.getConfig().getConfigurationSection("custom-elements.categories").getKeys(false)) {
+ if (config.getConfig().isConfigurationSection("custom-elements.categories")) {
+ for (String s : config.getConfig().getConfigurationSection("custom-elements.categories").getKeys(false)) {
if (!NumberUtils.isNumber(s)) continue;
int slot = Integer.parseInt(s);
- int repeat = plugin.getConfig().getInt("custom-elements.categories." + s + ".repeat");
+ int repeat = config.getInt("custom-elements.categories." + s + ".repeat");
MenuElement menuElement;
- if (plugin.getConfig().contains("custom-elements.categories." + s + ".display")) {
- ItemStack is = plugin.getItemStack("custom-elements.categories." + s + ".display", plugin.getConfig());
+ if (config.getConfig().contains("custom-elements.categories." + s + ".display")) {
+ ItemStack is = config.getItem("custom-elements.categories." + s + ".display");
menuElement = new CustomMenuElement(is);
- } else if (plugin.getConfig().getBoolean("custom-elements.categories." + s + ".spacer", false)) {
+ } else if (config.getBoolean("custom-elements.categories." + s + ".spacer", false)) {
menuElement = new SpacerMenuElement();
} else continue; // user = idiot
@@ -62,7 +64,7 @@ public class CategoryQMenu implements QMenu {
int slot = 0;
for (QuestQMenu questQMenu : menuQuests) {
while (menuElements.containsKey(slot)) slot++;
- if (Options.GUI_HIDE_CATEGORIES_NOPERMISSION.getBooleanValue() && plugin.getQuestManager().getCategoryById(questQMenu.getCategoryName()).isPermissionRequired()) {
+ if (config.getBoolean("options.gui-hide-categories-nopermission") && plugin.getQuestManager().getCategoryById(questQMenu.getCategoryName()).isPermissionRequired()) {
if (!Bukkit.getPlayer(owner.getPlayerUUID()).hasPermission("quests.category." + questQMenu.getCategoryName())) {
continue;
}
@@ -92,7 +94,7 @@ public class CategoryQMenu implements QMenu {
currentPage = page;
int pageMin = pageSize * (page - 1);
int pageMax = pageSize * page;
- String title = Options.color(Options.GUITITLE_QUESTS_CATEGORY.getStringValue());
+ String title = Chat.color(config.getString("options.guinames.quests-category"));
ItemStack pageIs;
ItemStack pagePrevIs;
@@ -114,10 +116,10 @@ public class CategoryQMenu implements QMenu {
pageplaceholders.put("{prevpage}", String.valueOf(page - 1));
pageplaceholders.put("{nextpage}", String.valueOf(page + 1));
pageplaceholders.put("{page}", String.valueOf(page));
- pageIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_DESCRIPTION.getItem(), pageplaceholders);
+ pageIs = MenuUtils.applyPlaceholders(plugin, owner.getPlayerUUID(), config.getItem("gui.page-desc"), pageplaceholders);
pageIs.setAmount(Math.min(page, 64));
- pagePrevIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_PREV.getItem(), pageplaceholders);
- pageNextIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_NEXT.getItem(), pageplaceholders);
+ pagePrevIs = MenuUtils.applyPlaceholders(plugin, owner.getPlayerUUID(), config.getItem("gui.page-prev"), pageplaceholders);
+ pageNextIs = MenuUtils.applyPlaceholders(plugin, owner.getPlayerUUID(), config.getItem("gui.page-next"), pageplaceholders);
if (maxElement > pageSize) {
inventory.setItem(49, pageIs);
@@ -129,7 +131,7 @@ public class CategoryQMenu implements QMenu {
inventory.setItem(50, pageNextIs);
pageNextLocation = 50;
}
- } else if (Options.TRIM_GUI_SIZE.getBooleanValue() && page == 1) {
+ } else if (config.getBoolean("options.trim-gui-size") && page == 1) {
int inventorySize = highestOnPage + (9 - highestOnPage % 9) * Math.min(1, highestOnPage % 9);
inventorySize = inventorySize <= 0 ? 9 : inventorySize;
if (inventorySize == 54) {
@@ -159,7 +161,8 @@ public class CategoryQMenu implements QMenu {
if (element instanceof CategoryMenuElement) {
CategoryMenuElement categoryMenuElement = (CategoryMenuElement) element;
QuestQMenu questQMenu = categoryMenuElement.getQuestMenu();
- if (owner.openCategory(plugin.getQuestManager().getCategoryById(questQMenu.getCategoryName()), questQMenu) != 0) {
+ if (plugin.getMenuController().openQuestCategory(owner,
+ plugin.getQuestManager().getCategoryById(questQMenu.getCategoryName()), questQMenu) != 0) {
event.getWhoClicked().sendMessage(Messages.QUEST_CATEGORY_PERMISSION.getMessage());
}
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/DailyQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/DailyQMenu.java
new file mode 100644
index 00000000..622137a4
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/DailyQMenu.java
@@ -0,0 +1,97 @@
+//package com.leonardobishop.quests.bukkit.menu;
+//
+//import com.leonardobishop.quests.Quests;
+//import com.leonardobishop.quests.common.enums.QuestStartResult;
+//import com.leonardobishop.quests.common.player.QPlayer;
+//import com.leonardobishop.quests.common.quest.Quest;
+//import com.leonardobishop.quests.listener.MenuController;
+//import com.leonardobishop.quests.menu.element.MenuElement;
+//import com.leonardobishop.quests.menu.element.QuestMenuElement;
+//import com.leonardobishop.quests.quest.controller.DailyQuestController;
+//import com.leonardobishop.quests.util.Items;
+//import com.leonardobishop.quests.util.Options;
+//import org.bukkit.Bukkit;
+//import org.bukkit.event.inventory.ClickType;
+//import org.bukkit.event.inventory.InventoryClickEvent;
+//import org.bukkit.inventory.Inventory;
+//import org.bukkit.inventory.ItemStack;
+//import org.bukkit.inventory.meta.ItemMeta;
+//
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+//
+///**
+// * Represents a cancellation confirmation menu for a specific quest.
+// */
+//public class DailyQMenu implements QMenu {
+//
+// private final Map<Integer, MenuElement> menuElements = new HashMap<>();
+// private final Quests plugin;
+// private final QPlayer owner;
+//
+// public DailyQMenu(Quests plugin, QPlayer owner) {
+// this.plugin = plugin;
+// this.owner = owner;
+// }
+//
+// @Override
+// public QPlayer getOwner() {
+// return owner;
+// }
+//
+// public void populate() {
+// if (!(owner.getQuestController() instanceof DailyQuestController)) {
+// return;
+// }
+// DailyQuestController dailyQuestController = (DailyQuestController) owner.getQuestController();
+// List<String> quests = dailyQuestController.getQuests();
+// for (int i = 0; i < quests.size(); i++) {
+// menuElements.put(11 + i, new QuestMenuElement(plugin, owner, quests.get(i)));
+// }
+// }
+//
+// public Inventory toInventory(int page) {
+// String title = Options.color(Options.GUITITLE_DAILY_QUESTS.getStringValue());
+//
+// ItemStack background = Items.QUEST_CANCEL_BACKGROUND.getItem();
+// ItemMeta backgroundMeta = background.getItemMeta();
+// backgroundMeta.setDisplayName(" ");
+// background.setItemMeta(backgroundMeta);
+//
+// Inventory inventory = Bukkit.createInventory(null, 27, title);
+//
+// for (int i = 0; i < inventory.getSize(); i++) {
+// inventory.setItem(i, background);
+// }
+//
+// for (int pointer = 0; pointer < 27; pointer++) {
+// if (menuElements.containsKey(pointer)) {
+// inventory.setItem(pointer, menuElements.get(pointer).asItemStack());
+// }
+// }
+//
+// return inventory;
+// }
+//
+// @Override
+// public void handleClick(InventoryClickEvent event, MenuController controller) {
+// if (menuElements.containsKey(event.getSlot())) {
+// MenuElement menuElement = menuElements.get(event.getSlot());
+// if (menuElement instanceof QuestMenuElement) {
+// QuestMenuElement questMenuElement = (QuestMenuElement) menuElement;
+// Quest quest = plugin.getQuestManager().getQuestById(questMenuElement.getQuestId());
+// if (event.getClick() == ClickType.LEFT) {
+// if (Options.QUEST_AUTOSTART.getBooleanValue()) return;
+// if (owner.startQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
+// event.getWhoClicked().closeInventory(); //TODO Option to keep the menu open
+// }
+// } else if (event.getClick() == ClickType.MIDDLE && Options.ALLOW_QUEST_TRACK.getBooleanValue()) {
+// MenuUtil.handleMiddleClick(this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
+// }
+// }
+// }
+// }
+//
+//
+//}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java
new file mode 100644
index 00000000..aeb543d6
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/MenuController.java
@@ -0,0 +1,176 @@
+package com.leonardobishop.quests.bukkit.menu;
+
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.quest.Category;
+import com.leonardobishop.quests.common.quest.Quest;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.HumanEntity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.event.inventory.InventoryCloseEvent;
+import org.bukkit.event.inventory.InventoryType;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+public class MenuController implements Listener {
+
+ private final HashMap<UUID, QMenu> tracker = new HashMap<>();
+ private final BukkitQuestsPlugin plugin;
+
+ public MenuController(BukkitQuestsPlugin plugin) {
+ this.plugin = plugin;
+ }
+
+ public void openMenu(HumanEntity player, QMenu qMenu, int page) {
+ player.openInventory(qMenu.toInventory(page));
+ tracker.put(player.getUniqueId(), qMenu);
+ }
+
+ @EventHandler
+ private void onClose(InventoryCloseEvent event) {
+ tracker.remove(event.getPlayer().getUniqueId());
+ }
+
+ @EventHandler
+ private void onClick(InventoryClickEvent event) {
+ // check if the player has a quest menu open
+ if (tracker.containsKey(event.getWhoClicked().getUniqueId())) {
+ event.setCancelled(true);
+ if (event.getClickedInventory() == null)
+ return; //The player clicked outside the inventory
+ if (event.getClickedInventory().getType() == InventoryType.PLAYER)
+ return; //The clicked inventory is a player inventory type
+
+ QMenu qMenu = tracker.get(event.getWhoClicked().getUniqueId());
+ qMenu.handleClick(event, this);
+ }
+ }
+
+ /**
+ * Opens a quest listing menu for the player.
+ *
+ * @return 0 if success, 1 if no permission, 2 is only data loaded, 3 if player not found
+ */
+ public int openQuestCategory(QPlayer qPlayer, Category category, CategoryQMenu superMenu, boolean backButton) {
+ Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID());
+ if (player == null) {
+ return 3;
+ }
+
+ if (category.isPermissionRequired() && !player.hasPermission("quests.category." + category.getId())) {
+ return 1;
+ }
+
+ // Using `this` instead of searching again for this QPlayer
+ QuestQMenu questQMenu = new QuestQMenu(plugin, qPlayer, category.getId(), superMenu);
+ List<Quest> quests = new ArrayList<>();
+ for (String questid : category.getRegisteredQuestIds()) {
+ Quest quest = plugin.getQuestManager().getQuestById(questid);
+ if (quest != null) {
+ quests.add(quest);
+ }
+ }
+ questQMenu.populate(quests);
+ questQMenu.setBackButtonEnabled(backButton);
+
+ openMenu(player, questQMenu, 1);
+ return 0;
+ }
+
+ /**
+ * Opens a specific quest listing menu for the player.
+ *
+ * @return 0 if success, 1 if no permission, 2 is only data loaded, 3 if player not found
+ */
+ public int openQuestCategory(QPlayer qPlayer, Category category, QuestQMenu questQMenu) {
+ Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID());
+ if (player == null) {
+ return 3;
+ }
+
+ if (category.isPermissionRequired() && !player.hasPermission("quests.category." + category.getId())) {
+ return 1;
+ }
+
+ openMenu(player, questQMenu, 1);
+ return 0;
+ }
+
+ /**
+ * Open the main menu for the player
+ *
+ * @param qPlayer player
+ */
+ public void openMainMenu(QPlayer qPlayer) {
+ Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID());
+ if (player == null) {
+ return;
+ }
+
+ if (plugin.getQuestController().getName().equals("normal")) {
+ if (plugin.getQuestsConfig().getBoolean("options.categories-enabled")) {
+ CategoryQMenu categoryQMenu = new CategoryQMenu(plugin, qPlayer);
+ List<QuestQMenu> questMenus = new ArrayList<>();
+ for (Category category : plugin.getQuestManager().getCategories()) {
+ QuestQMenu questQMenu = new QuestQMenu(plugin, qPlayer, category.getId(), categoryQMenu);
+ List<Quest> quests = new ArrayList<>();
+ for (String questid : category.getRegisteredQuestIds()) {
+ Quest quest = plugin.getQuestManager().getQuestById(questid);
+ if (quest != null) {
+ quests.add(quest);
+ }
+ }
+ questQMenu.populate(quests);
+ questMenus.add(questQMenu);
+ }
+ categoryQMenu.populate(questMenus);
+
+ plugin.getMenuController().openMenu(player, categoryQMenu, 1);
+ } else {
+ QuestQMenu questQMenu = new QuestQMenu(plugin, qPlayer, "", null);
+ List<Quest> quests = new ArrayList<>();
+ for (Map.Entry<String, Quest> entry : plugin.getQuestManager().getQuests().entrySet()) {
+ quests.add(entry.getValue());
+ }
+ questQMenu.populate(quests);
+ questQMenu.setBackButtonEnabled(false);
+
+ plugin.getMenuController().openMenu(player, questQMenu, 1);
+ }
+ }
+// } else {
+// DailyQMenu dailyQMenu = new DailyQMenu(plugin, this);
+// dailyQMenu.populate();
+// plugin.getMenuController().openMenu(player, dailyQMenu, 1);
+// }
+ }
+
+ /**
+ * Open the started menu for the player
+ *
+ * @param qPlayer player
+ */
+ public void openStartedQuests(QPlayer qPlayer) {
+ Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID());
+ if (player == null) {
+ return;
+ }
+
+ StartedQMenu startedQMenu = new StartedQMenu(plugin, qPlayer);
+ List<QuestSortWrapper> quests = new ArrayList<>();
+ for (Map.Entry<String, Quest> entry : plugin.getQuestManager().getQuests().entrySet()) {
+ quests.add(new QuestSortWrapper(plugin, entry.getValue()));
+ }
+ startedQMenu.populate(quests);
+
+ plugin.getMenuController().openMenu(player, startedQMenu, 1);
+ }
+
+}
diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QMenu.java
index 6b793c77..0e3c9f78 100644
--- a/src/main/java/com/leonardobishop/quests/menu/QMenu.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QMenu.java
@@ -1,7 +1,6 @@
-package com.leonardobishop.quests.menu;
+package com.leonardobishop.quests.bukkit.menu;
-import com.leonardobishop.quests.listener.MenuController;
-import com.leonardobishop.quests.player.QPlayer;
+import com.leonardobishop.quests.common.player.QPlayer;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
diff --git a/src/main/java/com/leonardobishop/quests/menu/QuestQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java
index af655886..be2125e8 100644
--- a/src/main/java/com/leonardobishop/quests/menu/QuestQMenu.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java
@@ -1,17 +1,17 @@
-package com.leonardobishop.quests.menu;
+package com.leonardobishop.quests.bukkit.menu;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.listener.MenuController;
-import com.leonardobishop.quests.menu.element.CustomMenuElement;
-import com.leonardobishop.quests.menu.element.MenuElement;
-import com.leonardobishop.quests.menu.element.QuestMenuElement;
-import com.leonardobishop.quests.menu.element.SpacerMenuElement;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.util.Items;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig;
+import com.leonardobishop.quests.bukkit.menu.element.CustomMenuElement;
+import com.leonardobishop.quests.bukkit.menu.element.MenuElement;
+import com.leonardobishop.quests.bukkit.menu.element.QuestMenuElement;
+import com.leonardobishop.quests.bukkit.menu.element.SpacerMenuElement;
+import com.leonardobishop.quests.bukkit.util.Chat;
+import com.leonardobishop.quests.bukkit.util.MenuUtils;
+import com.leonardobishop.quests.common.enums.QuestStartResult;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.quest.Quest;
import org.apache.commons.lang.math.NumberUtils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -33,7 +33,8 @@ import java.util.Map;
*/
public class QuestQMenu implements QMenu {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
+ private final BukkitQuestsConfig config;
private final HashMap<Integer, MenuElement> menuElements = new HashMap<>();
private final CategoryQMenu superMenu;
private final String categoryName;
@@ -47,8 +48,9 @@ public class QuestQMenu implements QMenu {
private int currentPage = -1;
private boolean backButtonEnabled = true;
- public QuestQMenu(Quests plugin, QPlayer owner, String categoryName, CategoryQMenu superMenu) {
+ public QuestQMenu(BukkitQuestsPlugin plugin, QPlayer owner, String categoryName, CategoryQMenu superMenu) {
this.plugin = plugin;
+ this.config = (BukkitQuestsConfig) plugin.getQuestsConfig();
this.owner = owner;
this.categoryName = categoryName;
this.superMenu = superMenu;
@@ -56,7 +58,7 @@ public class QuestQMenu implements QMenu {
public void populate(List<Quest> quests) {
String path;
- if (Options.CATEGORIES_ENABLED.getBooleanValue()) {
+ if (config.getBoolean("options.categories-enabled")) {
path = "custom-elements.c:" + categoryName;
} else {
path = "custom-elements.quests";
@@ -84,14 +86,14 @@ public class QuestQMenu implements QMenu {
int slot = 0;
for (Quest quest : quests) {
while (menuElements.containsKey(slot)) slot++;
- if (Options.GUI_HIDE_LOCKED.getBooleanValue()) {
+ if (config.getBoolean("options.gui-hide-locked")) {
QuestProgress questProgress = owner.getQuestProgressFile().getQuestProgress(quest);
long cooldown = owner.getQuestProgressFile().getCooldownFor(quest);
if (!owner.getQuestProgressFile().hasMetRequirements(quest) || (!quest.isRepeatable() && questProgress.isCompletedBefore()) || cooldown > 0) {
continue;
}
}
- if (Options.GUI_HIDE_QUESTS_NOPERMISSION.getBooleanValue() && quest.isPermissionRequired()) {
+ if (config.getBoolean("options.gui-hide-quests-nopermission") && quest.isPermissionRequired()) {
if (!Bukkit.getPlayer(owner.getPlayerUUID()).hasPermission("quests.quest." + quest.getId())) {
continue;
}
@@ -134,12 +136,12 @@ public class QuestQMenu implements QMenu {
currentPage = page;
int pageMin = pageSize * (page - 1);
int pageMax = pageSize * page;
- String title = Options.color(Options.GUITITLE_QUESTS.getStringValue());
+ String title = Chat.color(config.getString("options.guinames.quests-menu"));
ItemStack pageIs;
ItemStack pagePrevIs;
ItemStack pageNextIs;
- ItemStack back = Items.BACK_BUTTON.getItem();
+ ItemStack back = config.getItem("gui.back-button");
Inventory inventory = Bukkit.createInventory(null, 54, title);
@@ -158,12 +160,12 @@ public class QuestQMenu implements QMenu {
pageplaceholders.put("{prevpage}", String.valueOf(page - 1));
pageplaceholders.put("{nextpage}", String.valueOf(page + 1));
pageplaceholders.put("{page}", String.valueOf(page));
- pageIs = replaceItemStack(Items.PAGE_DESCRIPTION.getItem(), pageplaceholders);
+ pageIs = replaceItemStack(config.getItem("gui.page-description"), pageplaceholders);
pageIs.setAmount(Math.min(page, 64));
- pagePrevIs = replaceItemStack(Items.PAGE_PREV.getItem(), pageplaceholders);
- pageNextIs = replaceItemStack(Items.PAGE_NEXT.getItem(), pageplaceholders);
+ pagePrevIs = replaceItemStack(config.getItem("gui.page-prev"), pageplaceholders);
+ pageNextIs = replaceItemStack(config.getItem("gui.page-next"), pageplaceholders);
- if (Options.CATEGORIES_ENABLED.getBooleanValue() && backButtonEnabled) {
+ if (config.getBoolean("options.categories-enabled") && backButtonEnabled) {
inventory.setItem(45, back);
backButtonLocation = 45;
}
@@ -177,12 +179,12 @@ public class QuestQMenu implements QMenu {
inventory.setItem(50, pageNextIs);
pageNextLocation = 50;
}
- } else if (Options.TRIM_GUI_SIZE.getBooleanValue() && page == 1) {
+ } else if (config.getBoolean("options.trim-gui-size") && page == 1) {
int inventorySize = highestOnPage + (9 - highestOnPage % 9) * Math.min(1, highestOnPage % 9);
inventorySize = inventorySize <= 0 ? 9 : inventorySize;
if (inventorySize == 54) {
return inventory;
- } else if (Options.CATEGORIES_ENABLED.getBooleanValue() && backButtonEnabled) {
+ } else if (config.getBoolean("options.categories-enabled") && backButtonEnabled) {
inventorySize += 9;
}
@@ -190,7 +192,7 @@ public class QuestQMenu implements QMenu {
for (int slot = 0; slot < trimmedInventory.getSize(); slot++) {
if (slot >= (trimmedInventory.getSize() - 9) && backButtonEnabled){
- if (Options.CATEGORIES_ENABLED.getBooleanValue()) {
+ if (config.getBoolean("options.categories-enabled")) {
trimmedInventory.setItem(slot, back);
backButtonLocation = slot;
}
@@ -213,7 +215,7 @@ public class QuestQMenu implements QMenu {
} else if (pageNextLocation == event.getSlot()) {
controller.openMenu(event.getWhoClicked(), this, currentPage + 1);
- } else if (Options.CATEGORIES_ENABLED.getBooleanValue() && backButtonLocation == event.getSlot()) {
+ } else if (config.getBoolean("options.categories-enabled") && backButtonLocation == event.getSlot()) {
controller.openMenu(event.getWhoClicked(), superMenu, 1);
} else if (event.getSlot() < pageSize && menuElements.containsKey(event.getSlot() + (((currentPage) - 1) * pageSize))) {
@@ -222,15 +224,15 @@ public class QuestQMenu implements QMenu {
QuestMenuElement questMenuElement = (QuestMenuElement) menuElement;
Quest quest = plugin.getQuestManager().getQuestById(questMenuElement.getQuestId());
if (event.getClick() == ClickType.LEFT) {
- if (Options.QUEST_AUTOSTART.getBooleanValue()) return;
+ if (config.getBoolean("options.quest-autostart")) return;
if (owner.startQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
event.getWhoClicked().closeInventory(); //TODO Option to keep the menu open
}
- } else if (event.getClick() == ClickType.MIDDLE && Options.ALLOW_QUEST_TRACK.getBooleanValue()) {
- MenuUtil.handleMiddleClick(this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
- } else if (event.getClick() == ClickType.RIGHT && Options.ALLOW_QUEST_CANCEL.getBooleanValue()
+ } else if (event.getClick() == ClickType.MIDDLE && config.getBoolean("options.quest-autostart")) {
+ MenuUtils.handleMiddleClick(plugin, this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
+ } else if (event.getClick() == ClickType.RIGHT && config.getBoolean("options.allow-quest-cancel")
&& owner.hasStartedQuest(quest)) {
- MenuUtil.handleRightClick(this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
+ MenuUtils.handleRightClick(plugin, this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
}
}
}
@@ -266,7 +268,7 @@ public class QuestQMenu implements QMenu {
for (String s : lore) {
for (Map.Entry<String, String> entry : placeholders.entrySet()) {
s = s.replace(entry.getKey(), entry.getValue());
- if (plugin.getPlaceholderAPIHook() != null && Options.GUI_USE_PLACEHOLDERAPI.getBooleanValue()) {
+ if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) {
s = plugin.getPlaceholderAPIHook().replacePlaceholders(player, s);
}
}
@@ -275,7 +277,7 @@ public class QuestQMenu implements QMenu {
}
for (Map.Entry<String, String> entry : placeholders.entrySet()) {
ism.setDisplayName(ism.getDisplayName().replace(entry.getKey(), entry.getValue()));
- if (plugin.getPlaceholderAPIHook() != null && Options.GUI_USE_PLACEHOLDERAPI.getBooleanValue()) {
+ if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) {
ism.setDisplayName(plugin.getPlaceholderAPIHook().replacePlaceholders(player, ism.getDisplayName()));
}
}
diff --git a/src/main/java/com/leonardobishop/quests/menu/QuestSortWrapper.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestSortWrapper.java
index 2d15ac87..31d4f214 100644
--- a/src/main/java/com/leonardobishop/quests/menu/QuestSortWrapper.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestSortWrapper.java
@@ -1,8 +1,8 @@
-package com.leonardobishop.quests.menu;
+package com.leonardobishop.quests.bukkit.menu;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.quest.Category;
-import com.leonardobishop.quests.quest.Quest;
+import com.leonardobishop.quests.common.plugin.Quests;
+import com.leonardobishop.quests.common.quest.Category;
+import com.leonardobishop.quests.common.quest.Quest;
public class QuestSortWrapper implements Comparable<QuestSortWrapper> {
diff --git a/src/main/java/com/leonardobishop/quests/menu/StartedQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java
index 317d2839..01f99c79 100644
--- a/src/main/java/com/leonardobishop/quests/menu/StartedQMenu.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java
@@ -1,12 +1,12 @@
-package com.leonardobishop.quests.menu;
+package com.leonardobishop.quests.bukkit.menu;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.listener.MenuController;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.util.Items;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig;
+import com.leonardobishop.quests.bukkit.util.Chat;
+import com.leonardobishop.quests.bukkit.util.MenuUtils;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.quest.Quest;
import org.bukkit.Bukkit;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent;
@@ -23,7 +23,8 @@ import java.util.Map;
*/
public class StartedQMenu implements QMenu {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
+ private final BukkitQuestsConfig config;
private final HashMap<Integer, String> slotsToQuestIds = new HashMap<>();
private final int pageSize = 45;
private final QPlayer owner;
@@ -32,8 +33,9 @@ public class StartedQMenu implements QMenu {
private int pageNextLocation = -1;
private int currentPage = -1;
- public StartedQMenu(Quests plugin, QPlayer owner) {
+ public StartedQMenu(BukkitQuestsPlugin plugin, QPlayer owner) {
this.plugin = plugin;
+ this.config = (BukkitQuestsConfig) plugin.getQuestsConfig();
this.owner = owner;
}
@@ -77,12 +79,12 @@ public class StartedQMenu implements QMenu {
currentPage = page;
int pageMin = pageSize * (page - 1);
int pageMax = pageSize * page;
- String title = Options.color(Options.GUITITLE_QUESTS_STARTED.getStringValue());
+ String title = Chat.color(config.getString("options.guinames.quests-started-menu"));
ItemStack pageIs;
ItemStack pagePrevIs;
ItemStack pageNextIs;
- ItemStack none = Items.NO_STARTED_QUESTS.getItem();
+ ItemStack none = config.getItem("gui.no-started-quests");
Inventory inventory = Bukkit.createInventory(null, 54, title);
@@ -93,8 +95,8 @@ public class StartedQMenu implements QMenu {
Quest quest = plugin.getQuestManager().getQuestById(slotsToQuestIds.get(pointer));
QuestProgress questProgress = owner.getQuestProgressFile().getQuestProgress(quest);
- inventory.setItem(invSlot, MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), plugin.getQuestManager().getQuestById(
- quest.getId()).getDisplayItem().toItemStack(quest, owner, questProgress)));
+ inventory.setItem(invSlot, MenuUtils.applyPlaceholders(plugin, owner.getPlayerUUID(),
+ plugin.getQItemStackRegistry().getQuestItemStack(quest).toItemStack(quest, owner, questProgress)));
}
invSlot++;
}
@@ -109,10 +111,10 @@ public class StartedQMenu implements QMenu {
pageplaceholders.put("{prevpage}", String.valueOf(page - 1));
pageplaceholders.put("{nextpage}", String.valueOf(page + 1));
pageplaceholders.put("{page}", String.valueOf(page));
- pageIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_DESCRIPTION.getItem(), pageplaceholders);
+ pageIs = MenuUtils.applyPlaceholders(plugin, owner.getPlayerUUID(), config.getItem("gui.page-description"), pageplaceholders);
pageIs.setAmount(Math.min(page, 64));
- pagePrevIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_PREV.getItem(), pageplaceholders);
- pageNextIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_NEXT.getItem(), pageplaceholders);
+ pagePrevIs = MenuUtils.applyPlaceholders(plugin, owner.getPlayerUUID(), config.getItem("gui.page-prev"), pageplaceholders);
+ pageNextIs = MenuUtils.applyPlaceholders(plugin, owner.getPlayerUUID(), config.getItem("gui.page-next"), pageplaceholders);
if (slotsToQuestIds.size() > pageSize) {
inventory.setItem(49, pageIs);
@@ -124,7 +126,7 @@ public class StartedQMenu implements QMenu {
inventory.setItem(50, pageNextIs);
pageNextLocation = 50;
}
- } else if (Options.TRIM_GUI_SIZE.getBooleanValue() && page == 1) {
+ } else if (config.getBoolean("options.trim-gui-size") && page == 1) {
int slotsUsed = 0;
for (int pointer = 0; pointer < pageMax; pointer++) {
if (inventory.getItem(pointer) != null) {
@@ -162,11 +164,11 @@ public class StartedQMenu implements QMenu {
// repeat from above
String questid = slotsToQuestIds.get(event.getSlot() + (((currentPage) - 1) * pageSize));
Quest quest = plugin.getQuestManager().getQuestById(questid);
- if (event.getClick() == ClickType.MIDDLE && Options.ALLOW_QUEST_TRACK.getBooleanValue()) {
- MenuUtil.handleMiddleClick(this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
- } else if (event.getClick() == ClickType.RIGHT && Options.ALLOW_QUEST_CANCEL.getBooleanValue()
+ if (event.getClick() == ClickType.MIDDLE && config.getBoolean("options.allow-quest-track")) {
+ MenuUtils.handleMiddleClick(plugin, this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
+ } else if (event.getClick() == ClickType.RIGHT && config.getBoolean("options.allow-quest-cancel")
&& owner.hasStartedQuest(quest)) {
- MenuUtil.handleRightClick(this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
+ MenuUtils.handleRightClick(plugin, this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
}
}
}
diff --git a/src/main/java/com/leonardobishop/quests/menu/element/CategoryMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CategoryMenuElement.java
index 13d8a734..9aa2efb5 100644
--- a/src/main/java/com/leonardobishop/quests/menu/element/CategoryMenuElement.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CategoryMenuElement.java
@@ -1,9 +1,8 @@
-package com.leonardobishop.quests.menu.element;
+package com.leonardobishop.quests.bukkit.menu.element;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.menu.QuestQMenu;
-import com.leonardobishop.quests.quest.Category;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.menu.QuestQMenu;
+import com.leonardobishop.quests.common.quest.Category;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@@ -15,11 +14,11 @@ import java.util.UUID;
public class CategoryMenuElement extends MenuElement {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
private final UUID owner;
private final QuestQMenu questMenu;
- public CategoryMenuElement(Quests plugin, UUID owner, QuestQMenu questMenu) {
+ public CategoryMenuElement(BukkitQuestsPlugin plugin, UUID owner, QuestQMenu questMenu) {
this.plugin = plugin;
this.owner = owner;
this.questMenu = questMenu;
@@ -37,13 +36,13 @@ public class CategoryMenuElement extends MenuElement {
public ItemStack asItemStack() {
Category category = plugin.getQuestManager().getCategoryById(questMenu.getCategoryName());
if (category != null) {
- return replaceItemStack(category.getDisplayItem());
+ return replaceItemStack(plugin.getQItemStackRegistry().getCategoryItemStack(category));
}
return null;
}
private ItemStack replaceItemStack(ItemStack is) {
- if (plugin.getPlaceholderAPIHook() != null && Options.GUI_USE_PLACEHOLDERAPI.getBooleanValue()) {
+ if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) {
ItemStack newItemStack = is.clone();
List<String> lore = newItemStack.getItemMeta().getLore();
List<String> newLore = new ArrayList<>();
diff --git a/src/main/java/com/leonardobishop/quests/menu/element/CustomMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CustomMenuElement.java
index d1986f18..0eee9e92 100644
--- a/src/main/java/com/leonardobishop/quests/menu/element/CustomMenuElement.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/CustomMenuElement.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.menu.element;
+package com.leonardobishop.quests.bukkit.menu.element;
import org.bukkit.inventory.ItemStack;
diff --git a/src/main/java/com/leonardobishop/quests/menu/element/MenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/MenuElement.java
index a7ee580a..aa7ed46d 100644
--- a/src/main/java/com/leonardobishop/quests/menu/element/MenuElement.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/MenuElement.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.menu.element;
+package com.leonardobishop.quests.bukkit.menu.element;
import org.bukkit.inventory.ItemStack;
diff --git a/src/main/java/com/leonardobishop/quests/menu/element/QuestMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java
index 6d13c0c5..215a93a1 100644
--- a/src/main/java/com/leonardobishop/quests/menu/element/QuestMenuElement.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java
@@ -1,12 +1,14 @@
-package com.leonardobishop.quests.menu.element;
+package com.leonardobishop.quests.bukkit.menu.element;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.util.Items;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig;
+import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStack;
+import com.leonardobishop.quests.bukkit.util.Chat;
+import com.leonardobishop.quests.common.enums.QuestStartResult;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.util.Format;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@@ -21,12 +23,14 @@ import java.util.concurrent.TimeUnit;
public class QuestMenuElement extends MenuElement {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
+ private final BukkitQuestsConfig config;
private final QPlayer owner;
private final String questId;
- public QuestMenuElement(Quests plugin, QPlayer owner, String questId) {
+ public QuestMenuElement(BukkitQuestsPlugin plugin, QPlayer owner, String questId) {
this.plugin = plugin;
+ this.config = (BukkitQuestsConfig) plugin.getQuestsConfig();
this.owner = owner;
this.questId = questId;
}
@@ -45,38 +49,40 @@ public class QuestMenuElement extends MenuElement {
QuestProgress questProgress = owner.getQuestProgressFile().getQuestProgress(quest);
QuestStartResult status = owner.canStartQuest(quest);
long cooldown = owner.getQuestProgressFile().getCooldownFor(quest);
+ QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest);
+
if (status == QuestStartResult.QUEST_LOCKED) {
List<String> quests = new ArrayList<>();
for (String requirement : quest.getRequirements()) {
- Quest requirementQuest = Quests.get().getQuestManager().getQuestById(requirement);
+ Quest requirementQuest = plugin.getQuestManager().getQuestById(requirement);
if (!owner.getQuestProgressFile().hasQuestProgress(requirementQuest) ||
!owner.getQuestProgressFile().getQuestProgress(requirementQuest).isCompletedBefore()) {
- quests.add(requirementQuest.getDisplayNameStripped());
+ quests.add(Chat.strip(plugin.getQItemStackRegistry().getQuestItemStack(requirementQuest).getName()));
}
}
Map<String, String> placeholders = new HashMap<>();
- placeholders.put("{quest}", quest.getDisplayNameStripped());
+ placeholders.put("{quest}", Chat.strip(qItemStack.getName()));
placeholders.put("{requirements}", String.join(", ", quests));
- ItemStack is = replaceItemStack(Items.QUEST_LOCKED.getItem(), placeholders);
+ ItemStack is = replaceItemStack(config.getItem("gui.quest-locked-display"), placeholders);
return is;
} else if (status == QuestStartResult.QUEST_ALREADY_COMPLETED) {
Map<String, String> placeholders = new HashMap<>();
- placeholders.put("{quest}", quest.getDisplayNameStripped());
- ItemStack is = replaceItemStack(Items.QUEST_COMPLETED.getItem(), placeholders);
+ placeholders.put("{quest}", Chat.strip(qItemStack.getName()));
+ ItemStack is = replaceItemStack(config.getItem("gui.quest-completed-display"), placeholders);
return is;
} else if (status == QuestStartResult.QUEST_NO_PERMISSION) {
Map<String, String> placeholders = new HashMap<>();
- placeholders.put("{quest}", quest.getDisplayNameStripped());
- ItemStack is = replaceItemStack(Items.QUEST_PERMISSION.getItem(), placeholders);
+ placeholders.put("{quest}", Chat.strip(qItemStack.getName()));
+ ItemStack is = replaceItemStack(config.getItem("gui.quest-permission-display"), placeholders);
return is;
} else if (cooldown > 0) {
Map<String, String> placeholders = new HashMap<>();
- placeholders.put("{time}", plugin.convertToFormat(TimeUnit.SECONDS.convert(cooldown, TimeUnit.MILLISECONDS)));
- placeholders.put("{quest}", quest.getDisplayNameStripped());
- ItemStack is = replaceItemStack(Items.QUEST_COOLDOWN.getItem(), placeholders);
+ placeholders.put("{time}", Format.formatTime(TimeUnit.SECONDS.convert(cooldown, TimeUnit.MILLISECONDS)));
+ placeholders.put("{quest}", Chat.strip(qItemStack.getName()));
+ ItemStack is = replaceItemStack(config.getItem("gui.quest-cooldown-display"), placeholders);
return is;
} else {
- return replaceItemStack(quest.getDisplayItem().toItemStack(quest, owner, questProgress));
+ return replaceItemStack(qItemStack.toItemStack(quest, owner, questProgress));
}
}
@@ -94,7 +100,7 @@ public class QuestMenuElement extends MenuElement {
for (String s : lore) {
for (Map.Entry<String, String> entry : placeholders.entrySet()) {
s = s.replace(entry.getKey(), entry.getValue());
- if (plugin.getPlaceholderAPIHook() != null && Options.GUI_USE_PLACEHOLDERAPI.getBooleanValue()) {
+ if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) {
s = plugin.getPlaceholderAPIHook().replacePlaceholders(player, s);
}
}
@@ -103,7 +109,7 @@ public class QuestMenuElement extends MenuElement {
}
for (Map.Entry<String, String> entry : placeholders.entrySet()) {
ism.setDisplayName(ism.getDisplayName().replace(entry.getKey(), entry.getValue()));
- if (plugin.getPlaceholderAPIHook() != null && Options.GUI_USE_PLACEHOLDERAPI.getBooleanValue()) {
+ if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) {
ism.setDisplayName(plugin.getPlaceholderAPIHook().replacePlaceholders(player, ism.getDisplayName()));
}
}
diff --git a/src/main/java/com/leonardobishop/quests/menu/element/SpacerMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/SpacerMenuElement.java
index e2859718..a4c5d69a 100644
--- a/src/main/java/com/leonardobishop/quests/menu/element/SpacerMenuElement.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/SpacerMenuElement.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.menu.element;
+package com.leonardobishop.quests.bukkit.menu.element;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
diff --git a/src/main/java/com/leonardobishop/quests/menu/QItemStack.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java
index 81568605..52059b29 100644
--- a/src/main/java/com/leonardobishop/quests/menu/QItemStack.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStack.java
@@ -1,10 +1,10 @@
-package com.leonardobishop.quests.menu;
+package com.leonardobishop.quests.bukkit.menu.itemstack;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.util.Chat;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.quest.Quest;
import org.bukkit.Bukkit;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
@@ -19,7 +19,7 @@ import java.util.regex.Pattern;
public class QItemStack {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
private String name;
private List<String> loreNormal;
@@ -30,17 +30,17 @@ public class QItemStack {
private final List<String> globalLoreAppendTracked;
private ItemStack startingItemStack;
- public QItemStack(Quests plugin, String name, List<String> loreNormal, List<String> loreStarted, ItemStack startingItemStack) {
+ public QItemStack(BukkitQuestsPlugin plugin, String name, List<String> loreNormal, List<String> loreStarted, ItemStack startingItemStack) {
this.plugin = plugin;
this.name = name;
this.loreNormal = loreNormal;
this.loreStarted = loreStarted;
this.startingItemStack = startingItemStack;
- this.globalLoreAppendNormal = Options.color(Options.GLOBAL_QUEST_DISPLAY_LORE_APPEND_NORMAL.getStringListValue());
- this.globalLoreAppendNotStarted = Options.color(Options.GLOBAL_QUEST_DISPLAY_LORE_APPEND_NOT_STARTED.getStringListValue());
- this.globalLoreAppendStarted = Options.color(Options.GLOBAL_QUEST_DISPLAY_LORE_APPEND_STARTED.getStringListValue());
- this.globalLoreAppendTracked = Options.color(Options.GLOBAL_QUEST_DISPLAY_LORE_APPEND_TRACKED.getStringListValue());
+ this.globalLoreAppendNormal = Chat.color(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-normal"));
+ this.globalLoreAppendNotStarted = Chat.color(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-not-started"));
+ this.globalLoreAppendStarted = Chat.color(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-started"));
+ this.globalLoreAppendTracked = Chat.color(plugin.getQuestsConfig().getStringList("global-quest-display.lore.append-tracked"));
}
public String getName() {
@@ -83,17 +83,15 @@ public class QItemStack {
List<String> formattedLore = new ArrayList<>();
List<String> tempLore = new ArrayList<>();
- if (Options.GLOBAL_QUEST_DISPLAY_CONFIGURATION_OVERRIDE.getBooleanValue() && !globalLoreAppendNormal.isEmpty()) {
- tempLore.addAll(globalLoreAppendNormal);
- } else {
+ if (!plugin.getQuestsConfig().getBoolean("options.global-task-configuration-override") || globalLoreAppendNormal.isEmpty()) {
tempLore.addAll(loreNormal);
- tempLore.addAll(globalLoreAppendNormal);
}
+ tempLore.addAll(globalLoreAppendNormal);
Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID());
if (qPlayer.hasStartedQuest(quest)) {
boolean tracked = quest.getId().equals(qPlayer.getPlayerPreferences().getTrackedQuestId());
- if (!Options.GLOBAL_QUEST_DISPLAY_CONFIGURATION_OVERRIDE.getBooleanValue() || globalLoreAppendStarted.isEmpty()) {
+ if (!plugin.getQuestsConfig().getBoolean("options.global-task-configuration-override")|| globalLoreAppendStarted.isEmpty()) {
tempLore.addAll(loreStarted);
}
if (tracked) {
@@ -111,13 +109,13 @@ public class QItemStack {
} else {
tempLore.addAll(globalLoreAppendNotStarted);
}
- if (plugin.getPlaceholderAPIHook() != null && Options.GUI_USE_PLACEHOLDERAPI.getBooleanValue()) {
+ if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) {
ism.setDisplayName(plugin.getPlaceholderAPIHook().replacePlaceholders(player, ism.getDisplayName()));
}
if (questProgress != null) {
for (String s : tempLore) {
s = processPlaceholders(s, questProgress);
- if (plugin.getPlaceholderAPIHook() != null && Options.GUI_USE_PLACEHOLDERAPI.getBooleanValue()) {
+ if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) {
s = plugin.getPlaceholderAPIHook().replacePlaceholders(player, s);
}
formattedLore.add(s);
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStackRegistry.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStackRegistry.java
new file mode 100644
index 00000000..703b8d21
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/itemstack/QItemStackRegistry.java
@@ -0,0 +1,36 @@
+package com.leonardobishop.quests.bukkit.menu.itemstack;
+
+import com.leonardobishop.quests.common.quest.Category;
+import com.leonardobishop.quests.common.quest.Quest;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class QItemStackRegistry {
+
+ private final Map<String, QItemStack> questRegistry = new HashMap<>();
+ private final Map<String, ItemStack> categoryRegistry = new HashMap<>();
+
+ public QItemStack getQuestItemStack(Quest quest) {
+ return questRegistry.get(quest.getId());
+ }
+
+ public ItemStack getCategoryItemStack(Category category) {
+ return categoryRegistry.get(category.getId());
+ }
+
+ public void clearRegistry() {
+ questRegistry.clear();
+ categoryRegistry.clear();
+ }
+
+ public void register(Quest quest, QItemStack qItemStack) {
+ questRegistry.put(quest.getId(), qItemStack);
+ }
+
+ public void register(Category quest, ItemStack itemStack) {
+ categoryRegistry.put(quest.getId(), itemStack);
+ }
+
+}
diff --git a/src/main/java/com/leonardobishop/quests/util/QuestCompleter.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcompleter/BukkitQuestCompleter.java
index b6b942fd..32365a17 100644
--- a/src/main/java/com/leonardobishop/quests/util/QuestCompleter.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcompleter/BukkitQuestCompleter.java
@@ -1,25 +1,28 @@
-package com.leonardobishop.quests.util;
+package com.leonardobishop.quests.bukkit.questcompleter;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.player.QPlayer;
-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.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
+
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.quest.QuestCompleter;
+import com.leonardobishop.quests.common.quest.Task;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.LinkedList;
import java.util.Queue;
-public class QuestCompleter implements Runnable {
+//TODO move complete effects here ?
+public class BukkitQuestCompleter implements QuestCompleter, Runnable {
private final Queue<QuestProgress> completionQueue = new LinkedList<>();
private final Queue<QuestProgressFile> fullCheckQueue = new LinkedList<>();
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
- public QuestCompleter(Quests plugin) {
+ public BukkitQuestCompleter(BukkitQuestsPlugin plugin) {
this.plugin = plugin;
}
@@ -38,6 +41,7 @@ public class QuestCompleter implements Runnable {
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) return;
+ plugin.getQuestsLogger().debug("Processing player (singular: " + questProgress.getQuestId() + ") " + qPlayer.getPlayerUUID());
Quest quest = plugin.getQuestManager().getQuestById(questProgress.getQuestId());
if (!qPlayer.hasStartedQuest(quest)) return;
@@ -56,6 +60,7 @@ public class QuestCompleter implements Runnable {
if (player != null && player.isOnline()) {
QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) return;
+ plugin.getQuestsLogger().debug("Processing player (full check) " + qPlayer.getPlayerUUID());
for (QuestProgress questProgress : questProgressFile.getAllQuestProgress()) {
Quest quest = plugin.getQuestManager().getQuestById(questProgress.getQuestId());
if (quest == null) continue;
@@ -89,10 +94,12 @@ public class QuestCompleter implements Runnable {
return complete;
}
+ @Override
public void queueSingular(QuestProgress questProgress) {
completionQueue.add(questProgress);
}
+ @Override
public void queueFullCheck(QuestProgressFile questProgressFile) {
fullCheckQueue.add(questProgressFile);
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/DailyQuestController.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/DailyQuestController.java
new file mode 100644
index 00000000..c6e103bc
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/DailyQuestController.java
@@ -0,0 +1,184 @@
+//package com.leonardobishop.quests.bukkit.questcontroller;
+//
+//import com.leonardobishop.quests.common.enums.QuestStartResult;
+//import com.leonardobishop.quests.common.player.QPlayer;
+//import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+//import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
+//import com.leonardobishop.quests.common.plugin.Quests;
+//import com.leonardobishop.quests.common.quest.Quest;
+//import com.leonardobishop.quests.common.questcontroller.QuestController;
+//import org.bukkit.Bukkit;
+//import org.bukkit.ChatColor;
+//import org.bukkit.entity.Player;
+//import org.bukkit.scheduler.BukkitRunnable;
+//import org.bukkit.scheduler.BukkitTask;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//import java.util.Random;
+//import java.util.stream.Collectors;
+//
+////TODO finish this
+//public class DailyQuestController implements QuestController {
+//
+// private int refreshTaskId = -1;
+// private long refreshTime;
+// private long startTime;
+// private Quests plugin;
+// private Random random;
+// private List<String> quests;
+//
+// public DailyQuestController(Quests plugin) {
+// this.plugin = plugin;
+// refreshDailyQuests();
+// scheduleNewTask();
+// }
+//
+// public void cancel() {
+// Bukkit.getScheduler().cancelTask(refreshTaskId);
+// }
+//
+// public List<String> getQuests() {
+// return quests;
+// }
+//
+// private void scheduleNewTask() {
+// long diff = refreshTime - System.currentTimeMillis();
+// BukkitTask refreshTask;
+// if (diff <= 10000) { //10 sec
+// refreshTask = new DailyQuestRefreshTask(true).runTaskTimer(plugin, 1L, 1L);
+// plugin.getQuestsLogger().debug("DailyQuestRefreshTask set repeating (diff=" + diff + ")");
+// } else {
+// long sleepTime = diff >> 6;
+// plugin.getQuestsLogger().debug("DailyQuestRefreshTask slept for " + sleepTime + " ticks (diff=" + diff + ")");
+// refreshTask = new DailyQuestRefreshTask(false).runTaskLater(plugin, sleepTime);
+// }
+// refreshTaskId = refreshTask.getTaskId();
+// }
+//
+// private void refreshDailyQuests() {
+//// refreshTime = ((System.currentTimeMillis() / (86400000)) + 1) * 86400000;
+// refreshTime = ((System.currentTimeMillis() / (300000)) + 1) * 300000;
+// startTime = (System.currentTimeMillis() / (300000)) * 300000;
+// random = new Random(refreshTime);
+// quests = new ArrayList<>();
+//
+// List<String> questIds = new ArrayList<>(plugin.getQuestManager().getQuests().keySet());
+// for (int i = 0; i < 5; i++) {
+// int randInt = random.nextInt(questIds.size());
+// quests.add(questIds.get(randInt));
+// questIds = questIds.stream().filter(s -> !quests.contains(s)).collect(Collectors.toList());
+// }
+// }
+//
+// @Override
+// public QuestStartResult startQuestForPlayer(QPlayer qPlayer, Quest quest) {
+// if (quests.contains(quest.getId())) {
+// return QuestStartResult.QUEST_ALREADY_STARTED;
+// } else {
+// return QuestStartResult.QUEST_LIMIT_REACHED;
+// }
+// }
+//
+// @Override
+// public QuestStartResult canPlayerStartQuest(QPlayer qPlayer, Quest quest) {
+// if (!quests.contains(quest.getId())) return QuestStartResult.OTHER;
+// long completionDate = qPlayer.getQuestProgressFile().getQuestProgress(quest).getCompletionDate();
+// if (Options.QUEST_AUTOSTART.getBooleanValue()) {
+// if (completionDate > startTime && completionDate <= refreshTime) {
+// return QuestStartResult.QUEST_ALREADY_COMPLETED;
+// }
+// } else {
+// if (qPlayer.getQuestProgressFile().hasQuestProgress(quest)) {
+// QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest);
+// if (questProgress.isStarted() && completionDate > startTime && completionDate <= refreshTime) {
+// return QuestStartResult.QUEST_ALREADY_STARTED;
+// }
+// }
+// }
+// return QuestStartResult.QUEST_SUCCESS;
+// }
+//
+// @Override
+// public boolean completeQuestForPlayer(QPlayer qPlayer, Quest quest) {
+// QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest);
+// questProgress.setStarted(false);
+// for (TaskProgress taskProgress : questProgress.getTaskProgress()) {
+// taskProgress.setCompleted(false);
+// taskProgress.setProgress(null);
+// }
+// questProgress.setCompleted(true);
+// questProgress.setCompletedBefore(true);
+// questProgress.setCompletionDate(System.currentTimeMillis());
+//
+// boolean trackedReset = quest.getId().equals(qPlayer.getPlayerPreferences().getTrackedQuestId());
+// if (trackedReset) {
+// qPlayer.trackQuest(null);
+// }
+//
+// Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID());
+// if (player != null) {
+// String questFinishMessage = Messages.QUEST_COMPLETE.getMessage().replace("{quest}", quest.getDisplayNameStripped());
+// // PlayerFinishQuestEvent -- start
+// PlayerFinishQuestEvent questFinishEvent = new PlayerFinishQuestEvent(player, qPlayer, questProgress, questFinishMessage);
+// Bukkit.getPluginManager().callEvent(questFinishEvent);
+// // PlayerFinishQuestEvent -- end
+// Bukkit.getServer().getScheduler().runTask(plugin, () -> {
+// for (String s : quest.getRewards()) {
+// Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), s.replace("{player}", player.getName())); //TODO PlaceholderAPI support
+// }
+// });
+// if (questFinishEvent.getQuestFinishMessage() != null)
+// player.sendMessage(questFinishEvent.getQuestFinishMessage());
+// if (Options.TITLES_ENABLED.getBooleanValue()) {
+// plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_COMPLETE_TITLE.getMessage().replace("{quest}", quest
+// .getDisplayNameStripped()), Messages.TITLE_QUEST_COMPLETE_SUBTITLE.getMessage().replace("{quest}", quest
+// .getDisplayNameStripped()));
+// }
+// for (String s : quest.getRewardString()) {
+// player.sendMessage(ChatColor.translateAlternateColorCodes('&', s));
+// }
+// }
+// if (Options.QUEST_AUTOTRACK.getBooleanValue() && trackedReset) {
+// for (String s : quests) {
+// Quest nextQuest = plugin.getQuestManager().getQuestById(s);
+// if (nextQuest != null && canPlayerStartQuest(qPlayer, nextQuest) == QuestStartResult.QUEST_SUCCESS) {
+// qPlayer.trackQuest(nextQuest);
+// break;
+// }
+// }
+// }
+// return true;
+// }
+//
+// @Override
+// public boolean hasPlayerStartedQuest(QPlayer qPlayer, Quest quest) {
+// return canPlayerStartQuest(qPlayer, quest) == QuestStartResult.QUEST_SUCCESS;
+// }
+//
+// @Override
+// public boolean cancelQuestForPlayer(QPlayer qPlayer, Quest quest) {
+// return false;
+// }
+//
+// public class DailyQuestRefreshTask extends BukkitRunnable {
+//
+// private final boolean repeating;
+//
+// public DailyQuestRefreshTask(boolean repeating) {
+// this.repeating = repeating;
+// }
+//
+// @Override
+// public void run() {
+// if (System.currentTimeMillis() >= refreshTime) {
+// this.cancel();
+// refreshDailyQuests();
+// } else {
+// if (repeating) return;
+// this.cancel();
+// }
+// scheduleNewTask();
+// }
+// }
+//}
diff --git a/src/main/java/com/leonardobishop/quests/quest/controller/NormalQuestController.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java
index 055bbf97..e385ba9f 100644
--- a/src/main/java/com/leonardobishop/quests/quest/controller/NormalQuestController.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java
@@ -1,18 +1,24 @@
-package com.leonardobishop.quests.quest.controller;
+package com.leonardobishop.quests.bukkit.questcontroller;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.api.events.PlayerCancelQuestEvent;
-import com.leonardobishop.quests.api.events.PlayerFinishQuestEvent;
-import com.leonardobishop.quests.api.events.PlayerStartQuestEvent;
-import com.leonardobishop.quests.api.events.PreStartQuestEvent;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.util.Messages;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.api.event.PlayerCancelQuestEvent;
+import com.leonardobishop.quests.bukkit.api.event.PlayerFinishQuestEvent;
+import com.leonardobishop.quests.bukkit.api.event.PlayerStartQuestEvent;
+import com.leonardobishop.quests.bukkit.api.event.PlayerStartTrackQuestEvent;
+import com.leonardobishop.quests.bukkit.api.event.PlayerStopTrackQuestEvent;
+import com.leonardobishop.quests.bukkit.api.event.PreStartQuestEvent;
+import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig;
+import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStack;
+import com.leonardobishop.quests.bukkit.util.Chat;
+import com.leonardobishop.quests.bukkit.util.Messages;
+import com.leonardobishop.quests.common.enums.QuestStartResult;
+import com.leonardobishop.quests.common.player.QPlayer;
+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 com.leonardobishop.quests.common.questcontroller.QuestController;
+import com.leonardobishop.quests.common.util.Format;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -21,10 +27,17 @@ import java.util.concurrent.TimeUnit;
public class NormalQuestController implements QuestController {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
+ private final BukkitQuestsConfig config;
- public NormalQuestController(Quests plugin) {
+ public NormalQuestController(BukkitQuestsPlugin plugin) {
this.plugin = plugin;
+ this.config = (BukkitQuestsConfig) plugin.getQuestsConfig();
+ }
+
+ @Override
+ public String getName() {
+ return "normal";
}
@Override
@@ -38,15 +51,15 @@ public class NormalQuestController implements QuestController {
// This one is hacky
break;
case QUEST_LIMIT_REACHED:
- questResultMessage = Messages.QUEST_START_LIMIT.getMessage().replace("{limit}", String.valueOf(Options.QUESTS_START_LIMIT.getIntValue()));
+ questResultMessage = Messages.QUEST_START_LIMIT.getMessage().replace("{limit}", String.valueOf(config.getInt("options.quest-started-limit")));
break;
case QUEST_ALREADY_COMPLETED:
questResultMessage = Messages.QUEST_START_DISABLED.getMessage();
break;
case QUEST_COOLDOWN:
long cooldown = qPlayer.getQuestProgressFile().getCooldownFor(quest);
- questResultMessage = Messages.QUEST_START_COOLDOWN.getMessage().replace("{time}", String.valueOf(plugin.convertToFormat(TimeUnit.SECONDS.convert
- (cooldown, TimeUnit.MILLISECONDS))));
+ questResultMessage = Messages.QUEST_START_COOLDOWN.getMessage().replace("{time}", Format.formatTime(TimeUnit.SECONDS.convert
+ (cooldown, TimeUnit.MILLISECONDS)));
break;
case QUEST_LOCKED:
questResultMessage = Messages.QUEST_START_LOCKED.getMessage();
@@ -75,22 +88,24 @@ public class NormalQuestController implements QuestController {
taskProgress.setCompleted(false);
taskProgress.setProgress(null);
}
- if (Options.ALLOW_QUEST_TRACK.getBooleanValue() && Options.QUEST_AUTOTRACK.getBooleanValue()) {
+ if (config.getBoolean("options.allow-quest-track")
+ && config.getBoolean("options.quest-autotrack")) {
qPlayer.trackQuest(quest);
}
questProgress.setCompleted(false);
if (player != null) {
- String questStartMessage = Messages.QUEST_START.getMessage().replace("{quest}", quest.getDisplayNameStripped());
+ QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest);
+ String displayName = Chat.strip(qItemStack.getName());
+ String questStartMessage = Messages.QUEST_START.getMessage().replace("{quest}", displayName);
// PlayerStartQuestEvent -- start
PlayerStartQuestEvent questStartEvent = new PlayerStartQuestEvent(player, qPlayer, questProgress, questStartMessage);
Bukkit.getPluginManager().callEvent(questStartEvent);
// PlayerStartQuestEvent -- end
if (questStartEvent.getQuestStartMessage() != null)
player.sendMessage(questStartEvent.getQuestStartMessage()); //Don't send a message if the event message is null
- if (Options.TITLES_ENABLED.getBooleanValue()) {
- plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_START_TITLE.getMessage().replace("{quest}", quest
- .getDisplayNameStripped()), Messages.TITLE_QUEST_START_SUBTITLE.getMessage().replace("{quest}", quest
- .getDisplayNameStripped()));
+ if (config.getBoolean("options.titles-enabled")) {
+ plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_START_TITLE.getMessage().replace("{quest}", displayName),
+ Messages.TITLE_QUEST_START_SUBTITLE.getMessage().replace("{quest}", displayName));
}
for (String s : quest.getStartString()) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', s));
@@ -110,7 +125,7 @@ public class NormalQuestController implements QuestController {
@Override
public QuestStartResult canPlayerStartQuest(QPlayer qPlayer, Quest quest) {
Player p = Bukkit.getPlayer(qPlayer.getPlayerUUID());
- if (qPlayer.getQuestProgressFile().getStartedQuests().size() >= Options.QUESTS_START_LIMIT.getIntValue() && !Options.QUEST_AUTOSTART.getBooleanValue()) {
+ if (qPlayer.getQuestProgressFile().getStartedQuests().size() >= config.getInt("options.quest-started-limit") && !config.getBoolean("options.quest-autostart")) {
return QuestStartResult.QUEST_LIMIT_REACHED;
}
QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest);
@@ -163,12 +178,15 @@ public class NormalQuestController implements QuestController {
questProgress.setCompleted(true);
questProgress.setCompletedBefore(true);
questProgress.setCompletionDate(System.currentTimeMillis());
- if (Options.ALLOW_QUEST_TRACK.getBooleanValue() && Options.QUEST_AUTOTRACK.getBooleanValue() && !(quest.isRepeatable() && !quest.isCooldownEnabled())) {
+ if (config.getBoolean("options.allow-quest-track") && config.getBoolean("options.quest-autotrack")
+ && !(quest.isRepeatable() && !quest.isCooldownEnabled())) {
qPlayer.trackQuest(null);
}
Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID());
if (player != null) {
- String questFinishMessage = Messages.QUEST_COMPLETE.getMessage().replace("{quest}", quest.getDisplayNameStripped());
+ QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest);
+ String displayName = Chat.strip(qItemStack.getName());
+ String questFinishMessage = Messages.QUEST_COMPLETE.getMessage().replace("{quest}", displayName);
// PlayerFinishQuestEvent -- start
PlayerFinishQuestEvent questFinishEvent = new PlayerFinishQuestEvent(player, qPlayer, questProgress, questFinishMessage);
Bukkit.getPluginManager().callEvent(questFinishEvent);
@@ -180,17 +198,16 @@ public class NormalQuestController implements QuestController {
});
if (questFinishEvent.getQuestFinishMessage() != null)
player.sendMessage(questFinishEvent.getQuestFinishMessage());
- if (Options.TITLES_ENABLED.getBooleanValue()) {
- plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_COMPLETE_TITLE.getMessage().replace("{quest}", quest
- .getDisplayNameStripped()), Messages.TITLE_QUEST_COMPLETE_SUBTITLE.getMessage().replace("{quest}", quest
- .getDisplayNameStripped()));
+ if (config.getBoolean("options.titles-enabled")) {
+ plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_COMPLETE_TITLE.getMessage().replace("{quest}", displayName),
+ Messages.TITLE_QUEST_COMPLETE_SUBTITLE.getMessage().replace("{quest}", displayName));
}
for (String s : quest.getRewardString()) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', s));
}
}
- if ((Options.ALLOW_QUEST_TRACK.getBooleanValue() && Options.QUEST_AUTOTRACK.getBooleanValue() && !(quest.isRepeatable() && !quest.isCooldownEnabled()))
- || (!Options.ALLOW_QUEST_TRACK.getBooleanValue() && Options.QUEST_AUTOTRACK.getBooleanValue())) {
+ if ((config.getBoolean("options.allow-quest-track") && config.getBoolean("options.quest-autotrack") && !(quest.isRepeatable() && !quest.isCooldownEnabled()))
+ || (!config.getBoolean("options.allow-quest-track") && config.getBoolean("options.quest-autotrack"))) {
Quest nextQuest;
if (qPlayer.getQuestProgressFile().getStartedQuests().size() > 0) {
nextQuest = qPlayer.getQuestProgressFile().getStartedQuests().get(0);
@@ -202,7 +219,7 @@ public class NormalQuestController implements QuestController {
@Override
public boolean hasPlayerStartedQuest(QPlayer qPlayer, Quest quest) {
- if (Options.QUEST_AUTOSTART.getBooleanValue()) {
+ if (config.getBoolean("options.quest-autostart")) {
QuestStartResult response = canPlayerStartQuest(qPlayer, quest);
return response == QuestStartResult.QUEST_SUCCESS || response == QuestStartResult.QUEST_ALREADY_STARTED;
} else {
@@ -225,7 +242,9 @@ public class NormalQuestController implements QuestController {
taskProgress.setProgress(null);
}
if (player != null) {
- String questCancelMessage = Messages.QUEST_CANCEL.getMessage().replace("{quest}", quest.getDisplayNameStripped());
+ QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest);
+ String displayName = Chat.strip(qItemStack.getName());
+ String questCancelMessage = Messages.QUEST_CANCEL.getMessage().replace("{quest}", displayName);
// PlayerCancelQuestEvent -- start
PlayerCancelQuestEvent questCancelEvent = new PlayerCancelQuestEvent(player, qPlayer, questProgress, questCancelMessage);
Bukkit.getPluginManager().callEvent(questCancelEvent);
@@ -236,4 +255,31 @@ public class NormalQuestController implements QuestController {
return true;
}
+ @Override
+ public void trackQuestForPlayer(QPlayer qPlayer, Quest quest) {
+ Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID());
+
+ if (quest == null) {
+ String currentTrackedQuestId = qPlayer.getPlayerPreferences().getTrackedQuestId();
+ qPlayer.getPlayerPreferences().setTrackedQuestId(null);
+ if (player != null) {
+ Bukkit.getPluginManager().callEvent(new PlayerStopTrackQuestEvent(player, qPlayer));
+ Quest currentTrackedQuest;
+ if (currentTrackedQuestId != null && (currentTrackedQuest = plugin.getQuestManager().getQuestById(currentTrackedQuestId)) != null) {
+ QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(currentTrackedQuest);
+ String displayName = Chat.strip(qItemStack.getName());
+ player.sendMessage(Messages.QUEST_TRACK_STOP.getMessage().replace("{quest}", displayName));
+ }
+ }
+ } else if (qPlayer.hasStartedQuest(quest)) {
+ QItemStack qItemStack = plugin.getQItemStackRegistry().getQuestItemStack(quest);
+ String displayName = Chat.strip(qItemStack.getName());
+ qPlayer.getPlayerPreferences().setTrackedQuestId(quest.getId());
+ if (player != null) {
+ Bukkit.getPluginManager().callEvent(new PlayerStartTrackQuestEvent(player, qPlayer));
+ player.sendMessage(Messages.QUEST_TRACK.getMessage().replace("{quest}", displayName));
+ }
+ }
+ }
+
}
diff --git a/src/main/java/com/leonardobishop/quests/util/QuestsAutosaveRunnable.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/runnable/QuestsAutoSaveRunnable.java
index dbe0b3a9..34c1a5f6 100644
--- a/src/main/java/com/leonardobishop/quests/util/QuestsAutosaveRunnable.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/runnable/QuestsAutoSaveRunnable.java
@@ -1,9 +1,6 @@
-package com.leonardobishop.quests.util;
+package com.leonardobishop.quests.bukkit.runnable;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
@@ -12,12 +9,12 @@ import java.util.LinkedList;
import java.util.Queue;
import java.util.UUID;
-public class QuestsAutosaveRunnable extends BukkitRunnable {
+public class QuestsAutoSaveRunnable extends BukkitRunnable {
private final Queue<UUID> queue = new LinkedList<>();
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
- public QuestsAutosaveRunnable(Quests plugin) {
+ public QuestsAutoSaveRunnable(BukkitQuestsPlugin plugin) {
for (Player player : Bukkit.getOnlinePlayers()) {
queue.add(player.getUniqueId());
}
diff --git a/src/main/java/com/leonardobishop/quests/storage/MySqlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java
index 02692919..fd473af6 100644
--- a/src/main/java/com/leonardobishop/quests/storage/MySqlStorageProvider.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java
@@ -1,10 +1,10 @@
-package com.leonardobishop.quests.storage;
+package com.leonardobishop.quests.bukkit.storage;
-import com.leonardobishop.quests.Quests;
-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 com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
+import com.leonardobishop.quests.common.storage.StorageProvider;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.bukkit.configuration.ConfigurationSection;
@@ -16,9 +16,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -58,13 +56,13 @@ public class MySqlStorageProvider implements StorageProvider {
"INSERT INTO `{prefix}task_progress` (uuid, quest_id, task_id, completed, progress, data_type) VALUES (?,?,?,?,?,?) ON DUPLICATE KEY UPDATE completed=?, progress=?, data_type=?";
private final ConfigurationSection configuration;
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
private HikariDataSource hikari;
private String prefix;
private Function<String, String> statementProcessor;
private boolean fault;
- public MySqlStorageProvider(Quests plugin, ConfigurationSection configuration) {
+ public MySqlStorageProvider(BukkitQuestsPlugin plugin, ConfigurationSection configuration) {
this.plugin = plugin;
if (configuration == null) {
configuration = new YamlConfiguration();
diff --git a/src/main/java/com/leonardobishop/quests/storage/YamlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java
index 8ba30a4e..75e271f9 100644
--- a/src/main/java/com/leonardobishop/quests/storage/YamlStorageProvider.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java
@@ -1,9 +1,10 @@
-package com.leonardobishop.quests.storage;
+package com.leonardobishop.quests.bukkit.storage;
-import com.leonardobishop.quests.Quests;
-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.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
+import com.leonardobishop.quests.common.storage.StorageProvider;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
@@ -18,9 +19,9 @@ import java.util.concurrent.locks.ReentrantLock;
public class YamlStorageProvider implements StorageProvider {
private final Map<UUID, ReentrantLock> locks = new ConcurrentHashMap<>();
- private Quests plugin;
+ private BukkitQuestsPlugin plugin;
- public YamlStorageProvider(Quests plugin) {
+ public YamlStorageProvider(BukkitQuestsPlugin plugin) {
this.plugin = plugin;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java
new file mode 100644
index 00000000..81f312c7
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java
@@ -0,0 +1,16 @@
+package com.leonardobishop.quests.bukkit.tasktype;
+
+import com.leonardobishop.quests.common.tasktype.TaskType;
+import org.bukkit.event.Listener;
+
+public abstract class BukkitTaskType extends TaskType implements Listener {
+
+ public BukkitTaskType(String type, String author, String description) {
+ super(type, author, description);
+ }
+
+ public BukkitTaskType(String type) {
+ super(type);
+ }
+
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java
new file mode 100644
index 00000000..67c9ab7d
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java
@@ -0,0 +1,25 @@
+package com.leonardobishop.quests.bukkit.tasktype;
+
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.common.tasktype.TaskType;
+import com.leonardobishop.quests.common.tasktype.TaskTypeManager;
+
+public class BukkitTaskTypeManager extends TaskTypeManager {
+
+ private final BukkitQuestsPlugin plugin;
+
+ public BukkitTaskTypeManager(BukkitQuestsPlugin plugin) {
+ super(plugin);
+ this.plugin = plugin;
+ }
+
+ @Override
+ public void registerTaskType(TaskType taskType) {
+ if (!(taskType instanceof BukkitTaskType)) throw new RuntimeException("task type must be instance of BukkitTaskType!");
+
+ BukkitTaskType bukkitTaskType = (BukkitTaskType) taskType;
+ super.registerTaskType(taskType);
+ plugin.getServer().getPluginManager().registerEvents(bukkitTaskType, plugin);
+ }
+
+}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/BreedingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BreedingTaskType.java
index 501a6aa1..c4d05eed 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/BreedingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BreedingTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -21,29 +20,23 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class BreedingTaskType extends TaskType {
+public final class BreedingTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public BreedingTaskType() {
+ public BreedingTaskType(BukkitQuestsPlugin plugin) {
super("breeding", TaskUtils.TASK_ATTRIBUTION_STRING, "Breed a set amount of animals.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of animals to be bred"));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBreed(CreatureSpawnEvent e) {
if (!e.getSpawnReason().equals(SpawnReason.BREEDING)) {
@@ -60,7 +53,7 @@ public final class BreedingTaskType extends TaskType {
for (Entity current : entList) {
if (current instanceof Player && !current.hasMetadata("NPC")) {
Player player = (Player) current;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
continue;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/BrewingCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BrewingCertainTaskType.java
index 2c36f55a..aeda362c 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/BrewingCertainTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BrewingCertainTaskType.java
@@ -1,4 +1,4 @@
-// TODO: fix
+package com.leonardobishop.quests.bukkit.tasktype.type;// TODO: fix
//
//package me.fatpigsarefat.quests.quests.tasktypes.types;
//
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/BrewingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BrewingTaskType.java
index 7a0da7de..d6ede688 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/BrewingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BrewingTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -26,30 +25,24 @@ import java.util.HashMap;
import java.util.List;
import java.util.UUID;
-public final class BrewingTaskType extends TaskType {
+public final class BrewingTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
- private HashMap<Location, UUID> brewingStands = new HashMap<>();
+ private final BukkitQuestsPlugin plugin;
+ private final HashMap<Location, UUID> brewingStands = new HashMap<>();
- public BrewingTaskType() {
+ public BrewingTaskType(BukkitQuestsPlugin plugin) {
super("brewing", TaskUtils.TASK_ATTRIBUTION_STRING, "Brew a potion.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of potions to be brewed."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPlace(PlayerInteractEvent event) {
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
@@ -69,7 +62,7 @@ public final class BrewingTaskType extends TaskType {
return;
}
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/BuildingCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingCertainTaskType.java
index 1e97de3f..550e6435 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/BuildingCertainTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingCertainTaskType.java
@@ -1,15 +1,15 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.config.ConfigProblemDescriptions;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.Material;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
@@ -21,23 +21,18 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class BuildingCertainTaskType extends TaskType {
+public final class BuildingCertainTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public BuildingCertainTaskType() {
+ public BuildingCertainTaskType(BukkitQuestsPlugin plugin) {
super("blockplacecertain", TaskUtils.TASK_ATTRIBUTION_STRING, "Place a set amount of a specific block.");
- 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."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
if (config.get("block") == null && config.get("blocks") == null) {
@@ -61,8 +56,8 @@ public final class BuildingCertainTaskType extends TaskType {
for (String materialName : checkBlocks) {
String[] split = materialName.split(":");
if (Material.getMaterial(String.valueOf(split[0])) == null) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING,
- QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(materialName), root + "." + source));
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
+ ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(materialName), root + "." + source));
}
}
}
@@ -72,16 +67,11 @@ public final class BuildingCertainTaskType extends TaskType {
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event) {
if (event.getPlayer().hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
@@ -112,7 +102,7 @@ public final class BuildingCertainTaskType extends TaskType {
public void onBlockBreak(BlockBreakEvent event) {
if (event.getPlayer().hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/BuildingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java
index 851c152e..fe0e3ee7 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/BuildingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockPlaceEvent;
@@ -18,34 +17,28 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class BuildingTaskType extends TaskType {
+public final class BuildingTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public BuildingTaskType() {
+ public BuildingTaskType(BukkitQuestsPlugin plugin) {
super("blockplace", TaskUtils.TASK_ATTRIBUTION_STRING, "Place a set amount of blocks.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of blocks to be placed."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event) {
if (event.getPlayer().hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/CommandTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java
index 5e1522fe..db44f8d6 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/CommandTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -19,37 +18,30 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class CommandTaskType extends TaskType {
+public final class CommandTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public CommandTaskType() {
+ public CommandTaskType(BukkitQuestsPlugin plugin) {
super("command", TaskUtils.TASK_ATTRIBUTION_STRING, "Execute a certain command.");
- this.creatorConfigValues.add(new ConfigValue("command", true, "The command to execute."));
- this.creatorConfigValues.add(new ConfigValue("ignore-case", false, "Ignore the casing of the command."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
TaskUtils.configValidateExists(root + ".command", config.get("command"), problems, "command", super.getType());
TaskUtils.configValidateBoolean(root + ".ignore-case", config.get("ignore-case"), problems, true, "ignore-case", super.getType());
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR)
public void onCommand(PlayerCommandPreprocessEvent e) {
if (e.getPlayer().hasMetadata("NPC")) return;
Player player = e.getPlayer();
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/DealDamageTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java
index 6affa258..950a50ad 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/DealDamageTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -19,29 +18,23 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class DealDamageTaskType extends TaskType {
+public final class DealDamageTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public DealDamageTaskType() {
+ public DealDamageTaskType(BukkitQuestsPlugin plugin) {
super("dealdamage", TaskUtils.TASK_ATTRIBUTION_STRING, "Deal a certain amount of damage.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of damage you need to deal"));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onDamage(EntityDamageByEntityEvent e) {
if (!(e.getDamager() instanceof Player)) {
@@ -53,7 +46,7 @@ public final class DealDamageTaskType extends TaskType {
if (player.hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/DistancefromTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DistancefromTaskType.java
index 604ea556..b0b4b9e9 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/DistancefromTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DistancefromTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
@@ -22,22 +21,18 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class DistancefromTaskType extends TaskType {
+public final class DistancefromTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public DistancefromTaskType() {
+ public DistancefromTaskType(BukkitQuestsPlugin plugin) {
super("distancefrom", TaskUtils.TASK_ATTRIBUTION_STRING, "Distance yourself from a set of co-ordinates.");
- this.creatorConfigValues.add(new ConfigValue("x", true, "X position."));
- this.creatorConfigValues.add(new ConfigValue("y", true, "Y position."));
- this.creatorConfigValues.add(new ConfigValue("z", true, "Z position."));
- this.creatorConfigValues.add(new ConfigValue("world", true, "Name of world."));
- this.creatorConfigValues.add(new ConfigValue("distance", true, "Distance the player needs to be from the co-ordinates."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
if (TaskUtils.configValidateExists(root + ".x", config.get("x"), problems, "x", super.getType()))
TaskUtils.configValidateInt(root + ".x", config.get("x"), problems, false, false, "x");
if (TaskUtils.configValidateExists(root + ".y", config.get("y"), problems, "y", super.getType()))
@@ -49,11 +44,6 @@ public final class DistancefromTaskType extends TaskType {
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
// private HashMap<String, HashMap<String, Integer>> distanceSquaredCache = new HashMap<>();
//
// @Override
@@ -78,7 +68,7 @@ public final class DistancefromTaskType extends TaskType {
if (event.getPlayer().hasMetadata("NPC")) return;
Player player = event.getPlayer();
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/EnchantingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/EnchantingTaskType.java
index fc0b2421..5293960f 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/EnchantingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/EnchantingTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -19,36 +18,30 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class EnchantingTaskType extends TaskType {
+public final class EnchantingTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public EnchantingTaskType() {
+ public EnchantingTaskType(BukkitQuestsPlugin plugin) {
super("enchanting", TaskUtils.TASK_ATTRIBUTION_STRING, "Enchant a certain amount of items.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of items you need to enchant."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onEnchant(EnchantItemEvent e) {
if (e.getEnchanter().hasMetadata("NPC")) return;
Player player = e.getEnchanter();
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/ExpEarnTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ExpEarnTaskType.java
index d99688c8..81653d86 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/ExpEarnTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ExpEarnTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerExpChangeEvent;
@@ -18,34 +17,28 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class ExpEarnTaskType extends TaskType {
-
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
-
- public ExpEarnTaskType() {
+public final class ExpEarnTaskType extends BukkitTaskType {
+
+ private final BukkitQuestsPlugin plugin;
+
+ public ExpEarnTaskType(BukkitQuestsPlugin plugin) {
super("expearn", TaskUtils.TASK_ATTRIBUTION_STRING, "Earn a set amount of exp.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of exp that needs to be earned."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
-
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onExpEarn(PlayerExpChangeEvent e) {
if (e.getPlayer().hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(e.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(e.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/FarmingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java
index 62223e6d..cdc92930 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/FarmingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java
@@ -1,37 +1,26 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.material.Crops;
-import java.util.ArrayList;
-import java.util.List;
+public final class FarmingTaskType extends BukkitTaskType {
-public final class FarmingTaskType extends TaskType {
+ private final BukkitQuestsPlugin plugin;
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
-
- public FarmingTaskType() {
+ public FarmingTaskType(BukkitQuestsPlugin plugin) {
super("farming", TaskUtils.TASK_ATTRIBUTION_STRING, "Break a set amount of a crop.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of crops to be broken."));
- this.creatorConfigValues.add(new ConfigValue("crop", true, "Name or ID of crop."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
- }
-
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
+ this.plugin = plugin;
}
@SuppressWarnings("deprecation")
@@ -43,7 +32,7 @@ public final class FarmingTaskType extends TaskType {
}
Crops crop = (Crops) event.getBlock().getState();
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/FishingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java
index c35044af..bbaa59c7 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/FishingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -19,29 +18,23 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class FishingTaskType extends TaskType {
+public final class FishingTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public FishingTaskType() {
+ public FishingTaskType(BukkitQuestsPlugin plugin) {
super("fishing", TaskUtils.TASK_ATTRIBUTION_STRING, "Catch a set amount of items from the sea.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of fish to be caught."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onFishCaught(PlayerFishEvent event) {
if (event.getPlayer().hasMetadata("NPC")) return;
@@ -57,7 +50,7 @@ public final class FishingTaskType extends TaskType {
Player player = event.getPlayer();
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/InventoryTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InventoryTaskType.java
index 4ee6e605..55df10de 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/InventoryTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InventoryTaskType.java
@@ -1,16 +1,15 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.config.ConfigProblemDescriptions;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.Bukkit;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
@@ -25,26 +24,18 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class InventoryTaskType extends TaskType {
+public final class InventoryTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
- public InventoryTaskType(Quests plugin) {
+ public InventoryTaskType(BukkitQuestsPlugin plugin) {
super("inventory", TaskUtils.TASK_ATTRIBUTION_STRING, "Obtain a set of items.");
this.plugin = plugin;
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of item to retrieve."));
- this.creatorConfigValues.add(new ConfigValue("item", true, "Name or ID of item."));
- this.creatorConfigValues.add(new ConfigValue("data", false, "Data of item."));
- this.creatorConfigValues.add(new ConfigValue("remove-items-when-complete", false, "Take the items away from the player on completion (true/false, " +
- "default = false)."));
- this.creatorConfigValues.add(new ConfigValue("update-progress", false, "Update the displayed progress (if this causes lag then disable it)."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
if (TaskUtils.configValidateExists(root + ".item", config.get("item"), problems, "item", super.getType())) {
Object configBlock = config.get("item");
if (configBlock instanceof ConfigurationSection) {
@@ -54,19 +45,19 @@ public final class InventoryTaskType extends TaskType {
itemloc = "type";
}
if (!section.contains(itemloc)) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING,
- QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(""), root + ".item.type"));
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
+ ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(""), root + ".item.type"));
} else {
String type = String.valueOf(section.get(itemloc));
if (!plugin.getItemGetter().isValidMaterial(type)) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING,
- QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(type), root + ".item." + itemloc));
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
+ ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(type), root + ".item." + itemloc));
}
}
} else {
if (Material.getMaterial(String.valueOf(configBlock)) == null) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING,
- QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(String.valueOf(configBlock)), root + ".item.item"));
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
+ ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(String.valueOf(configBlock)), root + ".item.item"));
}
}
}
@@ -78,12 +69,6 @@ public final class InventoryTaskType extends TaskType {
return problems;
}
-
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onItemPickup(PlayerPickupItemEvent event) {
@@ -103,7 +88,7 @@ public final class InventoryTaskType extends TaskType {
return;
}
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
@@ -129,7 +114,7 @@ public final class InventoryTaskType extends TaskType {
ItemStack is;
if (configBlock instanceof ConfigurationSection) {
- is = plugin.getItemStack("", (org.bukkit.configuration.ConfigurationSection) configBlock);
+ is = plugin.getItemStack("", (ConfigurationSection) configBlock);
} else {
material = Material.getMaterial(String.valueOf(configBlock));
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MilkingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java
index 0d883ac2..79dc975b 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MilkingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java
@@ -1,16 +1,15 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-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.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+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.entity.Cow;
import org.bukkit.entity.Player;
@@ -22,29 +21,23 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class MilkingTaskType extends TaskType {
+public final class MilkingTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public MilkingTaskType() {
+ public MilkingTaskType(BukkitQuestsPlugin plugin) {
super("milking", TaskUtils.TASK_ATTRIBUTION_STRING, "Milk a set amount of cows.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of cows to be milked."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onMilk(PlayerInteractEntityEvent event) {
@@ -56,7 +49,7 @@ public final class MilkingTaskType extends TaskType {
Player player = event.getPlayer();
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MiningCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningCertainTaskType.java
index 7639ad95..9c881f01 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MiningCertainTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningCertainTaskType.java
@@ -1,16 +1,15 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.config.ConfigProblemDescriptions;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.Material;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
@@ -22,28 +21,18 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class MiningCertainTaskType extends TaskType {
+public final class MiningCertainTaskType extends BukkitTaskType {
- private final Quests plugin;
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public MiningCertainTaskType(Quests plugin) {
+ public MiningCertainTaskType(BukkitQuestsPlugin plugin) {
super("blockbreakcertain", TaskUtils.TASK_ATTRIBUTION_STRING, "Break a set amount of a specific block.");
this.plugin = plugin;
- 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.", "block")); // Can use name:datacode
- 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."));
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
if (config.get("block") == null && config.get("blocks") == null) {
@@ -67,8 +56,8 @@ public final class MiningCertainTaskType extends TaskType {
for (String materialName : checkBlocks) {
String[] split = materialName.split(":");
if (Material.getMaterial(String.valueOf(split[0])) == null) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING,
- QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(materialName), root + "." + source));
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
+ ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(materialName), root + "." + source));
}
}
}
@@ -80,16 +69,11 @@ public final class MiningCertainTaskType extends TaskType {
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
if (event.getPlayer().hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
@@ -126,7 +110,7 @@ public final class MiningCertainTaskType extends TaskType {
public void onBlockPlace(BlockPlaceEvent event) {
if (event.getPlayer().hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MiningTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java
index e25adcff..519cf87a 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MiningTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
@@ -18,37 +17,29 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class MiningTaskType extends TaskType {
+public final class MiningTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public MiningTaskType() {
+ public MiningTaskType(BukkitQuestsPlugin plugin) {
// type, author, description
super("blockbreak", TaskUtils.TASK_ATTRIBUTION_STRING, "Break a set amount of blocks.");
-
- // config values for the quest creator to use, if unspecified then the quest creator will not know what to put here (and will require users to
- // go into the config and manually configure there)
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of blocks to be broken."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
if (event.getPlayer().hasMetadata("NPC")) return; // citizens also causes these events to fire
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); // get the qplayer so you can get their progress
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); // get the qplayer so you can get their progress
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MobkillingCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingCertainTaskType.java
index 86bd7fea..1dca3e8b 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MobkillingCertainTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingCertainTaskType.java
@@ -1,15 +1,15 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.config.ConfigProblemDescriptions;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.ChatColor;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
@@ -22,26 +22,24 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class MobkillingCertainTaskType extends TaskType {
+public final class MobkillingCertainTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public MobkillingCertainTaskType() {
+ public MobkillingCertainTaskType(BukkitQuestsPlugin plugin) {
super("mobkillingcertain", TaskUtils.TASK_ATTRIBUTION_STRING, "Kill a set amount of a specific entity type.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of mobs to be killed."));
- this.creatorConfigValues.add(new ConfigValue("mob", true, "Name of mob."));
- this.creatorConfigValues.add(new ConfigValue("name", false, "Only allow a specific name for mob (unspecified = any name allowed)."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
if (TaskUtils.configValidateExists(root + ".mob", config.get("mob"), problems, "mob", super.getType())) {
try {
EntityType.valueOf(String.valueOf(config.get("mob")));
} catch (IllegalArgumentException ex) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING,
- QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_ENTITY_TYPE.getDescription(String.valueOf(config.get("mob"))), root + ".mob"));
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
+ ConfigProblemDescriptions.UNKNOWN_ENTITY_TYPE.getDescription(String.valueOf(config.get("mob"))), root + ".mob"));
}
}
if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType()))
@@ -49,12 +47,6 @@ public final class MobkillingCertainTaskType extends TaskType {
return problems;
}
-
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onMobKill(EntityDeathEvent event) {
Player killer = event.getEntity().getKiller();
@@ -70,7 +62,7 @@ public final class MobkillingCertainTaskType extends TaskType {
if (killer.hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(killer.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(killer.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MobkillingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingTaskType.java
index dd43bd60..c1dfbe2a 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/MobkillingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.entity.Animals;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Monster;
@@ -22,30 +21,24 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class MobkillingTaskType extends TaskType {
+public final class MobkillingTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public MobkillingTaskType() {
+ public MobkillingTaskType(BukkitQuestsPlugin plugin) {
super("mobkilling", TaskUtils.TASK_ATTRIBUTION_STRING, "Kill a set amount of entities.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of mobs to be killed."));
- this.creatorConfigValues.add(new ConfigValue("hostile", false, "Only allow hostile or non-hostile mobs (unspecified = any type allowed)."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
TaskUtils.configValidateBoolean(root + ".hostile", config.get("hostile"), problems, true, "hostile");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onMobKill(EntityDeathEvent event) {
Player killer = event.getEntity().getKiller(); //The killer is a player
@@ -61,7 +54,7 @@ public final class MobkillingTaskType extends TaskType {
if (killer.hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(killer.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(killer.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/PermissionTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PermissionTaskType.java
index 3043aeb0..33dc0db9 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/PermissionTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PermissionTaskType.java
@@ -1,33 +1,26 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
-import java.util.ArrayList;
-import java.util.List;
+public final class PermissionTaskType extends BukkitTaskType {
-public final class PermissionTaskType extends TaskType {
-
- private Quests plugin;
+ private final BukkitQuestsPlugin plugin;
private BukkitTask poll;
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
- public PermissionTaskType(Quests plugin) {
+ public PermissionTaskType(BukkitQuestsPlugin plugin) {
super("permission", TaskUtils.TASK_ATTRIBUTION_STRING, "Test if a player has a permission");
this.plugin = plugin;
- this.creatorConfigValues.add(new ConfigValue("permission", true, "The required permission."));
}
@Override
@@ -36,7 +29,7 @@ public final class PermissionTaskType extends TaskType {
@Override
public void run() {
for (Player player : Bukkit.getOnlinePlayers()) {
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
continue;
}
@@ -69,8 +62,4 @@ public final class PermissionTaskType extends TaskType {
}
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/PlayerkillingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlayerkillingTaskType.java
index 60bb1321..db9fda8b 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/PlayerkillingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlayerkillingTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -20,28 +19,23 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class PlayerkillingTaskType extends TaskType {
+public final class PlayerkillingTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public PlayerkillingTaskType() {
+ public PlayerkillingTaskType(BukkitQuestsPlugin plugin) {
super("playerkilling", TaskUtils.TASK_ATTRIBUTION_STRING, "Kill a set amount of players.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of players to be killed."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onMobKill(EntityDeathEvent event) {
Player killer = event.getEntity().getKiller();
@@ -57,7 +51,7 @@ public final class PlayerkillingTaskType extends TaskType {
if (killer.hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(killer.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(killer.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/PlaytimeTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlaytimeTaskType.java
index 450365cb..28ecced4 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/PlaytimeTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlaytimeTaskType.java
@@ -1,16 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
@@ -20,21 +18,19 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class PlaytimeTaskType extends TaskType {
+public final class PlaytimeTaskType extends BukkitTaskType {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
private BukkitTask poll;
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
- public PlaytimeTaskType(Quests plugin) {
+ public PlaytimeTaskType(BukkitQuestsPlugin plugin) {
super("playtime", TaskUtils.TASK_ATTRIBUTION_STRING, "Track the amount of playing time a user has been on");
this.plugin = plugin;
- this.creatorConfigValues.add(new ConfigValue("minutes", true, "Time in minutes."));
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
if (TaskUtils.configValidateExists(root + ".minutes", config.get("minutes"), problems, "minutes", super.getType()))
TaskUtils.configValidateInt(root + ".minutes", config.get("minutes"), problems, false, true, "minutes");
return problems;
@@ -48,7 +44,7 @@ public final class PlaytimeTaskType extends TaskType {
@Override
public void run() {
for (Player player : Bukkit.getOnlinePlayers()) {
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
continue;
}
@@ -88,8 +84,4 @@ public final class PlaytimeTaskType extends TaskType {
// }
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/PositionTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PositionTaskType.java
index 546cdb10..876081ae 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/PositionTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PositionTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
@@ -22,22 +21,18 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class PositionTaskType extends TaskType {
+public final class PositionTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public PositionTaskType() {
+ public PositionTaskType(BukkitQuestsPlugin plugin) {
super("position", TaskUtils.TASK_ATTRIBUTION_STRING, "Reach a set of co-ordinates.");
- this.creatorConfigValues.add(new ConfigValue("x", true, "X position."));
- this.creatorConfigValues.add(new ConfigValue("y", true, "Y position."));
- this.creatorConfigValues.add(new ConfigValue("z", true, "Z position."));
- this.creatorConfigValues.add(new ConfigValue("world", true, "Name of world."));
- this.creatorConfigValues.add(new ConfigValue("distance-padding", false, "Padding zone in meters/blocks (default/unspecified = 0)."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
TaskUtils.configValidateExists(root + ".world", config.get("world"), problems, "world", super.getType());
if (TaskUtils.configValidateExists(root + ".x", config.get("x"), problems, "x", super.getType()))
TaskUtils.configValidateInt(root + ".x", config.get("x"), problems, false, false, "x");
@@ -49,11 +44,6 @@ public final class PositionTaskType extends TaskType {
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onMove(PlayerMoveEvent event) {
if (event.getFrom().getBlockX() == event.getTo().getBlockX() && event.getFrom().getBlockZ() == event.getTo().getBlockZ()) {
@@ -64,7 +54,7 @@ public final class PositionTaskType extends TaskType {
Player player = event.getPlayer();
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/ShearingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java
index ca4856a4..6778ae69 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/ShearingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.entity.Player;
import org.bukkit.entity.Sheep;
import org.bukkit.event.EventHandler;
@@ -20,29 +19,23 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class ShearingTaskType extends TaskType {
+public final class ShearingTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public ShearingTaskType() {
+ public ShearingTaskType(BukkitQuestsPlugin plugin) {
super("shearing", TaskUtils.TASK_ATTRIBUTION_STRING, "Shear a set amount of sheep.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of cows to be milked."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
-
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onShear(PlayerShearEntityEvent event) {
if (!(event.getEntity() instanceof Sheep)) {
@@ -53,7 +46,7 @@ public final class ShearingTaskType extends TaskType {
Player player = event.getPlayer();
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/TamingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/TamingTaskType.java
index 663ca403..7555e60c 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/TamingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/TamingTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -19,29 +18,23 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class TamingTaskType extends TaskType {
+public final class TamingTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public TamingTaskType() {
+ public TamingTaskType(BukkitQuestsPlugin plugin) {
super("taming", TaskUtils.TASK_ATTRIBUTION_STRING, "Tame a set amount of animals.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of animals to be tamed."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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");
return problems;
}
-
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onTame(EntityTameEvent event) {
if (!(event.getOwner() instanceof Player)) {
@@ -52,7 +45,7 @@ public final class TamingTaskType extends TaskType {
if (player.hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/WalkingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java
index 4faebdb0..cc0db63d 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/WalkingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type;
+package com.leonardobishop.quests.bukkit.tasktype.type;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -19,29 +18,23 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class WalkingTaskType extends TaskType {
+public final class WalkingTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public WalkingTaskType() {
+ public WalkingTaskType(BukkitQuestsPlugin plugin) {
super("walking", TaskUtils.TASK_ATTRIBUTION_STRING, "Walk a set distance.");
- this.creatorConfigValues.add(new ConfigValue("distance", true, "Amount of meters (blocks) to be travelled."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
if (TaskUtils.configValidateExists(root + ".distance", config.get("distance"), problems, "distance", super.getType()))
TaskUtils.configValidateInt(root + ".distance", config.get("distance"), problems, false, true, "distance");
return problems;
}
-
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onMove(PlayerMoveEvent event) {
if (event.getFrom().getBlockX() == event.getTo().getBlockX() && event.getFrom().getBlockZ() == event.getTo().getBlockZ()) {
@@ -52,7 +45,7 @@ public final class WalkingTaskType extends TaskType {
if (player.hasMetadata("NPC")) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/ASkyBlockLevelType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ASkyBlockLevelTaskType.java
index bd0aba60..3953a95f 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/ASkyBlockLevelType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ASkyBlockLevelTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
+package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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 com.wasteofplastic.askyblock.events.IslandPostLevelEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -18,31 +17,26 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class ASkyBlockLevelType extends TaskType {
+public final class ASkyBlockLevelTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public ASkyBlockLevelType() {
+ public ASkyBlockLevelTaskType(BukkitQuestsPlugin plugin) {
super("askyblock_level", TaskUtils.TASK_ATTRIBUTION_STRING, "Reach a certain island level for ASkyBlock.");
- this.creatorConfigValues.add(new ConfigValue("level", true, "Minimum island level needed."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType()))
TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onIslandLevel(IslandPostLevelEvent event) {
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/BentoBoxLevelTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java
index 00f4e12f..ba662166 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/BentoBoxLevelTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java
@@ -1,16 +1,15 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
+package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskTypeManager;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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 com.leonardobishop.quests.common.tasktype.TaskTypeManager;
import org.bukkit.event.EventHandler;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.events.BentoBoxEvent;
@@ -24,32 +23,28 @@ import java.util.Map;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicLong;
-public final class BentoBoxLevelTaskType extends TaskType {
+public final class BentoBoxLevelTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
private Field levelField = null;
- public BentoBoxLevelTaskType() {
+ public BentoBoxLevelTaskType(BukkitQuestsPlugin plugin) {
super("bentobox_level", TaskUtils.TASK_ATTRIBUTION_STRING, "Reach a certain island level in the level addon for BentoBox.");
- this.creatorConfigValues.add(new ConfigValue("level", true, "Minimum island level needed."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType()))
TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level");
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
- public static void register(TaskTypeManager manager) {
+ public static void register(BukkitQuestsPlugin plugin, TaskTypeManager manager) {
if (BentoBox.getInstance().getAddonsManager().getAddonByName("Level").isPresent()) {
- manager.registerTaskType(new BentoBoxLevelTaskType());
+ manager.registerTaskType(new BentoBoxLevelTaskType(plugin));
}
}
@@ -61,7 +56,7 @@ public final class BentoBoxLevelTaskType extends TaskType {
Island island = (Island) keyValues.get("island");
for (UUID member : island.getMemberSet()) {
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(member);
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(member);
if (qPlayer == null) {
continue;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/CitizensDeliverTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensDeliverTaskType.java
index 5110d51d..cc4aafa4 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/CitizensDeliverTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensDeliverTaskType.java
@@ -1,15 +1,15 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
+package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.config.ConfigProblemDescriptions;
+import com.leonardobishop.quests.common.player.QPlayer;
+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 net.citizensnpcs.api.event.NPCRightClickEvent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -24,25 +24,18 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class CitizensDeliverTaskType extends TaskType {
+public final class CitizensDeliverTaskType extends BukkitTaskType {
- private final Quests plugin;
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public CitizensDeliverTaskType(Quests plugin) {
+ public CitizensDeliverTaskType(BukkitQuestsPlugin plugin) {
super("citizens_deliver", TaskUtils.TASK_ATTRIBUTION_STRING, "Deliver a set of items to a NPC.");
this.plugin = plugin;
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of item to retrieve."));
- this.creatorConfigValues.add(new ConfigValue("item", true, "Name or ID of item."));
- this.creatorConfigValues.add(new ConfigValue("npc-name", true, "Name of the NPC."));
- this.creatorConfigValues.add(new ConfigValue("remove-items-when-complete", false, "Take the items away from the player on completion (true/false, " +
- "default = false)."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
if (TaskUtils.configValidateExists(root + ".item", config.get("item"), problems, "item", super.getType())) {
Object configBlock = config.get("item");
if (configBlock instanceof ConfigurationSection) {
@@ -52,19 +45,19 @@ public final class CitizensDeliverTaskType extends TaskType {
itemloc = "type";
}
if (!section.contains(itemloc)) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING,
- QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(""), root + ".item.type"));
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
+ ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(""), root + ".item.type"));
} else {
String type = String.valueOf(section.get(itemloc));
if (!plugin.getItemGetter().isValidMaterial(type)) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING,
- QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(type), root + ".item." + itemloc));
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
+ ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(type), root + ".item." + itemloc));
}
}
} else {
if (Material.getMaterial(String.valueOf(configBlock)) == null) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING,
- QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(String.valueOf(configBlock)), root + ".item.item"));
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
+ ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(String.valueOf(configBlock)), root + ".item.item"));
}
}
}
@@ -75,11 +68,6 @@ public final class CitizensDeliverTaskType extends TaskType {
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onNPCClick(NPCRightClickEvent event) {
Bukkit.getScheduler().runTaskLater(plugin, () -> checkInventory(event.getClicker(), event.getNPC().getName()), 1L);
@@ -120,7 +108,7 @@ public final class CitizensDeliverTaskType extends TaskType {
ItemStack is;
if (configBlock instanceof ConfigurationSection) {
- is = Quests.get().getItemStack("", (org.bukkit.configuration.ConfigurationSection) configBlock);
+ is = plugin.getItemStack("", (ConfigurationSection) configBlock);
} else {
material = Material.getMaterial(String.valueOf(configBlock));
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/CitizensInteractTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensInteractTaskType.java
index 08440b05..5c6e6be2 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/CitizensInteractTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensInteractTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
+package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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 net.citizensnpcs.api.event.NPCRightClickEvent;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
@@ -19,33 +18,26 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class CitizensInteractTaskType extends TaskType {
+public final class CitizensInteractTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public CitizensInteractTaskType() {
+ public CitizensInteractTaskType(BukkitQuestsPlugin plugin) {
super("citizens_interact", TaskUtils.TASK_ATTRIBUTION_STRING, "Interact with an NPC to complete the quest.");
- this.creatorConfigValues.add(new ConfigValue("npc-name", true, "Name of the NPC."));
- this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
TaskUtils.configValidateExists(root + ".npc-name", config.get("npc-name"), problems, "npc-name", super.getType());
TaskUtils.configValidateBoolean(root + ".remove-items-when-complete", config.get("remove-items-when-complete"), problems, true, "remove-items-when-complete", super.getType());
return problems;
}
-
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onNPCClick(NPCRightClickEvent event) {
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getClicker().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getClicker().getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/EssentialsBalanceTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java
index eaf6ba13..f207a499 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/EssentialsBalanceTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java
@@ -1,17 +1,16 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
+package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
import com.earth2me.essentials.Essentials;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-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.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.quest.Task;
import net.ess3.api.events.UserBalanceUpdateEvent;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -24,18 +23,18 @@ import java.util.HashMap;
import java.util.List;
import java.util.UUID;
-public class EssentialsBalanceTaskType extends TaskType {
+public class EssentialsBalanceTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public EssentialsBalanceTaskType() {
+ public EssentialsBalanceTaskType(BukkitQuestsPlugin plugin) {
super("essentials_balance", TaskUtils.TASK_ATTRIBUTION_STRING, "Reach a set amount of money.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of money to reach."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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, false, "amount");
return problems;
@@ -46,7 +45,7 @@ public class EssentialsBalanceTaskType extends TaskType {
Player player = Bukkit.getPlayer(playerUUID);
Essentials ess = (Essentials) Bukkit.getPluginManager().getPlugin("Essentials");
if (player != null && player.isOnline() && ess != null) {
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(playerUUID);
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(playerUUID);
if (qPlayer == null) {
return;
}
@@ -63,14 +62,9 @@ public class EssentialsBalanceTaskType extends TaskType {
}
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onMoneyEarn(UserBalanceUpdateEvent event) {
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java
index 6b080f13..5f4c2a0e 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
+package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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 net.ess3.api.events.UserBalanceUpdateEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -19,32 +18,26 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public class EssentialsMoneyEarnTaskType extends TaskType {
+public class EssentialsMoneyEarnTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public EssentialsMoneyEarnTaskType() {
+ public EssentialsMoneyEarnTaskType(BukkitQuestsPlugin plugin) {
super("essentials_moneyearn", TaskUtils.TASK_ATTRIBUTION_STRING, "Earn a set amount of money.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of money to earn."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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, false, "amount");
return problems;
}
-
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onMoneyEarn(UserBalanceUpdateEvent event) {
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/IridiumSkyblockValueType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/IridiumSkyblockValueType.java
new file mode 100644
index 00000000..35934250
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/IridiumSkyblockValueType.java
@@ -0,0 +1,87 @@
+//package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
+//
+//import com.iridium.iridiumskyblock.Island;
+//import com.iridium.iridiumskyblock.api.IslandWorthCalculatedEvent;
+//import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+//import com.leonardobishop.quests.util.QuestsConfigLoader;
+//import com.leonardobishop.quests.api.QuestsAPI;
+//import com.leonardobishop.quests.player.QPlayer;
+//import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
+//import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
+//import com.leonardobishop.quests.quest.Quest;
+//import com.leonardobishop.quests.quest.Task;
+//import com.leonardobishop.quests.tasktype.ConfigValue;
+//import com.leonardobishop.quests.tasktype.TaskType;
+//import com.leonardobishop.quests.tasktype.TaskUtils;
+//import org.bukkit.event.EventHandler;
+//import org.bukkit.event.EventPriority;
+//
+//import java.util.ArrayList;
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.UUID;
+//
+//TODO update to latest ver
+//public final class IridiumSkyblockValueType extends BukkitTaskType {
+//
+// private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+//
+// public IridiumSkyblockValueType() {
+// super("iridiumskyblock_value", TaskUtils.TASK_ATTRIBUTION_STRING, "Reach a certain island value for Iridium Skyblock.");
+// this.creatorConfigValues.add(new ConfigValue("value", true, "Minimum island value needed."));
+// }
+//
+// @Override
+// public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
+// ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+// if (TaskUtils.configValidateExists(root + ".value", config.get("value"), problems, "value", super.getType()))
+// TaskUtils.configValidateInt(root + ".value", config.get("value"), problems, false, false, "value");
+// return problems;
+// }
+//
+// @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+// public void onIslandLevel(IslandWorthCalculatedEvent event) {
+// Island island = event.getIsland();
+// for (String player : island.members) {
+// UUID uuid;
+// try {
+// uuid = UUID.fromString(player);
+// } catch (Exception e) {
+// continue;
+// }
+// QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(uuid);
+// if (qPlayer == null) {
+// continue;
+// }
+//
+// for (Quest quest : IridiumSkyblockValueType.super.getRegisteredQuests()) {
+// if (qPlayer.hasStartedQuest(quest)) {
+// QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest);
+//
+// for (Task task : quest.getTasksOfType(IridiumSkyblockValueType.super.getType())) {
+// TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
+//
+// if (taskProgress.isCompleted()) {
+// continue;
+// }
+//
+// int islandValueNeeded = (int) task.getConfigValue("value");
+//
+// taskProgress.setProgress(event.getIslandWorth());
+//
+// if (((double) taskProgress.getProgress()) >= islandValueNeeded) {
+// taskProgress.setCompleted(true);
+// }
+// }
+// }
+// }
+// }
+//
+// }
+//
+// @Override
+// public List<ConfigValue> getCreatorConfigValues() {
+// return creatorConfigValues;
+// }
+//
+//}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/MythicMobsKillingType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/MythicMobsKillingType.java
index 47245665..1e4ede3e 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/MythicMobsKillingType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/MythicMobsKillingType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
+package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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 io.lumine.xikage.mythicmobs.api.bukkit.events.MythicMobDeathEvent;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
@@ -20,20 +19,18 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class MythicMobsKillingType extends TaskType {
+public final class MythicMobsKillingType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public MythicMobsKillingType() {
+ public MythicMobsKillingType(BukkitQuestsPlugin plugin) {
super("mythicmobs_killing", TaskUtils.TASK_ATTRIBUTION_STRING, "Kill a set amount of a MythicMobs entity.");
- this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of mobs to be killed."));
- this.creatorConfigValues.add(new ConfigValue("name", true, "The 'internal name' of the MythicMob."));
- this.creatorConfigValues.add(new ConfigValue("min-level", true, "The minimum level for the MythicMob."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
TaskUtils.configValidateExists(root + ".name", config.get("name"), problems, "name", super.getType());
if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType()))
TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount");
@@ -42,11 +39,6 @@ public final class MythicMobsKillingType extends TaskType {
return problems;
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onMobKill(MythicMobDeathEvent event) {
Entity killer = event.getKiller();
@@ -63,7 +55,7 @@ public final class MythicMobsKillingType extends TaskType {
String mobName = event.getMobType().getInternalName();
double level = event.getMobLevel();
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(killer.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(killer.getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/PlaceholderAPIEvaluateTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PlaceholderAPIEvaluateTaskType.java
index 137844d5..fed42bf4 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/PlaceholderAPIEvaluateTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PlaceholderAPIEvaluateTaskType.java
@@ -1,16 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
+package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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 me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -21,23 +19,19 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class PlaceholderAPIEvaluateTaskType extends TaskType {
+public final class PlaceholderAPIEvaluateTaskType extends BukkitTaskType {
- private final Quests plugin;
+ private final BukkitQuestsPlugin plugin;
private BukkitTask poll;
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
- public PlaceholderAPIEvaluateTaskType(Quests plugin) {
+ public PlaceholderAPIEvaluateTaskType(BukkitQuestsPlugin plugin) {
super("placeholderapi_evaluate", TaskUtils.TASK_ATTRIBUTION_STRING, "Evaluate the result of a placeholder");
this.plugin = plugin;
- this.creatorConfigValues.add(new ConfigValue("placeholder", true, "The placeholder string (including %%)."));
- this.creatorConfigValues.add(new ConfigValue("evaluates", true, "What it should evaluate to be marked as complete."));
- this.creatorConfigValues.add(new ConfigValue("operator", false, "Comparison method."));
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
TaskUtils.configValidateExists(root + ".placeholder", config.get("placeholder"), problems, "placeholder", super.getType());
boolean evalExists = TaskUtils.configValidateExists(root + ".evaluates", config.get("evaluates"), problems, "evaluates", super.getType());
@@ -47,7 +41,7 @@ public final class PlaceholderAPIEvaluateTaskType extends TaskType {
try {
operator = Operator.valueOf(operatorStr);
} catch (IllegalArgumentException ex) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING,
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
"Operator '" + operatorStr + "' does not exist.", root + ".operator"));
}
if (operator != null && evalExists) {
@@ -55,7 +49,7 @@ public final class PlaceholderAPIEvaluateTaskType extends TaskType {
try {
Double.parseDouble(evalStr);
} catch (IllegalArgumentException ex) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING,
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
"Numeric operator specified, but placeholder evaluation '" + evalStr + "' is not numeric.", root + ".evaluates"));
}
}
@@ -69,7 +63,7 @@ public final class PlaceholderAPIEvaluateTaskType extends TaskType {
@Override
public void run() {
for (Player player : Bukkit.getOnlinePlayers()) {
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
continue;
}
@@ -148,11 +142,6 @@ public final class PlaceholderAPIEvaluateTaskType extends TaskType {
}
}
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
enum Operator {
GREATER_THAN,
LESS_THAN,
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java
index 664c0ab6..c7944232 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java
@@ -1,14 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
+package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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 net.brcdev.shopgui.event.ShopPreTransactionEvent;
import net.brcdev.shopgui.shop.ShopManager;
import org.bukkit.event.EventHandler;
@@ -18,15 +18,18 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public class ShopGUIPlusBuyCertainTaskType extends TaskType {
+public class ShopGUIPlusBuyCertainTaskType extends BukkitTaskType {
- public ShopGUIPlusBuyCertainTaskType() {
+ private final BukkitQuestsPlugin plugin;
+
+ public ShopGUIPlusBuyCertainTaskType(BukkitQuestsPlugin plugin) {
super("shopguiplus_buycertain", TaskUtils.TASK_ATTRIBUTION_STRING, "Purchase a given item from a ShopGUI+ shop");
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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, false, "amount");
TaskUtils.configValidateExists(root + ".id", config.get("id"), problems, "id", super.getType());
@@ -37,7 +40,7 @@ public class ShopGUIPlusBuyCertainTaskType extends TaskType {
public void onMobKill(ShopPreTransactionEvent event) {
if (event.getShopAction() != ShopManager.ShopAction.BUY) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java
index 441c306d..9b2ba441 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java
@@ -1,14 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
+package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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 net.brcdev.shopgui.event.ShopPreTransactionEvent;
import net.brcdev.shopgui.shop.ShopManager;
import org.bukkit.event.EventHandler;
@@ -18,15 +18,18 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public class ShopGUIPlusSellCertainTaskType extends TaskType {
+public class ShopGUIPlusSellCertainTaskType extends BukkitTaskType {
- public ShopGUIPlusSellCertainTaskType() {
+ private final BukkitQuestsPlugin plugin;
+
+ public ShopGUIPlusSellCertainTaskType(BukkitQuestsPlugin plugin) {
super("shopguiplus_sellcertain", TaskUtils.TASK_ATTRIBUTION_STRING, "Sell a given item from to a ShopGUI+ shop");
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ 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, false, "amount");
TaskUtils.configValidateExists(root + ".id", config.get("id"), problems, "id", super.getType());
@@ -37,7 +40,7 @@ public class ShopGUIPlusSellCertainTaskType extends TaskType {
public void onMobKill(ShopPreTransactionEvent event) {
if (event.getShopAction() != ShopManager.ShopAction.SELL || event.getShopAction() != ShopManager.ShopAction.SELL_ALL) return;
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/uSkyBlockLevelType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/uSkyBlockLevelTaskType.java
index a88ca6dc..ac093522 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/uSkyBlockLevelType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/uSkyBlockLevelTaskType.java
@@ -1,15 +1,14 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
+package com.leonardobishop.quests.bukkit.tasktype.type.dependent;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType;
+import com.leonardobishop.quests.bukkit.util.TaskUtils;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.player.QPlayer;
+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.event.EventHandler;
import org.bukkit.event.EventPriority;
import us.talabrek.ultimateskyblock.api.event.uSkyBlockScoreChangedEvent;
@@ -18,32 +17,26 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-public final class uSkyBlockLevelType extends TaskType {
+public final class uSkyBlockLevelTaskType extends BukkitTaskType {
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
+ private final BukkitQuestsPlugin plugin;
- public uSkyBlockLevelType() {
+ public uSkyBlockLevelTaskType(BukkitQuestsPlugin plugin) {
super("uskyblock_level", TaskUtils.TASK_ATTRIBUTION_STRING, "Reach a certain island level for uSkyBlock.");
- this.creatorConfigValues.add(new ConfigValue("level", true, "Minimum island level needed."));
+ this.plugin = plugin;
}
@Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> problems = new ArrayList<>();
if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType()))
TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level");
return problems;
}
-
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onIslandLevel(uSkyBlockScoreChangedEvent event) {
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
if (qPlayer == null) {
return;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Chat.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Chat.java
new file mode 100644
index 00000000..36fe0d2d
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Chat.java
@@ -0,0 +1,40 @@
+package com.leonardobishop.quests.bukkit.util;
+
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import org.bukkit.ChatColor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Chat {
+
+ public static String color(String s) {
+ return ChatColor.translateAlternateColorCodes('&', s);
+ }
+
+ public static List<String> color(List<String> s) {
+ if (s == null || s.size() == 0) return s;
+
+ List<String> colored = new ArrayList<>();
+ for (String line : s) {
+ colored.add(ChatColor.translateAlternateColorCodes('&', line));
+ }
+ return colored;
+ }
+
+ public static String strip(String s) {
+ return ChatColor.stripColor(s);
+ }
+
+ public static ChatColor matchConfigProblemToColor(ConfigProblem.ConfigProblemType configProblem) {
+ switch (configProblem) {
+ case ERROR:
+ return ChatColor.RED;
+ case WARNING:
+ return ChatColor.YELLOW;
+ default:
+ return ChatColor.WHITE;
+ }
+ }
+
+}
diff --git a/src/main/java/com/leonardobishop/quests/menu/MenuUtil.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java
index 2f04a4f2..2cce530f 100644
--- a/src/main/java/com/leonardobishop/quests/menu/MenuUtil.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java
@@ -1,9 +1,10 @@
-package com.leonardobishop.quests.menu;
+package com.leonardobishop.quests.bukkit.util;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.listener.MenuController;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.menu.CancelQMenu;
+import com.leonardobishop.quests.bukkit.menu.MenuController;
+import com.leonardobishop.quests.bukkit.menu.QMenu;
+import com.leonardobishop.quests.common.quest.Quest;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@@ -15,13 +16,13 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-public class MenuUtil {
+public class MenuUtils {
- public static ItemStack applyPlaceholders(Quests plugin, UUID owner, ItemStack is) {
+ public static ItemStack applyPlaceholders(BukkitQuestsPlugin plugin, UUID owner, ItemStack is) {
return applyPlaceholders(plugin, owner, is, Collections.emptyMap());
}
- public static ItemStack applyPlaceholders(Quests plugin, UUID owner, ItemStack is, Map<String, String> placeholders) {
+ public static ItemStack applyPlaceholders(BukkitQuestsPlugin plugin, UUID owner, ItemStack is, Map<String, String> placeholders) {
ItemStack newItemStack = is.clone();
List<String> lore = newItemStack.getItemMeta().getLore();
List<String> newLore = new ArrayList<>();
@@ -31,7 +32,7 @@ public class MenuUtil {
for (String s : lore) {
for (Map.Entry<String, String> entry : placeholders.entrySet()) {
s = s.replace(entry.getKey(), entry.getValue());
- if (plugin.getPlaceholderAPIHook() != null && Options.GUI_USE_PLACEHOLDERAPI.getBooleanValue()) {
+ if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) {
s = plugin.getPlaceholderAPIHook().replacePlaceholders(player, s);
}
}
@@ -40,7 +41,7 @@ public class MenuUtil {
}
for (Map.Entry<String, String> entry : placeholders.entrySet()) {
ism.setDisplayName(ism.getDisplayName().replace(entry.getKey(), entry.getValue()));
- if (plugin.getPlaceholderAPIHook() != null && Options.GUI_USE_PLACEHOLDERAPI.getBooleanValue()) {
+ if (plugin.getPlaceholderAPIHook() != null && plugin.getQuestsConfig().getBoolean("options.gui-use-placeholderapi")) {
ism.setDisplayName(plugin.getPlaceholderAPIHook().replacePlaceholders(player, ism.getDisplayName()));
}
}
@@ -49,7 +50,7 @@ public class MenuUtil {
return newItemStack;
}
- public static void handleMiddleClick(QMenu menu, Quest quest, Player player, MenuController controller) {
+ public static void handleMiddleClick(BukkitQuestsPlugin plugin, QMenu menu, Quest quest, Player player, MenuController controller) {
if (menu.getOwner().hasStartedQuest(quest)) {
String tracked = menu.getOwner().getPlayerPreferences().getTrackedQuestId();
@@ -62,10 +63,10 @@ public class MenuUtil {
}
}
- public static void handleRightClick(QMenu menu, Quest quest, Player player, MenuController controller) {
+ public static void handleRightClick(BukkitQuestsPlugin plugin, QMenu menu, Quest quest, Player player, MenuController controller) {
if (menu.getOwner().hasStartedQuest(quest)) {
- if (Options.QUEST_AUTOSTART.getBooleanValue()) return;
- CancelQMenu cancelQMenu = new CancelQMenu(menu.getOwner(), menu, quest);
+ if (plugin.getQuestsConfig().getBoolean("options.allow-quest-cancel")) return;
+ CancelQMenu cancelQMenu = new CancelQMenu(plugin, menu, menu.getOwner(), quest);
controller.openMenu(player, cancelQMenu, 1);
}
}
diff --git a/src/main/java/com/leonardobishop/quests/util/Messages.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java
index a86a4144..be99920e 100644
--- a/src/main/java/com/leonardobishop/quests/util/Messages.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java
@@ -1,8 +1,9 @@
-package com.leonardobishop.quests.util;
+package com.leonardobishop.quests.bukkit.util;
-import com.leonardobishop.quests.Quests;
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
import org.bukkit.ChatColor;
+//TODO refactor this
public enum Messages {
TIME_FORMAT("messages.time-format"),
@@ -58,15 +59,21 @@ public enum Messages {
COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS("messages.command-quest-admin-complete-success"),
COMMAND_QUEST_ADMIN_RESET_SUCCESS("messages.command-quest-admin-reset-success");
+ private static BukkitQuestsPlugin plugin;
+
private final String path;
Messages(String path) {
this.path = path;
}
+ public static void setPlugin(BukkitQuestsPlugin plugin) {
+ Messages.plugin = plugin;
+ }
+
public String getMessage() {
- if (Quests.get().getConfig().contains(path)) {
- String message = Quests.get().getConfig().getString(path);
+ if (plugin.getConfig().contains(path)) {
+ String message = plugin.getQuestsConfig().getString(path);
if (message != null) {
return ChatColor.translateAlternateColorCodes('&', message);
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/TaskUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
index 405db7ff..ce930639 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/TaskUtils.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
@@ -1,7 +1,8 @@
-package com.leonardobishop.quests.quest.tasktype;
+package com.leonardobishop.quests.bukkit.util;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.quest.Task;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.config.ConfigProblemDescriptions;
+import com.leonardobishop.quests.common.quest.Task;
import org.bukkit.entity.Player;
import java.util.List;
@@ -40,10 +41,10 @@ public class TaskUtils {
return true;
}
- public static void configValidateInt(String path, Object object, List<QuestsConfigLoader.ConfigProblem> problems, boolean allowNull, boolean greaterThanZero, String... args) {
+ public static void configValidateInt(String path, Object object, List<ConfigProblem> problems, boolean allowNull, boolean greaterThanZero, String... args) {
if (object == null) {
if (!allowNull) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.ERROR,
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR,
String.format("Expected an integer for '%s', but got null instead", (Object[]) args), path));
}
return;
@@ -52,19 +53,19 @@ public class TaskUtils {
try {
Integer i = (Integer) object;
if (greaterThanZero && i <= 0) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.ERROR,
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR,
String.format("Value for field '%s' must be greater than 0", (Object[]) args), path));
}
} catch (ClassCastException ex) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.ERROR,
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR,
String.format("Expected an integer for '%s', but got '" + object + "' instead", (Object[]) args), path));
}
}
- public static void configValidateBoolean(String path, Object object, List<QuestsConfigLoader.ConfigProblem> problems, boolean allowNull, String... args) {
+ public static void configValidateBoolean(String path, Object object, List<ConfigProblem> problems, boolean allowNull, String... args) {
if (object == null) {
if (!allowNull) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.ERROR,
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR,
String.format("Expected a boolean for '%s', but got null instead", (Object[]) args), path));
}
return;
@@ -73,15 +74,15 @@ public class TaskUtils {
try {
Boolean b = (Boolean) object;
} catch (ClassCastException ex) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.ERROR,
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR,
String.format("Expected a boolean for '%s', but got '" + object + "' instead", (Object[]) args), path));
}
}
- public static boolean configValidateExists(String path, Object object, List<QuestsConfigLoader.ConfigProblem> problems, String... args) {
+ public static boolean configValidateExists(String path, Object object, List<ConfigProblem> problems, String... args) {
if (object == null) {
- problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.ERROR,
- String.format(QuestsConfigLoader.ConfigProblemDescriptions.TASK_MISSING_FIELD.getDescription(args), (Object[]) args), path));
+ problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR,
+ String.format(ConfigProblemDescriptions.TASK_MISSING_FIELD.getDescription(args), (Object[]) args), path));
return false;
}
return true;
diff --git a/src/main/resources/plugin.yml b/bukkit/src/main/resources/plugin.yml
index 4c7b7389..5cb81473 100644
--- a/src/main/resources/plugin.yml
+++ b/bukkit/src/main/resources/plugin.yml
@@ -3,7 +3,7 @@ name: Quests
# This will be replaced with the property "version" in build.gradle
version: ${version}
-main: com.leonardobishop.quests.Quests
+main: com.leonardobishop.quests.bukkit.BukkitQuestsPlugin
website: https://github.com/LMBishop/Quests
author: "LMBishop & contributors"
softdepend: [ASkyBlock, BentoBox, IridiumSkyblock, uSkyBlock, Citizens, MythicMobs, PlaceholderAPI, Essentials, ShopGUIPlus, CoreProtect]
@@ -12,7 +12,7 @@ api-version: "1.13" # allows new API features but Quests will still work pre-1.1
commands:
quests:
- description: Main command
+ description: Interact with your quests
usage: /quests
permission: quests.command
aliases: [q, quest]
diff --git a/src/main/resources/config.yml b/bukkit/src/main/resources/resources/bukkit/config.yml
index f7084505..f7084505 100644
--- a/src/main/resources/config.yml
+++ b/bukkit/src/main/resources/resources/bukkit/config.yml
diff --git a/src/main/resources/quests/README.txt b/bukkit/src/main/resources/resources/bukkit/quests/README.txt
index 779dd6bb..779dd6bb 100644
--- a/src/main/resources/quests/README.txt
+++ b/bukkit/src/main/resources/resources/bukkit/quests/README.txt
diff --git a/src/main/resources/quests/example1.yml b/bukkit/src/main/resources/resources/bukkit/quests/example1.yml
index ca57f714..ca57f714 100644
--- a/src/main/resources/quests/example1.yml
+++ b/bukkit/src/main/resources/resources/bukkit/quests/example1.yml
diff --git a/src/main/resources/quests/example2.yml b/bukkit/src/main/resources/resources/bukkit/quests/example2.yml
index 7ad82bea..7ad82bea 100644
--- a/src/main/resources/quests/example2.yml
+++ b/bukkit/src/main/resources/resources/bukkit/quests/example2.yml
diff --git a/src/main/resources/quests/example3.yml b/bukkit/src/main/resources/resources/bukkit/quests/example3.yml
index dbd893e4..dbd893e4 100644
--- a/src/main/resources/quests/example3.yml
+++ b/bukkit/src/main/resources/resources/bukkit/quests/example3.yml
diff --git a/src/main/resources/quests/example4.yml b/bukkit/src/main/resources/resources/bukkit/quests/example4.yml
index 4e9c27a8..4e9c27a8 100644
--- a/src/main/resources/quests/example4.yml
+++ b/bukkit/src/main/resources/resources/bukkit/quests/example4.yml
diff --git a/src/main/resources/quests/example5.yml b/bukkit/src/main/resources/resources/bukkit/quests/example5.yml
index cb92f0f1..cb92f0f1 100644
--- a/src/main/resources/quests/example5.yml
+++ b/bukkit/src/main/resources/resources/bukkit/quests/example5.yml
diff --git a/src/main/resources/quests/example6.yml b/bukkit/src/main/resources/resources/bukkit/quests/example6.yml
index 0913a7cb..0913a7cb 100644
--- a/src/main/resources/quests/example6.yml
+++ b/bukkit/src/main/resources/resources/bukkit/quests/example6.yml
diff --git a/src/main/resources/quests/example7.yml b/bukkit/src/main/resources/resources/bukkit/quests/example7.yml
index 32bb7e04..32bb7e04 100644
--- a/src/main/resources/quests/example7.yml
+++ b/bukkit/src/main/resources/resources/bukkit/quests/example7.yml
diff --git a/bungee/build.gradle b/bungee/build.gradle
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/bungee/build.gradle
diff --git a/common/build.gradle b/common/build.gradle
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/common/build.gradle
diff --git a/common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblem.java b/common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblem.java
new file mode 100644
index 00000000..d9f30c09
--- /dev/null
+++ b/common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblem.java
@@ -0,0 +1,63 @@
+package com.leonardobishop.quests.common.config;
+
+public final class ConfigProblem {
+
+ private final ConfigProblemType type;
+ private final String description;
+ private final String location;
+
+ public ConfigProblem(ConfigProblemType type, String description, String location) {
+ this.type = type;
+ this.description = description == null ? "?" : description;
+ ;
+ this.location = location == null ? "?" : location;
+ }
+
+ public ConfigProblem(ConfigProblemType type, String description) {
+ this.type = type;
+ this.description = description == null ? "?" : description;
+ ;
+ this.location = "?";
+ }
+
+ public ConfigProblemType getType() {
+ return type;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public enum ConfigProblemType {
+
+ ERROR("Error", "E", 1),
+ WARNING("Warning", "W", 2);
+
+ private final String title;
+ private final String shortened;
+ private final int priority;
+
+ ConfigProblemType(String title, String shortened, int priority) {
+ this.title = title;
+ this.shortened = shortened;
+ this.priority = priority;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public String getShortened() {
+ return shortened;
+ }
+
+ public int getPriority() {
+ return priority;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblemDescriptions.java b/common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblemDescriptions.java
new file mode 100644
index 00000000..868bdfbb
--- /dev/null
+++ b/common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblemDescriptions.java
@@ -0,0 +1,35 @@
+package com.leonardobishop.quests.common.config;
+
+public enum ConfigProblemDescriptions {
+
+ MALFORMED_YAML("Malformed YAML file, cannot read config"),
+ INVALID_QUEST_ID("ID '%s' is invalid, must be alphanumeric, unique and with no spaces"),
+ NO_TASKS("Quest contains no valid tasks"),
+ NO_TASK_TYPE("Task type not specified"),
+ UNKNOWN_TASK_TYPE("Task type '%s' does not exist"),
+ NO_DISPLAY_NAME("No name specified"),
+ NO_DISPLAY_MATERIAL("No material specified"),
+ UNKNOWN_MATERIAL("Material '%s' does not exist"),
+ UNKNOWN_ENTITY_TYPE("Entity type '%s' does not exist"),
+ TASK_MALFORMED_NOT_SECTION("Task '%s' is not a configuration section (has no fields)"),
+ TASK_MISSING_FIELD("Required field '%s' is missing for task type '%s'"),
+ UNKNOWN_TASK_REFERENCE("Attempt to reference unknown task '%s'"),
+ UNKNOWN_CATEGORY("Category '%s' does not exist"),
+ UNKNOWN_REQUIREMENT("Quest requirement '%s' does not exist");
+
+ private final String description;
+
+ ConfigProblemDescriptions(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public String toString() {
+ return getDescription();
+ }
+
+ public String getDescription(String... format) {
+ return String.format(description, (Object[]) format);
+ }
+
+} \ No newline at end of file
diff --git a/common/src/main/java/com/leonardobishop/quests/common/config/QuestsConfig.java b/common/src/main/java/com/leonardobishop/quests/common/config/QuestsConfig.java
new file mode 100644
index 00000000..be93ed83
--- /dev/null
+++ b/common/src/main/java/com/leonardobishop/quests/common/config/QuestsConfig.java
@@ -0,0 +1,25 @@
+package com.leonardobishop.quests.common.config;
+
+import java.util.List;
+
+public interface QuestsConfig {
+
+ boolean loadConfig();
+
+ String getString(String path);
+
+ String getString(String path, String def);
+
+ boolean getBoolean(String path);
+
+ boolean getBoolean(String path, boolean def);
+
+ int getInt(String path);
+
+ int getInt(String path, int def);
+
+ List<String> getStringList(String path);
+
+ List<String> getStringList(String path, List<String> def);
+
+}
diff --git a/common/src/main/java/com/leonardobishop/quests/common/config/QuestsLoader.java b/common/src/main/java/com/leonardobishop/quests/common/config/QuestsLoader.java
new file mode 100644
index 00000000..09db3c52
--- /dev/null
+++ b/common/src/main/java/com/leonardobishop/quests/common/config/QuestsLoader.java
@@ -0,0 +1,11 @@
+package com.leonardobishop.quests.common.config;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+public interface QuestsLoader {
+
+ Map<String, List<ConfigProblem>> loadQuests(File root);
+
+}
diff --git a/src/main/java/com/leonardobishop/quests/api/enums/QuestStartResult.java b/common/src/main/java/com/leonardobishop/quests/common/enums/QuestStartResult.java
index 7241668d..28d8a43c 100644
--- a/src/main/java/com/leonardobishop/quests/api/enums/QuestStartResult.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/enums/QuestStartResult.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.api.enums;
+package com.leonardobishop.quests.common.enums;
public enum QuestStartResult {
QUEST_SUCCESS, //0
diff --git a/common/src/main/java/com/leonardobishop/quests/common/logger/QuestsLogger.java b/common/src/main/java/com/leonardobishop/quests/common/logger/QuestsLogger.java
new file mode 100644
index 00000000..b4a192cf
--- /dev/null
+++ b/common/src/main/java/com/leonardobishop/quests/common/logger/QuestsLogger.java
@@ -0,0 +1,44 @@
+package com.leonardobishop.quests.common.logger;
+
+public interface QuestsLogger {
+
+ LoggingLevel getServerLoggingLevel();
+
+ void setServerLoggingLevel(LoggingLevel serverLoggingLevel);
+
+ void log(String str, LoggingLevel level);
+
+ void debug(String str);
+
+ void info(String str);
+
+ void warning(String str);
+
+ void severe(String str);
+
+ enum LoggingLevel {
+ ERROR(0),
+ WARNING(1),
+ INFO(2),
+ DEBUG(3);
+
+ private int numericVerbosity;
+
+ LoggingLevel(int number) {
+ numericVerbosity = number;
+ }
+
+ public int getNumericVerbosity() {
+ return numericVerbosity;
+ }
+
+ public static LoggingLevel fromNumber(int number) {
+ for (LoggingLevel level : LoggingLevel.values()) {
+ if (level.getNumericVerbosity() == number) {
+ return level;
+ }
+ }
+ return LoggingLevel.INFO;
+ }
+ }
+}
diff --git a/common/src/main/java/com/leonardobishop/quests/common/player/QPlayer.java b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayer.java
new file mode 100644
index 00000000..0792a0fc
--- /dev/null
+++ b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayer.java
@@ -0,0 +1,127 @@
+package com.leonardobishop.quests.common.player;
+
+import com.leonardobishop.quests.common.questcontroller.QuestController;
+import com.leonardobishop.quests.common.enums.QuestStartResult;
+import com.leonardobishop.quests.common.plugin.Quests;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.quest.Quest;
+
+import java.util.UUID;
+
+/**
+ * Represents a player.
+ */
+public class QPlayer {
+
+ private final Quests plugin;
+ private final UUID uuid;
+ private final QPlayerPreferences playerPreferences;
+ private final QuestProgressFile questProgressFile;
+ private QuestController questController;
+
+ public QPlayer(Quests plugin, UUID uuid, QPlayerPreferences playerPreferences, QuestProgressFile questProgressFile, QuestController questController) {
+ this.plugin = plugin;
+ this.uuid = uuid;
+ this.playerPreferences = playerPreferences;
+ this.questProgressFile = questProgressFile;
+ this.questController = questController;
+ }
+
+ public UUID getPlayerUUID() {
+ return this.uuid;
+ }
+
+ /**
+ * Attempt to complete a quest for the player. This will also play all effects (such as titles, messages etc.)
+ * and also dispatches all rewards for the player.
+ *
+ * @param quest the quest to complete
+ * @return true (always)
+ */
+ public boolean completeQuest(Quest quest) {
+ return questController.completeQuestForPlayer(this, quest);
+ }
+
+ /**
+ * Attempt to track a quest for the player. This will also play all effects (such as titles, messages etc.)
+ **
+ * @param quest the quest to track
+ */
+ public void trackQuest(Quest quest) {
+ questController.trackQuestForPlayer(this, quest);
+ }
+
+ /**
+ * Gets whether or not the player has started a specific quest.
+ *
+ * @param quest the quest to test for
+ * @return true if the quest is started or quest autostart is enabled and the quest is ready to start, false otherwise
+ */
+ public boolean hasStartedQuest(Quest quest) {
+ return questController.hasPlayerStartedQuest(this, quest);
+ }
+
+ /**
+ * Attempt to start a quest for the player. This will also play all effects (such as titles, messages etc.)
+ *
+ * Warning: will fail if the player is not online.
+ *
+ * @param quest the quest to start
+ * @return the quest start result -- {@code QuestStartResult.QUEST_SUCCESS} indicates success
+ */
+ // TODO PlaceholderAPI support
+ public QuestStartResult startQuest(Quest quest) {
+ return questController.startQuestForPlayer(this, quest);
+ }
+
+ /**
+ * Attempt to cancel a quest for the player. This will also play all effects (such as titles, messages etc.)
+ *
+ * @param quest the quest to start
+ * @return true if the quest was cancelled, false otherwise
+ */
+ public boolean cancelQuest(Quest quest) {
+ return questController.cancelQuestForPlayer(this, quest);
+ }
+
+ /**
+ * Check if the player can start a quest.
+ *
+ * Warning: will fail if the player is not online.
+ *
+ * @param quest the quest to check
+ * @return the quest start result
+ */
+ public QuestStartResult canStartQuest(Quest quest) {
+ return questController.canPlayerStartQuest(this, quest);
+ }
+
+
+ public QuestProgressFile getQuestProgressFile() {
+ return questProgressFile;
+ }
+
+ public QPlayerPreferences getPlayerPreferences() {
+ return playerPreferences;
+ }
+
+ public QuestController getQuestController() {
+ return questController;
+ }
+
+ public void setQuestController(QuestController questController) {
+ this.questController = questController;
+ }
+
+ @Override //Used by java GC
+ public boolean equals(Object o) {
+ if (!(o instanceof QPlayer)) return false;
+ QPlayer qPlayer = (QPlayer) o;
+ return this.uuid == qPlayer.getPlayerUUID();
+ }
+
+ @Override //Used by java GC
+ public int hashCode() {
+ return uuid.hashCode() * 73; //uuid hash * prime number
+ }
+}
diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java
index 182b5666..28a46ae1 100644
--- a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java
@@ -1,15 +1,10 @@
-package com.leonardobishop.quests.player;
+package com.leonardobishop.quests.common.player;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.util.QuestsLogger;
-import com.leonardobishop.quests.player.questprogressfile.QPlayerPreferences;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
-import com.leonardobishop.quests.quest.controller.NormalQuestController;
-import com.leonardobishop.quests.quest.controller.QuestController;
-import com.leonardobishop.quests.storage.MySqlStorageProvider;
-import com.leonardobishop.quests.storage.StorageProvider;
-import com.leonardobishop.quests.storage.YamlStorageProvider;
-import org.bukkit.Bukkit;
+import com.leonardobishop.quests.common.logger.QuestsLogger;
+import com.leonardobishop.quests.common.storage.StorageProvider;
+import com.leonardobishop.quests.common.plugin.Quests;
+import com.leonardobishop.quests.common.questcontroller.QuestController;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
import java.util.Collection;
import java.util.Map;
@@ -20,29 +15,13 @@ public class QPlayerManager {
private final Map<UUID, QPlayer> qPlayers = new ConcurrentHashMap<>();
private final Quests plugin;
- private StorageProvider storageProvider;
+ private final StorageProvider storageProvider;
private QuestController activeQuestController;
-
- public QPlayerManager(Quests plugin) {
+ public QPlayerManager(Quests plugin, StorageProvider storageProvider, QuestController questController) {
this.plugin = plugin;
-
- String configuredProvider = plugin.getConfig().getString("options.storage.provider", "yaml");
- if (configuredProvider.equalsIgnoreCase("yaml")) {
- this.storageProvider = new YamlStorageProvider(plugin);
- } else if (configuredProvider.equalsIgnoreCase("mysql")) {
- this.storageProvider = new MySqlStorageProvider(plugin, plugin.getConfig().getConfigurationSection("options.storage.database-settings"));
- } else {
- plugin.getQuestsLogger().warning("No valid storage provider is configured - Quests will use YAML storage as a default");
- this.storageProvider = new YamlStorageProvider(plugin);
- }
- try {
- storageProvider.init();
- } catch (Exception ignored) {
- plugin.getQuestsLogger().severe("An error occurred initialising the storage provider.");
- }
-
- this.activeQuestController = new NormalQuestController(plugin);
+ this.storageProvider = storageProvider;
+ this.activeQuestController = questController;
}
/**
@@ -68,7 +47,7 @@ public class QPlayerManager {
* @param uuid the uuid of the player
*/
public void removePlayer(UUID uuid) {
- plugin.getQuestsLogger().debug("Unloading and saving player " + uuid + ". Main thread: " + Bukkit.isPrimaryThread());
+ plugin.getQuestsLogger().debug("Unloading and saving player " + uuid + ".");
qPlayers.computeIfPresent(uuid, (mapUUID, qPlayer) -> {
savePlayer(uuid);
return null;
@@ -97,7 +76,7 @@ public class QPlayerManager {
public void savePlayer(UUID uuid, QuestProgressFile originalProgressFile) {
QuestProgressFile clonedProgressFile = new QuestProgressFile(originalProgressFile);
originalProgressFile.resetModified();
- plugin.getServer().getScheduler().runTaskAsynchronously(plugin, () -> save(uuid, clonedProgressFile));
+ plugin.getScheduler().doAsync(() -> save(uuid, clonedProgressFile));
}
/**
@@ -124,7 +103,7 @@ public class QPlayerManager {
}
private void save(UUID uuid, QuestProgressFile questProgressFile) {
- plugin.getQuestsLogger().debug("Saving player " + uuid + ". Main thread: " + Bukkit.isPrimaryThread());
+ plugin.getQuestsLogger().debug("Saving player " + uuid + ".");
storageProvider.saveProgressFile(uuid, questProgressFile);
}
@@ -149,7 +128,7 @@ public class QPlayerManager {
* @param uuid the uuid of the player
*/
public void loadPlayer(UUID uuid) {
- plugin.getQuestsLogger().debug("Loading player " + uuid + ". Main thread: " + Bukkit.isPrimaryThread());
+ plugin.getQuestsLogger().debug("Loading player " + uuid + ".");
qPlayers.computeIfAbsent(uuid, s -> {
QuestProgressFile questProgressFile = storageProvider.loadProgressFile(uuid);
if (questProgressFile == null) return null;
diff --git a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QPlayerPreferences.java b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java
index 764189f9..5278ae09 100644
--- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QPlayerPreferences.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.player.questprogressfile;
+package com.leonardobishop.quests.common.player;
public class QPlayerPreferences {
diff --git a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgress.java b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgress.java
index d7cac084..d0e0627d 100644
--- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgress.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgress.java
@@ -1,6 +1,6 @@
-package com.leonardobishop.quests.player.questprogressfile;
+package com.leonardobishop.quests.common.player.questprogressfile;
-import com.leonardobishop.quests.Quests;
+import com.leonardobishop.quests.common.plugin.Quests;
import java.util.Collection;
import java.util.HashMap;
diff --git a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java
index 3f6d9900..a0c51d9c 100644
--- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java
@@ -1,15 +1,10 @@
-package com.leonardobishop.quests.player.questprogressfile;
+package com.leonardobishop.quests.common.player.questprogressfile;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.util.Options;
-import org.bukkit.Bukkit;
-import org.bukkit.configuration.file.YamlConfiguration;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.plugin.Quests;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.quest.Task;
-import java.io.File;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -41,9 +36,10 @@ public class QuestProgressFile {
}
public void addQuestProgress(QuestProgress questProgress) {
- if (Options.VERIFY_QUEST_EXISTS_ON_LOAD.getBooleanValue(true) && plugin.getQuestManager().getQuestById(questProgress.getQuestId()) == null) {
- return;
- }
+ //TODO don't do here
+// if (Options.VERIFY_QUEST_EXISTS_ON_LOAD.getBooleanValue(true) && plugin.getQuestManager().getQuestById(questProgress.getQuestId()) == null) {
+// return;
+// }
this.questProgress.put(questProgress.getQuestId(), questProgress);
}
diff --git a/src/main/java/com/leonardobishop/quests/player/questprogressfile/TaskProgress.java b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/TaskProgress.java
index e0943ff3..cb7f3fec 100644
--- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/TaskProgress.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/TaskProgress.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.player.questprogressfile;
+package com.leonardobishop.quests.common.player.questprogressfile;
import java.util.UUID;
diff --git a/common/src/main/java/com/leonardobishop/quests/common/plugin/Quests.java b/common/src/main/java/com/leonardobishop/quests/common/plugin/Quests.java
new file mode 100644
index 00000000..f6eb67c5
--- /dev/null
+++ b/common/src/main/java/com/leonardobishop/quests/common/plugin/Quests.java
@@ -0,0 +1,38 @@
+package com.leonardobishop.quests.common.plugin;
+
+import com.leonardobishop.quests.common.questcontroller.QuestController;
+import com.leonardobishop.quests.common.logger.QuestsLogger;
+import com.leonardobishop.quests.common.player.QPlayerManager;
+import com.leonardobishop.quests.common.quest.QuestCompleter;
+import com.leonardobishop.quests.common.quest.QuestManager;
+import com.leonardobishop.quests.common.scheduler.ServerScheduler;
+import com.leonardobishop.quests.common.storage.StorageProvider;
+import com.leonardobishop.quests.common.tasktype.TaskTypeManager;
+import com.leonardobishop.quests.common.updater.Updater;
+import com.leonardobishop.quests.common.config.QuestsConfig;
+
+public interface Quests {
+
+ QuestsLogger getQuestsLogger();
+
+ QuestManager getQuestManager();
+
+ QPlayerManager getPlayerManager();
+
+ QuestController getQuestController();
+
+ TaskTypeManager getTaskTypeManager();
+
+ QuestCompleter getQuestCompleter();
+
+ QuestsConfig getQuestsConfig();
+
+ Updater getUpdater();
+
+ ServerScheduler getScheduler();
+
+ StorageProvider getStorageProvider();
+
+ void reloadQuests();
+
+}
diff --git a/src/main/java/com/leonardobishop/quests/quest/Category.java b/common/src/main/java/com/leonardobishop/quests/common/quest/Category.java
index d09143dc..7bd8f10d 100644
--- a/src/main/java/com/leonardobishop/quests/quest/Category.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/quest/Category.java
@@ -1,7 +1,4 @@
-package com.leonardobishop.quests.quest;
-
-import org.bukkit.ChatColor;
-import org.bukkit.inventory.ItemStack;
+package com.leonardobishop.quests.common.quest;
import java.util.ArrayList;
import java.util.List;
@@ -9,13 +6,11 @@ import java.util.List;
public class Category {
private final String id;
- private final ItemStack displayItem;
private final boolean permissionRequired;
private final List<String> registeredQuestIds = new ArrayList<>();
- public Category(String id, ItemStack displayItem, boolean permissionRequired) {
+ public Category(String id, boolean permissionRequired) {
this.id = id;
- this.displayItem = displayItem;
this.permissionRequired = permissionRequired;
}
@@ -27,10 +22,6 @@ public class Category {
return permissionRequired;
}
- public ItemStack getDisplayItem() {
- return displayItem;
- }
-
public void registerQuestId(String questid) {
registeredQuestIds.add(questid);
}
@@ -39,8 +30,4 @@ public class Category {
return registeredQuestIds;
}
-
- public String getDisplayNameStripped() {
- return ChatColor.stripColor(this.displayItem.getItemMeta().getDisplayName());
- }
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/Quest.java b/common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java
index c286a45a..510e88d9 100644
--- a/src/main/java/com/leonardobishop/quests/quest/Quest.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java
@@ -1,7 +1,4 @@
-package com.leonardobishop.quests.quest;
-
-import com.leonardobishop.quests.menu.QItemStack;
-import org.bukkit.ChatColor;
+package com.leonardobishop.quests.common.quest;
import java.util.ArrayList;
import java.util.Collection;
@@ -13,7 +10,6 @@ public class Quest implements Comparable<Quest> {
private Map<String, Task> tasks = new HashMap<>();
private final String id;
- private final QItemStack displayItem;
private final List<String> rewards;
private final List<String> requirements;
private final List<String> rewardString;
@@ -27,14 +23,13 @@ public class Quest implements Comparable<Quest> {
private String categoryid;
- public Quest(String id, QItemStack displayItem, List<String> rewards, List<String> requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, boolean permissionRequired, List<String> rewardString, List<String> startString, Map<String, String> placeholders, String categoryid, int sortOrder) {
- this(id, displayItem, rewards, requirements, repeatable, cooldownEnabled, cooldown, permissionRequired, rewardString, startString, placeholders, sortOrder);
+ public Quest(String id, List<String> rewards, List<String> requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, boolean permissionRequired, List<String> rewardString, List<String> startString, Map<String, String> placeholders, String categoryid, int sortOrder) {
+ this(id, rewards, requirements, repeatable, cooldownEnabled, cooldown, permissionRequired, rewardString, startString, placeholders, sortOrder);
this.categoryid = categoryid;
}
- public Quest(String id, QItemStack displayItem, List<String> rewards, List<String> requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, boolean permissionRequired, List<String> rewardString, List<String> startString, Map<String, String> placeholders, int sortOrder) {
+ public Quest(String id, List<String> rewards, List<String> requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, boolean permissionRequired, List<String> rewardString, List<String> startString, Map<String, String> placeholders, int sortOrder) {
this.id = id;
- this.displayItem = displayItem;
this.rewards = rewards;
this.requirements = requirements;
this.repeatable = repeatable;
@@ -86,10 +81,6 @@ public class Quest implements Comparable<Quest> {
return id;
}
- public QItemStack getDisplayItem() {
- return displayItem;
- }
-
public List<String> getRewards() {
return rewards;
}
@@ -114,10 +105,6 @@ public class Quest implements Comparable<Quest> {
return categoryid;
}
- public String getDisplayNameStripped() {
- return ChatColor.stripColor(this.displayItem.getName());
- }
-
public Map<String, String> getPlaceholders() {
return placeholders;
}
diff --git a/common/src/main/java/com/leonardobishop/quests/common/quest/QuestCompleter.java b/common/src/main/java/com/leonardobishop/quests/common/quest/QuestCompleter.java
new file mode 100644
index 00000000..db9cd36c
--- /dev/null
+++ b/common/src/main/java/com/leonardobishop/quests/common/quest/QuestCompleter.java
@@ -0,0 +1,11 @@
+package com.leonardobishop.quests.common.quest;
+
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+
+public interface QuestCompleter {
+
+ void queueSingular(QuestProgress questProgress);
+ void queueFullCheck(QuestProgressFile questProgressFile);
+
+}
diff --git a/src/main/java/com/leonardobishop/quests/quest/QuestManager.java b/common/src/main/java/com/leonardobishop/quests/common/quest/QuestManager.java
index 2aaea571..ebace123 100644
--- a/src/main/java/com/leonardobishop/quests/quest/QuestManager.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/quest/QuestManager.java
@@ -1,6 +1,6 @@
-package com.leonardobishop.quests.quest;
+package com.leonardobishop.quests.common.quest;
-import com.leonardobishop.quests.Quests;
+import com.leonardobishop.quests.common.plugin.Quests;
import java.util.ArrayList;
import java.util.LinkedHashMap;
diff --git a/src/main/java/com/leonardobishop/quests/quest/Task.java b/common/src/main/java/com/leonardobishop/quests/common/quest/Task.java
index edac070d..8189e06e 100644
--- a/src/main/java/com/leonardobishop/quests/quest/Task.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/quest/Task.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.quest;
+package com.leonardobishop.quests.common.quest;
import java.util.HashMap;
import java.util.Map;
diff --git a/src/main/java/com/leonardobishop/quests/quest/controller/QuestController.java b/common/src/main/java/com/leonardobishop/quests/common/questcontroller/QuestController.java
index b4b76baa..0f5b6e8f 100644
--- a/src/main/java/com/leonardobishop/quests/quest/controller/QuestController.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/questcontroller/QuestController.java
@@ -1,15 +1,23 @@
-package com.leonardobishop.quests.quest.controller;
+package com.leonardobishop.quests.common.questcontroller;
-import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.quest.Quest;
+import com.leonardobishop.quests.common.enums.QuestStartResult;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.quest.Quest;
public interface QuestController {
+ String getName();
+
QuestStartResult startQuestForPlayer(QPlayer qPlayer, Quest quest);
+
QuestStartResult canPlayerStartQuest(QPlayer qPlayer, Quest quest);
+
boolean completeQuestForPlayer(QPlayer qPlayer, Quest quest);
+
boolean hasPlayerStartedQuest(QPlayer qPlayer, Quest quest);
+
boolean cancelQuestForPlayer(QPlayer qPlayer, Quest quest);
+ void trackQuestForPlayer(QPlayer qPlayer, Quest quest);
+
}
diff --git a/common/src/main/java/com/leonardobishop/quests/common/scheduler/ServerScheduler.java b/common/src/main/java/com/leonardobishop/quests/common/scheduler/ServerScheduler.java
new file mode 100644
index 00000000..0de30f51
--- /dev/null
+++ b/common/src/main/java/com/leonardobishop/quests/common/scheduler/ServerScheduler.java
@@ -0,0 +1,8 @@
+package com.leonardobishop.quests.common.scheduler;
+
+public interface ServerScheduler {
+
+ void doSync(Runnable runnable);
+ void doAsync(Runnable runnable);
+
+}
diff --git a/src/main/java/com/leonardobishop/quests/storage/StorageProvider.java b/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java
index f1d00203..4ea885be 100644
--- a/src/main/java/com/leonardobishop/quests/storage/StorageProvider.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java
@@ -1,14 +1,17 @@
-package com.leonardobishop.quests.storage;
+package com.leonardobishop.quests.common.storage;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
import java.util.UUID;
public interface StorageProvider {
void init();
+
void shutdown();
+
QuestProgressFile loadProgressFile(UUID uuid);
+
void saveProgressFile(UUID uuid, QuestProgressFile questProgressFile);
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/TaskType.java b/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskType.java
index fb7b8b61..79c7a0b0 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/TaskType.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskType.java
@@ -1,9 +1,8 @@
-package com.leonardobishop.quests.quest.tasktype;
+package com.leonardobishop.quests.common.tasktype;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import org.bukkit.event.Listener;
+import com.leonardobishop.quests.common.config.ConfigProblem;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.quest.Task;
import java.util.ArrayList;
import java.util.Collections;
@@ -17,7 +16,7 @@ import java.util.UUID;
* which is of this type. This is so you do not have to
* iterate through every single quest.
*/
-public abstract class TaskType implements Listener {
+public abstract class TaskType {
private final List<Quest> quests = new ArrayList<>();
private final String type;
@@ -80,13 +79,6 @@ public abstract class TaskType implements Listener {
return description;
}
- //TODO rework this
- @Deprecated
- public List<ConfigValue> getCreatorConfigValues() {
- // not implemented here
- return Collections.emptyList();
- }
-
/**
* Called when Quests has finished registering all quests to the task type
* May be called several times if an operator uses /quests admin reload
@@ -109,7 +101,7 @@ public abstract class TaskType implements Listener {
/**
* Called when Quests reloads the configuration - used to detect errors in the configuration of your task type
*/
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
+ public List<ConfigProblem> validateConfig(String root, HashMap<String, Object> config) {
// not implemented here
return Collections.emptyList();
}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/TaskTypeManager.java b/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskTypeManager.java
index 0b1fced9..dfa5124e 100644
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/TaskTypeManager.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskTypeManager.java
@@ -1,13 +1,12 @@
-package com.leonardobishop.quests.quest.tasktype;
+package com.leonardobishop.quests.common.tasktype;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import org.bukkit.Bukkit;
+import com.leonardobishop.quests.common.plugin.Quests;
+import com.leonardobishop.quests.common.quest.Quest;
+import com.leonardobishop.quests.common.quest.Task;
import java.util.ArrayList;
-public class TaskTypeManager {
+public abstract class TaskTypeManager {
private final Quests plugin;
private boolean allowRegistrations;
@@ -41,7 +40,6 @@ public class TaskTypeManager {
if (!allowRegistrations) {
throw new IllegalStateException("No longer accepting new task types (must be done before quests are loaded)");
}
- Bukkit.getPluginManager().registerEvents(taskType, plugin);
plugin.getQuestsLogger().info("Task type " + taskType.getType() + " has been registered.");
taskTypes.add(taskType);
}
diff --git a/src/main/java/com/leonardobishop/quests/updater/Updater.java b/common/src/main/java/com/leonardobishop/quests/common/updater/Updater.java
index 6bd28b49..70660735 100644
--- a/src/main/java/com/leonardobishop/quests/updater/Updater.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/updater/Updater.java
@@ -1,7 +1,6 @@
-package com.leonardobishop.quests.updater;
+package com.leonardobishop.quests.common.updater;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.util.Messages;
+import com.leonardobishop.quests.common.plugin.Quests;
import java.io.BufferedReader;
import java.io.IOException;
@@ -15,17 +14,17 @@ public class Updater {
private static final int PROJECT_ID = 23696;
private final String installedVersion;
- private final Quests plugin;
private final boolean enabled;
+ private final Quests plugin;
private String returnedVersion;
private URL api;
private boolean updateReady;
private long lastCheck;
- public Updater(Quests plugin, boolean enabled) {
+ public Updater(Quests plugin, String installedVersion, boolean enabled) {
this.plugin = plugin;
- this.installedVersion = plugin.getDescription().getVersion();
+ this.installedVersion = installedVersion;
this.enabled = enabled;
try {
this.api = new URL(getApiUrl());
@@ -39,7 +38,15 @@ public class Updater {
public String getApiUrl() {
return "https://api.spigotmc.org/legacy/update.php?resource=" + PROJECT_ID;
}
-
+
+ public String getInstalledVersion() {
+ return installedVersion;
+ }
+
+ public String getReturnedVersion() {
+ return returnedVersion;
+ }
+
public void check() {
if (!enabled) {
return;
@@ -68,7 +75,4 @@ public class Updater {
return updateReady;
}
- public String getMessage() {
- return Messages.QUEST_UPDATER.getMessage().replace("{newver}", returnedVersion).replace("{oldver}", installedVersion).replace("{link}", getUpdateLink());
- }
} \ No newline at end of file
diff --git a/common/src/main/java/com/leonardobishop/quests/common/util/Format.java b/common/src/main/java/com/leonardobishop/quests/common/util/Format.java
new file mode 100644
index 00000000..410462ee
--- /dev/null
+++ b/common/src/main/java/com/leonardobishop/quests/common/util/Format.java
@@ -0,0 +1,21 @@
+package com.leonardobishop.quests.common.util;
+
+public class Format {
+
+ //TODO reimplement customisation
+ public static String formatTime(long sec) {
+ long hours = sec / 3600;
+ long minutes = (sec % 3600) / 60;
+ long seconds = ((sec % 3600) % 60) % 60;
+
+// return Messages.TIME_FORMAT.getMessage()
+// .replace("{hours}", String.format("%02d", hours))
+// .replace("{minutes}", String.format("%02d", minutes))
+// .replace("{seconds}", String.format("%02d", seconds));
+ return "{houes}h {minutes}m {seconds}s"
+ .replace("{hours}", String.format("%02d", hours))
+ .replace("{minutes}", String.format("%02d", minutes))
+ .replace("{seconds}", String.format("%02d", seconds));
+ }
+
+}
diff --git a/settings.gradle b/settings.gradle
index b0609435..2493873b 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1,5 @@
rootProject.name = 'Quests'
+include 'common'
+include 'bungee'
+include 'bukkit'
+
diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java
deleted file mode 100644
index db842b0c..00000000
--- a/src/main/java/com/leonardobishop/quests/Quests.java
+++ /dev/null
@@ -1,493 +0,0 @@
-package com.leonardobishop.quests;
-
-import com.leonardobishop.quests.command.QuestsCommand;
-import com.leonardobishop.quests.listener.PlayerJoinListener;
-import com.leonardobishop.quests.listener.PlayerLeaveListener;
-import com.leonardobishop.quests.listener.MenuController;
-import com.leonardobishop.quests.hook.coreprotect.CoreProtectHook;
-import com.leonardobishop.quests.hook.coreprotect.CoreProtectNoHook;
-import com.leonardobishop.quests.hook.coreprotect.ICoreProtectHook;
-import com.leonardobishop.quests.hook.itemgetter.ItemGetter;
-import com.leonardobishop.quests.hook.itemgetter.ItemGetterLatest;
-import com.leonardobishop.quests.hook.itemgetter.ItemGetter_1_13;
-import com.leonardobishop.quests.hook.itemgetter.ItemGetter_Late_1_8;
-import com.leonardobishop.quests.hook.papi.IPlaceholderAPIHook;
-import com.leonardobishop.quests.hook.papi.PlaceholderAPIHook;
-import com.leonardobishop.quests.hook.title.Title;
-import com.leonardobishop.quests.hook.title.Title_Bukkit;
-import com.leonardobishop.quests.hook.title.Title_BukkitNoTimings;
-import com.leonardobishop.quests.hook.title.Title_Other;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.QPlayerManager;
-import com.leonardobishop.quests.quest.QuestManager;
-import com.leonardobishop.quests.quest.controller.NormalQuestController;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskTypeManager;
-import com.leonardobishop.quests.quest.tasktype.type.BreedingTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.BrewingTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.BuildingCertainTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.BuildingTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.CommandTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.DealDamageTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.DistancefromTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.EnchantingTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.ExpEarnTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.FishingTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.InventoryTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.MilkingTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.MiningCertainTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.MiningTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.MobkillingCertainTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.MobkillingTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.PermissionTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.PlayerkillingTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.PlaytimeTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.PositionTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.ShearingTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.TamingTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.WalkingTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.ASkyBlockLevelType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.BentoBoxLevelTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.CitizensDeliverTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.CitizensInteractTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.EssentialsBalanceTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.EssentialsMoneyEarnTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.IridiumSkyblockValueType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.MythicMobsKillingType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.PlaceholderAPIEvaluateTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.ShopGUIPlusBuyCertainTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.ShopGUIPlusSellCertainTaskType;
-import com.leonardobishop.quests.quest.tasktype.type.dependent.uSkyBlockLevelType;
-import com.leonardobishop.quests.updater.Updater;
-import com.leonardobishop.quests.util.Messages;
-import com.leonardobishop.quests.util.QuestCompleter;
-import com.leonardobishop.quests.util.QuestMode;
-import com.leonardobishop.quests.util.QuestsAutosaveRunnable;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.util.QuestsLogger;
-import org.bstats.bukkit.MetricsLite;
-import org.bukkit.Bukkit;
-import org.bukkit.configuration.ConfigurationSection;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.plugin.java.JavaPlugin;
-import org.bukkit.scheduler.BukkitTask;
-
-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 {
-
- private static Quests instance;
-
- /** Handles anything to do with loaded quests */
- private QuestManager questManager;
- /** Handles anything to do with task types */
- private TaskTypeManager taskTypeManager;
- /** Handles anything to do with players */
- private QPlayerManager qPlayerManager;
-
- /** Checks and records ready plugin updates */
- private Updater updater;
- /** Abstract title handle to allow for cross version compatibility */
- private Title titleHandle;
- /** Abstract item handle to allow for cross version compatibility */
- private ItemGetter itemGetter;
- /** Task which checks quests and marks them as complete if requirements are satisfied */
- private QuestCompleter questCompleter;
- /** Loads configurations and tracks errors */
- private QuestsConfigLoader questsConfigLoader;
- /** Quests logger to allow for configurable logging levels */
- private QuestsLogger questsLogger;
- /** Handles menu tracking and clicks */
- private MenuController menuController;
-
- private IPlaceholderAPIHook placeholderAPIHook;
- private ICoreProtectHook coreProtectHook;
-
- /** If true, the plugin should be inoperable */
- private boolean brokenConfig = false;
- private BukkitTask questAutosaveTask;
- private BukkitTask questQueuePollTask;
- private QuestMode questMode;
-
- public static Quests get() {
- return instance;
- }
-
- public QuestManager getQuestManager() {
- return questManager;
- }
-
- public QPlayerManager getPlayerManager() {
- return qPlayerManager;
- }
-
- public TaskTypeManager getTaskTypeManager() {
- return taskTypeManager;
- }
-
- public boolean isBrokenConfig() {
- return brokenConfig;
- }
-
- public void setBrokenConfig(boolean brokenConfig) {
- this.brokenConfig = brokenConfig;
- }
-
- public Title getTitleHandle() {
- return titleHandle;
- }
-
- public Updater getUpdater() {
- return updater;
- }
-
- public QuestsConfigLoader getQuestsConfigLoader() {
- return questsConfigLoader;
- }
-
- public MenuController getMenuController() {
- return menuController;
- }
-
- public QuestMode getQuestMode() {
- return questMode;
- }
-
- public void setQuestMode(QuestMode questMode) {
- this.questMode = questMode;
- }
-
- public String convertToFormat(long m) { //seconds please
- long hours = m / 3600;
- long minutes = (m % 3600) / 60;
- long seconds = ((m % 3600) % 60) % 60;
-
- return Messages.TIME_FORMAT.getMessage()
- .replace("{hours}", String.format("%02d", hours))
- .replace("{minutes}", String.format("%02d", minutes))
- .replace("{seconds}", String.format("%02d", seconds));
- }
-
- @Override
- public void onEnable() {
- instance = this;
- questMode = QuestMode.NORMAL;
-
- questsLogger = new QuestsLogger(this, QuestsLogger.LoggingLevel.INFO);
- questCompleter = new QuestCompleter(this);
-
- this.generateConfigurations();
- this.setupVersionSpecific();
-
- taskTypeManager = new TaskTypeManager(this);
- questManager = new QuestManager(this);
- qPlayerManager = new QPlayerManager(this);
- menuController = new MenuController(this);
-
- super.getCommand("quests").setExecutor(new QuestsCommand(this));
- Bukkit.getPluginManager().registerEvents(new PlayerJoinListener(this), this);
- Bukkit.getPluginManager().registerEvents(menuController, this);
- Bukkit.getPluginManager().registerEvents(new PlayerLeaveListener(this), this);
-
- MetricsLite metrics = new MetricsLite(this, 3443);
- if (metrics.isEnabled()) {
- this.getQuestsLogger().info("Metrics started. This can be disabled at /plugins/bStats/config.yml.");
- }
-
- questsConfigLoader = new QuestsConfigLoader(this);
-
- // register task types after the server has fully started
- Bukkit.getScheduler().runTask(this, () -> {
- taskTypeManager.registerTaskType(new MiningTaskType());
- taskTypeManager.registerTaskType(new MiningCertainTaskType(this));
- taskTypeManager.registerTaskType(new BuildingTaskType());
- taskTypeManager.registerTaskType(new BuildingCertainTaskType());
- taskTypeManager.registerTaskType(new MobkillingTaskType());
- taskTypeManager.registerTaskType(new MobkillingCertainTaskType());
- taskTypeManager.registerTaskType(new PlayerkillingTaskType());
- taskTypeManager.registerTaskType(new FishingTaskType());
- taskTypeManager.registerTaskType(new InventoryTaskType(this));
- taskTypeManager.registerTaskType(new WalkingTaskType());
- taskTypeManager.registerTaskType(new TamingTaskType());
- taskTypeManager.registerTaskType(new MilkingTaskType());
- taskTypeManager.registerTaskType(new ShearingTaskType());
- taskTypeManager.registerTaskType(new PositionTaskType());
- taskTypeManager.registerTaskType(new PlaytimeTaskType(this));
- taskTypeManager.registerTaskType(new BrewingTaskType());
- taskTypeManager.registerTaskType(new ExpEarnTaskType());
- taskTypeManager.registerTaskType(new BreedingTaskType());
- taskTypeManager.registerTaskType(new EnchantingTaskType());
- taskTypeManager.registerTaskType(new DealDamageTaskType());
- taskTypeManager.registerTaskType(new PermissionTaskType(this));
- taskTypeManager.registerTaskType(new DistancefromTaskType());
- taskTypeManager.registerTaskType(new CommandTaskType());
- // TODO: FIX
- // taskTypeManager.registerTaskType(new BrewingCertainTaskType());
- if (Bukkit.getPluginManager().isPluginEnabled("ASkyBlock")) {
- taskTypeManager.registerTaskType(new ASkyBlockLevelType());
- }
- if (Bukkit.getPluginManager().isPluginEnabled("BentoBox")) {
- BentoBoxLevelTaskType.register(taskTypeManager);
- }
- if (Bukkit.getPluginManager().isPluginEnabled("IridiumSkyblock")) {
- taskTypeManager.registerTaskType(new IridiumSkyblockValueType());
- }
- if (Bukkit.getPluginManager().isPluginEnabled("uSkyBlock")) {
- taskTypeManager.registerTaskType(new uSkyBlockLevelType());
- }
- if (Bukkit.getPluginManager().isPluginEnabled("Citizens")) {
- taskTypeManager.registerTaskType(new CitizensDeliverTaskType(this));
- taskTypeManager.registerTaskType(new CitizensInteractTaskType());
- }
- if (Bukkit.getPluginManager().isPluginEnabled("MythicMobs")) {
- taskTypeManager.registerTaskType(new MythicMobsKillingType());
- }
- if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
- taskTypeManager.registerTaskType(new PlaceholderAPIEvaluateTaskType(this));
- }
- if (Bukkit.getPluginManager().isPluginEnabled("Essentials")) {
- taskTypeManager.registerTaskType(new EssentialsMoneyEarnTaskType());
- taskTypeManager.registerTaskType(new EssentialsBalanceTaskType());
- }
- if (Bukkit.getPluginManager().isPluginEnabled("ShopGUIPlus")) {
- // not tested
- taskTypeManager.registerTaskType(new ShopGUIPlusBuyCertainTaskType());
- taskTypeManager.registerTaskType(new ShopGUIPlusSellCertainTaskType());
- }
-
- taskTypeManager.closeRegistrations();
- reloadQuests();
-
- for (Player player : Bukkit.getOnlinePlayers()) {
- qPlayerManager.loadPlayer(player.getUniqueId());
- }
- });
-
- if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
- this.placeholderAPIHook = new PlaceholderAPIHook();
- 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 {
- ignoreUpdates = new File(this.getDataFolder() + File.separator + "stfuQuestsUpdate").exists();
- } catch (Throwable ignored) { }
-
-
- updater = new Updater(this, !ignoreUpdates);
- if (!ignoreUpdates) {
- Bukkit.getScheduler().runTaskAsynchronously(this, () -> {
- updater.check();
- });
- }
- }
-
- public IPlaceholderAPIHook getPlaceholderAPIHook() {
- return placeholderAPIHook;
- }
-
- public ICoreProtectHook getCoreProtectHook() {
- return coreProtectHook;
- }
-
- @Override
- public void onDisable() {
- for (TaskType taskType : getTaskTypeManager().getTaskTypes()) {
- try {
- taskType.onDisable();
- } catch (Exception ignored) { }
- }
- for (QPlayer qPlayer : qPlayerManager.getQPlayers()) {
- try {
- qPlayerManager.savePlayerSync(qPlayer.getPlayerUUID());
- } catch (Exception ignored) { }
- }
- if (placeholderAPIHook != null) placeholderAPIHook.unregisterExpansion();
- try {
- qPlayerManager.getStorageProvider().shutdown();
- } catch (Exception ignored) { }
- }
-
- public void reloadQuests() {
- questManager.getQuests().clear();
- questManager.getCategories().clear();
- taskTypeManager.resetTaskTypes();
-
- questsConfigLoader.loadConfig();
-
- switch (this.questMode) {
-// TODO
-// case DAILY:
-// qPlayerManager.setActiveQuestController(new DailyQuestController(this));
-// break;
- default:
- case NORMAL:
- qPlayerManager.setActiveQuestController(new NormalQuestController(this));
- break;
- }
-
- long autosaveInterval = 12000;
- if (!isBrokenConfig()) {
- autosaveInterval = this.getConfig().getLong("options.performance-tweaking.quest-autosave-interval", 12000);
- }
- boolean autosaveTaskCancelled = true;
- if (questAutosaveTask != null) {
- try {
- questAutosaveTask.cancel();
- } catch (Exception ex) {
- questsLogger.debug("Cannot cancel and restart quest autosave task");
- autosaveTaskCancelled = false;
- }
- }
- if (autosaveTaskCancelled) {
- questAutosaveTask = Bukkit.getScheduler().runTaskTimer(this, () -> new QuestsAutosaveRunnable(this), autosaveInterval, autosaveInterval);
- }
-
- boolean queuePollTaskCancelled = true;
- long queueExecuteInterval = 1;
- if (!isBrokenConfig()) {
- queueExecuteInterval = this.getConfig().getLong("options.performance-tweaking.quest-queue-executor-interval", 1);
- }
- if (questQueuePollTask != null) {
- try {
- questQueuePollTask.cancel();
- } catch (Exception ex) {
- questsLogger.debug("Cannot cancel and restart quest autosave task");
- queuePollTaskCancelled = false;
- }
- }
- if (queuePollTaskCancelled) {
- questQueuePollTask = Bukkit.getScheduler().runTaskTimer(this, questCompleter, queueExecuteInterval, queueExecuteInterval);
- }
- }
-
- public ItemStack getItemStack(String path, ConfigurationSection config, ItemGetter.Filter... excludes) {
- return itemGetter.getItem(path, config, this, excludes);
- }
-
- public ItemGetter getItemGetter() {
- return itemGetter;
- }
-
- private void setupVersionSpecific() {
- String version;
- try {
- version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
- } catch (ArrayIndexOutOfBoundsException e) {
- getQuestsLogger().warning("Failed to resolve server version - some features will not work!");
- titleHandle = new Title_Other();
- itemGetter = new ItemGetter_Late_1_8();
- return;
- }
-
- getQuestsLogger().info("Your server is running version " + version + ".");
-
- if (version.startsWith("v1_7")) {
- titleHandle = new Title_Other();
- } else if (version.startsWith("v1_8") || version.startsWith("v1_9") || version.startsWith("v1_10")) {
- titleHandle = new Title_BukkitNoTimings();
- } else {
- titleHandle = new Title_Bukkit();
- }
-
- if (version.startsWith("v1_7") || version.startsWith("v1_8") || version.startsWith("v1_9")
- || version.startsWith("v1_10") || version.startsWith("v1_11") || version.startsWith("v1_12")) {
- itemGetter = new ItemGetter_Late_1_8();
- } else if (version.startsWith("v1_13")) {
- itemGetter = new ItemGetter_1_13();
- } else {
- itemGetter = new ItemGetterLatest();
- }
-
- if (titleHandle instanceof Title_Bukkit) {
- getQuestsLogger().info("Titles have been enabled.");
- } else if (titleHandle instanceof Title_BukkitNoTimings) {
- getQuestsLogger().info("Titles have been enabled, although they have limited timings.");
- } else {
- getQuestsLogger().info("Titles are not supported for this version.");
- }
- }
-
- private void generateConfigurations() {
- File directory = new File(String.valueOf(this.getDataFolder()));
- if (!directory.exists() && !directory.isDirectory()) {
- directory.mkdir();
- }
-
- File config = new File(this.getDataFolder() + File.separator + "config.yml");
- if (!config.exists()) {
- try {
- config.createNewFile();
- try (InputStream in = this.getResource("config.yml")) {
- OutputStream out = new FileOutputStream(config);
- byte[] buffer = new byte[1024];
- int lenght = in.read(buffer);
- while (lenght != -1) {
- out.write(buffer, 0, lenght);
- lenght = in.read(buffer);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- File questsDirectory = new File(this.getDataFolder() + File.separator + "quests");
- if (!questsDirectory.exists() && !questsDirectory.isDirectory()) {
- questsDirectory.mkdir();
-
- ArrayList<String> examples = new ArrayList<>();
- examples.add("example1.yml");
- examples.add("example2.yml");
- examples.add("example3.yml");
- examples.add("example4.yml");
- examples.add("example5.yml");
- examples.add("example6.yml");
- examples.add("example7.yml");
- examples.add("README.txt");
-
- for (String name : examples) {
- File file = new File(this.getDataFolder() + File.separator + "quests" + File.separator + name);
- try {
- file.createNewFile();
- try (InputStream in = this.getResource("quests/" + name)) {
- OutputStream out = new FileOutputStream(file);
- byte[] buffer = new byte[1024];
- int lenght = in.read(buffer);
- while (lenght != -1) {
- out.write(buffer, 0, lenght);
- lenght = in.read(buffer);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
-
- public QuestCompleter getQuestCompleter() {
- return questCompleter;
- }
-
- public QuestsLogger getQuestsLogger() {
- return questsLogger;
- }
-}
diff --git a/src/main/java/com/leonardobishop/quests/api/QuestsAPI.java b/src/main/java/com/leonardobishop/quests/api/QuestsAPI.java
deleted file mode 100644
index db7ed470..00000000
--- a/src/main/java/com/leonardobishop/quests/api/QuestsAPI.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.leonardobishop.quests.api;
-
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.player.QPlayerManager;
-import com.leonardobishop.quests.quest.QuestManager;
-import com.leonardobishop.quests.quest.tasktype.TaskTypeManager;
-import org.bukkit.Bukkit;
-
-/**
- * This contains some methods from the main Quests class which
- * will be useful in task type development. This is no different than
- * simply getting an instance of the main class, however this is the
- * preferred method of obtaining an instance of Quest classes outside
- * of the core plugin itself.
- *
- * It is recommended to use this over {@code Quests.get()}, unless there
- * are methods there that you absolutely need.
- */
-public class QuestsAPI {
-
- private final static Quests plugin = (Quests) Bukkit.getPluginManager().getPlugin("Quests") ;
-
- public static QuestManager getQuestManager() {
- return plugin.getQuestManager();
- }
-
- public static QPlayerManager getPlayerManager() {
- return plugin.getPlayerManager();
- }
-
- public static TaskTypeManager getTaskTypeManager() {
- return plugin.getTaskTypeManager();
- }
-
-}
diff --git a/src/main/java/com/leonardobishop/quests/blocktype/Block.java b/src/main/java/com/leonardobishop/quests/blocktype/Block.java
deleted file mode 100644
index 4b3b7d6a..00000000
--- a/src/main/java/com/leonardobishop/quests/blocktype/Block.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.leonardobishop.quests.blocktype;
-
-import org.bukkit.Material;
-
-@Deprecated
-public class Block {
-
- private Material material;
- private short data;
-
- public Block(Material material, short data) {
- this.material = material;
- this.data = data;
- }
-
- public Block(Material material) {
- this.material = material;
- }
-
- public Material getMaterial() {
- return material;
- }
-
- public short getData() {
- return data;
- }
-
- public void setMaterial(Material material) {
- this.material = material;
- }
-
- public void setData(short data) {
- this.data = data;
- }
-}
diff --git a/src/main/java/com/leonardobishop/quests/blocktype/SimilarBlocks.java b/src/main/java/com/leonardobishop/quests/blocktype/SimilarBlocks.java
deleted file mode 100644
index fc910170..00000000
--- a/src/main/java/com/leonardobishop/quests/blocktype/SimilarBlocks.java
+++ /dev/null
@@ -1,93 +0,0 @@
-//package com.leonardobishop.quests.blocktype;
-//
-//import org.bukkit.Material;
-//
-//import java.util.HashMap;
-//import java.util.Map;
-//
-//public class SimilarBlocks {
-//
-// private static HashMap<Block, Block> similarBlocks = new HashMap<>();
-//
-// static {
-// // Redstone Ore
-// similarBlocks.put(new Block(Material.REDSTONE_ORE), new Block(Material.GLOWING_REDSTONE_ORE));
-// similarBlocks.put(new Block(Material.GLOWING_REDSTONE_ORE), new Block(Material.REDSTONE_ORE));
-//
-// // Oak Door
-// similarBlocks.put(new Block(Material.WOODEN_DOOR, (short) 0), new Block(Material.WOODEN_DOOR));
-// similarBlocks.put(new Block(Material.WOODEN_DOOR, (short) 1), new Block(Material.WOODEN_DOOR));
-// similarBlocks.put(new Block(Material.WOODEN_DOOR, (short) 2), new Block(Material.WOODEN_DOOR));
-// similarBlocks.put(new Block(Material.WOODEN_DOOR, (short) 3), new Block(Material.WOODEN_DOOR));
-//
-// // Dark Oak Door
-// similarBlocks.put(new Block(Material.DARK_OAK_DOOR, (short) 0), new Block(Material.DARK_OAK_DOOR));
-// similarBlocks.put(new Block(Material.DARK_OAK_DOOR, (short) 1), new Block(Material.DARK_OAK_DOOR));
-// similarBlocks.put(new Block(Material.DARK_OAK_DOOR, (short) 2), new Block(Material.DARK_OAK_DOOR));
-// similarBlocks.put(new Block(Material.DARK_OAK_DOOR, (short) 3), new Block(Material.DARK_OAK_DOOR));
-//
-// // Acacia Door
-// similarBlocks.put(new Block(Material.ACACIA_DOOR, (short) 0), new Block(Material.ACACIA_DOOR));
-// similarBlocks.put(new Block(Material.ACACIA_DOOR, (short) 1), new Block(Material.ACACIA_DOOR));
-// similarBlocks.put(new Block(Material.ACACIA_DOOR, (short) 2), new Block(Material.ACACIA_DOOR));
-// similarBlocks.put(new Block(Material.ACACIA_DOOR, (short) 3), new Block(Material.ACACIA_DOOR));
-//
-// // Birch Door
-// similarBlocks.put(new Block(Material.BIRCH_DOOR, (short) 0), new Block(Material.BIRCH_DOOR));
-// similarBlocks.put(new Block(Material.BIRCH_DOOR, (short) 1), new Block(Material.BIRCH_DOOR));
-// similarBlocks.put(new Block(Material.BIRCH_DOOR, (short) 2), new Block(Material.BIRCH_DOOR));
-// similarBlocks.put(new Block(Material.BIRCH_DOOR, (short) 3), new Block(Material.BIRCH_DOOR));
-//
-// // Jungle Door
-// similarBlocks.put(new Block(Material.JUNGLE_DOOR, (short) 0), new Block(Material.JUNGLE_DOOR));
-// similarBlocks.put(new Block(Material.JUNGLE_DOOR, (short) 1), new Block(Material.JUNGLE_DOOR));
-// similarBlocks.put(new Block(Material.JUNGLE_DOOR, (short) 2), new Block(Material.JUNGLE_DOOR));
-// similarBlocks.put(new Block(Material.JUNGLE_DOOR, (short) 3), new Block(Material.JUNGLE_DOOR));
-//
-// // Spruce Door
-// similarBlocks.put(new Block(Material.SPRUCE_DOOR, (short) 0), new Block(Material.SPRUCE_DOOR));
-// similarBlocks.put(new Block(Material.SPRUCE_DOOR, (short) 1), new Block(Material.SPRUCE_DOOR));
-// similarBlocks.put(new Block(Material.SPRUCE_DOOR, (short) 2), new Block(Material.SPRUCE_DOOR));
-// similarBlocks.put(new Block(Material.SPRUCE_DOOR, (short) 3), new Block(Material.SPRUCE_DOOR));
-//
-// // Iron Door
-// similarBlocks.put(new Block(Material.IRON_DOOR, (short) 0), new Block(Material.IRON_DOOR));
-// similarBlocks.put(new Block(Material.IRON_DOOR, (short) 1), new Block(Material.IRON_DOOR));
-// similarBlocks.put(new Block(Material.IRON_DOOR, (short) 2), new Block(Material.IRON_DOOR));
-// similarBlocks.put(new Block(Material.IRON_DOOR, (short) 3), new Block(Material.IRON_DOOR));
-//
-// // Oak Log
-// similarBlocks.put(new Block(Material.LOG, (short) 4), new Block(Material.LOG, (short) 0));
-// similarBlocks.put(new Block(Material.LOG, (short) 8), new Block(Material.LOG, (short) 0));
-//
-// // Spruce Log
-// similarBlocks.put(new Block(Material.LOG, (short) 5), new Block(Material.LOG, (short) 1));
-// similarBlocks.put(new Block(Material.LOG, (short) 9), new Block(Material.LOG, (short) 1));
-//
-// // Birch Log
-// similarBlocks.put(new Block(Material.LOG, (short) 6), new Block(Material.LOG, (short) 2));
-// similarBlocks.put(new Block(Material.LOG, (short) 10), new Block(Material.LOG, (short) 2));
-//
-// // Jungle Log
-// similarBlocks.put(new Block(Material.LOG, (short) 7), new Block(Material.LOG, (short) 3));
-// similarBlocks.put(new Block(Material.LOG, (short) 11), new Block(Material.LOG, (short) 3));
-//
-// // Acacia Log
-// similarBlocks.put(new Block(Material.LOG_2, (short) 4), new Block(Material.LOG, (short) 0));
-// similarBlocks.put(new Block(Material.LOG_2, (short) 8), new Block(Material.LOG, (short) 0));
-//
-// // Dark Oak Log
-// similarBlocks.put(new Block(Material.LOG_2, (short) 5), new Block(Material.LOG, (short) 1));
-// similarBlocks.put(new Block(Material.LOG_2, (short) 9), new Block(Material.LOG, (short) 1));
-// }
-//
-// public static Block getSimilarBlock(Block block) {
-// for (Map.Entry<Block, Block> entry : similarBlocks.entrySet()) {
-// if (entry.getKey().getMaterial() == block.getMaterial() && entry.getKey().getData() == block.getData()) {
-// return entry.getValue();
-// }
-// }
-// return null;
-// }
-//
-//}
diff --git a/src/main/java/com/leonardobishop/quests/hook/papi/IPlaceholderAPIHook.java b/src/main/java/com/leonardobishop/quests/hook/papi/IPlaceholderAPIHook.java
deleted file mode 100644
index 454ee02e..00000000
--- a/src/main/java/com/leonardobishop/quests/hook/papi/IPlaceholderAPIHook.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.leonardobishop.quests.hook.papi;
-
-import com.leonardobishop.quests.Quests;
-import org.bukkit.entity.Player;
-
-public interface IPlaceholderAPIHook {
-
- String replacePlaceholders(Player player, String text);
-
- void registerExpansion(Quests plugin);
-
- void unregisterExpansion();
-
-}
diff --git a/src/main/java/com/leonardobishop/quests/listener/MenuController.java b/src/main/java/com/leonardobishop/quests/listener/MenuController.java
deleted file mode 100644
index 117a797c..00000000
--- a/src/main/java/com/leonardobishop/quests/listener/MenuController.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.leonardobishop.quests.listener;
-
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.menu.QMenu;
-import org.bukkit.entity.HumanEntity;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.inventory.InventoryClickEvent;
-import org.bukkit.event.inventory.InventoryCloseEvent;
-import org.bukkit.event.inventory.InventoryType;
-
-import java.util.HashMap;
-import java.util.UUID;
-
-public class MenuController implements Listener {
-
- private final HashMap<UUID, QMenu> tracker = new HashMap<>();
- private final Quests plugin;
-
- public MenuController(Quests plugin) {
- this.plugin = plugin;
- }
-
- public void openMenu(HumanEntity player, QMenu qMenu, int page) {
- player.openInventory(qMenu.toInventory(page));
- tracker.put(player.getUniqueId(), qMenu);
- }
-
- @EventHandler
- private void onClose(InventoryCloseEvent event) {
- tracker.remove(event.getPlayer().getUniqueId());
- }
-
- @EventHandler
- private void onClick(InventoryClickEvent event) {
- // check if the player has a quest menu open
- if (tracker.containsKey(event.getWhoClicked().getUniqueId())) {
- event.setCancelled(true);
- if (event.getClickedInventory() == null)
- return; //The player clicked outside the inventory
- if (event.getClickedInventory().getType() == InventoryType.PLAYER)
- return; //The clicked inventory is a player inventory type
-
- QMenu qMenu = tracker.get(event.getWhoClicked().getUniqueId());
- qMenu.handleClick(event, this);
- }
- }
-
-}
diff --git a/src/main/java/com/leonardobishop/quests/menu/DailyQMenu.java b/src/main/java/com/leonardobishop/quests/menu/DailyQMenu.java
deleted file mode 100644
index 0d6080cd..00000000
--- a/src/main/java/com/leonardobishop/quests/menu/DailyQMenu.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.leonardobishop.quests.menu;
-
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.listener.MenuController;
-import com.leonardobishop.quests.menu.element.MenuElement;
-import com.leonardobishop.quests.menu.element.QuestMenuElement;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.controller.DailyQuestController;
-import com.leonardobishop.quests.quest.controller.QuestController;
-import com.leonardobishop.quests.util.Items;
-import com.leonardobishop.quests.util.Options;
-import org.bukkit.Bukkit;
-import org.bukkit.event.inventory.ClickType;
-import org.bukkit.event.inventory.InventoryClickEvent;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Represents a cancellation confirmation menu for a specific quest.
- */
-public class DailyQMenu implements QMenu {
-
- private final Map<Integer, MenuElement> menuElements = new HashMap<>();
- private final Quests plugin;
- private final QPlayer owner;
-
- public DailyQMenu(Quests plugin, QPlayer owner) {
- this.plugin = plugin;
- this.owner = owner;
- }
-
- @Override
- public QPlayer getOwner() {
- return owner;
- }
-
- public void populate() {
- if (!(owner.getQuestController() instanceof DailyQuestController)) {
- return;
- }
- DailyQuestController dailyQuestController = (DailyQuestController) owner.getQuestController();
- List<String> quests = dailyQuestController.getQuests();
- for (int i = 0; i < quests.size(); i++) {
- menuElements.put(11 + i, new QuestMenuElement(plugin, owner, quests.get(i)));
- }
- }
-
- public Inventory toInventory(int page) {
- String title = Options.color(Options.GUITITLE_DAILY_QUESTS.getStringValue());
-
- ItemStack background = Items.QUEST_CANCEL_BACKGROUND.getItem();
- ItemMeta backgroundMeta = background.getItemMeta();
- backgroundMeta.setDisplayName(" ");
- background.setItemMeta(backgroundMeta);
-
- Inventory inventory = Bukkit.createInventory(null, 27, title);
-
- for (int i = 0; i < inventory.getSize(); i++) {
- inventory.setItem(i, background);
- }
-
- for (int pointer = 0; pointer < 27; pointer++) {
- if (menuElements.containsKey(pointer)) {
- inventory.setItem(pointer, menuElements.get(pointer).asItemStack());
- }
- }
-
- return inventory;
- }
-
- @Override
- public void handleClick(InventoryClickEvent event, MenuController controller) {
- if (menuElements.containsKey(event.getSlot())) {
- MenuElement menuElement = menuElements.get(event.getSlot());
- if (menuElement instanceof QuestMenuElement) {
- QuestMenuElement questMenuElement = (QuestMenuElement) menuElement;
- Quest quest = plugin.getQuestManager().getQuestById(questMenuElement.getQuestId());
- if (event.getClick() == ClickType.LEFT) {
- if (Options.QUEST_AUTOSTART.getBooleanValue()) return;
- if (owner.startQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
- event.getWhoClicked().closeInventory(); //TODO Option to keep the menu open
- }
- } else if (event.getClick() == ClickType.MIDDLE && Options.ALLOW_QUEST_TRACK.getBooleanValue()) {
- MenuUtil.handleMiddleClick(this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller);
- }
- }
- }
- }
-
-
-}
diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayer.java b/src/main/java/com/leonardobishop/quests/player/QPlayer.java
deleted file mode 100644
index e8dc3306..00000000
--- a/src/main/java/com/leonardobishop/quests/player/QPlayer.java
+++ /dev/null
@@ -1,279 +0,0 @@
-package com.leonardobishop.quests.player;
-
-import com.leonardobishop.quests.util.QuestMode;
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.api.events.PlayerFinishQuestEvent;
-import com.leonardobishop.quests.api.events.PlayerStartTrackQuestEvent;
-import com.leonardobishop.quests.api.events.PlayerStopTrackQuestEvent;
-import com.leonardobishop.quests.menu.CategoryQMenu;
-import com.leonardobishop.quests.menu.DailyQMenu;
-import com.leonardobishop.quests.menu.QuestQMenu;
-import com.leonardobishop.quests.menu.QuestSortWrapper;
-import com.leonardobishop.quests.menu.StartedQMenu;
-import com.leonardobishop.quests.player.questprogressfile.QPlayerPreferences;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
-import com.leonardobishop.quests.quest.Category;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.controller.QuestController;
-import com.leonardobishop.quests.util.Messages;
-import com.leonardobishop.quests.util.Options;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-/**
- * Represents a player.
- */
-public class QPlayer {
-
- private final Quests plugin;
- private final UUID uuid;
- private final QPlayerPreferences playerPreferences;
- private final QuestProgressFile questProgressFile;
- private QuestController questController;
-
- public QPlayer(Quests plugin, UUID uuid, QPlayerPreferences playerPreferences, QuestProgressFile questProgressFile, QuestController questController) {
- this.plugin = plugin;
- this.uuid = uuid;
- this.playerPreferences = playerPreferences;
- this.questProgressFile = questProgressFile;
- this.questController = questController;
- }
-
- public UUID getPlayerUUID() {
- return this.uuid;
- }
-
- /**
- * Attempt to complete a quest for the player. This will also play all effects (such as titles, messages etc.)
- * and also dispatches all rewards for the player.
- *
- * Warning: rewards will not be sent and the {@link PlayerFinishQuestEvent} will not be fired if the
- * player is not online
- *
- * @param quest the quest to complete
- * @return true (always)
- */
- public boolean completeQuest(Quest quest) {
- return questController.completeQuestForPlayer(this, quest);
- }
-
- /**
- * Attempt to track a quest for the player. This will also play all effects (such as titles, messages etc.)
- *
- * Warning: {@link PlayerStopTrackQuestEvent} is not fired if the player is not online
- *
- * @param quest the quest to track
- */
- public void trackQuest(Quest quest) {
- Player player = Bukkit.getPlayer(uuid);
- if (quest == null) {
- String currentTrackedQuestId = playerPreferences.getTrackedQuestId();
- playerPreferences.setTrackedQuestId(null);
- if (player != null) {
- Bukkit.getPluginManager().callEvent(new PlayerStopTrackQuestEvent(player, this));
- Quest currentTrackedQuest;
- if (currentTrackedQuestId != null && (currentTrackedQuest = plugin.getQuestManager().getQuestById(currentTrackedQuestId)) != null) {
- player.sendMessage(Messages.QUEST_TRACK_STOP.getMessage().replace("{quest}", currentTrackedQuest.getDisplayNameStripped()));
- }
- }
- } else if (hasStartedQuest(quest)) {
- playerPreferences.setTrackedQuestId(quest.getId());
- if (player != null) {
- Bukkit.getPluginManager().callEvent(new PlayerStartTrackQuestEvent(player, this));
- player.sendMessage(Messages.QUEST_TRACK.getMessage().replace("{quest}", quest.getDisplayNameStripped()));
- }
- }
- }
-
- /**
- * Gets whether or not the player has started a specific quest.
- *
- * @param quest the quest to test for
- * @return true if the quest is started or quest autostart is enabled and the quest is ready to start, false otherwise
- */
- public boolean hasStartedQuest(Quest quest) {
- return questController.hasPlayerStartedQuest(this, quest);
- }
-
- /**
- * Attempt to start a quest for the player. This will also play all effects (such as titles, messages etc.)
- *
- * Warning: will fail if the player is not online.
- *
- * @param quest the quest to start
- * @return the quest start result -- {@code QuestStartResult.QUEST_SUCCESS} indicates success
- */
- // TODO PlaceholderAPI support
- public QuestStartResult startQuest(Quest quest) {
- return questController.startQuestForPlayer(this, quest);
- }
-
- /**
- * Attempt to cancel a quest for the player. This will also play all effects (such as titles, messages etc.)
- *
- * @param quest the quest to start
- * @return true if the quest was cancelled, false otherwise
- */
- public boolean cancelQuest(Quest quest) {
- return questController.cancelQuestForPlayer(this, quest);
- }
-
- /**
- * Check if the player can start a quest.
- *
- * Warning: will fail if the player is not online.
- *
- * @param quest the quest to check
- * @return the quest start result
- */
- public QuestStartResult canStartQuest(Quest quest) {
- return questController.canPlayerStartQuest(this, quest);
- }
-
- /**
- * Opens a category menu for the player.
- *
- * @return 0 if success, 1 if no permission, 2 is only data loaded, 3 if player not found
- */
- public int openCategory(Category category, CategoryQMenu superMenu, boolean backButton) {
- Player player = Bukkit.getPlayer(this.uuid);
- if (player == null) {
- return 3;
- }
-
- if (category.isPermissionRequired() && !player.hasPermission("quests.category." + category.getId())) {
- return 1;
- }
-
- // Using `this` instead of searching again for this QPlayer
- QuestQMenu questQMenu = new QuestQMenu(plugin, this, category.getId(), superMenu);
- List<Quest> quests = new ArrayList<>();
- for (String questid : category.getRegisteredQuestIds()) {
- Quest quest = plugin.getQuestManager().getQuestById(questid);
- if (quest != null) {
- quests.add(quest);
- }
- }
- questQMenu.populate(quests);
- questQMenu.setBackButtonEnabled(backButton);
- return openCategory(category, questQMenu);
- }
-
- /**
- * Opens a category menu for the player.
- *
- * @return 0 if success, 1 if no permission, 2 is only data loaded, 3 if player not found
- */
- public int openCategory(Category category, QuestQMenu questQMenu) {
- Player player = Bukkit.getPlayer(this.uuid);
- if (player == null) {
- return 3;
- }
-
- if (category.isPermissionRequired() && !player.hasPermission("quests.category." + category.getId())) {
- return 1;
- }
-
- plugin.getMenuController().openMenu(player, questQMenu, 1);
- return 0;
- }
-
- public void openQuests() {
- if (this.uuid == null) {
- return;
- }
- Player player = Bukkit.getPlayer(this.uuid);
- if (player == null) {
- return;
- }
-
- if (plugin.getQuestMode() == QuestMode.NORMAL) {
- if (Options.CATEGORIES_ENABLED.getBooleanValue()) {
- CategoryQMenu categoryQMenu = new CategoryQMenu(plugin, this);
- List<QuestQMenu> questMenus = new ArrayList<>();
- for (Category category : plugin.getQuestManager().getCategories()) {
- QuestQMenu questQMenu = new QuestQMenu(plugin, this, category.getId(), categoryQMenu);
- List<Quest> quests = new ArrayList<>();
- for (String questid : category.getRegisteredQuestIds()) {
- Quest quest = plugin.getQuestManager().getQuestById(questid);
- if (quest != null) {
- quests.add(quest);
- }
- }
- questQMenu.populate(quests);
- questMenus.add(questQMenu);
- }
- categoryQMenu.populate(questMenus);
-
- plugin.getMenuController().openMenu(player, categoryQMenu, 1);
- } else {
- QuestQMenu questQMenu = new QuestQMenu(plugin, this, "", null);
- List<Quest> quests = new ArrayList<>();
- for (Map.Entry<String, Quest> entry : plugin.getQuestManager().getQuests().entrySet()) {
- quests.add(entry.getValue());
- }
- questQMenu.populate(quests);
- questQMenu.setBackButtonEnabled(false);
-
- plugin.getMenuController().openMenu(player, questQMenu, 1);
- }
- } else {
- DailyQMenu dailyQMenu = new DailyQMenu(plugin, this);
- dailyQMenu.populate();
- plugin.getMenuController().openMenu(player, dailyQMenu, 1);
- }
- }
-
- public void openStartedQuests() {
- if (this.uuid == null) {
- return;
- }
- Player player = Bukkit.getPlayer(this.uuid);
- if (player == null) {
- return;
- }
-
- StartedQMenu startedQMenu = new StartedQMenu(plugin, this);
- List<QuestSortWrapper> quests = new ArrayList<>();
- for (Map.Entry<String, Quest> entry : plugin.getQuestManager().getQuests().entrySet()) {
- quests.add(new QuestSortWrapper(plugin, entry.getValue()));
- }
- startedQMenu.populate(quests);
-
- plugin.getMenuController().openMenu(player, startedQMenu, 1);
- }
-
- public QuestProgressFile getQuestProgressFile() {
- return questProgressFile;
- }
-
- public QPlayerPreferences getPlayerPreferences() {
- return playerPreferences;
- }
-
- public QuestController getQuestController() {
- return questController;
- }
-
- public void setQuestController(QuestController questController) {
- this.questController = questController;
- }
-
- @Override //Used by java GC
- public boolean equals(Object o) {
- if (!(o instanceof QPlayer)) return false;
- QPlayer qPlayer = (QPlayer) o;
- return this.uuid == qPlayer.getPlayerUUID();
- }
-
- @Override //Used by java GC
- public int hashCode() {
- return uuid.hashCode() * 73; //uuid hash * prime number
- }
-}
diff --git a/src/main/java/com/leonardobishop/quests/quest/controller/DailyQuestController.java b/src/main/java/com/leonardobishop/quests/quest/controller/DailyQuestController.java
deleted file mode 100644
index d2ffd192..00000000
--- a/src/main/java/com/leonardobishop/quests/quest/controller/DailyQuestController.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package com.leonardobishop.quests.quest.controller;
-
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.api.events.PlayerFinishQuestEvent;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.util.Messages;
-import com.leonardobishop.quests.util.Options;
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.entity.Player;
-import org.bukkit.scheduler.BukkitRunnable;
-import org.bukkit.scheduler.BukkitTask;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.stream.Collectors;
-
-//TODO finish this
-public class DailyQuestController implements QuestController {
-
- private int refreshTaskId = -1;
- private long refreshTime;
- private long startTime;
- private Quests plugin;
- private Random random;
- private List<String> quests;
-
- public DailyQuestController(Quests plugin) {
- this.plugin = plugin;
- refreshDailyQuests();
- scheduleNewTask();
- }
-
- public void cancel() {
- Bukkit.getScheduler().cancelTask(refreshTaskId);
- }
-
- public List<String> getQuests() {
- return quests;
- }
-
- private void scheduleNewTask() {
- long diff = refreshTime - System.currentTimeMillis();
- BukkitTask refreshTask;
- if (diff <= 10000) { //10 sec
- refreshTask = new DailyQuestRefreshTask(true).runTaskTimer(plugin, 1L, 1L);
- plugin.getQuestsLogger().debug("DailyQuestRefreshTask set repeating (diff=" + diff + ")");
- } else {
- long sleepTime = diff >> 6;
- plugin.getQuestsLogger().debug("DailyQuestRefreshTask slept for " + sleepTime + " ticks (diff=" + diff + ")");
- refreshTask = new DailyQuestRefreshTask(false).runTaskLater(plugin, sleepTime);
- }
- refreshTaskId = refreshTask.getTaskId();
- }
-
- private void refreshDailyQuests() {
-// refreshTime = ((System.currentTimeMillis() / (86400000)) + 1) * 86400000;
- refreshTime = ((System.currentTimeMillis() / (300000)) + 1) * 300000;
- startTime = (System.currentTimeMillis() / (300000)) * 300000;
- random = new Random(refreshTime);
- quests = new ArrayList<>();
-
- List<String> questIds = new ArrayList<>(plugin.getQuestManager().getQuests().keySet());
- for (int i = 0; i < 5; i++) {
- int randInt = random.nextInt(questIds.size());
- quests.add(questIds.get(randInt));
- questIds = questIds.stream().filter(s -> !quests.contains(s)).collect(Collectors.toList());
- }
- }
-
- @Override
- public QuestStartResult startQuestForPlayer(QPlayer qPlayer, Quest quest) {
- if (quests.contains(quest.getId())) {
- return QuestStartResult.QUEST_ALREADY_STARTED;
- } else {
- return QuestStartResult.QUEST_LIMIT_REACHED;
- }
- }
-
- @Override
- public QuestStartResult canPlayerStartQuest(QPlayer qPlayer, Quest quest) {
- if (!quests.contains(quest.getId())) return QuestStartResult.OTHER;
- long completionDate = qPlayer.getQuestProgressFile().getQuestProgress(quest).getCompletionDate();
- if (Options.QUEST_AUTOSTART.getBooleanValue()) {
- if (completionDate > startTime && completionDate <= refreshTime) {
- return QuestStartResult.QUEST_ALREADY_COMPLETED;
- }
- } else {
- if (qPlayer.getQuestProgressFile().hasQuestProgress(quest)) {
- QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest);
- if (questProgress.isStarted() && completionDate > startTime && completionDate <= refreshTime) {
- return QuestStartResult.QUEST_ALREADY_STARTED;
- }
- }
- }
- return QuestStartResult.QUEST_SUCCESS;
- }
-
- @Override
- public boolean completeQuestForPlayer(QPlayer qPlayer, Quest quest) {
- QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest);
- questProgress.setStarted(false);
- for (TaskProgress taskProgress : questProgress.getTaskProgress()) {
- taskProgress.setCompleted(false);
- taskProgress.setProgress(null);
- }
- questProgress.setCompleted(true);
- questProgress.setCompletedBefore(true);
- questProgress.setCompletionDate(System.currentTimeMillis());
-
- boolean trackedReset = quest.getId().equals(qPlayer.getPlayerPreferences().getTrackedQuestId());
- if (trackedReset) {
- qPlayer.trackQuest(null);
- }
-
- Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID());
- if (player != null) {
- String questFinishMessage = Messages.QUEST_COMPLETE.getMessage().replace("{quest}", quest.getDisplayNameStripped());
- // PlayerFinishQuestEvent -- start
- PlayerFinishQuestEvent questFinishEvent = new PlayerFinishQuestEvent(player, qPlayer, questProgress, questFinishMessage);
- Bukkit.getPluginManager().callEvent(questFinishEvent);
- // PlayerFinishQuestEvent -- end
- Bukkit.getServer().getScheduler().runTask(plugin, () -> {
- for (String s : quest.getRewards()) {
- Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), s.replace("{player}", player.getName())); //TODO PlaceholderAPI support
- }
- });
- if (questFinishEvent.getQuestFinishMessage() != null)
- player.sendMessage(questFinishEvent.getQuestFinishMessage());
- if (Options.TITLES_ENABLED.getBooleanValue()) {
- plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_COMPLETE_TITLE.getMessage().replace("{quest}", quest
- .getDisplayNameStripped()), Messages.TITLE_QUEST_COMPLETE_SUBTITLE.getMessage().replace("{quest}", quest
- .getDisplayNameStripped()));
- }
- for (String s : quest.getRewardString()) {
- player.sendMessage(ChatColor.translateAlternateColorCodes('&', s));
- }
- }
- if (Options.QUEST_AUTOTRACK.getBooleanValue() && trackedReset) {
- for (String s : quests) {
- Quest nextQuest = plugin.getQuestManager().getQuestById(s);
- if (nextQuest != null && canPlayerStartQuest(qPlayer, nextQuest) == QuestStartResult.QUEST_SUCCESS) {
- qPlayer.trackQuest(nextQuest);
- break;
- }
- }
- }
- return true;
- }
-
- @Override
- public boolean hasPlayerStartedQuest(QPlayer qPlayer, Quest quest) {
- return canPlayerStartQuest(qPlayer, quest) == QuestStartResult.QUEST_SUCCESS;
- }
-
- @Override
- public boolean cancelQuestForPlayer(QPlayer qPlayer, Quest quest) {
- return false;
- }
-
- public class DailyQuestRefreshTask extends BukkitRunnable {
-
- private final boolean repeating;
-
- public DailyQuestRefreshTask(boolean repeating) {
- this.repeating = repeating;
- }
-
- @Override
- public void run() {
- if (System.currentTimeMillis() >= refreshTime) {
- this.cancel();
- refreshDailyQuests();
- } else {
- if (repeating) return;
- this.cancel();
- }
- scheduleNewTask();
- }
- }
-}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/ConfigValue.java b/src/main/java/com/leonardobishop/quests/quest/tasktype/ConfigValue.java
deleted file mode 100644
index 764e771c..00000000
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/ConfigValue.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.leonardobishop.quests.quest.tasktype;
-
-/**
- * This is for the quest creator and is purely cosmetic.
- */
-public final class ConfigValue {
-
- private final String key;
- private final boolean required;
- private final String description;
- private final String[] requirementExceptions;
-
- public ConfigValue(String key, boolean required, String description, String... requirementExceptions) {
- this.key = key;
- this.required = required;
- this.description = description;
- this.requirementExceptions = requirementExceptions;
- }
-
- public String getKey() {
- return key;
- }
-
- public boolean isRequired() {
- return required;
- }
-
- public String getDescription() {
- return description;
- }
-
- public String[] getRequirementExceptions() {
- return requirementExceptions;
- }
-}
diff --git a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/IridiumSkyblockValueType.java b/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/IridiumSkyblockValueType.java
deleted file mode 100644
index 3647a3e7..00000000
--- a/src/main/java/com/leonardobishop/quests/quest/tasktype/type/dependent/IridiumSkyblockValueType.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.leonardobishop.quests.quest.tasktype.type.dependent;
-
-import com.iridium.iridiumskyblock.Island;
-import com.iridium.iridiumskyblock.api.IslandWorthCalculatedEvent;
-import com.leonardobishop.quests.util.QuestsConfigLoader;
-import com.leonardobishop.quests.api.QuestsAPI;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
-import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.ConfigValue;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import com.leonardobishop.quests.quest.tasktype.TaskUtils;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.UUID;
-
-public final class IridiumSkyblockValueType extends TaskType {
-
- private List<ConfigValue> creatorConfigValues = new ArrayList<>();
-
- public IridiumSkyblockValueType() {
- super("iridiumskyblock_value", TaskUtils.TASK_ATTRIBUTION_STRING, "Reach a certain island value for Iridium Skyblock.");
- this.creatorConfigValues.add(new ConfigValue("value", true, "Minimum island value needed."));
- }
-
- @Override
- public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
- ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
- if (TaskUtils.configValidateExists(root + ".value", config.get("value"), problems, "value", super.getType()))
- TaskUtils.configValidateInt(root + ".value", config.get("value"), problems, false, false, "value");
- return problems;
- }
-
- @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void onIslandLevel(IslandWorthCalculatedEvent event) {
- Island island = event.getIsland();
- for (String player : island.members) {
- UUID uuid;
- try {
- uuid = UUID.fromString(player);
- } catch (Exception e) {
- continue;
- }
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(uuid);
- if (qPlayer == null) {
- continue;
- }
-
- for (Quest quest : IridiumSkyblockValueType.super.getRegisteredQuests()) {
- if (qPlayer.hasStartedQuest(quest)) {
- QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest);
-
- for (Task task : quest.getTasksOfType(IridiumSkyblockValueType.super.getType())) {
- TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
-
- if (taskProgress.isCompleted()) {
- continue;
- }
-
- int islandValueNeeded = (int) task.getConfigValue("value");
-
- taskProgress.setProgress(event.getIslandWorth());
-
- if (((double) taskProgress.getProgress()) >= islandValueNeeded) {
- taskProgress.setCompleted(true);
- }
- }
- }
- }
- }
-
- }
-
- @Override
- public List<ConfigValue> getCreatorConfigValues() {
- return creatorConfigValues;
- }
-
-}
diff --git a/src/main/java/com/leonardobishop/quests/util/Items.java b/src/main/java/com/leonardobishop/quests/util/Items.java
deleted file mode 100644
index be34d72c..00000000
--- a/src/main/java/com/leonardobishop/quests/util/Items.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.leonardobishop.quests.util;
-
-import com.leonardobishop.quests.Quests;
-import org.bukkit.inventory.ItemStack;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public enum Items {
-
- BACK_BUTTON("gui.back-button"),
- QUEST_LOCKED("gui.quest-locked-display"),
- QUEST_COOLDOWN("gui.quest-cooldown-display"),
- QUEST_COMPLETED("gui.quest-completed-display"),
- QUEST_PERMISSION("gui.quest-permission-display"),
- PAGE_PREV("gui.page-prev"),
- PAGE_NEXT("gui.page-next"),
- PAGE_DESCRIPTION("gui.page-desc"),
- NO_STARTED_QUESTS("gui.no-started-quests"),
- QUEST_CANCEL_YES("gui.quest-cancel-yes"),
- QUEST_CANCEL_NO("gui.quest-cancel-no"),
- QUEST_CANCEL_BACKGROUND("gui.quest-cancel-background");
-
- private static final Map<String, ItemStack> cachedItemStacks = new HashMap<>();
-
- private final String path;
-
- Items(String path) {
- this.path = path;
- }
-
- public ItemStack getItem() {
- return new ItemStack(cachedItemStacks.computeIfAbsent(path, s -> Quests.get().getItemStack(path, Quests.get().getConfig())));
- }
-
-}
diff --git a/src/main/java/com/leonardobishop/quests/util/Options.java b/src/main/java/com/leonardobishop/quests/util/Options.java
deleted file mode 100644
index 0ad0a41d..00000000
--- a/src/main/java/com/leonardobishop/quests/util/Options.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.leonardobishop.quests.util;
-
-import com.leonardobishop.quests.Quests;
-import org.bukkit.ChatColor;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-public enum Options {
-
- CATEGORIES_ENABLED("options.categories-enabled"),
- TRIM_GUI_SIZE("options.trim-gui-size"),
- QUESTS_START_LIMIT("options.quest-started-limit"),
- TITLES_ENABLED("options.titles-enabled"),
- GUI_HIDE_LOCKED("options.gui-hide-locked"),
- GUI_HIDE_QUESTS_NOPERMISSION("options.gui-hide-quests-nopermission"),
- GUI_HIDE_CATEGORIES_NOPERMISSION("options.gui-hide-categories-nopermission"),
- GUI_USE_PLACEHOLDERAPI("options.gui-use-placeholderapi"),
- GUITITLE_QUESTS_CATEGORY("options.guinames.quests-category"),
- GUITITLE_QUESTS("options.guinames.quests-menu"),
- GUITITLE_QUESTS_STARTED("options.guinames.quests-started-menu"),
- GUITITLE_DAILY_QUESTS("options.guinames.daily-quests"),
- GUITITLE_QUEST_CANCEL("options.guinames.quest-cancel"),
- ALLOW_QUEST_CANCEL("options.allow-quest-cancel"),
- ALLOW_QUEST_TRACK("options.allow-quest-track"),
- VERIFY_QUEST_EXISTS_ON_LOAD("options.verify-quest-exists-on-load"),
- TAB_COMPLETE_ENABLED("options.tab-completion.enabled"),
- ERROR_CHECKING_OVERRIDE("options.error-checking.override-errors"),
- QUEST_AUTOSTART("options.quest-autostart"),
- QUEST_AUTOTRACK("options.quest-autotrack"),
- GLOBAL_TASK_CONFIGURATION_OVERRIDE("options.global-task-configuration-override"),
- GLOBAL_QUEST_DISPLAY_CONFIGURATION_OVERRIDE("options.global-quest-display-configuration-override"),
- GLOBAL_QUEST_DISPLAY_LORE_APPEND_NORMAL("global-quest-display.lore.append-normal"),
- GLOBAL_QUEST_DISPLAY_LORE_APPEND_NOT_STARTED("global-quest-display.lore.append-not-started"),
- GLOBAL_QUEST_DISPLAY_LORE_APPEND_STARTED("global-quest-display.lore.append-started"),
- GLOBAL_QUEST_DISPLAY_LORE_APPEND_TRACKED("global-quest-display.lore.append-tracked");
-
- private static final Map<String, Boolean> cachedBooleans = new ConcurrentHashMap<>();
-
- private final String path;
-
- Options(String path) {
- this.path = path;
- }
-
- public int getIntValue() {
- return Quests.get().getConfig().getInt(path);
- }
-
- public int getIntValue(int def) {
- return Quests.get().getConfig().getInt(path, def);
- }
-
- public String getStringValue() {
- return Quests.get().getConfig().getString(path);
- }
-
- public String getStringValue(String def) {
- return Quests.get().getConfig().getString(path, def);
- }
-
- public boolean getBooleanValue() {
- return cachedBooleans.computeIfAbsent(path, s -> Quests.get().getConfig().getBoolean(path));
- }
-
- public boolean getBooleanValue(boolean def) {
- return Quests.get().getConfig().getBoolean(path, def);
- }
-
- public List<String> getStringListValue() {
- return Quests.get().getConfig().getStringList(path);
- }
-
- public static String color(String s) {
- return ChatColor.translateAlternateColorCodes('&', s);
- }
-
- public static List<String> color(List<String> s) {
- if (s == null || s.size() == 0) return s;
-
- List<String> colored = new ArrayList<>();
- for (String line : s) {
- colored.add(ChatColor.translateAlternateColorCodes('&', line));
- }
- return colored;
- }
-
- public static void invalidateCaches() {
- cachedBooleans.clear();
- }
-}
diff --git a/src/main/java/com/leonardobishop/quests/util/QuestMode.java b/src/main/java/com/leonardobishop/quests/util/QuestMode.java
deleted file mode 100644
index e942d909..00000000
--- a/src/main/java/com/leonardobishop/quests/util/QuestMode.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.leonardobishop.quests.util;
-
-public enum QuestMode {
-
- NORMAL,
- DAILY;
-
-}
diff --git a/src/main/java/com/leonardobishop/quests/util/QuestsConfigLoader.java b/src/main/java/com/leonardobishop/quests/util/QuestsConfigLoader.java
deleted file mode 100644
index 9c5215bc..00000000
--- a/src/main/java/com/leonardobishop/quests/util/QuestsConfigLoader.java
+++ /dev/null
@@ -1,454 +0,0 @@
-package com.leonardobishop.quests.util;
-
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.hook.itemgetter.ItemGetter;
-import com.leonardobishop.quests.menu.QItemStack;
-import com.leonardobishop.quests.quest.Category;
-import com.leonardobishop.quests.quest.Quest;
-import com.leonardobishop.quests.quest.Task;
-import com.leonardobishop.quests.quest.tasktype.TaskType;
-import org.apache.commons.lang.StringUtils;
-import org.bukkit.ChatColor;
-import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.configuration.file.YamlConfiguration;
-import org.bukkit.inventory.ItemStack;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-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.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class QuestsConfigLoader {
-
- private final Map<String, List<ConfigProblem>> filesWithProblems = new HashMap<>();
- private final Quests plugin;
- private int problemsCount;
-
- public QuestsConfigLoader(Quests plugin) {
- this.plugin = plugin;
- }
-
- /**
- * Loads and parses config into memory including the quests folder.
- */
- public void loadConfig() {
- plugin.reloadConfig();
- Options.invalidateCaches();
- filesWithProblems.clear();
- plugin.setBrokenConfig(false);
-
- // test CONFIG file integrity
- try {
- YamlConfiguration config = new YamlConfiguration();
- config.load(new File(plugin.getDataFolder() + File.separator + "config.yml"));
- } catch (Exception ex) {
- filesWithProblems.put("<MAIN CONFIG> config.yml", Collections.singletonList(new ConfigProblem(ConfigProblemType.ERROR, ConfigProblemDescriptions.MALFORMED_YAML.getDescription())));
- plugin.setBrokenConfig(true);
- }
-
-
- if (!plugin.isBrokenConfig()) {
- HashMap<String, Map<String, Object>> globalTaskConfig = new HashMap<>();
- for (String id : plugin.getConfig().getConfigurationSection("categories").getKeys(false)) {
- ItemStack displayItem = plugin.getItemStack("categories." + id + ".display", plugin.getConfig());
- boolean permissionRequired = plugin.getConfig().getBoolean("categories." + id + ".permission-required", false);
-
- Category category = new Category(id, displayItem, permissionRequired);
- plugin.getQuestManager().registerCategory(category);
- }
- plugin.getQuestsLogger().setServerLoggingLevel(QuestsLogger.LoggingLevel.fromNumber(plugin.getConfig().getInt("options.verbose-logging-level", 2)));
-
- HashMap<String, Quest> pathToQuest = new HashMap<>();
-
- if (plugin.getConfig().isConfigurationSection("global-task-configuration.types")) {
- for (String type : plugin.getConfig().getConfigurationSection("global-task-configuration.types").getKeys(false)) {
- HashMap<String, Object> configValues = new HashMap<>();
- for (String key : plugin.getConfig().getConfigurationSection("global-task-configuration.types." + type).getKeys(false)) {
- configValues.put(key, plugin.getConfig().get("global-task-configuration.types." + type + "." + key));
- }
- globalTaskConfig.putIfAbsent(type, configValues);
- }
- }
-
- try {
- plugin.setQuestMode(QuestMode.valueOf(plugin.getConfig().getString("quest-mode.mode", "NORMAL").toUpperCase()));
- } catch (IllegalArgumentException ex) {
- plugin.setQuestMode(QuestMode.NORMAL);
- }
-
- FileVisitor<Path> fileVisitor = new SimpleFileVisitor<Path>() {
- final URI questsRoot = Paths.get(plugin.getDataFolder() + File.separator + "quests").toUri();
-
- @Override
- public FileVisitResult visitFile(Path path, BasicFileAttributes attributes) {
- try {
- File questFile = new File(path.toUri());
- URI relativeLocation = questsRoot.relativize(path.toUri());
-
- if (!questFile.getName().toLowerCase().endsWith(".yml")) return FileVisitResult.CONTINUE;
-
- YamlConfiguration config = new YamlConfiguration();
- // test QUEST file integrity
- try {
- config.load(questFile);
- } catch (Exception ex) {
- filesWithProblems.put(relativeLocation.getPath(), Collections.singletonList(new ConfigProblem(ConfigProblemType.ERROR, ConfigProblemDescriptions.MALFORMED_YAML.getDescription())));
- return FileVisitResult.CONTINUE;
- }
-
- String id = questFile.getName().replace(".yml", "");
-
- List<ConfigProblem> configProblems = new ArrayList<>();
-
- if (!StringUtils.isAlphanumeric(id)) {
- configProblems.add(new ConfigProblem(ConfigProblemType.ERROR, ConfigProblemDescriptions.INVALID_QUEST_ID.getDescription(id)));
- }
-
- // CHECK EVERYTHING WRONG WITH THE QUEST FILE BEFORE ACTUALLY LOADING THE QUEST
-
- if (!config.isConfigurationSection("tasks")) {
- configProblems.add(new ConfigProblem(ConfigProblemType.ERROR, ConfigProblemDescriptions.NO_TASKS.getDescription(), "tasks"));
- } else { //continue
- int validTasks = 0;
- for (String taskId : config.getConfigurationSection("tasks").getKeys(false)) {
- boolean isValid = true;
- String taskRoot = "tasks." + taskId;
- String taskType = config.getString(taskRoot + ".type");
-
- if (!config.isConfigurationSection(taskRoot)) {
- configProblems.add(new ConfigProblem(ConfigProblemType.WARNING, ConfigProblemDescriptions.TASK_MALFORMED_NOT_SECTION.getDescription(taskId), taskRoot));
- continue;
- }
-
- if (taskType == null) {
- configProblems.add(new ConfigProblem(ConfigProblemType.WARNING, ConfigProblemDescriptions.NO_TASK_TYPE.getDescription(), taskRoot));
- continue;
- }
-
- // check the tasks
- TaskType t = plugin.getTaskTypeManager().getTaskType(taskType);
- if (t != null) {
- HashMap<String, Object> configValues = new HashMap<>();
- for (String key : config.getConfigurationSection(taskRoot).getKeys(false)) {
- configValues.put(key, config.get(taskRoot + "." + key));
- }
-
- configProblems.addAll(t.detectProblemsInConfig(taskRoot, configValues));
- } else {
- configProblems.add(new ConfigProblem(ConfigProblemType.WARNING, ConfigProblemDescriptions.UNKNOWN_TASK_TYPE.getDescription(taskType), taskRoot));
- isValid = false;
- }
-
- if (isValid) {
- validTasks++;
- }
- }
- if (validTasks == 0) {
- configProblems.add(new ConfigProblem(ConfigProblemType.ERROR, ConfigProblemDescriptions.NO_TASKS.getDescription(), "tasks"));
- }
- }
-
- boolean error = false;
- for (ConfigProblem problem : configProblems) {
- if (problem.getType() == ConfigProblemType.ERROR) {
- error = true;
- break;
- }
- }
-
- // END OF THE CHECKING
- if (!error && !Options.ERROR_CHECKING_OVERRIDE.getBooleanValue(false)) {
- QItemStack displayItem = getQItemStack("display", config);
- List<String> rewards = config.getStringList("rewards");
- List<String> requirements = config.getStringList("options.requires");
- List<String> rewardString = config.getStringList("rewardstring");
- List<String> startString = config.getStringList("startstring");
- boolean repeatable = config.getBoolean("options.repeatable", false);
- boolean cooldown = config.getBoolean("options.cooldown.enabled", false);
- boolean permissionRequired = config.getBoolean("options.permission-required", false);
- int cooldownTime = config.getInt("options.cooldown.time", 10);
- int sortOrder = config.getInt("options.sort-order", 1);
- String category = config.getString("options.category");
- Map<String, String> placeholders = new HashMap<>();
-
- if (category == null) category = "";
-
- if (plugin.getQuestMode() == QuestMode.DAILY) {
- repeatable = true;
- cooldown = true;
- cooldownTime = 0;
- requirements = Collections.emptyList();
- permissionRequired = false;
- }
-
- Quest quest;
- if (category.equals("")) {
- quest = new Quest(id, displayItem, rewards, requirements, repeatable, cooldown, cooldownTime, permissionRequired, rewardString, startString, placeholders, sortOrder);
- } else {
- quest = new Quest(id, displayItem, rewards, requirements, repeatable, cooldown, cooldownTime, permissionRequired, rewardString, startString, placeholders, category, sortOrder);
- Category c = plugin.getQuestManager().getCategoryById(category);
- if (c != null) {
- c.registerQuestId(id);
- } else {
- configProblems.add(new ConfigProblem(ConfigProblemType.WARNING, ConfigProblemDescriptions.UNKNOWN_CATEGORY.getDescription(category), "options.category"));
- }
- }
-
- for (String taskId : config.getConfigurationSection("tasks").getKeys(false)) {
- String taskRoot = "tasks." + taskId;
- String taskType = config.getString(taskRoot + ".type");
-
- Task task = new Task(taskId, taskType);
-
- for (String key : config.getConfigurationSection(taskRoot).getKeys(false)) {
- task.addConfigValue(key, config.get(taskRoot + "." + key));
- }
-
- if (globalTaskConfig.containsKey(taskType)) {
- for (Map.Entry<String, Object> entry : globalTaskConfig.get(taskType).entrySet()) {
- if (Options.GLOBAL_TASK_CONFIGURATION_OVERRIDE.getBooleanValue() && task.getConfigValue(entry.getKey()) != null)
- continue;
- task.addConfigValue(entry.getKey(), entry.getValue());
- }
- }
-
- quest.registerTask(task);
- }
-
-
- for (String line : displayItem.getLoreNormal()) {
- findInvalidTaskReferences(quest, line, configProblems, "display.lore-normal");
- }
- for (String line : displayItem.getLoreStarted()) {
- findInvalidTaskReferences(quest, line, configProblems, "display.lore-started");
- }
-
- if (config.isConfigurationSection("placeholders")) {
- for (String p : config.getConfigurationSection("placeholders").getKeys(false)) {
- placeholders.put(p, config.getString("placeholders." + p));
- findInvalidTaskReferences(quest, config.getString("placeholders." + p), configProblems, "placeholders." + p);
- }
- }
- if (plugin.getConfig().getBoolean("options.show-quest-registrations")) {
- plugin.getQuestsLogger().info("Registering quest " + quest.getId() + " with " + quest.getTasks().size() + " tasks.");
- }
- plugin.getQuestManager().registerQuest(quest);
- plugin.getTaskTypeManager().registerQuestTasksWithTaskTypes(quest);
- pathToQuest.put(relativeLocation.getPath(), quest);
- }
- if (!configProblems.isEmpty()) {
- filesWithProblems.put(relativeLocation.getPath(), configProblems);
- }
- } catch (Exception e) {
- plugin.getQuestsLogger().severe("An exception occurred when attempting to load quest '" + path + "' (will be ignored)");
- e.printStackTrace();
- }
- return FileVisitResult.CONTINUE;
- }
- };
-
- try {
- Files.walkFileTree(Paths.get(plugin.getDataFolder() + File.separator + "quests"), fileVisitor);
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- // post-load checks
- for (Map.Entry<String, Quest> loadedQuest : pathToQuest.entrySet()) {
- List<ConfigProblem> configProblems = new ArrayList<>();
- for (String req : loadedQuest.getValue().getRequirements()) {
- if (plugin.getQuestManager().getQuestById(req) == null) {
- configProblems.add(new ConfigProblem(ConfigProblemType.WARNING, ConfigProblemDescriptions.UNKNOWN_REQUIREMENT.getDescription(req), "options.requires"));
- }
- }
-
- if (!configProblems.isEmpty()) {
- if (filesWithProblems.containsKey(loadedQuest.getKey())) {
- filesWithProblems.get(loadedQuest.getKey()).addAll(configProblems);
- } else {
- filesWithProblems.put(loadedQuest.getKey(), configProblems);
- }
- }
- }
-
- for (TaskType taskType : plugin.getTaskTypeManager().getTaskTypes()) {
- try {
- taskType.onReady();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
- problemsCount = 0;
- for (List<QuestsConfigLoader.ConfigProblem> problemList : plugin.getQuestsConfigLoader().getFilesWithProblems().values()) {
- problemsCount = problemsCount + problemList.size();
- }
- }
-
- public Map<String, List<ConfigProblem>> getFilesWithProblems() {
- return filesWithProblems;
- }
-
- public int getProblemsCount() {
- return problemsCount;
- }
-
- private void findInvalidTaskReferences(Quest quest, String s, List<ConfigProblem> configProblems, String location) {
- Pattern pattern = Pattern.compile("\\{([^}]+)}");
-
- Matcher matcher = pattern.matcher(s);
- while (matcher.find()) {
- String[] parts = matcher.group(1).split(":");
- boolean match = false;
- for (Task t : quest.getTasks()) {
- if (t.getId().equals(parts[0])) {
- match = true;
- break;
- }
- }
- if (!match)
- configProblems.add(new ConfigProblem(ConfigProblemType.WARNING,
- ConfigProblemDescriptions.UNKNOWN_TASK_REFERENCE.getDescription(parts[0]), location));
- }
- }
-
- private QItemStack getQItemStack(String path, FileConfiguration config) {
- String cName = config.getString(path + ".name", path + ".name");
- List<String> cLoreNormal = config.getStringList(path + ".lore-normal");
- List<String> cLoreStarted = config.getStringList(path + ".lore-started");
-
- List<String> loreNormal = translateColoursInList(cLoreNormal);
- List<String> loreStarted = translateColoursInList(cLoreStarted);
-
- String name;
- name = ChatColor.translateAlternateColorCodes('&', cName);
-
- ItemStack is = plugin.getItemStack(path, config,
- ItemGetter.Filter.DISPLAY_NAME, ItemGetter.Filter.LORE, ItemGetter.Filter.ENCHANTMENTS, ItemGetter.Filter.ITEM_FLAGS);
-
- return new QItemStack(plugin, name, loreNormal, loreStarted, is);
- }
-
- private List<String> translateColoursInList(List<String> list) {
- List<String> coloured = new ArrayList<>();
- for (String s : list) {
- coloured.add(ChatColor.translateAlternateColorCodes('&', s));
- }
- return coloured;
- }
-
- public enum ConfigProblemDescriptions {
-
- MALFORMED_YAML("Malformed YAML file, cannot read config"),
- INVALID_QUEST_ID("ID '%s' is invalid, must be alphanumeric, unique and with no spaces"),
- NO_TASKS("Quest contains no valid tasks"),
- NO_TASK_TYPE("Task type not specified"),
- UNKNOWN_TASK_TYPE("Task type '%s' does not exist"),
- NO_DISPLAY_NAME("No name specified"),
- NO_DISPLAY_MATERIAL("No material specified"),
- UNKNOWN_MATERIAL("Material '%s' does not exist"),
- UNKNOWN_ENTITY_TYPE("Entity type '%s' does not exist"),
- TASK_MALFORMED_NOT_SECTION("Task '%s' is not a configuration section (has no fields)"),
- TASK_MISSING_FIELD("Required field '%s' is missing for task type '%s'"),
- UNKNOWN_TASK_REFERENCE("Attempt to reference unknown task '%s'"),
- UNKNOWN_CATEGORY("Category '%s' does not exist"),
- UNKNOWN_REQUIREMENT("Quest requirement '%s' does not exist");
-
- private final String description;
-
- ConfigProblemDescriptions(String description) {
- this.description = description;
- }
-
- @Override
- public String toString() {
- return getDescription();
- }
-
- public String getDescription(String... format) {
- return String.format(description, (Object[]) format);
- }
- }
-
- public enum ConfigProblemType {
-
- ERROR("Error", "E", ChatColor.RED, 1),
- WARNING("Warning", "W", ChatColor.YELLOW, 2);
-
- private final String title;
- private final String shortened;
- private final ChatColor color;
- private final int priority;
-
- ConfigProblemType(String title, String shortened, ChatColor color, int priority) {
- this.title = title;
- this.shortened = shortened;
- this.color = color;
- this.priority = priority;
- }
-
- public String getTitle() {
- return title;
- }
-
- public String getShortened() {
- return shortened;
- }
-
- public ChatColor getColor() {
- return color;
- }
-
- public int getPriority() {
- return priority;
- }
-
- }
-
- public static class ConfigProblem {
-
- private final ConfigProblemType type;
- private final String description;
- private final String location;
-
- public ConfigProblem(ConfigProblemType type, String description, String location) {
- this.type = type;
- this.description = description == null ? "?" : description;
- ;
- this.location = location == null ? "?" : location;
- }
-
- public ConfigProblem(ConfigProblemType type, String description) {
- this.type = type;
- this.description = description == null ? "?" : description;
- ;
- this.location = "?";
- }
-
- public ConfigProblemType getType() {
- return type;
- }
-
- public String getDescription() {
- return description;
- }
-
- public String getLocation() {
- return location;
- }
- }
-}