2018-12-30 14:31:26 +01:00
|
|
|
package world.bentobox.challenges;
|
|
|
|
|
|
|
|
|
2019-02-18 14:25:45 +01:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
2019-01-24 22:28:25 +01:00
|
|
|
import java.util.Optional;
|
|
|
|
|
2019-10-30 07:44:26 +01:00
|
|
|
import org.bukkit.Bukkit;
|
2019-10-10 07:35:25 +02:00
|
|
|
import org.bukkit.Material;
|
2020-04-05 20:27:09 +02:00
|
|
|
import org.bukkit.World;
|
2019-10-10 07:35:25 +02:00
|
|
|
|
2019-01-26 14:36:48 +01:00
|
|
|
import world.bentobox.bentobox.api.addons.Addon;
|
2019-02-18 14:25:45 +01:00
|
|
|
import world.bentobox.bentobox.api.addons.GameModeAddon;
|
2019-01-10 10:36:06 +01:00
|
|
|
import world.bentobox.bentobox.api.configuration.Config;
|
2019-02-19 16:53:03 +01:00
|
|
|
import world.bentobox.bentobox.api.flags.Flag;
|
2019-09-08 19:03:46 +02:00
|
|
|
import world.bentobox.bentobox.database.DatabaseSetup.DatabaseType;
|
2019-01-24 22:28:25 +01:00
|
|
|
import world.bentobox.bentobox.hooks.VaultHook;
|
2019-02-19 16:53:03 +01:00
|
|
|
import world.bentobox.bentobox.managers.RanksManager;
|
2018-12-30 14:31:26 +01:00
|
|
|
import world.bentobox.challenges.commands.ChallengesCommand;
|
2019-02-18 14:25:45 +01:00
|
|
|
import world.bentobox.challenges.commands.ChallengesUserCommand;
|
2018-12-30 14:31:26 +01:00
|
|
|
import world.bentobox.challenges.commands.admin.Challenges;
|
2019-02-18 14:25:45 +01:00
|
|
|
import world.bentobox.challenges.commands.admin.ChallengesAdminCommand;
|
2019-09-01 14:10:05 +02:00
|
|
|
import world.bentobox.challenges.config.Settings;
|
2020-04-06 19:14:34 +02:00
|
|
|
import world.bentobox.challenges.database.object.ChallengeLevel;
|
2019-09-08 19:03:46 +02:00
|
|
|
import world.bentobox.challenges.handlers.ChallengeDataRequestHandler;
|
|
|
|
import world.bentobox.challenges.handlers.ChallengeListRequestHandler;
|
|
|
|
import world.bentobox.challenges.handlers.CompletedChallengesRequestHandler;
|
|
|
|
import world.bentobox.challenges.handlers.LevelDataRequestHandler;
|
|
|
|
import world.bentobox.challenges.handlers.LevelListRequestHandler;
|
2018-12-30 14:31:26 +01:00
|
|
|
import world.bentobox.challenges.listeners.ResetListener;
|
|
|
|
import world.bentobox.challenges.listeners.SaveListener;
|
2019-09-02 16:56:24 +02:00
|
|
|
import world.bentobox.challenges.web.WebManager;
|
2019-01-24 22:28:25 +01:00
|
|
|
import world.bentobox.level.Level;
|
|
|
|
|
2018-12-30 14:31:26 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Add-on to BSkyBlock that enables challenges
|
|
|
|
* @author tastybento
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public class ChallengesAddon extends Addon {
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
// Section: Variables
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
|
2018-12-30 14:31:26 +01:00
|
|
|
private ChallengesManager challengesManager;
|
2019-01-10 10:36:06 +01:00
|
|
|
|
2019-01-10 10:16:04 +01:00
|
|
|
private ChallengesImportManager importManager;
|
2019-01-10 10:36:06 +01:00
|
|
|
|
2019-09-02 16:56:24 +02:00
|
|
|
/**
|
|
|
|
* This class manages web content loading.
|
|
|
|
*/
|
|
|
|
private WebManager webManager;
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
private Settings settings;
|
|
|
|
|
2018-12-30 14:31:26 +01:00
|
|
|
private boolean hooked;
|
|
|
|
|
2019-01-24 22:28:25 +01:00
|
|
|
/**
|
|
|
|
* VaultHook that process economy.
|
|
|
|
*/
|
2019-01-28 19:21:48 +01:00
|
|
|
private VaultHook vaultHook;
|
2019-01-24 22:28:25 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Level addon.
|
|
|
|
*/
|
|
|
|
private Level levelAddon;
|
|
|
|
|
2019-01-23 20:34:40 +01:00
|
|
|
/**
|
|
|
|
* This indicate if level addon exists.
|
|
|
|
*/
|
|
|
|
private boolean levelProvided;
|
2019-01-10 10:36:06 +01:00
|
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
// Section: Constants
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Permission prefix for addon.
|
|
|
|
*/
|
2019-03-05 09:35:48 +01:00
|
|
|
private static final String PERMISSION_PREFIX = "addon.";
|
2019-01-10 10:36:06 +01:00
|
|
|
|
2019-02-19 16:53:03 +01:00
|
|
|
/**
|
|
|
|
* This flag allows to complete challenges in any part of the world. It will not limit
|
|
|
|
* player to their island. Useful for skygrid without protection flags.
|
|
|
|
*/
|
2019-10-30 07:44:26 +01:00
|
|
|
public static final Flag CHALLENGES_WORLD_PROTECTION =
|
2019-02-19 16:53:03 +01:00
|
|
|
new Flag.Builder("CHALLENGES_WORLD_PROTECTION", Material.GRASS_BLOCK).type(Flag.Type.WORLD_SETTING).defaultSetting(true).build();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This flag allows to define which users can complete challenge. F.e. it can be set
|
|
|
|
* that only Island owner can complete challenge.
|
|
|
|
* By default it is set to Visitor.
|
|
|
|
*/
|
2019-10-30 07:44:26 +01:00
|
|
|
public static final Flag CHALLENGES_ISLAND_PROTECTION =
|
2019-02-19 16:53:03 +01:00
|
|
|
new Flag.Builder("CHALLENGES_ISLAND_PROTECTION", Material.COMMAND_BLOCK).defaultRank(RanksManager.VISITOR_RANK).build();
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
// Section: Methods
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* {@inheritDoc}
|
|
|
|
*/
|
2018-12-30 14:31:26 +01:00
|
|
|
@Override
|
|
|
|
public void onLoad() {
|
|
|
|
// Save default config.yml
|
2019-01-10 10:36:06 +01:00
|
|
|
this.saveDefaultConfig();
|
|
|
|
// Load the plugin's config
|
|
|
|
this.loadSettings();
|
2018-12-30 14:31:26 +01:00
|
|
|
}
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* {@inheritDoc}
|
|
|
|
*/
|
2018-12-30 14:31:26 +01:00
|
|
|
@Override
|
|
|
|
public void onEnable() {
|
|
|
|
// Check if it is enabled - it might be loaded, but not enabled.
|
2019-01-10 10:36:06 +01:00
|
|
|
if (this.getPlugin() == null || !this.getPlugin().isEnabled()) {
|
2019-09-08 19:03:46 +02:00
|
|
|
this.logError("BentoBox is not available or disabled!");
|
2018-12-30 14:31:26 +01:00
|
|
|
this.setState(State.DISABLED);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-02-25 11:09:26 +01:00
|
|
|
// Check if addon is not disabled before.
|
|
|
|
if (this.getState().equals(State.DISABLED))
|
|
|
|
{
|
2019-09-08 19:03:46 +02:00
|
|
|
this.logError("Challenges Addon is not available or disabled!");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (this.isInCompatibleDatabase())
|
|
|
|
{
|
|
|
|
this.logError("BentoBox database is not compatible with Challenges Addon.");
|
|
|
|
this.logError("Please use JSON based database type.");
|
2019-09-09 00:02:34 +02:00
|
|
|
this.setState(State.INCOMPATIBLE);
|
2019-02-25 11:09:26 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2018-12-30 14:31:26 +01:00
|
|
|
// Challenges Manager
|
2019-01-10 10:36:06 +01:00
|
|
|
this.challengesManager = new ChallengesManager(this);
|
2018-12-30 14:31:26 +01:00
|
|
|
// Challenge import setup
|
2019-01-10 10:36:06 +01:00
|
|
|
this.importManager = new ChallengesImportManager(this);
|
|
|
|
|
2019-09-02 16:56:24 +02:00
|
|
|
// Web content loading
|
|
|
|
this.webManager = new WebManager(this);
|
|
|
|
|
2019-02-18 14:25:45 +01:00
|
|
|
List<GameModeAddon> hookedGameModes = new ArrayList<>();
|
|
|
|
|
2019-01-23 19:19:18 +01:00
|
|
|
this.getPlugin().getAddonsManager().getGameModeAddons().forEach(gameModeAddon -> {
|
2020-04-05 20:27:09 +02:00
|
|
|
if (!this.settings.getDisabledGameModes().contains(
|
|
|
|
gameModeAddon.getDescription().getName()))
|
2019-01-23 19:19:18 +01:00
|
|
|
{
|
|
|
|
if (gameModeAddon.getPlayerCommand().isPresent())
|
|
|
|
{
|
|
|
|
new ChallengesCommand(this, gameModeAddon.getPlayerCommand().get());
|
2019-02-18 14:25:45 +01:00
|
|
|
this.hooked = true;
|
|
|
|
|
|
|
|
hookedGameModes.add(gameModeAddon);
|
|
|
|
}
|
2019-01-23 19:19:18 +01:00
|
|
|
|
|
|
|
if (gameModeAddon.getAdminCommand().isPresent())
|
|
|
|
{
|
|
|
|
new Challenges(this, gameModeAddon.getAdminCommand().get());
|
|
|
|
this.hooked = true;
|
|
|
|
}
|
2019-02-19 16:53:03 +01:00
|
|
|
|
|
|
|
CHALLENGES_WORLD_PROTECTION.addGameModeAddon(gameModeAddon);
|
|
|
|
CHALLENGES_ISLAND_PROTECTION.addGameModeAddon(gameModeAddon);
|
2020-04-05 20:27:09 +02:00
|
|
|
|
|
|
|
this.registerPlaceholders(gameModeAddon);
|
2020-05-06 23:26:12 +02:00
|
|
|
|
|
|
|
// TODO: this is old placeholders. Remove when backward compatibility ends.
|
|
|
|
this.registerPlaceholdersOld(gameModeAddon);
|
2019-01-23 19:19:18 +01:00
|
|
|
}
|
|
|
|
});
|
2019-01-10 10:36:06 +01:00
|
|
|
|
|
|
|
if (this.hooked) {
|
2019-02-18 14:25:45 +01:00
|
|
|
|
|
|
|
// Create general challenge commands
|
|
|
|
|
|
|
|
if (this.settings.isUseCommonGUI())
|
|
|
|
{
|
|
|
|
new ChallengesUserCommand(this,
|
|
|
|
this.settings.getUserCommand(),
|
|
|
|
hookedGameModes);
|
|
|
|
new ChallengesAdminCommand(this,
|
|
|
|
this.settings.getAdminCommand(),
|
|
|
|
hookedGameModes);
|
|
|
|
}
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
// Try to find Level addon and if it does not exist, display a warning
|
2019-01-23 20:34:40 +01:00
|
|
|
|
2019-01-24 22:28:25 +01:00
|
|
|
Optional<Addon> level = this.getAddonByName("Level");
|
2019-01-23 20:34:40 +01:00
|
|
|
|
2019-01-24 22:28:25 +01:00
|
|
|
if (!level.isPresent())
|
|
|
|
{
|
2019-01-10 10:36:06 +01:00
|
|
|
this.logWarning("Level add-on not found so level challenges will not work!");
|
2019-01-24 22:28:25 +01:00
|
|
|
this.levelAddon = null;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
this.levelProvided = true;
|
|
|
|
this.levelAddon = (Level) level.get();
|
2018-12-30 14:31:26 +01:00
|
|
|
}
|
2019-01-10 10:36:06 +01:00
|
|
|
|
2019-01-28 19:21:48 +01:00
|
|
|
Optional<VaultHook> vault = this.getPlugin().getVault();
|
|
|
|
|
|
|
|
if (!vault.isPresent() || !vault.get().hook())
|
|
|
|
{
|
|
|
|
this.vaultHook = null;
|
2020-10-02 12:47:35 +02:00
|
|
|
this.logWarning("Vault plugin not found. Economy will not work!");
|
2019-01-28 19:21:48 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
this.vaultHook = vault.get();
|
|
|
|
}
|
2019-01-23 20:34:40 +01:00
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
// Register the reset listener
|
|
|
|
this.registerListener(new ResetListener(this));
|
|
|
|
// Register the autosave listener.
|
|
|
|
this.registerListener(new SaveListener(this));
|
2019-02-22 11:59:43 +01:00
|
|
|
|
2019-02-19 16:53:03 +01:00
|
|
|
// Register Flags
|
2019-06-16 19:25:02 +02:00
|
|
|
this.registerFlag(CHALLENGES_ISLAND_PROTECTION);
|
|
|
|
this.registerFlag(CHALLENGES_WORLD_PROTECTION);
|
2019-02-22 18:47:36 +01:00
|
|
|
|
2019-02-22 11:59:43 +01:00
|
|
|
// Register Request Handlers
|
|
|
|
this.registerRequestHandler(new ChallengeListRequestHandler(this));
|
|
|
|
this.registerRequestHandler(new LevelListRequestHandler(this));
|
|
|
|
|
|
|
|
this.registerRequestHandler(new ChallengeDataRequestHandler(this));
|
|
|
|
this.registerRequestHandler(new LevelDataRequestHandler(this));
|
|
|
|
|
|
|
|
this.registerRequestHandler(new CompletedChallengesRequestHandler(this));
|
2019-06-12 21:56:52 +02:00
|
|
|
|
|
|
|
if (this.settings.getAutoSaveTimer() > 0)
|
|
|
|
{
|
2019-10-30 07:44:26 +01:00
|
|
|
Bukkit.getScheduler().runTaskTimerAsynchronously(
|
2019-06-12 21:56:52 +02:00
|
|
|
this.getPlugin(),
|
|
|
|
bukkitTask -> ChallengesAddon.this.challengesManager.save(),
|
|
|
|
this.settings.getAutoSaveTimer() * 60 * 20,
|
|
|
|
this.settings.getAutoSaveTimer() * 60 * 20
|
|
|
|
);
|
|
|
|
}
|
2019-01-10 10:36:06 +01:00
|
|
|
} else {
|
|
|
|
this.logError("Challenges could not hook into AcidIsland or BSkyBlock so will not do anything!");
|
2018-12-30 14:31:26 +01:00
|
|
|
this.setState(State.DISABLED);
|
|
|
|
}
|
2019-01-10 10:36:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* {@inheritDoc}
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public void onReload()
|
|
|
|
{
|
2019-05-01 16:10:05 +02:00
|
|
|
super.onReload();
|
2019-01-10 10:36:06 +01:00
|
|
|
|
2019-05-01 16:10:05 +02:00
|
|
|
if (this.hooked)
|
|
|
|
{
|
2019-01-10 10:36:06 +01:00
|
|
|
this.loadSettings();
|
2019-05-01 16:10:05 +02:00
|
|
|
this.challengesManager.reload();
|
2019-10-30 07:44:26 +01:00
|
|
|
this.log("Challenges addon reloaded.");
|
2018-12-30 14:31:26 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* {@inheritDoc}
|
|
|
|
*/
|
2018-12-30 14:31:26 +01:00
|
|
|
@Override
|
2019-01-10 10:36:06 +01:00
|
|
|
public void onDisable() {
|
|
|
|
if (this.hooked) {
|
|
|
|
this.challengesManager.save();
|
|
|
|
}
|
2020-05-08 09:20:44 +02:00
|
|
|
}
|
|
|
|
|
2019-01-26 14:36:48 +01:00
|
|
|
|
2020-05-08 09:20:44 +02:00
|
|
|
/**
|
|
|
|
* This method saves addon settings into file.
|
|
|
|
*/
|
|
|
|
public void saveSettings()
|
|
|
|
{
|
2019-01-26 14:36:48 +01:00
|
|
|
if (this.settings != null)
|
|
|
|
{
|
|
|
|
new Config<>(this, Settings.class).saveConfigObject(this.settings);
|
|
|
|
}
|
2019-01-10 10:36:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method loads addon configuration settings in memory.
|
|
|
|
*/
|
|
|
|
private void loadSettings() {
|
|
|
|
this.settings = new Config<>(this, Settings.class).loadConfigObject();
|
|
|
|
|
|
|
|
if (this.settings == null) {
|
|
|
|
// Disable
|
|
|
|
this.logError("Challenges settings could not load! Addon disabled.");
|
|
|
|
this.setState(State.DISABLED);
|
2018-12-30 14:31:26 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
|
2019-09-08 19:03:46 +02:00
|
|
|
/**
|
|
|
|
* This method checks if database is compatible with Challenges addon.
|
|
|
|
* @return {@code true} if database type is YAML, {@code false} - otherwise.
|
|
|
|
*/
|
|
|
|
private boolean isInCompatibleDatabase()
|
|
|
|
{
|
|
|
|
return this.getPlugin().getSettings().getDatabaseType().equals(DatabaseType.YAML);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2020-04-05 20:27:09 +02:00
|
|
|
/**
|
|
|
|
* This method registers placeholders into GameMode addon.
|
|
|
|
* @param gameModeAddon GameMode addon where placeholders must be hooked in.
|
|
|
|
*/
|
|
|
|
private void registerPlaceholders(GameModeAddon gameModeAddon)
|
2020-05-06 23:26:12 +02:00
|
|
|
{
|
|
|
|
final String addonName = this.getDescription().getName().toLowerCase();
|
|
|
|
final World world = gameModeAddon.getOverWorld();
|
|
|
|
|
|
|
|
// Number of completions for all challenges placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(gameModeAddon,
|
|
|
|
addonName + "_total_completion_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getTotalChallengeCompletionCount(user, world)));
|
|
|
|
|
|
|
|
// Completed challenge count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(gameModeAddon,
|
|
|
|
addonName + "_completed_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getCompletedChallengeCount(user, world)));
|
|
|
|
|
|
|
|
// Uncompleted challenge count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(gameModeAddon,
|
|
|
|
addonName + "_uncompleted_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getChallengeCount(world) -
|
|
|
|
this.challengesManager.getCompletedChallengeCount(user, world)));
|
|
|
|
|
|
|
|
// Completed challenge level count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(gameModeAddon,
|
|
|
|
addonName + "_completed_level_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getCompletedLevelCount(user, world)));
|
|
|
|
|
|
|
|
// Uncompleted challenge level count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(gameModeAddon,
|
|
|
|
addonName + "_uncompleted_level_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getLevelCount(world) -
|
|
|
|
this.challengesManager.getCompletedLevelCount(user, world)));
|
|
|
|
|
|
|
|
// Unlocked challenge level count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(gameModeAddon,
|
|
|
|
addonName + "_unlocked_level_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getLevelCount(world) -
|
|
|
|
this.challengesManager.getUnlockedLevelCount(user, world)));
|
|
|
|
|
|
|
|
// Locked challenge level count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(gameModeAddon,
|
|
|
|
addonName + "_locked_level_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getLevelCount(world) -
|
|
|
|
this.challengesManager.getUnlockedLevelCount(user, world)));
|
|
|
|
|
|
|
|
// Latest challenge level name placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(gameModeAddon,
|
|
|
|
addonName + "_latest_level_name",
|
|
|
|
user -> {
|
|
|
|
ChallengeLevel level = this.challengesManager.getLatestUnlockedLevel(user, world);
|
|
|
|
return level != null ? level.getFriendlyName() : "";
|
|
|
|
});
|
|
|
|
|
|
|
|
// Latest challenge level id placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(gameModeAddon,
|
|
|
|
addonName + "_latest_level_id",
|
|
|
|
user -> {
|
|
|
|
ChallengeLevel level = this.challengesManager.getLatestUnlockedLevel(user, world);
|
|
|
|
return level != null ? level.getUniqueId() : "";
|
|
|
|
});
|
2020-06-19 10:36:26 +02:00
|
|
|
|
|
|
|
// Completed challenge count in latest level
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(gameModeAddon,
|
|
|
|
addonName + "_latest_level_completed_count",
|
|
|
|
user -> {
|
|
|
|
ChallengeLevel level = this.challengesManager.getLatestUnlockedLevel(user, world);
|
|
|
|
return String.valueOf(level != null ?
|
|
|
|
this.challengesManager.getLevelCompletedChallengeCount(user, world, level) : 0);
|
|
|
|
});
|
|
|
|
|
|
|
|
// Uncompleted challenge count in latest level
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(gameModeAddon,
|
|
|
|
addonName + "_latest_level_uncompleted_count",
|
|
|
|
user -> {
|
|
|
|
ChallengeLevel level = this.challengesManager.getLatestUnlockedLevel(user, world);
|
|
|
|
return String.valueOf(level != null ?
|
|
|
|
level.getChallenges().size() - this.challengesManager.getLevelCompletedChallengeCount(user, world, level) : 0);
|
|
|
|
});
|
2020-05-06 23:26:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method registers placeholders into GameMode addon.
|
|
|
|
* @param gameModeAddon GameMode addon where placeholders must be hooked in.
|
|
|
|
* @since 0.8.1
|
|
|
|
* @deprecated remove after 0.9.0
|
|
|
|
*/
|
|
|
|
@Deprecated
|
|
|
|
private void registerPlaceholdersOld(GameModeAddon gameModeAddon)
|
2020-04-05 20:27:09 +02:00
|
|
|
{
|
|
|
|
final String gameMode = gameModeAddon.getDescription().getName().toLowerCase();
|
|
|
|
final World world = gameModeAddon.getOverWorld();
|
|
|
|
|
|
|
|
// Number of completions for all challenges placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
|
|
|
gameMode + "_challenge_total_completion_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getTotalChallengeCompletionCount(user, world)));
|
|
|
|
|
|
|
|
// Completed challenge count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
|
|
|
gameMode + "_challenge_completed_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getCompletedChallengeCount(user, world)));
|
|
|
|
|
|
|
|
// Uncompleted challenge count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
|
|
|
gameMode + "_challenge_uncompleted_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getChallengeCount(world) -
|
|
|
|
this.challengesManager.getCompletedChallengeCount(user, world)));
|
|
|
|
|
|
|
|
// Completed challenge level count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
|
|
|
gameMode + "_challenge_completed_level_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getCompletedLevelCount(user, world)));
|
|
|
|
|
|
|
|
// Uncompleted challenge level count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
|
|
|
gameMode + "_challenge_uncompleted_level_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getLevelCount(world) -
|
|
|
|
this.challengesManager.getCompletedLevelCount(user, world)));
|
|
|
|
|
|
|
|
// Unlocked challenge level count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
|
|
|
gameMode + "_challenge_unlocked_level_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getLevelCount(world) -
|
|
|
|
this.challengesManager.getUnlockedLevelCount(user, world)));
|
|
|
|
|
|
|
|
// Locked challenge level count placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
|
|
|
gameMode + "_challenge_locked_level_count",
|
|
|
|
user -> String.valueOf(this.challengesManager.getLevelCount(world) -
|
|
|
|
this.challengesManager.getUnlockedLevelCount(user, world)));
|
2020-04-06 19:14:34 +02:00
|
|
|
|
|
|
|
// Latest challenge level name placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
|
|
|
gameMode + "_challenge_latest_level_name",
|
|
|
|
user -> {
|
|
|
|
ChallengeLevel level = this.challengesManager.getLatestUnlockedLevel(user, world);
|
|
|
|
return level != null ? level.getFriendlyName() : "";
|
|
|
|
});
|
|
|
|
|
|
|
|
// Latest challenge level id placeholder
|
|
|
|
this.getPlugin().getPlaceholdersManager().registerPlaceholder(this,
|
|
|
|
gameMode + "_challenge_latest_level_id",
|
|
|
|
user -> {
|
|
|
|
ChallengeLevel level = this.challengesManager.getLatestUnlockedLevel(user, world);
|
|
|
|
return level != null ? level.getUniqueId() : "";
|
|
|
|
});
|
2020-04-05 20:27:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
// Section: Getters
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return challengesManager
|
|
|
|
*/
|
2018-12-30 14:31:26 +01:00
|
|
|
public ChallengesManager getChallengesManager() {
|
2019-01-10 10:36:06 +01:00
|
|
|
return this.challengesManager;
|
2018-12-30 14:31:26 +01:00
|
|
|
}
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @return Permission Prefix.
|
|
|
|
*/
|
2018-12-30 14:31:26 +01:00
|
|
|
@Override
|
|
|
|
public String getPermissionPrefix() {
|
2019-01-10 10:36:06 +01:00
|
|
|
return PERMISSION_PREFIX;
|
2018-12-30 14:31:26 +01:00
|
|
|
}
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
|
2018-12-30 14:31:26 +01:00
|
|
|
/**
|
|
|
|
* @return the importManager
|
|
|
|
*/
|
2019-01-10 10:16:04 +01:00
|
|
|
public ChallengesImportManager getImportManager() {
|
2019-01-10 10:36:06 +01:00
|
|
|
return this.importManager;
|
2018-12-30 14:31:26 +01:00
|
|
|
}
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
|
2019-09-02 16:56:24 +02:00
|
|
|
/**
|
|
|
|
* @return the webManager
|
|
|
|
*/
|
|
|
|
public WebManager getWebManager() {
|
|
|
|
return this.webManager;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-01-10 10:36:06 +01:00
|
|
|
/**
|
|
|
|
* @return the challenge settings.
|
|
|
|
*/
|
|
|
|
public Settings getChallengesSettings()
|
|
|
|
{
|
|
|
|
return this.settings;
|
|
|
|
}
|
2019-01-23 20:34:40 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @return economyProvided variable.
|
|
|
|
*/
|
|
|
|
public boolean isEconomyProvided()
|
|
|
|
{
|
2020-10-02 12:47:35 +02:00
|
|
|
return this.vaultHook != null && this.vaultHook.hook();
|
2019-01-23 20:34:40 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-01-24 22:28:25 +01:00
|
|
|
/**
|
|
|
|
* Returns VaultHook. Used to get easier access to Economy. NEVER USE WITHOUT isEconomyProvided or null
|
|
|
|
* check.
|
|
|
|
* @return VaultHook or null.
|
|
|
|
*/
|
|
|
|
public VaultHook getEconomyProvider()
|
|
|
|
{
|
2019-01-28 19:21:48 +01:00
|
|
|
return vaultHook;
|
2019-01-24 22:28:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-01-23 20:34:40 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @return levelProvided variable.
|
|
|
|
*/
|
|
|
|
public boolean isLevelProvided()
|
|
|
|
{
|
|
|
|
return levelProvided;
|
|
|
|
}
|
2019-01-24 22:28:25 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method returns Level addon. Used to easier access to Level. NEVER USE WITHOUT isLevelProvided or null
|
|
|
|
* @return LevelAddon or null.
|
|
|
|
*/
|
|
|
|
public Level getLevelAddon()
|
|
|
|
{
|
|
|
|
return levelAddon;
|
|
|
|
}
|
2018-12-30 14:31:26 +01:00
|
|
|
}
|