diff --git a/common/src/main/java/com/dfsek/terra/api/addons/annotations/Platform.java b/common/src/main/java/com/dfsek/terra/api/addons/annotations/Platform.java new file mode 100644 index 000000000..ab4266fff --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/addons/annotations/Platform.java @@ -0,0 +1,16 @@ +package com.dfsek.terra.api.addons.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Optional annotation that specifies platforms + * addon is made for. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface Platform { + String[] value(); +} diff --git a/common/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java b/common/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java index f2c50acfb..37c542fe8 100644 --- a/common/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java +++ b/common/src/main/java/com/dfsek/terra/registry/master/AddonRegistry.java @@ -6,6 +6,7 @@ import com.dfsek.terra.addon.PreLoadAddon; import com.dfsek.terra.addon.exception.AddonLoadException; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.addons.TerraAddon; +import com.dfsek.terra.api.addons.annotations.Platform; import com.dfsek.terra.api.injection.Injector; import com.dfsek.terra.api.injection.exception.InjectionException; import com.dfsek.terra.registry.OpenRegistry; @@ -15,6 +16,8 @@ import java.io.File; import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; +import java.util.List; import java.util.logging.LogManager; import java.util.logging.Logger; @@ -66,6 +69,12 @@ public class AddonRegistry extends OpenRegistry { for(PreLoadAddon addon : pool.getAddons()) { Class addonClass = addon.getAddonClass(); + + if(addonClass.isAnnotationPresent(Platform.class)) { + List platforms = Arrays.asList(addonClass.getAnnotation(Platform.class).value()); + if(!platforms.contains(main.platformName())) throw new AddonLoadException("Addon \"" + addon.getId() + "\" cannot run on platform " + main.platformName() + ". Allowed platforms: " + platforms); + } + Constructor constructor; String logPrefix = "Terra:" + addon.getId();