@Override
    public void onEnable() {
        instance = this;

        this.saveDefaultConfig();

        this.settings = new Settings(this.getConfig());

        this.i18n = new I18n(this);
        this.i18n.setLocale(this.settings.getLocale());

        this.debugger = new Debugger();
        this.debugger.setOutput(Bukkit.getConsoleSender());
        this.debugger.setEnabled(this.settings.isDebugEnabled());
        this.debugger.setLevel(this.settings.getDebugLevel());
        getLogger().info("Debugging is " + (this.debugger.isEnabled() ? "enabled" : "disabled"));

        this.dataStore = new BackpackDataStore();
        this.backpackRegistry = new SimpleBackpackRegistry();
        this.sessionManager = new SimpleSessionManager();
        this.recipeLoader = new SimpleRecipeLoader();

        // Create the 'Recipes' directory if it doesn't exist yet
        final File recipeDir = new File(super.getDataFolder(), "Recipes");
        if (!recipeDir.exists()) {
            recipeDir.mkdir();
        }

        // Load the recipes
        Bukkit.getScheduler().runTask(this, new Runnable() {
            @Override
            public void run() {
                BackpacksPlugin.this.recipeLoader.loadRecipes(recipeDir);
            }
        });

        int registered = this.recipeLoader.getRegisteredBackpacks().size();
        if (registered <= 0) {
            getLogger().info("No backpacks were registered");
        } else {
            getLogger().info("Registered " + registered + (registered > 1 ? " backpacks" : " backpack"));
        }

        // Register the listeners
        registerListeners(Bukkit.getServer().getPluginManager());

        // Setup the API
        BackpacksAPI.setBackpacksPlugin(this);

        // Please don't come with stuff like "not needed blah blah"
        getLogger().info("Enabled");
    }