diff --git a/core/build.gradle b/core/build.gradle index b15995f34..45e48457b 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -35,6 +35,7 @@ compileJava { repositories { maven { url 'https://nexus.phoenixdevt.fr/repository/maven-public/'} + maven { url 'https://repo.auxilor.io/repository/maven-public/' } } /** @@ -66,6 +67,7 @@ dependencies { compileOnly 'com.github.PlaceholderAPI:placeholderapi:2.11.3' compileOnly 'com.github.Ssomar-Developement:SCore:4.23.10.8' compileOnly 'net.Indyuce:MMOItems-API:6.9.5-SNAPSHOT' + compileOnly 'com.willfp:EcoItems:5.44.0' //implementation files('libs/CustomItems.jar') } diff --git a/core/src/main/java/com/volmit/iris/core/link/EcoItemsDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/EcoItemsDataProvider.java new file mode 100644 index 000000000..615256e66 --- /dev/null +++ b/core/src/main/java/com/volmit/iris/core/link/EcoItemsDataProvider.java @@ -0,0 +1,71 @@ +package com.volmit.iris.core.link; + +import com.volmit.iris.Iris; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.reflect.WrappedField; +import com.willfp.ecoitems.items.EcoItem; +import com.willfp.ecoitems.items.EcoItems; +import org.bukkit.NamespacedKey; +import org.bukkit.block.data.BlockData; +import org.bukkit.inventory.ItemStack; + +import java.util.MissingResourceException; + +public class EcoItemsDataProvider extends ExternalDataProvider { + private WrappedField itemStack; + private WrappedField id; + + public EcoItemsDataProvider() { + super("EcoItems"); + } + + @Override + public void init() { + Iris.info("Setting up EcoItems Link..."); + itemStack = new WrappedField<>(EcoItem.class, "_itemStack"); + if (this.itemStack.hasFailed()) { + Iris.error("Failed to set up EcoItems Link: Unable to fetch ItemStack field!"); + } + id = new WrappedField<>(EcoItem.class, "id"); + if (this.id.hasFailed()) { + Iris.error("Failed to set up EcoItems Link: Unable to fetch id field!"); + } + } + + @Override + public BlockData getBlockData(Identifier blockId) throws MissingResourceException { + throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); + } + + @Override + public ItemStack getItemStack(Identifier itemId) throws MissingResourceException { + EcoItem item = EcoItems.INSTANCE.getByID(itemId.key()); + if (item == null) throw new MissingResourceException("Failed to find Item!", itemId.namespace(), itemId.key()); + return itemStack.get(item).clone(); + } + + @Override + public Identifier[] getBlockTypes() { + return new Identifier[0]; + } + + @Override + public Identifier[] getItemTypes() { + KList names = new KList<>(); + for (EcoItem item : EcoItems.INSTANCE.values()) { + try { + Identifier key = Identifier.fromNamespacedKey(id.get(item)); + if (getItemStack(key) != null) + names.add(key); + } catch (MissingResourceException ignored) { + } + } + + return names.toArray(new Identifier[0]); + } + + @Override + public boolean isValidProvider(Identifier id, boolean isItem) { + return id.namespace().equalsIgnoreCase("ecoitems") && isItem; + } +} diff --git a/core/src/main/java/com/volmit/iris/core/link/Identifier.java b/core/src/main/java/com/volmit/iris/core/link/Identifier.java index 4059016d0..3969b174b 100644 --- a/core/src/main/java/com/volmit/iris/core/link/Identifier.java +++ b/core/src/main/java/com/volmit/iris/core/link/Identifier.java @@ -6,6 +6,10 @@ public record Identifier(String namespace, String key) { private static final String DEFAULT_NAMESPACE = "minecraft"; + public static Identifier fromNamespacedKey(NamespacedKey key) { + return new Identifier(key.getNamespace(), key.getKey()); + } + public static Identifier fromString(String id) { String[] strings = id.split(":", 2); if (strings.length == 1) { diff --git a/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java b/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java index 00bc519c1..e70e1c1d4 100644 --- a/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java +++ b/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java @@ -64,6 +64,10 @@ public class ExternalDataSVC implements IrisService { if (Bukkit.getPluginManager().getPlugin("MMOItems") != null) { Iris.info("MMOItems found, loading MMOItemsDataProvider..."); } + providers.add(new EcoItemsDataProvider()); + if (Bukkit.getPluginManager().getPlugin("EcoItems") != null) { + Iris.info("EcoItems found, loading EcoItemsDataProvider..."); + } for (ExternalDataProvider p : providers) { if (p.isReady()) {