Skip to content

Commit

Permalink
Rework ChallengesAddon main class.
Browse files Browse the repository at this point in the history
Add dependencies to AcidIsland and BSkyBlock addons in pom.xml.
Use proper way how to get GameMode admin and user commands.
Init Settings object and implement onReload() method.

Add check on disabled game modes, to avoid loading challenges in addons, where it should be disabled by settings.
  • Loading branch information
BONNe committed Jan 10, 2019
1 parent dd6f8ca commit b8e0ca4
Show file tree
Hide file tree
Showing 2 changed files with 164 additions and 45 deletions.
12 changes: 12 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,18 @@
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>world.bentobox</groupId>
<artifactId>bskyblock</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>world.bentobox</groupId>
<artifactId>acidisland</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>world.bentobox</groupId>
<artifactId>level</artifactId>
Expand Down
197 changes: 152 additions & 45 deletions src/main/java/world/bentobox/challenges/ChallengesAddon.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

import org.bukkit.Bukkit;

import world.bentobox.acidisland.AcidIsland;
import world.bentobox.bentobox.api.configuration.Config;
import world.bentobox.challenges.commands.ChallengesCommand;
import world.bentobox.challenges.commands.admin.Challenges;
import world.bentobox.challenges.listeners.ResetListener;
import world.bentobox.challenges.listeners.SaveListener;
import world.bentobox.bentobox.api.addons.Addon;
import world.bentobox.bentobox.api.commands.CompositeCommand;

/**
* Add-on to BSkyBlock that enables challenges
Expand All @@ -16,90 +17,196 @@
*/
public class ChallengesAddon extends Addon {

// ---------------------------------------------------------------------
// Section: Variables
// ---------------------------------------------------------------------

private ChallengesManager challengesManager;
private String permissionPrefix = "addon";

private ChallengesImportManager importManager;

private Settings settings;

private boolean hooked;


// ---------------------------------------------------------------------
// Section: Constants
// ---------------------------------------------------------------------


/**
* Permission prefix for addon.
*/
private static final String PERMISSION_PREFIX = "addon";


// ---------------------------------------------------------------------
// Section: Methods
// ---------------------------------------------------------------------


/**
* {@inheritDoc}
*/
@Override
public void onLoad() {
// Save default config.yml
saveDefaultConfig();
this.saveDefaultConfig();
// Load the plugin's config
this.loadSettings();
}


/**
* {@inheritDoc}
*/
@Override
public void onEnable() {
// Check if it is enabled - it might be loaded, but not enabled.
if (getPlugin() == null || !getPlugin().isEnabled()) {
if (this.getPlugin() == null || !this.getPlugin().isEnabled()) {
Bukkit.getLogger().severe("BentoBox is not available or disabled!");
this.setState(State.DISABLED);
return;
}

// Challenges Manager
challengesManager = new ChallengesManager(this);
this.challengesManager = new ChallengesManager(this);
// Challenge import setup
importManager = new ChallengesImportManager(this);

// Register commands - run one tick later to allow all addons to load
// AcidIsland hook in
getPlugin().getAddonsManager().getAddonByName("AcidIsland").ifPresent(a -> {
CompositeCommand acidIslandCmd = getPlugin().getCommandsManager().getCommand("ai");
if (acidIslandCmd != null) {
new ChallengesCommand(this, acidIslandCmd);
CompositeCommand acidCmd = getPlugin().getCommandsManager().getCommand("acid");
new Challenges(this, acidCmd);
hooked = true;
}
});
getPlugin().getAddonsManager().getAddonByName("BSkyBlock").ifPresent(a -> {
// BSkyBlock hook in
CompositeCommand bsbIslandCmd = getPlugin().getCommandsManager().getCommand("island");
if (bsbIslandCmd != null) {
new ChallengesCommand(this, bsbIslandCmd);
CompositeCommand bsbAdminCmd = getPlugin().getCommandsManager().getCommand("bsbadmin");
new Challenges(this, bsbAdminCmd);
hooked = true;
this.importManager = new ChallengesImportManager(this);


// Integrate into AcidIsland.
if (this.settings.getDisabledGameModes().isEmpty() ||
!this.settings.getDisabledGameModes().contains("AcidIsland"))
{
this.getPlugin().getAddonsManager().getAddonByName("AcidIsland").ifPresent(
addon -> {
AcidIsland acidIsland = (AcidIsland) addon;

new Challenges(this,
this.getPlugin().getCommandsManager().getCommand(
acidIsland.getSettings().getAdminCommand()));

new ChallengesCommand(this,
this.getPlugin().getCommandsManager().getCommand(
acidIsland.getSettings().getIslandCommand()));

this.hooked = true;
});
}

// Integrate into BSkyBlock.
if (this.settings.getDisabledGameModes().isEmpty() ||
!this.settings.getDisabledGameModes().contains("BSkyBlock"))
{
this.getPlugin().getAddonsManager().getAddonByName("BSkyBlock").ifPresent(
addon -> {
// BSkyBlock skyBlock = (BSkyBlock) addon;
// SkyBlock addon cannot change commands ;(

new Challenges(this,
this.getPlugin().getCommandsManager().getCommand("bsbadmin"));

new ChallengesCommand(this,
this.getPlugin().getCommandsManager().getCommand("island"));

this.hooked = true;
});
}

if (this.hooked) {
// Try to find Level addon and if it does not exist, display a warning
if (!this.getAddonByName("Level").isPresent()) {
this.logWarning("Level add-on not found so level challenges will not work!");
}
});
// If the add-on never hooks in, then it is useless
if (!hooked) {
logError("Challenges could not hook into AcidIsland or BSkyBlock so will not do anything!");

// Register the reset listener
this.registerListener(new ResetListener(this));
// Register the autosave listener.
this.registerListener(new SaveListener(this));
} else {
this.logError("Challenges could not hook into AcidIsland or BSkyBlock so will not do anything!");
this.setState(State.DISABLED);
return;
}
// Try to find Level addon and if it does not exist, display a warning
if (!getAddonByName("Level").isPresent()) {
logWarning("Level add-on not found so level challenges will not work!");
}


/**
* {@inheritDoc}
*/
@Override
public void onReload()
{
if (this.hooked) {
this.challengesManager.save();

this.loadSettings();
this.getLogger().info("Challenges addon reloaded.");
}
// Register the reset listener
this.registerListener(new ResetListener(this));
// Register the autosave listener.
this.registerListener(new SaveListener(this));
// Done
}


/**
* {@inheritDoc}
*/
@Override
public void onDisable(){
if (challengesManager != null) {
challengesManager.save();
public void onDisable() {
if (this.hooked) {
this.challengesManager.save();
}
}


/**
* 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);
}
}


// ---------------------------------------------------------------------
// Section: Getters
// ---------------------------------------------------------------------


/**
* @return challengesManager
*/
public ChallengesManager getChallengesManager() {
return challengesManager;
return this.challengesManager;
}


/**
* @return Permission Prefix.
*/
@Override
public String getPermissionPrefix() {
return permissionPrefix ;
return PERMISSION_PREFIX;
}


/**
* @return the importManager
*/
public ChallengesImportManager getImportManager() {
return importManager;
return this.importManager;
}


/**
* @return the challenge settings.
*/
public Settings getChallengesSettings()
{
return this.settings;
}
}

0 comments on commit b8e0ca4

Please sign in to comment.