bukman/Velocity/src/main/java/net/frankheijden/serverutils/velocity/ServerUtils.java

128 lines
3.5 KiB
Java

package net.frankheijden.serverutils.velocity;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
import com.velocitypowered.api.event.proxy.ProxyShutdownEvent;
import com.velocitypowered.api.plugin.Plugin;
import com.velocitypowered.api.plugin.PluginContainer;
import com.velocitypowered.api.plugin.annotation.DataDirectory;
import com.velocitypowered.api.proxy.ProxyServer;
import java.io.IOException;
import java.nio.file.Path;
import net.frankheijden.serverutils.common.ServerUtilsApp;
import net.frankheijden.serverutils.velocity.entities.VelocityPlugin;
import net.frankheijden.serverutils.velocity.managers.VelocityPluginCommandManager;
import net.frankheijden.serverutils.velocity.reflection.RVelocityCommandManager;
import org.bstats.velocity.Metrics;
import org.slf4j.Logger;
@Plugin(
id = "bukman",
name = "Bukman",
version = "{version}",
description = "A server utility",
url = "https://git.zhira.net/zhdev/bukman",
authors = {"FrankHeijden", "ZhDev"}
)
public class ServerUtils {
private static ServerUtils instance;
private static final String PLUGIN_COMMANDS_CACHE = ".pluginCommandsCache.json";
private VelocityPlugin plugin;
@Inject
private ProxyServer proxy;
@Inject
private Logger logger;
@Inject
@DataDirectory
private Path dataDirectory;
@Inject
private Metrics.Factory metricsFactory;
@Inject
@Named("bukman")
private PluginContainer pluginContainer;
private final VelocityPluginCommandManager pluginCommandManager;
/**
* Initialises ServerUtils.
*/
@Inject
public ServerUtils(ProxyServer proxy, @DataDirectory Path dataDirectory) {
instance = this;
try {
this.pluginCommandManager = VelocityPluginCommandManager.load(dataDirectory.resolve(PLUGIN_COMMANDS_CACHE));
} catch (IOException ex) {
throw new RuntimeException(ex);
}
RVelocityCommandManager.proxyRegistrars(
proxy,
getClass().getClassLoader(),
(container, meta) -> pluginCommandManager.getPluginCommands().putAll(
container.getDescription().getId(),
meta.getAliases()
)
);
}
/**
* Initialises and enables ServerUtils.
*/
@Subscribe
public void onEnable(ProxyInitializeEvent event) {
this.plugin = new VelocityPlugin(this);
ServerUtilsApp.init(this, plugin);
metricsFactory.make(this, ServerUtilsApp.BSTATS_METRICS_ID);
plugin.enable();
}
/**
* De-initialises and disables ServerUtils.
*/
@Subscribe
public void onDisable(ProxyShutdownEvent event) {
try {
pluginCommandManager.save();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static ServerUtils getInstance() {
return instance;
}
public ProxyServer getProxy() {
return proxy;
}
public Logger getLogger() {
return logger;
}
public Path getDataDirectory() {
return dataDirectory;
}
public VelocityPlugin getPlugin() {
return plugin;
}
public PluginContainer getPluginContainer() {
return pluginContainer;
}
public VelocityPluginCommandManager getPluginCommandManager() {
return pluginCommandManager;
}
}