WildLoaders/src/main/java/com/bgsoftware/wildloaders/WildLoadersPlugin.java

190 lines
5.8 KiB
Java
Raw Normal View History

2020-08-15 00:39:18 +02:00
package com.bgsoftware.wildloaders;
import com.bgsoftware.common.reflection.ReflectMethod;
2020-08-15 00:39:18 +02:00
import com.bgsoftware.wildloaders.api.WildLoaders;
2020-09-18 15:54:09 +02:00
import com.bgsoftware.wildloaders.api.WildLoadersAPI;
2020-08-15 00:39:18 +02:00
import com.bgsoftware.wildloaders.command.CommandsHandler;
import com.bgsoftware.wildloaders.handlers.DataHandler;
2020-08-15 00:39:18 +02:00
import com.bgsoftware.wildloaders.handlers.LoadersHandler;
import com.bgsoftware.wildloaders.handlers.NPCHandler;
import com.bgsoftware.wildloaders.handlers.ProvidersHandler;
2020-08-15 00:39:18 +02:00
import com.bgsoftware.wildloaders.handlers.SettingsHandler;
import com.bgsoftware.wildloaders.listeners.BlocksListener;
import com.bgsoftware.wildloaders.listeners.ChunksListener;
2020-09-18 16:02:49 +02:00
import com.bgsoftware.wildloaders.listeners.PlayersListener;
2020-08-15 00:39:18 +02:00
import com.bgsoftware.wildloaders.metrics.Metrics;
import com.bgsoftware.wildloaders.nms.NMSAdapter;
import com.bgsoftware.wildloaders.utils.Pair;
import com.bgsoftware.wildloaders.utils.ServerVersion;
import com.bgsoftware.wildloaders.utils.database.Database;
2020-09-18 15:54:09 +02:00
import org.bukkit.Bukkit;
import org.bukkit.UnsafeValues;
2020-08-15 00:39:18 +02:00
import org.bukkit.plugin.java.JavaPlugin;
2020-09-18 15:54:09 +02:00
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
2020-09-18 15:54:09 +02:00
2020-08-15 00:39:18 +02:00
public final class WildLoadersPlugin extends JavaPlugin implements WildLoaders {
private static WildLoadersPlugin plugin;
private SettingsHandler settingsHandler;
private LoadersHandler loadersHandler;
private NPCHandler npcHandler;
private DataHandler dataHandler;
private ProvidersHandler providersHandler;
2020-08-15 00:39:18 +02:00
private NMSAdapter nmsAdapter;
2020-09-18 15:54:09 +02:00
private boolean shouldEnable = true;
2020-08-15 00:39:18 +02:00
@Override
2020-09-18 15:54:09 +02:00
public void onLoad() {
2020-08-15 00:39:18 +02:00
plugin = this;
new Metrics(this);
shouldEnable = loadNMSAdapter();
2020-09-18 15:54:09 +02:00
loadAPI();
if (!shouldEnable)
2020-09-18 15:54:09 +02:00
log("&cThere was an error while loading the plugin.");
}
@Override
public void onEnable() {
if (!shouldEnable) {
2020-09-18 15:54:09 +02:00
Bukkit.getPluginManager().disablePlugin(this);
return;
}
log("******** ENABLE START ********");
2020-08-15 00:39:18 +02:00
dataHandler = new DataHandler(this);
2020-08-15 00:39:18 +02:00
loadersHandler = new LoadersHandler(this);
npcHandler = new NPCHandler(this);
providersHandler = new ProvidersHandler(this);
2020-08-15 00:39:18 +02:00
settingsHandler = new SettingsHandler(this);
getServer().getPluginManager().registerEvents(new BlocksListener(this), this);
getServer().getPluginManager().registerEvents(new ChunksListener(this), this);
2020-09-18 16:02:49 +02:00
getServer().getPluginManager().registerEvents(new PlayersListener(this), this);
2020-08-15 00:39:18 +02:00
CommandsHandler commandsHandler = new CommandsHandler(this);
getCommand("loader").setExecutor(commandsHandler);
getCommand("loader").setTabCompleter(commandsHandler);
Locale.reload();
if (Updater.isOutdated()) {
2020-09-18 16:02:49 +02:00
log("");
log("A new version is available (v" + Updater.getLatestVersion() + ")!");
log("Version's description: \"" + Updater.getVersionDescription() + "\"");
log("");
}
2020-08-15 00:39:18 +02:00
log("******** ENABLE DONE ********");
}
@Override
public void onDisable() {
if (shouldEnable) {
2020-09-18 15:54:09 +02:00
Database.stop();
loadersHandler.removeChunkLoaders();
npcHandler.killAllNPCs();
}
2020-08-15 00:39:18 +02:00
}
private boolean loadNMSAdapter() {
String version = null;
if (ServerVersion.isLessThan(ServerVersion.v1_18)) {
version = getServer().getClass().getPackage().getName().split("\\.")[3];
} else {
ReflectMethod<Integer> getDataVersion = new ReflectMethod<>(UnsafeValues.class, "getDataVersion");
int dataVersion = getDataVersion.invoke(Bukkit.getUnsafe());
List<Pair<Integer, String>> versions = Arrays.asList(
new Pair<>(2865, "v1181"),
new Pair<>(2975, "v1182"),
new Pair<>(3105, "v119"),
new Pair<>(3117, "v1191"),
new Pair<>(3120, "v1192")
);
for (Pair<Integer, String> versionData : versions) {
if (dataVersion <= versionData.first) {
version = versionData.second;
break;
}
}
if (version == null) {
log("Data version: " + dataVersion);
}
}
if (version != null) {
try {
nmsAdapter = (NMSAdapter) Class.forName(String.format("com.bgsoftware.wildloaders.nms.%s.NMSAdapter", version)).newInstance();
return true;
} catch (Exception error) {
error.printStackTrace();
}
2020-08-15 00:39:18 +02:00
}
log("&cThe plugin doesn't support your minecraft version.");
log("&cPlease try a different version.");
return true;
2020-08-15 00:39:18 +02:00
}
private void loadAPI() {
try {
2020-09-18 15:54:09 +02:00
Field instance = WildLoadersAPI.class.getDeclaredField("instance");
instance.setAccessible(true);
instance.set(null, this);
} catch (Exception ex) {
2020-09-18 15:54:09 +02:00
log("Failed to set-up API - disabling plugin...");
ex.printStackTrace();
shouldEnable = false;
}
}
2020-08-15 00:39:18 +02:00
public SettingsHandler getSettings() {
return settingsHandler;
}
@Override
public LoadersHandler getLoaders() {
return loadersHandler;
}
@Override
2020-08-15 00:39:18 +02:00
public NPCHandler getNPCs() {
return npcHandler;
}
@Override
public ProvidersHandler getProviders() {
return providersHandler;
}
2020-08-15 00:39:18 +02:00
public NMSAdapter getNMSAdapter() {
return nmsAdapter;
}
public DataHandler getDataHandler() {
return dataHandler;
}
public static void log(String message) {
2020-08-15 00:39:18 +02:00
plugin.getLogger().info(message);
}
public static WildLoadersPlugin getPlugin() {
2020-08-15 00:39:18 +02:00
return plugin;
}
}