001/*
002 * PlotSquared, a land and world management plugin for Minecraft.
003 * Copyright (C) IntellectualSites <https://intellectualsites.com>
004 * Copyright (C) IntellectualSites team and contributors
005 *
006 * This program is free software: you can redistribute it and/or modify
007 * it under the terms of the GNU General Public License as published by
008 * the Free Software Foundation, either version 3 of the License, or
009 * (at your option) any later version.
010 *
011 * This program is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014 * GNU General Public License for more details.
015 *
016 * You should have received a copy of the GNU General Public License
017 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
018 */
019package com.plotsquared.bukkit.listener;
020
021import com.google.inject.Inject;
022import com.plotsquared.bukkit.BukkitPlatform;
023import com.plotsquared.bukkit.placeholder.MVdWPlaceholders;
024import com.plotsquared.bukkit.util.BukkitEconHandler;
025import com.plotsquared.core.PlotSquared;
026import com.plotsquared.core.configuration.Settings;
027import com.plotsquared.core.configuration.caption.TranslatableCaption;
028import com.plotsquared.core.player.ConsolePlayer;
029import com.plotsquared.core.util.EconHandler;
030import org.apache.logging.log4j.LogManager;
031import org.apache.logging.log4j.Logger;
032import org.bukkit.Bukkit;
033import org.bukkit.event.EventHandler;
034import org.bukkit.event.Listener;
035import org.bukkit.event.server.ServerLoadEvent;
036import org.checkerframework.checker.nullness.qual.NonNull;
037
038public class ServerListener implements Listener {
039
040    private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + ServerListener.class.getSimpleName());
041
042    private final BukkitPlatform plugin;
043
044    @Inject
045    public ServerListener(final @NonNull BukkitPlatform plugin) {
046        this.plugin = plugin;
047    }
048
049    @EventHandler
050    public void onServerLoad(ServerLoadEvent event) {
051        if (Bukkit.getPluginManager().getPlugin("MVdWPlaceholderAPI") != null && Settings.Enabled_Components.USE_MVDWAPI) {
052            new MVdWPlaceholders(this.plugin, this.plugin.placeholderRegistry());
053            ConsolePlayer.getConsole().sendMessage(TranslatableCaption.of("placeholder.hooked"));
054        }
055        if (Settings.Enabled_Components.ECONOMY && Bukkit.getPluginManager().isPluginEnabled("Vault")) {
056            EconHandler econHandler = new BukkitEconHandler();
057            try {
058                if (!econHandler.init()) {
059                    LOGGER.warn("Economy is enabled but no plugin is providing an economy service. Falling back...");
060                    econHandler = EconHandler.nullEconHandler();
061                }
062            } catch (final Exception ignored) {
063                econHandler = EconHandler.nullEconHandler();
064            }
065            if (PlotSquared.platform().econHandler() instanceof MutableEconHandler meh) {
066                meh.setImplementation(econHandler);
067            }
068        }
069    }
070
071    /**
072     * Internal use only. Required to implement lazy econ loading using Guice.
073     *
074     * @since 7.2.0
075     */
076    public interface MutableEconHandler {
077        void setImplementation(EconHandler econHandler);
078    }
079
080}