Fixed ItemsAdder integration.

This commit is contained in:
Vatuu
2023-04-10 19:26:29 +02:00
parent 6ebcd02ae6
commit a1e0a8ffc1
4 changed files with 33 additions and 26 deletions
@@ -3,7 +3,6 @@ package com.volmit.iris.core.link;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
@@ -20,8 +19,8 @@ public abstract class ExternalDataProvider {
return Bukkit.getPluginManager().getPlugin(pluginId); return Bukkit.getPluginManager().getPlugin(pluginId);
} }
public boolean isPresent() { public boolean isReady() {
return getPlugin() != null; return getPlugin() != null && getPlugin().isEnabled();
} }
public abstract void init(); public abstract void init();
@@ -35,7 +35,6 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.MultipleFacing; import org.bukkit.block.data.MultipleFacing;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Field;
import java.util.Map; import java.util.Map;
import java.util.MissingResourceException; import java.util.MissingResourceException;
import java.util.Optional; import java.util.Optional;
@@ -108,8 +107,8 @@ public class OraxenDataProvider extends ExternalDataProvider {
} }
@Override @Override
public boolean isPresent() { public boolean isReady() {
return super.isPresent() && factories != null; return super.isReady() && factories != null;
} }
@Override @Override
@@ -23,8 +23,10 @@ import com.volmit.iris.core.link.*;
import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.plugin.IrisService; import com.volmit.iris.util.plugin.IrisService;
import lombok.Data; import lombok.Data;
import org.bukkit.NamespacedKey; import org.bukkit.Bukkit;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.event.EventHandler;
import org.bukkit.event.server.PluginEnableEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.MissingResourceException; import java.util.MissingResourceException;
@@ -33,31 +35,40 @@ import java.util.Optional;
@Data @Data
public class ExternalDataSVC implements IrisService { public class ExternalDataSVC implements IrisService {
private KList<ExternalDataProvider> providers = new KList<>(); private KList<ExternalDataProvider> providers = new KList<>(), activeProviders = new KList<>();
@Override @Override
public void onEnable() { public void onEnable() {
addProvider( Bukkit.getPluginManager().registerEvents(this, Iris.instance);
// new CustomItemsDataProvider(), //need this to be gradelized before i can add it to the master repo
new OraxenDataProvider(),
new ItemAdderDataProvider());
}
@Override providers.add(new OraxenDataProvider());
public void onDisable() { providers.add(new ItemAdderDataProvider());
}
public void addProvider(ExternalDataProvider... provider) { for (ExternalDataProvider p : providers) {
for (ExternalDataProvider p : provider) { if (p.isReady()) {
if (p.getPlugin() != null) { activeProviders.add(p);
providers.add(p);
p.init(); 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<BlockData> getBlockData(Identifier key) { public Optional<BlockData> getBlockData(Identifier key) {
Optional<ExternalDataProvider> provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key, false)).findFirst(); Optional<ExternalDataProvider> provider = activeProviders.stream().filter(p -> p.isValidProvider(key, false)).findFirst();
if (provider.isEmpty()) if (provider.isEmpty())
return Optional.empty(); return Optional.empty();
try { try {
@@ -69,7 +80,7 @@ public class ExternalDataSVC implements IrisService {
} }
public Optional<ItemStack> getItemStack(Identifier key) { public Optional<ItemStack> getItemStack(Identifier key) {
Optional<ExternalDataProvider> provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key, true)).findFirst(); Optional<ExternalDataProvider> provider = activeProviders.stream().filter(p -> p.isValidProvider(key, true)).findFirst();
if (provider.isEmpty()) { if (provider.isEmpty()) {
Iris.warn("No matching Provider found for modded material \"%s\"!", key); Iris.warn("No matching Provider found for modded material \"%s\"!", key);
return Optional.empty(); return Optional.empty();
@@ -84,13 +95,13 @@ public class ExternalDataSVC implements IrisService {
public Identifier[] getAllBlockIdentifiers() { public Identifier[] getAllBlockIdentifiers() {
KList<Identifier> names = new KList<>(); KList<Identifier> 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]); return names.toArray(new Identifier[0]);
} }
public Identifier[] getAllItemIdentifiers() { public Identifier[] getAllItemIdentifiers() {
KList<Identifier> names = new KList<>(); KList<Identifier> 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]); return names.toArray(new Identifier[0]);
} }
} }
-2
View File
@@ -21,6 +21,4 @@ commands:
iris: iris:
aliases: [ ir, irs ] aliases: [ ir, irs ]
api-version: ${apiversion} api-version: ${apiversion}
softdepend:
- ItemsAdder
hotload-dependencies: false hotload-dependencies: false