190 lines
5.8 KiB
Java
190 lines
5.8 KiB
Java
package com.bgsoftware.wildloaders;
|
|
|
|
import com.bgsoftware.common.reflection.ReflectMethod;
|
|
import com.bgsoftware.wildloaders.api.WildLoaders;
|
|
import com.bgsoftware.wildloaders.api.WildLoadersAPI;
|
|
import com.bgsoftware.wildloaders.command.CommandsHandler;
|
|
import com.bgsoftware.wildloaders.handlers.DataHandler;
|
|
import com.bgsoftware.wildloaders.handlers.LoadersHandler;
|
|
import com.bgsoftware.wildloaders.handlers.NPCHandler;
|
|
import com.bgsoftware.wildloaders.handlers.ProvidersHandler;
|
|
import com.bgsoftware.wildloaders.handlers.SettingsHandler;
|
|
import com.bgsoftware.wildloaders.listeners.BlocksListener;
|
|
import com.bgsoftware.wildloaders.listeners.ChunksListener;
|
|
import com.bgsoftware.wildloaders.listeners.PlayersListener;
|
|
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;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.UnsafeValues;
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
|
|
import java.lang.reflect.Field;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
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;
|
|
|
|
private NMSAdapter nmsAdapter;
|
|
|
|
private boolean shouldEnable = true;
|
|
|
|
@Override
|
|
public void onLoad() {
|
|
plugin = this;
|
|
new Metrics(this);
|
|
|
|
shouldEnable = loadNMSAdapter();
|
|
loadAPI();
|
|
|
|
if (!shouldEnable)
|
|
log("&cThere was an error while loading the plugin.");
|
|
}
|
|
|
|
@Override
|
|
public void onEnable() {
|
|
if (!shouldEnable) {
|
|
Bukkit.getPluginManager().disablePlugin(this);
|
|
return;
|
|
}
|
|
|
|
log("******** ENABLE START ********");
|
|
|
|
dataHandler = new DataHandler(this);
|
|
loadersHandler = new LoadersHandler(this);
|
|
npcHandler = new NPCHandler(this);
|
|
providersHandler = new ProvidersHandler(this);
|
|
settingsHandler = new SettingsHandler(this);
|
|
|
|
getServer().getPluginManager().registerEvents(new BlocksListener(this), this);
|
|
getServer().getPluginManager().registerEvents(new ChunksListener(this), this);
|
|
getServer().getPluginManager().registerEvents(new PlayersListener(this), this);
|
|
|
|
CommandsHandler commandsHandler = new CommandsHandler(this);
|
|
getCommand("loader").setExecutor(commandsHandler);
|
|
getCommand("loader").setTabCompleter(commandsHandler);
|
|
|
|
Locale.reload();
|
|
|
|
if (Updater.isOutdated()) {
|
|
log("");
|
|
log("A new version is available (v" + Updater.getLatestVersion() + ")!");
|
|
log("Version's description: \"" + Updater.getVersionDescription() + "\"");
|
|
log("");
|
|
}
|
|
|
|
log("******** ENABLE DONE ********");
|
|
}
|
|
|
|
@Override
|
|
public void onDisable() {
|
|
if (shouldEnable) {
|
|
Database.stop();
|
|
loadersHandler.removeChunkLoaders();
|
|
npcHandler.killAllNPCs();
|
|
}
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
|
|
log("&cThe plugin doesn't support your minecraft version.");
|
|
log("&cPlease try a different version.");
|
|
|
|
return true;
|
|
}
|
|
|
|
private void loadAPI() {
|
|
try {
|
|
Field instance = WildLoadersAPI.class.getDeclaredField("instance");
|
|
instance.setAccessible(true);
|
|
instance.set(null, this);
|
|
} catch (Exception ex) {
|
|
log("Failed to set-up API - disabling plugin...");
|
|
ex.printStackTrace();
|
|
shouldEnable = false;
|
|
}
|
|
}
|
|
|
|
public SettingsHandler getSettings() {
|
|
return settingsHandler;
|
|
}
|
|
|
|
@Override
|
|
public LoadersHandler getLoaders() {
|
|
return loadersHandler;
|
|
}
|
|
|
|
@Override
|
|
public NPCHandler getNPCs() {
|
|
return npcHandler;
|
|
}
|
|
|
|
@Override
|
|
public ProvidersHandler getProviders() {
|
|
return providersHandler;
|
|
}
|
|
|
|
public NMSAdapter getNMSAdapter() {
|
|
return nmsAdapter;
|
|
}
|
|
|
|
public DataHandler getDataHandler() {
|
|
return dataHandler;
|
|
}
|
|
|
|
public static void log(String message) {
|
|
plugin.getLogger().info(message);
|
|
}
|
|
|
|
public static WildLoadersPlugin getPlugin() {
|
|
return plugin;
|
|
}
|
|
|
|
}
|