diff --git a/src/main/java/com/volmit/iris/core/link/ExternalDataProvider.java b/src/main/java/com/volmit/iris/core/link/ExternalDataProvider.java index 8ecca6a7a..ee4d46bfc 100644 --- a/src/main/java/com/volmit/iris/core/link/ExternalDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/ExternalDataProvider.java @@ -3,7 +3,6 @@ package com.volmit.iris.core.link; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.bukkit.Bukkit; -import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; @@ -20,8 +19,8 @@ public abstract class ExternalDataProvider { return Bukkit.getPluginManager().getPlugin(pluginId); } - public boolean isPresent() { - return getPlugin() != null; + public boolean isReady() { + return getPlugin() != null && getPlugin().isEnabled(); } public abstract void init(); diff --git a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java index 79e732d52..cf3b1024b 100644 --- a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java @@ -35,7 +35,6 @@ import org.bukkit.block.data.BlockData; import org.bukkit.block.data.MultipleFacing; import org.bukkit.inventory.ItemStack; -import java.lang.reflect.Field; import java.util.Map; import java.util.MissingResourceException; import java.util.Optional; @@ -108,8 +107,8 @@ public class OraxenDataProvider extends ExternalDataProvider { } @Override - public boolean isPresent() { - return super.isPresent() && factories != null; + public boolean isReady() { + return super.isReady() && factories != null; } @Override diff --git a/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java b/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java index 2d2c1205f..49bdd2b59 100644 --- a/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java +++ b/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java @@ -23,8 +23,10 @@ import com.volmit.iris.core.link.*; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.plugin.IrisService; import lombok.Data; -import org.bukkit.NamespacedKey; +import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; +import org.bukkit.event.EventHandler; +import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.inventory.ItemStack; import java.util.MissingResourceException; @@ -33,31 +35,40 @@ import java.util.Optional; @Data public class ExternalDataSVC implements IrisService { - private KList providers = new KList<>(); + private KList providers = new KList<>(), activeProviders = new KList<>(); @Override public void onEnable() { - addProvider( -// new CustomItemsDataProvider(), //need this to be gradelized before i can add it to the master repo - new OraxenDataProvider(), - new ItemAdderDataProvider()); - } + Bukkit.getPluginManager().registerEvents(this, Iris.instance); - @Override - public void onDisable() { - } + providers.add(new OraxenDataProvider()); + providers.add(new ItemAdderDataProvider()); - public void addProvider(ExternalDataProvider... provider) { - for (ExternalDataProvider p : provider) { - if (p.getPlugin() != null) { - providers.add(p); + for (ExternalDataProvider p : providers) { + if (p.isReady()) { + activeProviders.add(p); p.init(); + Iris.info("Enabled ExternalDataProvider for %s.", p.getPluginId()); } } } + @Override + public void onDisable() { } + + @EventHandler + public void onPluginEnable(PluginEnableEvent e) { + if(activeProviders.stream().noneMatch(p -> p.getPlugin().equals(e.getPlugin()))) { + providers.stream().filter(p -> p.isReady() && p.getPlugin().equals(e.getPlugin())).findFirst().ifPresent(edp -> { + activeProviders.add(edp); + edp.init(); + Iris.info("Enabled ExternalDataProvider for %s.", edp.getPluginId()); + }); + } + } + public Optional getBlockData(Identifier key) { - Optional provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key, false)).findFirst(); + Optional provider = activeProviders.stream().filter(p -> p.isValidProvider(key, false)).findFirst(); if (provider.isEmpty()) return Optional.empty(); try { @@ -69,7 +80,7 @@ public class ExternalDataSVC implements IrisService { } public Optional getItemStack(Identifier key) { - Optional provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key, true)).findFirst(); + Optional provider = activeProviders.stream().filter(p -> p.isValidProvider(key, true)).findFirst(); if (provider.isEmpty()) { Iris.warn("No matching Provider found for modded material \"%s\"!", key); return Optional.empty(); @@ -84,13 +95,13 @@ public class ExternalDataSVC implements IrisService { public Identifier[] getAllBlockIdentifiers() { KList names = new KList<>(); - providers.stream().filter(ExternalDataProvider::isPresent).forEach(p -> names.add(p.getBlockTypes())); + activeProviders.forEach(p -> names.add(p.getBlockTypes())); return names.toArray(new Identifier[0]); } public Identifier[] getAllItemIdentifiers() { KList names = new KList<>(); - providers.stream().filter(ExternalDataProvider::isPresent).forEach(p -> names.add(p.getItemTypes())); + activeProviders.forEach(p -> names.add(p.getItemTypes())); return names.toArray(new Identifier[0]); } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 25bb57f7d..cfaed5163 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -21,6 +21,4 @@ commands: iris: aliases: [ ir, irs ] api-version: ${apiversion} -softdepend: - - ItemsAdder hotload-dependencies: false \ No newline at end of file