Essentials/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/EssentialsDiscordLink.java

136 lines
4.9 KiB
Java

package net.essentialsx.discordlink;
import com.earth2me.essentials.EssentialsLogger;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.metrics.MetricsWrapper;
import com.google.common.collect.ImmutableSet;
import net.essentialsx.api.v2.services.discord.DiscordService;
import net.essentialsx.api.v2.services.discord.InteractionException;
import net.essentialsx.api.v2.services.discordlink.DiscordLinkService;
import net.essentialsx.discord.EssentialsDiscord;
import net.essentialsx.discordlink.commands.discord.AccountInteractionCommand;
import net.essentialsx.discordlink.commands.discord.LinkInteractionCommand;
import net.essentialsx.discordlink.commands.discord.UnlinkInteractionCommand;
import net.essentialsx.discordlink.listeners.LinkBukkitListener;
import net.essentialsx.discordlink.rolesync.RoleSyncManager;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.ServicePriority;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.IOException;
import java.util.Collections;
import java.util.logging.Level;
import java.util.logging.Logger;
import static com.earth2me.essentials.I18n.tl;
public class EssentialsDiscordLink extends JavaPlugin {
private transient IEssentials ess;
private transient MetricsWrapper metrics = null;
private DiscordService api;
private DiscordLinkSettings settings;
private AccountStorage accounts;
private AccountLinkManager linkManager;
private RoleSyncManager roleSyncManager;
@Override
public void onEnable() {
ess = (IEssentials) getServer().getPluginManager().getPlugin("Essentials");
final EssentialsDiscord essDiscord = (EssentialsDiscord) getServer().getPluginManager().getPlugin("EssentialsDiscord");
if (ess == null || !ess.isEnabled() || essDiscord == null || !essDiscord.isEnabled()) {
setEnabled(false);
return;
}
if (!getDescription().getVersion().equals(ess.getDescription().getVersion())) {
getLogger().log(Level.WARNING, tl("versionMismatchAll"));
}
api = getServer().getServicesManager().load(DiscordService.class);
settings = new DiscordLinkSettings(this);
ess.addReloadListener(settings);
try {
accounts = new AccountStorage(this);
} catch (IOException e) {
getLogger().log(Level.SEVERE, "Unable to create link accounts file", e);
setEnabled(false);
return;
}
roleSyncManager = new RoleSyncManager(this);
linkManager = new AccountLinkManager(this, accounts, roleSyncManager);
getServer().getPluginManager().registerEvents(new LinkBukkitListener(this), this);
getServer().getServicesManager().register(DiscordLinkService.class, linkManager, this, ServicePriority.Normal);
if (!(api.getInteractionController().getCommand("link") instanceof LinkInteractionCommand)) {
try {
api.getInteractionController().registerCommand(new AccountInteractionCommand(linkManager));
api.getInteractionController().registerCommand(new LinkInteractionCommand(linkManager));
api.getInteractionController().registerCommand(new UnlinkInteractionCommand(linkManager));
} catch (InteractionException e) {
e.printStackTrace();
setEnabled(false);
return;
}
}
ess.getPermissionsHandler().registerContext("essentials:linked", user ->
Collections.singleton(String.valueOf(linkManager.isLinked(user.getUUID()))), () -> ImmutableSet.of("true", "false"));
if (metrics == null) {
metrics = new MetricsWrapper(this, 11462, false);
}
}
@Override
public void onDisable() {
if (accounts != null) {
accounts.shutdown();
}
}
public void onReload() {
if (roleSyncManager != null) {
roleSyncManager.onReload();
}
}
public IEssentials getEss() {
return ess;
}
public DiscordService getApi() {
return api;
}
public DiscordLinkSettings getSettings() {
return settings;
}
public AccountStorage getAccountStorage() {
return accounts;
}
public AccountLinkManager getLinkManager() {
return linkManager;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
return ess.onCommandEssentials(sender, command, label, args, EssentialsDiscordLink.class.getClassLoader(), "net.essentialsx.discordlink.commands.bukkit.Command", "essentials.", linkManager);
}
@Override
public Logger getLogger() {
try {
return EssentialsLogger.getLoggerProvider(this);
} catch (Throwable ignored) {
// In case Essentials isn't installed/loaded
return super.getLogger();
}
}
}