From 2f95b698dee3368666cefe8890a015eb098dd77b Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 31 Jan 2019 15:32:33 +0800 Subject: Update to v2.2.0.15 & Fix Optifine Fix #16 --- .../java/me/shedaniel/rei/client/RecipeHelper.java | 89 +++++++++++----------- 1 file changed, 45 insertions(+), 44 deletions(-) (limited to 'src/main/java/me/shedaniel/rei/client/RecipeHelper.java') diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java index d5a360ee0..eec9f4bbc 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java @@ -5,7 +5,6 @@ import com.google.common.collect.Maps; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.RoughlyEnoughItemsPlugin; import me.shedaniel.rei.api.*; -import me.shedaniel.rei.listeners.RecipeSync; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.RecipeManager; import net.minecraft.util.ResourceLocation; @@ -15,22 +14,19 @@ import java.util.*; import java.util.List; import java.util.stream.Collectors; -public class RecipeHelper implements RecipeSync { - - private static Map> recipeCategoryListMap; - private static List categories; - private static RecipeManager recipeManager; - private static Map speedCraftAreaSupplierMap; - private static Map> speedCraftFunctionalMap; - - public RecipeHelper() { - this.recipeCategoryListMap = Maps.newHashMap(); - this.categories = Lists.newArrayList(); - this.speedCraftAreaSupplierMap = Maps.newHashMap(); - this.speedCraftFunctionalMap = Maps.newHashMap(); +public class RecipeHelper { + + private final Map> recipeCategoryListMap = Maps.newHashMap(); + private final List categories = Lists.newArrayList(); + private RecipeManager recipeManager; + private final Map speedCraftAreaSupplierMap = Maps.newHashMap(); + private final Map> speedCraftFunctionalMap = Maps.newHashMap(); + + public static RecipeHelper getInstance() { + return RoughlyEnoughItemsCore.getRecipeHelper(); } - public static List findCraftableByItems(List inventoryItems) { + public List findCraftableByItems(List inventoryItems) { List craftables = new ArrayList<>(); for(List value : recipeCategoryListMap.values()) for(IRecipeDisplay recipeDisplay : value) { @@ -59,47 +55,53 @@ public class RecipeHelper implements RecipeSync { return craftables.stream().distinct().collect(Collectors.toList()); } - public static void registerCategory(IRecipeCategory category) { + public void registerCategory(IRecipeCategory category) { categories.add(category); - recipeCategoryListMap.put(category.getResourceLocation(), Lists.newArrayList()); + recipeCategoryListMap.put(category.getResourceLocation(), Lists.newLinkedList()); } - public static void registerRecipe(ResourceLocation categoryIdentifier, IRecipeDisplay display) { + public void registerRecipe(ResourceLocation categoryIdentifier, IRecipeDisplay display) { if (!recipeCategoryListMap.containsKey(categoryIdentifier)) return; recipeCategoryListMap.get(categoryIdentifier).add(display); } - public static Map> getRecipesFor(ItemStack stack) { + public Map> getRecipesFor(ItemStack stack) { Map> categoriesMap = new HashMap<>(); - categories.forEach(f -> categoriesMap.put(f.getResourceLocation(), new LinkedList<>())); - for(List value : recipeCategoryListMap.values()) - for(IRecipeDisplay recipeDisplay : value) + categories.forEach(f -> categoriesMap.put(f.getResourceLocation(), Lists.newArrayList())); + for(Map.Entry> entry : recipeCategoryListMap.entrySet()) { + IRecipeCategory category = getCategory(entry.getKey()); + for(IRecipeDisplay recipeDisplay : entry.getValue()) for(ItemStack outputStack : (List) recipeDisplay.getOutput()) - if (ItemStack.areItemsEqual(stack, outputStack)) + if (category.checkTags() ? ItemStack.areItemStacksEqual(stack, outputStack) : ItemStack.areItemsEqual(stack, outputStack)) categoriesMap.get(recipeDisplay.getRecipeCategory()).add(recipeDisplay); - categoriesMap.keySet().removeIf(f -> categoriesMap.get(f).isEmpty()); - Map> recipeCategoryListMap = Maps.newHashMap(); + } + Map> recipeCategoryListMap = Maps.newLinkedHashMap(); categories.forEach(category -> { - if (categoriesMap.containsKey(category.getResourceLocation())) + if (categoriesMap.containsKey(category.getResourceLocation()) && !categoriesMap.get(category.getResourceLocation()).isEmpty()) recipeCategoryListMap.put(category, categoriesMap.get(category.getResourceLocation())); }); return recipeCategoryListMap; } - public static RecipeManager getRecipeManager() { + private IRecipeCategory getCategory(ResourceLocation resourceLocation) { + return categories.stream().filter(category -> category.getResourceLocation().equals(resourceLocation)).findFirst().orElse(null); + } + + public RecipeManager getRecipeManager() { return recipeManager; } - public static Map> getUsagesFor(ItemStack stack) { + public Map> getUsagesFor(ItemStack stack) { Map> categoriesMap = new HashMap<>(); - categories.forEach(f -> categoriesMap.put(f.getResourceLocation(), new LinkedList<>())); - for(List value : recipeCategoryListMap.values()) - for(IRecipeDisplay recipeDisplay : value) { + categories.forEach(f -> categoriesMap.put(f.getResourceLocation(), Lists.newArrayList())); + for(Map.Entry> entry : recipeCategoryListMap.entrySet()) { + IRecipeCategory category = getCategory(entry.getKey()); + for(IRecipeDisplay recipeDisplay : entry.getValue()) { boolean found = false; for(List input : (List>) recipeDisplay.getInput()) { for(ItemStack itemStack : input) { - if (ItemStack.areItemsEqual(itemStack, stack)) { + if (category.checkTags() ? ItemStack.areItemStacksEqual(itemStack, stack) : ItemStack.areItemsEqual(itemStack, stack)) { categoriesMap.get(recipeDisplay.getRecipeCategory()).add(recipeDisplay); found = true; break; @@ -109,20 +111,20 @@ public class RecipeHelper implements RecipeSync { break; } } - categoriesMap.keySet().removeIf(f -> categoriesMap.get(f).isEmpty()); - Map> recipeCategoryListMap = Maps.newHashMap(); + } + Map> recipeCategoryListMap = Maps.newLinkedHashMap(); categories.forEach(category -> { - if (categoriesMap.containsKey(category.getResourceLocation())) + if (categoriesMap.containsKey(category.getResourceLocation()) && !categoriesMap.get(category.getResourceLocation()).isEmpty()) recipeCategoryListMap.put(category, categoriesMap.get(category.getResourceLocation())); }); return recipeCategoryListMap; } - public static List getCategories() { - return categories; + public List getCategories() { + return new LinkedList<>(categories); } - public static SpeedCraftAreaSupplier getSpeedCraftButtonArea(IRecipeCategory category) { + public SpeedCraftAreaSupplier getSpeedCraftButtonArea(IRecipeCategory category) { if (!speedCraftAreaSupplierMap.containsKey(category.getResourceLocation())) return bounds -> { return new Rectangle((int) bounds.getMaxX() - 16, (int) bounds.getMaxY() - 16, 10, 10); @@ -130,23 +132,22 @@ public class RecipeHelper implements RecipeSync { return speedCraftAreaSupplierMap.get(category.getResourceLocation()); } - public static void registerSpeedCraftButtonArea(ResourceLocation category, SpeedCraftAreaSupplier rectangle) { + public void registerSpeedCraftButtonArea(ResourceLocation category, SpeedCraftAreaSupplier rectangle) { speedCraftAreaSupplierMap.put(category, rectangle); } - public static List getSpeedCraftFunctional(IRecipeCategory category) { + public List getSpeedCraftFunctional(IRecipeCategory category) { if (speedCraftFunctionalMap.get(category.getResourceLocation()) == null) return Lists.newArrayList(); return speedCraftFunctionalMap.get(category.getResourceLocation()); } - public static void registerSpeedCraftFunctional(ResourceLocation category, SpeedCraftFunctional functional) { + public void registerSpeedCraftFunctional(ResourceLocation category, SpeedCraftFunctional functional) { List list = speedCraftFunctionalMap.containsKey(category) ? new LinkedList<>(speedCraftFunctionalMap.get(category)) : Lists.newLinkedList(); list.add(functional); speedCraftFunctionalMap.put(category, list); } - @Override public void recipesLoaded(RecipeManager recipeManager) { this.recipeManager = recipeManager; this.recipeCategoryListMap.clear(); @@ -158,8 +159,8 @@ public class RecipeHelper implements RecipeSync { return second.getPriority() - first.getPriority(); }); RoughlyEnoughItemsCore.LOGGER.info("Loading %d REI plugins: %s", plugins.size(), String.join(", ", plugins.stream().map(plugin -> { - ResourceLocation ResourceLocation = RoughlyEnoughItemsPlugin.getPluginResourceLocation(plugin); - return ResourceLocation == null ? "NULL" : ResourceLocation.toString(); + String resourceLocation = RoughlyEnoughItemsPlugin.getPluginResourceLocation(plugin); + return resourceLocation == null ? "NULL" : resourceLocation; }).collect(Collectors.toList()))); Collections.reverse(plugins); plugins.forEach(plugin -> { -- cgit