136 lines
4.9 KiB
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();
|
|
}
|
|
}
|
|
}
|