From 4ef974fbde55aaa450d4e0d092d2e165eae3b70f Mon Sep 17 00:00:00 2001 From: tastybento Date: Sat, 8 Jul 2023 08:52:20 -0700 Subject: [PATCH] Better error for unknown icon material, and test class --- .../bentobox/api/addons/AddonClassLoader.java | 6 ++++- .../api/addons/AddonClassLoaderTest.java | 22 +++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/api/addons/AddonClassLoader.java b/src/main/java/world/bentobox/bentobox/api/addons/AddonClassLoader.java index 2efa293f6..1e765ceb8 100644 --- a/src/main/java/world/bentobox/bentobox/api/addons/AddonClassLoader.java +++ b/src/main/java/world/bentobox/bentobox/api/addons/AddonClassLoader.java @@ -125,7 +125,11 @@ public class AddonClassLoader extends URLClassLoader { if (softDepend != null) { builder.softDependencies(Arrays.asList(softDepend.split("\\s*,\\s*"))); } - builder.icon(Objects.requireNonNull(Material.getMaterial(data.getString("icon", "PAPER").toUpperCase(Locale.ENGLISH)))); + Material icon = Material.getMaterial(data.getString("icon", "PAPER").toUpperCase(Locale.ENGLISH)); + if (icon == null) { + throw new InvalidAddonDescriptionException("'icon' tag refers to an unknown Material: " + data.getString("icon")); + } + builder.icon(Objects.requireNonNull(icon)); String apiVersion = data.getString("api-version"); if (apiVersion != null) { diff --git a/src/test/java/world/bentobox/bentobox/api/addons/AddonClassLoaderTest.java b/src/test/java/world/bentobox/bentobox/api/addons/AddonClassLoaderTest.java index 3664f7e46..16eb982b1 100644 --- a/src/test/java/world/bentobox/bentobox/api/addons/AddonClassLoaderTest.java +++ b/src/test/java/world/bentobox/bentobox/api/addons/AddonClassLoaderTest.java @@ -53,7 +53,8 @@ public class AddonClassLoaderTest { MAIN, NAME, VERSION, - AUTHORS + AUTHORS, + ICON } /** * Used for file writing etc. @@ -129,7 +130,11 @@ public class AddonClassLoaderTest { r.set("repository", "repo"); r.set("depend", "Level, Warps"); r.set("softdepend", "Boxed, AcidIsland"); - r.set("icon", "IRON_INGOT"); + if (!missingTags.contains(mandatoryTags.ICON)) { + r.set("icon", "IRON_INGOT"); + } else { + r.set("icon", "unkOwnMateriaL"); + } r.set("api-version", "1.21-SNAPSHOT"); return r; } @@ -278,6 +283,19 @@ public class AddonClassLoaderTest { } } + /** + * Test method for {@link world.bentobox.bentobox.api.addons.AddonClassLoader#asDescription(org.bukkit.configuration.file.YamlConfiguration)}. + */ + @Test + public void testAsDescriptionUnknownIconMaterial() { + YamlConfiguration yml = this.getYaml(List.of(mandatoryTags.ICON)); + try { + AddonClassLoader.asDescription(yml); + } catch (InvalidAddonDescriptionException e) { + assertEquals("AddonException : 'icon' tag refers to an unknown Material: unkOwnMateriaL", e.getMessage()); + } + } + /** * Test method for {@link world.bentobox.bentobox.api.addons.AddonClassLoader#findClass(java.lang.String)}. */