diff --git a/api/src/main/java/dev/aurelium/auraskills/api/registry/NamespacedId.java b/api/src/main/java/dev/aurelium/auraskills/api/registry/NamespacedId.java index d48bf4625..fb2e2fcec 100644 --- a/api/src/main/java/dev/aurelium/auraskills/api/registry/NamespacedId.java +++ b/api/src/main/java/dev/aurelium/auraskills/api/registry/NamespacedId.java @@ -7,10 +7,12 @@ public class NamespacedId { public static final String AURASKILLS = "auraskills"; private final String namespace; + private final String originalKey; private final String key; private NamespacedId(String namespace, String key) { this.namespace = namespace.toLowerCase(Locale.ROOT); + this.originalKey = key; this.key = key.toLowerCase(Locale.ROOT); } @@ -33,6 +35,15 @@ public String getKey() { return key; } + /** + * Gets the original key portion of the NamespacedId, which is the key in the case it was created with. + * + * @return the original key + */ + public String getOriginalKey() { + return originalKey; + } + /** * Returns the full String representation of the NamespacedId, with a / separating the * namespace and the key. diff --git a/bukkit/src/main/java/dev/aurelium/auraskills/bukkit/hooks/mythicmobs/MythicMobsHook.java b/bukkit/src/main/java/dev/aurelium/auraskills/bukkit/hooks/mythicmobs/MythicMobsHook.java index 8aec7f5a5..538f7d766 100644 --- a/bukkit/src/main/java/dev/aurelium/auraskills/bukkit/hooks/mythicmobs/MythicMobsHook.java +++ b/bukkit/src/main/java/dev/aurelium/auraskills/bukkit/hooks/mythicmobs/MythicMobsHook.java @@ -32,11 +32,18 @@ public MythicMobsHook(AuraSkills plugin, ConfigurationNode config) { this.plugin = plugin; this.damageHandler = new DamageHandler(); + registerItemProvider(); + // Wait for loot manager to be created, but add parser before it is loaded plugin.getScheduler().executeSync(() -> plugin.getLootTableManager().getLootManager().registerCustomEntityParser(new MythicEntityLootParser(plugin))); } + private void registerItemProvider() { + plugin.getItemRegistry().registerExternalItemProvider("mythicmobs", + (id) -> MythicBukkit.inst().getItemManager().getItemStack(id)); + } + @EventHandler public void onMythicSkillDamage(MythicDamageEvent event) { // This is always some sort of skill/mechanic damage. diff --git a/bukkit/src/main/java/dev/aurelium/auraskills/bukkit/item/BukkitItemRegistry.java b/bukkit/src/main/java/dev/aurelium/auraskills/bukkit/item/BukkitItemRegistry.java index 4681257f7..e343af1fe 100644 --- a/bukkit/src/main/java/dev/aurelium/auraskills/bukkit/item/BukkitItemRegistry.java +++ b/bukkit/src/main/java/dev/aurelium/auraskills/bukkit/item/BukkitItemRegistry.java @@ -58,9 +58,14 @@ public ItemStack getItem(NamespacedId key) { ItemStack item = items.get(key); if (item != null) { return item.clone(); - } else { - return null; } + + ExternalItemProvider provider = externalItemProviders.get(key.getNamespace()); + if (provider != null) { + return provider.getItem(key.getOriginalKey()); + } + + return null; } public Map getItems() {