diff --git a/src/main/java/com/willfp/eco/util/recipes/lookup/EcoItemLookup.java b/src/main/java/com/willfp/eco/common/recipes/lookup/EcoItemLookup.java similarity index 75% rename from src/main/java/com/willfp/eco/util/recipes/lookup/EcoItemLookup.java rename to src/main/java/com/willfp/eco/common/recipes/lookup/EcoItemLookup.java index 53488a0f..e0acc82f 100644 --- a/src/main/java/com/willfp/eco/util/recipes/lookup/EcoItemLookup.java +++ b/src/main/java/com/willfp/eco/common/recipes/lookup/EcoItemLookup.java @@ -1,17 +1,13 @@ -package com.willfp.eco.util.recipes.lookup; +package com.willfp.eco.common.recipes.lookup; -import com.willfp.eco.util.recipes.parts.EmptyRecipePart; -import com.willfp.eco.util.recipes.parts.RecipePart; -import com.willfp.eco.util.recipes.parts.SimpleRecipePart; +import com.willfp.eco.common.recipes.parts.EmptyRecipePart; +import com.willfp.eco.common.recipes.parts.RecipePart; +import com.willfp.eco.common.recipes.parts.SimpleRecipePart; import org.bukkit.Material; -import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; -import java.util.Set; import java.util.function.Function; public class EcoItemLookup implements ItemLookup { diff --git a/src/main/java/com/willfp/eco/util/recipes/lookup/ItemLookup.java b/src/main/java/com/willfp/eco/common/recipes/lookup/ItemLookup.java similarity index 86% rename from src/main/java/com/willfp/eco/util/recipes/lookup/ItemLookup.java rename to src/main/java/com/willfp/eco/common/recipes/lookup/ItemLookup.java index aae35ba7..4adeb1c6 100644 --- a/src/main/java/com/willfp/eco/util/recipes/lookup/ItemLookup.java +++ b/src/main/java/com/willfp/eco/common/recipes/lookup/ItemLookup.java @@ -1,6 +1,6 @@ -package com.willfp.eco.util.recipes.lookup; +package com.willfp.eco.common.recipes.lookup; -import com.willfp.eco.util.recipes.parts.RecipePart; +import com.willfp.eco.common.recipes.parts.RecipePart; import org.jetbrains.annotations.NotNull; import java.util.function.Function; diff --git a/src/main/java/com/willfp/eco/common/recipes/lookup/RecipePartUtils.java b/src/main/java/com/willfp/eco/common/recipes/lookup/RecipePartUtils.java new file mode 100644 index 00000000..cdd7feb4 --- /dev/null +++ b/src/main/java/com/willfp/eco/common/recipes/lookup/RecipePartUtils.java @@ -0,0 +1,48 @@ +package com.willfp.eco.common.recipes.lookup; + +import com.willfp.eco.common.recipes.parts.RecipePart; +import com.willfp.eco.util.plugin.AbstractEcoPlugin; +import lombok.experimental.UtilityClass; +import org.bukkit.Bukkit; +import org.bukkit.plugin.ServicePriority; +import org.jetbrains.annotations.NotNull; + +import java.util.function.Function; + +@SuppressWarnings("unchecked") +@UtilityClass +public final class RecipePartUtils { + /** + * Item lookup instance. + */ + private static final ItemLookup itemLookup; + + /** + * Lookup recipe part from string. + * + * @param key The string to test. + * @return The generated recipe part, or null if invalid. + */ + public RecipePart lookup(@NotNull final String key) { + return itemLookup.lookup(key); + } + + /** + * Register a new lookup. + * + * @param key The key of the lookup. + * @param lookup The lookup to register, where the output is the recipe part generated. + */ + public void registerLookup(@NotNull final String key, + @NotNull final Function lookup) { + itemLookup.registerLookup(key, lookup); + } + + static { + if (!Bukkit.getServicesManager().isProvidedFor(ItemLookup.class)) { + Bukkit.getServicesManager().register(ItemLookup.class, new EcoItemLookup(), AbstractEcoPlugin.getInstance(), ServicePriority.Normal); + } + + itemLookup = Bukkit.getServicesManager().load(ItemLookup.class); + } +} diff --git a/src/main/java/com/willfp/eco/util/recipes/parts/ComplexRecipePart.java b/src/main/java/com/willfp/eco/common/recipes/parts/ComplexRecipePart.java similarity index 95% rename from src/main/java/com/willfp/eco/util/recipes/parts/ComplexRecipePart.java rename to src/main/java/com/willfp/eco/common/recipes/parts/ComplexRecipePart.java index 7df49c91..e49b82bd 100644 --- a/src/main/java/com/willfp/eco/util/recipes/parts/ComplexRecipePart.java +++ b/src/main/java/com/willfp/eco/common/recipes/parts/ComplexRecipePart.java @@ -1,4 +1,4 @@ -package com.willfp.eco.util.recipes.parts; +package com.willfp.eco.common.recipes.parts; import lombok.Getter; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/com/willfp/eco/util/recipes/parts/EmptyRecipePart.java b/src/main/java/com/willfp/eco/common/recipes/parts/EmptyRecipePart.java similarity index 93% rename from src/main/java/com/willfp/eco/util/recipes/parts/EmptyRecipePart.java rename to src/main/java/com/willfp/eco/common/recipes/parts/EmptyRecipePart.java index 3c7a62cb..301a000c 100644 --- a/src/main/java/com/willfp/eco/util/recipes/parts/EmptyRecipePart.java +++ b/src/main/java/com/willfp/eco/common/recipes/parts/EmptyRecipePart.java @@ -1,4 +1,4 @@ -package com.willfp.eco.util.recipes.parts; +package com.willfp.eco.common.recipes.parts; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/com/willfp/eco/util/recipes/parts/RecipePart.java b/src/main/java/com/willfp/eco/common/recipes/parts/RecipePart.java similarity index 91% rename from src/main/java/com/willfp/eco/util/recipes/parts/RecipePart.java rename to src/main/java/com/willfp/eco/common/recipes/parts/RecipePart.java index 3d254c20..e08e78ad 100644 --- a/src/main/java/com/willfp/eco/util/recipes/parts/RecipePart.java +++ b/src/main/java/com/willfp/eco/common/recipes/parts/RecipePart.java @@ -1,4 +1,4 @@ -package com.willfp.eco.util.recipes.parts; +package com.willfp.eco.common.recipes.parts; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/willfp/eco/util/recipes/parts/SimpleRecipePart.java b/src/main/java/com/willfp/eco/common/recipes/parts/SimpleRecipePart.java similarity index 95% rename from src/main/java/com/willfp/eco/util/recipes/parts/SimpleRecipePart.java rename to src/main/java/com/willfp/eco/common/recipes/parts/SimpleRecipePart.java index 7734a49d..31f4e727 100644 --- a/src/main/java/com/willfp/eco/util/recipes/parts/SimpleRecipePart.java +++ b/src/main/java/com/willfp/eco/common/recipes/parts/SimpleRecipePart.java @@ -1,4 +1,4 @@ -package com.willfp.eco.util.recipes.parts; +package com.willfp.eco.common.recipes.parts; import lombok.Getter; import org.bukkit.Material; diff --git a/src/main/java/com/willfp/eco/util/plugin/AbstractEcoPlugin.java b/src/main/java/com/willfp/eco/util/plugin/AbstractEcoPlugin.java index afaaea4c..2806bdb2 100644 --- a/src/main/java/com/willfp/eco/util/plugin/AbstractEcoPlugin.java +++ b/src/main/java/com/willfp/eco/util/plugin/AbstractEcoPlugin.java @@ -39,8 +39,8 @@ import com.willfp.eco.util.integrations.placeholder.PlaceholderManager; import com.willfp.eco.util.integrations.placeholder.plugins.PlaceholderIntegrationPAPI; import com.willfp.eco.util.optional.Prerequisite; import com.willfp.eco.util.protocollib.AbstractPacketAdapter; -import com.willfp.eco.util.recipes.RecipeListener; -import com.willfp.eco.util.recipes.RecipeManager; +import com.willfp.eco.util.recipe.RecipeListener; +import com.willfp.eco.util.recipe.RecipeManager; import com.willfp.eco.util.updater.UpdateChecker; import lombok.Getter; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; diff --git a/src/main/java/com/willfp/eco/util/recipes/EcoShapedRecipe.java b/src/main/java/com/willfp/eco/util/recipe/EcoShapedRecipe.java similarity index 94% rename from src/main/java/com/willfp/eco/util/recipes/EcoShapedRecipe.java rename to src/main/java/com/willfp/eco/util/recipe/EcoShapedRecipe.java index 95a8056c..70964ce1 100644 --- a/src/main/java/com/willfp/eco/util/recipes/EcoShapedRecipe.java +++ b/src/main/java/com/willfp/eco/util/recipe/EcoShapedRecipe.java @@ -1,12 +1,11 @@ -package com.willfp.eco.util.recipes; +package com.willfp.eco.util.recipe; +import com.willfp.eco.common.recipes.parts.EmptyRecipePart; +import com.willfp.eco.common.recipes.parts.RecipePart; import com.willfp.eco.util.interfaces.Registerable; import com.willfp.eco.util.internal.PluginDependent; import com.willfp.eco.util.plugin.AbstractEcoPlugin; -import com.willfp.eco.util.recipes.parts.EmptyRecipePart; -import com.willfp.eco.util.recipes.parts.RecipePart; import lombok.Getter; -import org.apache.commons.lang.Validate; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -184,9 +183,6 @@ public final class EcoShapedRecipe extends PluginDependent implements Registerab * @return The built recipe. */ public EcoShapedRecipe build() { - Validate.notNull(output, "Output cannot be null!"); - Validate.isTrue(output.getType() != Material.AIR, "Output cannot be blank!"); - for (int i = 0; i < 9; i++) { if (recipeParts[i] == null) { recipeParts[i] = new EmptyRecipePart(); diff --git a/src/main/java/com/willfp/eco/util/recipes/RecipeListener.java b/src/main/java/com/willfp/eco/util/recipe/RecipeListener.java similarity index 97% rename from src/main/java/com/willfp/eco/util/recipes/RecipeListener.java rename to src/main/java/com/willfp/eco/util/recipe/RecipeListener.java index 2301fd75..7b4c54fe 100644 --- a/src/main/java/com/willfp/eco/util/recipes/RecipeListener.java +++ b/src/main/java/com/willfp/eco/util/recipe/RecipeListener.java @@ -1,8 +1,7 @@ -package com.willfp.eco.util.recipes; +package com.willfp.eco.util.recipe; import com.willfp.eco.util.internal.PluginDependent; import com.willfp.eco.util.plugin.AbstractEcoPlugin; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/com/willfp/eco/util/recipes/RecipeManager.java b/src/main/java/com/willfp/eco/util/recipe/RecipeManager.java similarity index 98% rename from src/main/java/com/willfp/eco/util/recipes/RecipeManager.java rename to src/main/java/com/willfp/eco/util/recipe/RecipeManager.java index b60a3863..db60f9ac 100644 --- a/src/main/java/com/willfp/eco/util/recipes/RecipeManager.java +++ b/src/main/java/com/willfp/eco/util/recipe/RecipeManager.java @@ -1,4 +1,4 @@ -package com.willfp.eco.util.recipes; +package com.willfp.eco.util.recipe; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; diff --git a/src/main/java/com/willfp/eco/util/recipes/lookup/RecipePartUtils.java b/src/main/java/com/willfp/eco/util/recipes/lookup/RecipePartUtils.java deleted file mode 100644 index 9f638f36..00000000 --- a/src/main/java/com/willfp/eco/util/recipes/lookup/RecipePartUtils.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.willfp.eco.util.recipes.lookup; - -import com.willfp.eco.util.plugin.AbstractEcoPlugin; -import com.willfp.eco.util.recipes.parts.ComplexRecipePart; -import com.willfp.eco.util.recipes.parts.EmptyRecipePart; -import com.willfp.eco.util.recipes.parts.RecipePart; -import com.willfp.eco.util.recipes.parts.SimpleRecipePart; -import lombok.experimental.UtilityClass; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.ServicePriority; -import org.bukkit.scoreboard.ScoreboardManager; -import org.jetbrains.annotations.NotNull; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.function.Function; -import java.util.function.Predicate; - -@SuppressWarnings("unchecked") -@UtilityClass -public final class RecipePartUtils { - /** - * Instance of registered item lookup utils. - */ - private final Object instance; - - /** - * The class of the utils. - */ - private final Class clazz; - - /** - * The test service registered to bukkit. - */ - private final Method lookupMethod; - - /** - * The register service registered to bukkit. - */ - private final Method registerMethod; - - /** - * Lookup recipe part from string. - * - * @param key The string to test. - * @return The generated recipe part, or null if invalid. - */ - public RecipePart lookup(@NotNull final String key) { - Object recipePartUncast; - - try { - recipePartUncast = lookupMethod.invoke(instance, key); - } catch (IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); - return new EmptyRecipePart(); - } - - if (recipePartUncast.getClass().toString().contains("EmptyRecipePart")) { - return new EmptyRecipePart(); - } - - try { - if (recipePartUncast.getClass().toString().contains("SimpleRecipePart")) { - Material material = (Material) recipePartUncast.getClass().getDeclaredMethod("getMaterial").invoke(recipePartUncast); - return new SimpleRecipePart(material); - } - - if (recipePartUncast.getClass().toString().contains("ComplexRecipePart")) { - Predicate predicate = (Predicate) recipePartUncast.getClass().getDeclaredMethod("getPredicate").invoke(recipePartUncast); - ItemStack displayed = (ItemStack) recipePartUncast.getClass().getDeclaredMethod("getDisplayed").invoke(recipePartUncast); - - return new ComplexRecipePart(predicate, displayed); - } - } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - e.printStackTrace(); - } - - return new EmptyRecipePart(); - } - - /** - * Register a new lookup. - * - * @param key The key of the lookup. - * @param lookup The lookup to register, where the output is the recipe part generated. - */ - public void registerLookup(@NotNull final String key, - @NotNull final Function lookup) { - try { - registerMethod.invoke(instance, key, lookup); - } catch (IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); - } - } - - static { - Method lookupMethod1; - Method registerMethod1; - if (Bukkit.getServicesManager().getKnownServices().stream().noneMatch(clazz -> clazz.getName().contains("ItemLookup"))) { - Bukkit.getServicesManager().register(ItemLookup.class, new EcoItemLookup(), AbstractEcoPlugin.getInstance(), ServicePriority.Normal); - } - - instance = Bukkit.getServicesManager().load(Bukkit.getServicesManager().getKnownServices().stream().filter(clazz -> clazz.getName().contains("ItemLookup")).findFirst().get()); - clazz = instance.getClass(); - - try { - lookupMethod1 = clazz.getDeclaredMethod("lookup", String.class); - registerMethod1 = clazz.getDeclaredMethod("registerLookup", String.class, Function.class); - lookupMethod1.setAccessible(true); - registerMethod1.setAccessible(true); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - lookupMethod1 = null; - registerMethod1 = null; - } - - lookupMethod = lookupMethod1; - registerMethod = registerMethod1; - } -}