From 9fd25621c2b9993666ce8e00bacbe52a18136b95 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 3 Jun 2019 17:33:19 +0800 Subject: Remove Perfer Visible Recipes --- .../me/shedaniel/rei/client/RecipeHelperImpl.java | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java') diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java index f7891670f..ec922d4c8 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java @@ -106,7 +106,7 @@ public class RecipeHelperImpl implements RecipeHelper { Map> recipeCategoryListMap = Maps.newLinkedHashMap(); categories.forEach(category -> { if (categoriesMap.containsKey(category.getIdentifier()) && !categoriesMap.get(category.getIdentifier()).isEmpty()) - recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> isDisplayVisible(display, true)).collect(Collectors.toList())); + recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> isDisplayVisible(display)).collect(Collectors.toList())); }); for(RecipeCategory category : Lists.newArrayList(recipeCategoryListMap.keySet())) if (recipeCategoryListMap.get(category).isEmpty()) @@ -149,7 +149,7 @@ public class RecipeHelperImpl implements RecipeHelper { Map> recipeCategoryListMap = Maps.newLinkedHashMap(); categories.forEach(category -> { if (categoriesMap.containsKey(category.getIdentifier()) && !categoriesMap.get(category.getIdentifier()).isEmpty()) - recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> isDisplayVisible(display, true)).collect(Collectors.toList())); + recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> isDisplayVisible(display)).collect(Collectors.toList())); }); for(RecipeCategory category : Lists.newArrayList(recipeCategoryListMap.keySet())) if (recipeCategoryListMap.get(category).isEmpty()) @@ -265,7 +265,7 @@ public class RecipeHelperImpl implements RecipeHelper { Map> map = Maps.newLinkedHashMap(); categories.forEach(recipeCategory -> { if (recipeCategoryListMap.containsKey(recipeCategory.getIdentifier())) { - List list = recipeCategoryListMap.get(recipeCategory.getIdentifier()).stream().filter(display -> isDisplayVisible(display, true)).collect(Collectors.toList()); + List list = recipeCategoryListMap.get(recipeCategory.getIdentifier()).stream().filter(display -> isDisplayVisible(display)).collect(Collectors.toList()); if (!list.isEmpty()) map.put(recipeCategory, list); } @@ -288,17 +288,21 @@ public class RecipeHelperImpl implements RecipeHelper { return Collections.unmodifiableList(displayVisibilityHandlers); } + @SuppressWarnings("deprecation") @Override public boolean isDisplayVisible(RecipeDisplay display, boolean respectConfig) { + return isDisplayVisible(display); + } + + @SuppressWarnings("deprecation") + @Override + public boolean isDisplayVisible(RecipeDisplay display) { RecipeCategory category = getCategory(display.getRecipeCategory()); List list = getDisplayVisibilityHandlers().stream().sorted(VISIBILITY_HANDLER_COMPARATOR).collect(Collectors.toList()); for(DisplayVisibilityHandler displayVisibilityHandler : list) { DisplayVisibility visibility = displayVisibilityHandler.handleDisplay(category, display); - if (visibility != DisplayVisibility.PASS) { - if (visibility == DisplayVisibility.CONFIG_OPTIONAL) - return RoughlyEnoughItemsCore.getConfigManager().getConfig().preferVisibleRecipes || !respectConfig; - return visibility == DisplayVisibility.ALWAYS_VISIBLE; - } + if (visibility != DisplayVisibility.PASS) + return visibility == DisplayVisibility.ALWAYS_VISIBLE || visibility == DisplayVisibility.CONFIG_OPTIONAL; } return true; } -- cgit From a1480e28813b4fc9f6d4f8ce252dd5a355c00855 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 4 Jun 2019 13:14:53 +0800 Subject: Should not crash now --- src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java') diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java index ec922d4c8..9c4b21ed5 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java @@ -13,6 +13,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeManager; import net.minecraft.util.Identifier; +import org.apache.logging.log4j.Level; import java.awt.*; import java.util.List; @@ -300,9 +301,13 @@ public class RecipeHelperImpl implements RecipeHelper { RecipeCategory category = getCategory(display.getRecipeCategory()); List list = getDisplayVisibilityHandlers().stream().sorted(VISIBILITY_HANDLER_COMPARATOR).collect(Collectors.toList()); for(DisplayVisibilityHandler displayVisibilityHandler : list) { - DisplayVisibility visibility = displayVisibilityHandler.handleDisplay(category, display); - if (visibility != DisplayVisibility.PASS) - return visibility == DisplayVisibility.ALWAYS_VISIBLE || visibility == DisplayVisibility.CONFIG_OPTIONAL; + try { + DisplayVisibility visibility = displayVisibilityHandler.handleDisplay(category, display); + if (visibility != DisplayVisibility.PASS) + return visibility == DisplayVisibility.ALWAYS_VISIBLE || visibility == DisplayVisibility.CONFIG_OPTIONAL; + } catch (Throwable throwable) { + RoughlyEnoughItemsCore.LOGGER.error("[REI] Failed to check if the recipe is visible!", throwable); + } } return true; } -- cgit From fd99a42678f27d74483cfa2ae069de8bea38f893 Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 5 Jun 2019 20:14:36 +0800 Subject: recipe id cache --- .../me/shedaniel/rei/client/RecipeHelperImpl.java | 47 ++++++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) (limited to 'src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java') diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java index 9c4b21ed5..5255f2d0d 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java @@ -13,12 +13,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeManager; import net.minecraft.util.Identifier; -import org.apache.logging.log4j.Level; import java.awt.*; import java.util.List; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Function; import java.util.stream.Collectors; public class RecipeHelperImpl implements RecipeHelper { @@ -36,6 +36,7 @@ public class RecipeHelperImpl implements RecipeHelper { VISIBILITY_HANDLER_COMPARATOR = comparator.reversed(); } + public final List recipeFunctions = Lists.newArrayList(); private final AtomicInteger recipeCount = new AtomicInteger(); private final Map> recipeCategoryListMap = Maps.newHashMap(); private final Map categoryDisplaySettingsMap = Maps.newHashMap(); @@ -91,6 +92,13 @@ public class RecipeHelperImpl implements RecipeHelper { recipeCategoryListMap.get(categoryIdentifier).add(display); } + private void registerDisplay(Identifier categoryIdentifier, RecipeDisplay display, int index) { + if (!recipeCategoryListMap.containsKey(categoryIdentifier)) + return; + recipeCount.incrementAndGet(); + recipeCategoryListMap.get(categoryIdentifier).add(index, display); + } + @Override public Map> getRecipesFor(ItemStack stack) { Map> categoriesMap = new HashMap<>(); @@ -166,13 +174,17 @@ public class RecipeHelperImpl implements RecipeHelper { @Override public Optional getSpeedCraftButtonArea(RecipeCategory category) { if (!speedCraftAreaSupplierMap.containsKey(category.getIdentifier())) - return Optional.empty(); + return Optional.ofNullable(bounds -> new Rectangle((int) bounds.getMaxX() - 16, (int) bounds.getMaxY() - 16, 10, 10)); return Optional.ofNullable(speedCraftAreaSupplierMap.get(category.getIdentifier())); } @Override public void registerSpeedCraftButtonArea(Identifier category, ButtonAreaSupplier rectangle) { - speedCraftAreaSupplierMap.put(category, rectangle); + if (rectangle == null) { + if (speedCraftAreaSupplierMap.containsKey(category)) + speedCraftAreaSupplierMap.remove(category); + } else + speedCraftAreaSupplierMap.put(category, rectangle); } @Override @@ -203,6 +215,7 @@ public class RecipeHelperImpl implements RecipeHelper { this.speedCraftAreaSupplierMap.clear(); this.speedCraftFunctionalMap.clear(); this.categoryDisplaySettingsMap.clear(); + this.recipeFunctions.clear(); this.displayVisibilityHandlers.clear(); this.liveRecipeGenerators.clear(); ((DisplayHelperImpl) RoughlyEnoughItemsCore.getDisplayHelper()).resetCache(); @@ -235,6 +248,17 @@ public class RecipeHelperImpl implements RecipeHelper { RoughlyEnoughItemsCore.LOGGER.error("[REI] " + identifier.toString() + " plugin failed to load!", e); } }); + if (!recipeFunctions.isEmpty()) { + List allSortedRecipes = getAllSortedRecipes(); + Collections.reverse(allSortedRecipes); + recipeFunctions.forEach(recipeFunction -> { + try { + allSortedRecipes.stream().filter(recipe -> recipeFunction.recipeClass.isAssignableFrom(recipe.getClass())).forEach(t -> registerDisplay(recipeFunction.category, (RecipeDisplay) recipeFunction.mappingFunction.apply(t), 0)); + } catch (Exception e) { + RoughlyEnoughItemsCore.LOGGER.error("[REI] Failed to add recipes!", e); + } + }); + } if (getDisplayVisibilityHandlers().isEmpty()) registerRecipeVisibilityHandler(new DisplayVisibilityHandler() { @Override @@ -312,6 +336,11 @@ public class RecipeHelperImpl implements RecipeHelper { return true; } + @Override + public > void registerRecipes(Identifier category, Class recipeClass, Function mappingFunction) { + recipeFunctions.add(new RecipeFunction(category, recipeClass, mappingFunction)); + } + @Override public Optional getCachedCategorySettings(Identifier category) { return categoryDisplaySettingsMap.entrySet().stream().filter(entry -> entry.getKey().equals(category)).map(Map.Entry::getValue).findAny(); @@ -322,4 +351,16 @@ public class RecipeHelperImpl implements RecipeHelper { liveRecipeGenerators.add(liveRecipeGenerator); } + private class RecipeFunction { + Identifier category; + Class recipeClass; + Function mappingFunction; + + public RecipeFunction(Identifier category, Class recipeClass, Function mappingFunction) { + this.category = category; + this.recipeClass = recipeClass; + this.mappingFunction = mappingFunction; + } + } + } -- cgit From 94e6085d2d49e7fe38871c9548774c4e50a2f422 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 6 Jun 2019 16:09:48 +0800 Subject: this is still not working --- src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java') diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java index 5255f2d0d..45f15d18b 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java @@ -43,6 +43,7 @@ public class RecipeHelperImpl implements RecipeHelper { private final List categories = Lists.newArrayList(); private final Map speedCraftAreaSupplierMap = Maps.newHashMap(); private final Map> speedCraftFunctionalMap = Maps.newHashMap(); + private final Map> categoryWorkingStations = Maps.newHashMap(); private final List displayVisibilityHandlers = Lists.newArrayList(); private final List liveRecipeGenerators = Lists.newArrayList(); private RecipeManager recipeManager; @@ -82,6 +83,17 @@ public class RecipeHelperImpl implements RecipeHelper { categories.add(category); categoryDisplaySettingsMap.put(category.getIdentifier(), category.getDisplaySettings()); recipeCategoryListMap.put(category.getIdentifier(), Lists.newLinkedList()); + categoryWorkingStations.put(category.getIdentifier(), Lists.newLinkedList()); + } + + @Override + public void registerWorkingStations(Identifier category, ItemStack... workingStations) { + categoryWorkingStations.get(category).addAll(Arrays.asList(workingStations)); + } + + @Override + public List getWorkingStations(Identifier category) { + return categoryWorkingStations.get(category); } @Override @@ -213,6 +225,7 @@ public class RecipeHelperImpl implements RecipeHelper { this.recipeCategoryListMap.clear(); this.categories.clear(); this.speedCraftAreaSupplierMap.clear(); + this.categoryWorkingStations.clear(); this.speedCraftFunctionalMap.clear(); this.categoryDisplaySettingsMap.clear(); this.recipeFunctions.clear(); -- cgit From 98c2c0f1af8b264cfce5c005f4694318cce001b2 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 6 Jun 2019 18:36:51 +0800 Subject: alterative solution to the working stations --- src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java') diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java index 45f15d18b..00155ba65 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java @@ -43,7 +43,7 @@ public class RecipeHelperImpl implements RecipeHelper { private final List categories = Lists.newArrayList(); private final Map speedCraftAreaSupplierMap = Maps.newHashMap(); private final Map> speedCraftFunctionalMap = Maps.newHashMap(); - private final Map> categoryWorkingStations = Maps.newHashMap(); + private final Map>> categoryWorkingStations = Maps.newHashMap(); private final List displayVisibilityHandlers = Lists.newArrayList(); private final List liveRecipeGenerators = Lists.newArrayList(); private RecipeManager recipeManager; @@ -87,12 +87,17 @@ public class RecipeHelperImpl implements RecipeHelper { } @Override - public void registerWorkingStations(Identifier category, ItemStack... workingStations) { + public void registerWorkingStations(Identifier category, List... workingStations) { categoryWorkingStations.get(category).addAll(Arrays.asList(workingStations)); } @Override - public List getWorkingStations(Identifier category) { + public void registerWorkingStations(Identifier category, ItemStack... workingStations) { + categoryWorkingStations.get(category).addAll(Arrays.asList(workingStations).stream().map(Collections::singletonList).collect(Collectors.toList())); + } + + @Override + public List> getWorkingStations(Identifier category) { return categoryWorkingStations.get(category); } -- cgit From 23698d1218bb325596ead0736a7a0636c7796ad7 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 6 Jun 2019 20:13:29 +0800 Subject: better api for whatever reason --- .../java/me/shedaniel/rei/client/RecipeHelperImpl.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java') diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java index 00155ba65..7f4a0ee80 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java @@ -271,7 +271,7 @@ public class RecipeHelperImpl implements RecipeHelper { Collections.reverse(allSortedRecipes); recipeFunctions.forEach(recipeFunction -> { try { - allSortedRecipes.stream().filter(recipe -> recipeFunction.recipeClass.isAssignableFrom(recipe.getClass())).forEach(t -> registerDisplay(recipeFunction.category, (RecipeDisplay) recipeFunction.mappingFunction.apply(t), 0)); + allSortedRecipes.stream().filter(recipe -> recipeFunction.recipeFilter.apply(recipe)).forEach(t -> registerDisplay(recipeFunction.category, (RecipeDisplay) recipeFunction.mappingFunction.apply(t), 0)); } catch (Exception e) { RoughlyEnoughItemsCore.LOGGER.error("[REI] Failed to add recipes!", e); } @@ -356,7 +356,12 @@ public class RecipeHelperImpl implements RecipeHelper { @Override public > void registerRecipes(Identifier category, Class recipeClass, Function mappingFunction) { - recipeFunctions.add(new RecipeFunction(category, recipeClass, mappingFunction)); + recipeFunctions.add(new RecipeFunction(category, recipe -> recipeClass.isAssignableFrom(recipe.getClass()), mappingFunction)); + } + + @Override + public > void registerRecipes(Identifier category, Function recipeFilter, Function mappingFunction) { + recipeFunctions.add(new RecipeFunction(category, recipeFilter, mappingFunction)); } @Override @@ -371,12 +376,12 @@ public class RecipeHelperImpl implements RecipeHelper { private class RecipeFunction { Identifier category; - Class recipeClass; + Function recipeFilter; Function mappingFunction; - public RecipeFunction(Identifier category, Class recipeClass, Function mappingFunction) { + public RecipeFunction(Identifier category, Function recipeFilter, Function mappingFunction) { this.category = category; - this.recipeClass = recipeClass; + this.recipeFilter = recipeFilter; this.mappingFunction = mappingFunction; } } -- cgit