Refactored extension loading

This commit is contained in:
Auxilor
2020-11-27 12:58:49 +00:00
parent 1a095bac25
commit e848de746f
7 changed files with 76 additions and 27 deletions

View File

@@ -1,6 +1,8 @@
package com.willfp.ecoenchants;
import com.comphenix.protocol.ProtocolManager;
import com.willfp.ecoenchants.extensions.loader.EcoExtensionLoader;
import com.willfp.ecoenchants.extensions.loader.ExtensionLoader;
import com.willfp.ecoenchants.util.Loader;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
@@ -9,17 +11,15 @@ import org.bukkit.plugin.java.JavaPlugin;
* The Main class for EcoEnchants
*/
public class EcoEnchantsPlugin extends JavaPlugin {
/**
* Instance of EcoEnchants
*/
private static EcoEnchantsPlugin instance;
/**
* Is the plugin outdated
* Extension loader
*/
public static boolean outdated;
/**
* Newest available plugin version
*/
public static String newVersion;
private final ExtensionLoader loader = new EcoExtensionLoader();
/**
* NMS version
@@ -52,6 +52,14 @@ public class EcoEnchantsPlugin extends JavaPlugin {
instance = this;
}
/**
* Get extension loader
* @return The {@link ExtensionLoader} attached to EcoEnchants
*/
public ExtensionLoader getExtensionLoader() {
return loader;
}
/**
* Get plugin instance
* @return Plugin instance

View File

@@ -5,7 +5,7 @@ import com.willfp.ecoenchants.command.AbstractCommand;
import com.willfp.ecoenchants.display.EnchantmentCache;
import com.willfp.ecoenchants.enchantments.EcoEnchant;
import com.willfp.ecoenchants.enchantments.EcoEnchants;
import com.willfp.ecoenchants.extensions.ExtensionManager;
import com.willfp.ecoenchants.extensions.loader.ExtensionLoader;
import com.willfp.ecoenchants.util.Logger;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
@@ -42,7 +42,7 @@ public class CommandEcodebug extends AbstractCommand {
Logger.info("Running Version: " + EcoEnchantsPlugin.getInstance().getDescription().getVersion());
Logger.info("");
Logger.info("Loaded Extensions: " + ExtensionManager.getLoadedExtensions().values().stream().map(pair -> pair.getFirst() + " v" + pair.getSecond()).collect(Collectors.joining()));
Logger.info("Loaded Extensions: " + EcoEnchantsPlugin.getInstance().getExtensionLoader().getLoadedExtensions().stream().map(extension -> extension.getName() + " v" + extension.getVersion()).collect(Collectors.joining()));
Logger.info("");
Logger.info("EcoEnchants.getAll(): " + EcoEnchants.getAll().toString());

View File

@@ -73,11 +73,11 @@ public abstract class Extension {
* Designed for internal use
*/
@ApiStatus.Internal
static final class ExtensionMetadata {
public static final class ExtensionMetadata {
private final @NotNull String version;
private final @NotNull String name;
ExtensionMetadata(@NotNull String version, @NotNull String name) {
public ExtensionMetadata(@NotNull String version, @NotNull String name) {
this.version = version;
this.name = name;
}

View File

@@ -1,7 +1,9 @@
package com.willfp.ecoenchants.extensions;
package com.willfp.ecoenchants.extensions.loader;
import com.willfp.ecoenchants.EcoEnchantsPlugin;
import com.willfp.ecoenchants.enchantments.EcoEnchants;
import com.willfp.ecoenchants.extensions.Extension;
import com.willfp.ecoenchants.extensions.MalformedExtensionException;
import com.willfp.ecoenchants.util.Logger;
import com.willfp.ecoenchants.util.tuplets.Pair;
import org.bukkit.Bukkit;
@@ -19,13 +21,14 @@ import java.util.stream.Collectors;
/**
* Class containing method to load extensions
*/
public class ExtensionManager {
private static final Set<Extension> extensions = new HashSet<>();
public class EcoExtensionLoader implements ExtensionLoader {
private final Set<Extension> extensions = new HashSet<>();
/**
* Load all extensions
*/
public static void loadExtensions() {
@Override
public void loadExtensions() {
File dir = new File(EcoEnchantsPlugin.getInstance().getDataFolder(), "/extensions");
if (!dir.exists()) {
dir.mkdirs();
@@ -47,7 +50,7 @@ public class ExtensionManager {
}
}
private static void loadExtension(File extensionJar) throws MalformedExtensionException {
private void loadExtension(File extensionJar) throws MalformedExtensionException {
URL url = null;
try {
url = extensionJar.toURI().toURL();
@@ -98,15 +101,17 @@ public class ExtensionManager {
/**
* Unload all extensions
*/
public static void unloadExtensions() {
extensions.forEach(Extension::onDisable);
@Override
public void unloadExtensions() {
extensions.forEach(Extension::disable);
extensions.clear();
}
/**
* Reload all extensions
*/
public static void reloadExtensions() {
@Override
public void reloadExtensions() {
unloadExtensions();
loadExtensions();
}
@@ -115,7 +120,8 @@ public class ExtensionManager {
* Get set of all loaded extensions
* @return {@link Set} of {@link Extension}s
*/
public static Set<Extension> getLoadedExtensions() {
@Override
public Set<Extension> getLoadedExtensions() {
return extensions;
}
}

View File

@@ -0,0 +1,15 @@
package com.willfp.ecoenchants.extensions.loader;
import com.willfp.ecoenchants.extensions.Extension;
import java.util.Set;
public interface ExtensionLoader {
void loadExtensions();
void unloadExtensions();
void reloadExtensions();
Set<Extension> getLoadedExtensions();
}

View File

@@ -27,7 +27,7 @@ import com.willfp.ecoenchants.events.armorequip.ArmorListener;
import com.willfp.ecoenchants.events.armorequip.DispenserArmorListener;
import com.willfp.ecoenchants.events.entitydeathbyentity.EntityDeathByEntityListeners;
import com.willfp.ecoenchants.events.naturalexpgainevent.NaturalExpGainListeners;
import com.willfp.ecoenchants.extensions.ExtensionManager;
import com.willfp.ecoenchants.extensions.loader.ExtensionLoader;
import com.willfp.ecoenchants.integrations.anticheat.AnticheatManager;
import com.willfp.ecoenchants.integrations.anticheat.plugins.AnticheatAAC;
import com.willfp.ecoenchants.integrations.anticheat.plugins.AnticheatMatrix;
@@ -264,12 +264,13 @@ public class Loader {
Logger.info("Loading Extensions...");
ExtensionManager.loadExtensions();
if(ExtensionManager.getLoadedExtensions().isEmpty()) {
EcoEnchantsPlugin.getInstance().getExtensionLoader().loadExtensions();
if(EcoEnchantsPlugin.getInstance().getExtensionLoader().getLoadedExtensions().isEmpty()){
Logger.info("&cNo extensions found");
} else {
Logger.info("Extensions Loaded:");
ExtensionManager.getLoadedExtensions().forEach((extension) -> {
EcoEnchantsPlugin.getInstance().getExtensionLoader().getLoadedExtensions().forEach((extension) -> {
Logger.info("- " + extension.getName() + " v" + extension.getVersion());
});
}
@@ -386,8 +387,8 @@ public class Loader {
if (currentVersion.compareTo(mostRecentVersion) > 0 || currentVersion.equals(mostRecentVersion)) {
Logger.info("&aEcoEnchants is up to date! (Version " + EcoEnchantsPlugin.getInstance().getDescription().getVersion() + ")");
} else {
EcoEnchantsPlugin.outdated = true;
EcoEnchantsPlugin.newVersion = version;
UpdateChecker.setOutdated(true);
UpdateChecker.setNewVersion(version);
Bukkit.getScheduler().runTaskTimer(EcoEnchantsPlugin.getInstance(), () -> {
Logger.info("&6EcoEnchants is out of date! (Version " + EcoEnchantsPlugin.getInstance().getDescription().getVersion() + ")");
@@ -441,7 +442,7 @@ public class Loader {
}));
Logger.info("");
Logger.info("&cUnloading Extensions...");
ExtensionManager.unloadExtensions();
EcoEnchantsPlugin.getInstance().getExtensionLoader().unloadExtensions();
Logger.info("&fBye! :)");
}

View File

@@ -11,6 +11,9 @@ import java.util.Scanner;
public class UpdateChecker {
private static boolean outdated;
private static String newVersion;
private final Plugin plugin;
private final int resourceId;
@@ -30,5 +33,21 @@ public class UpdateChecker {
}
});
}
public static boolean isOutdated() {
return outdated;
}
public static String getNewVersion() {
return newVersion;
}
public static void setOutdated(boolean outdated) {
UpdateChecker.outdated = outdated;
}
public static void setNewVersion(String newVersion) {
UpdateChecker.newVersion = newVersion;
}
}