diff --git a/common/implementation/src/main/java/com/dfsek/terra/AbstractPlatform.java b/common/implementation/src/main/java/com/dfsek/terra/AbstractPlatform.java index 853f1200b..6823b2291 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/AbstractPlatform.java +++ b/common/implementation/src/main/java/com/dfsek/terra/AbstractPlatform.java @@ -192,7 +192,7 @@ public abstract class AbstractPlatform implements Platform { addonRegistry.register(internalAddon.getID(), internalAddon); - BootstrapAddonLoader bootstrapAddonLoader = new BootstrapAddonLoader(); + BootstrapAddonLoader bootstrapAddonLoader = new BootstrapAddonLoader(this); Path addonsFolder = getDataFolder().toPath().resolve("addons"); diff --git a/common/loader/addon/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java b/common/loader/addon/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java index 7075a5a64..5c9b10986 100644 --- a/common/loader/addon/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java +++ b/common/loader/addon/src/main/java/com/dfsek/terra/addon/BootstrapAddonLoader.java @@ -1,6 +1,7 @@ package com.dfsek.terra.addon; import com.dfsek.terra.addon.exception.AddonLoadException; +import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.bootstrap.BootstrapBaseAddon; import java.io.IOException; @@ -14,17 +15,27 @@ import java.util.stream.Collectors; public class BootstrapAddonLoader implements BootstrapBaseAddon> { + private final Platform platform; + + public BootstrapAddonLoader(Platform platform) { this.platform = platform; } + @Override public Iterable> loadAddons(Path addonsFolder, ClassLoader parent) { Path bootstrapAddons = addonsFolder.resolve("bootstrap"); - + platform.logger().info("Loading bootstrap addons from " + bootstrapAddons); try { return Files.walk(bootstrapAddons, 1) - .filter(path -> path.toFile().isFile() && path.getFileName().endsWith(".jar")) + .filter(path -> path.toFile().isFile() && path.toString().endsWith(".jar")) .map(path -> { try { + platform.logger().info("Loading bootstrap addon from JAR " + path); JarFile jar = new JarFile(path.toFile()); String entry = jar.getManifest().getMainAttributes().getValue("Bootstrap-Addon-Entry-Point"); + + if(entry == null) { + throw new AddonLoadException("No Bootstrap-Addon-Entry-Point attribute defined in addon manifest."); + } + AddonClassLoader loader = new AddonClassLoader(new URL[] {path.toUri().toURL()}, parent); try {