From 0d8c3fa7d1422067ec3c4a1b2d624db9afb54ab4 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 6 Jan 2020 15:01:10 +0800 Subject: 3.3.4 --- .../rei/gui/entries/SimpleRecipeEntry.java | 11 ++-- .../me/shedaniel/rei/impl/ClientHelperImpl.java | 11 ++-- .../me/shedaniel/rei/impl/RecipeHelperImpl.java | 59 ++++++++-------------- .../me/shedaniel/rei/utils/CollectionUtils.java | 30 +++++++++-- 4 files changed, 56 insertions(+), 55 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/shedaniel/rei/gui/entries/SimpleRecipeEntry.java b/src/main/java/me/shedaniel/rei/gui/entries/SimpleRecipeEntry.java index 0906e5a2d..c9fe5c05d 100644 --- a/src/main/java/me/shedaniel/rei/gui/entries/SimpleRecipeEntry.java +++ b/src/main/java/me/shedaniel/rei/gui/entries/SimpleRecipeEntry.java @@ -19,7 +19,6 @@ import net.minecraft.util.math.MathHelper; import javax.annotation.Nullable; import java.util.Comparator; import java.util.List; -import java.util.Optional; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -35,9 +34,9 @@ public class SimpleRecipeEntry extends RecipeEntry { List, AtomicInteger>> newList = Lists.newArrayList(); List, Integer>> a = CollectionUtils.map(input, stacks -> new Pair<>(stacks, stacks.stream().map(EntryStack::getAmount).max(Integer::compareTo).orElse(1))); for (Pair, Integer> pair : a) { - Optional, AtomicInteger>> any = newList.stream().filter(pairr -> equalsList(pair.getLeft(), pairr.getLeft())).findAny(); - if (any.isPresent()) { - any.get().getRight().addAndGet(pair.getRight()); + Pair, AtomicInteger> any = CollectionUtils.findFirstOrNull(newList, pairr -> equalsList(pair.getLeft(), pairr.getLeft())); + if (any != null) { + any.getRight().addAndGet(pair.getRight()); } else newList.add(new Pair<>(pair.getLeft(), new AtomicInteger(pair.getRight()))); } @@ -48,9 +47,7 @@ public class SimpleRecipeEntry extends RecipeEntry { s.setAmount(pair.getRight().get()); return s; }).collect(Collectors.toList())); - this.inputWidgets = b.stream().filter(stacks -> !stacks.isEmpty()).map(stacks -> { - return EntryWidget.create(0, 0).entries(stacks).noBackground().noHighlight().noTooltips(); - }).collect(Collectors.toList()); + this.inputWidgets = b.stream().filter(stacks -> !stacks.isEmpty()).map(stacks -> EntryWidget.create(0, 0).entries(stacks).noBackground().noHighlight().noTooltips()).collect(Collectors.toList()); this.outputWidget = EntryWidget.create(0, 0).entries(CollectionUtils.filter(output, stack -> !stack.isEmpty())).noBackground().noHighlight().noTooltips(); } diff --git a/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java b/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java index bb71355b0..79a34a19f 100644 --- a/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java @@ -18,6 +18,7 @@ import me.shedaniel.rei.gui.PreRecipeViewingScreen; import me.shedaniel.rei.gui.RecipeViewingScreen; import me.shedaniel.rei.gui.VillagerRecipeViewingScreen; import me.shedaniel.rei.gui.config.RecipeScreenType; +import me.shedaniel.rei.utils.CollectionUtils; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; import net.fabricmc.fabric.impl.client.keybinding.KeyBindingRegistryImpl; @@ -171,10 +172,9 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer { @Override public boolean executeViewAllRecipesFromCategory(Identifier category) { Map, List> map = Maps.newLinkedHashMap(); - Optional> any = RecipeHelper.getInstance().getAllCategories().stream().filter(c -> c.getIdentifier().equals(category)).findAny(); - if (!any.isPresent()) + RecipeCategory recipeCategory = CollectionUtils.findFirstOrNull(RecipeHelper.getInstance().getAllCategories(), c -> c.getIdentifier().equals(category)); + if (recipeCategory == null) return false; - RecipeCategory recipeCategory = any.get(); map.put(recipeCategory, RecipeHelper.getInstance().getAllRecipesFromCategory(recipeCategory)); if (map.keySet().size() > 0) openRecipeViewingScreen(map); @@ -185,10 +185,9 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer { public boolean executeViewAllRecipesFromCategories(List categories) { Map, List> map = Maps.newLinkedHashMap(); for (Identifier category : categories) { - Optional> any = RecipeHelper.getInstance().getAllCategories().stream().filter(c -> c.getIdentifier().equals(category)).findAny(); - if (!any.isPresent()) + RecipeCategory recipeCategory = CollectionUtils.findFirstOrNull(RecipeHelper.getInstance().getAllCategories(), c -> c.getIdentifier().equals(category)); + if (recipeCategory == null) continue; - RecipeCategory recipeCategory = any.get(); map.put(recipeCategory, RecipeHelper.getInstance().getAllRecipesFromCategory(recipeCategory)); } if (map.keySet().size() > 0) diff --git a/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java index 1eeae4222..af2d66637 100644 --- a/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java @@ -33,12 +33,8 @@ import java.util.stream.Collectors; public class RecipeHelperImpl implements RecipeHelper { private static final Comparator VISIBILITY_HANDLER_COMPARATOR; - @SuppressWarnings("rawtypes") private static final Comparator RECIPE_COMPARATOR = (o1, o2) -> { - int int_1 = o1.getId().getNamespace().compareTo(o2.getId().getNamespace()); - if (int_1 == 0) - int_1 = o1.getId().getPath().compareTo(o2.getId().getPath()); - return int_1; - }; + @SuppressWarnings("rawtypes") + private static final Comparator RECIPE_COMPARATOR = Comparator.comparing((Recipe o) -> o.getId().getNamespace()).thenComparing(o -> o.getId().getPath()); static { Comparator comparator = Comparator.comparingDouble(DisplayVisibilityHandler::getPriority); @@ -97,14 +93,15 @@ public class RecipeHelperImpl implements RecipeHelper { categoryWorkingStations.put(category.getIdentifier(), Lists.newLinkedList()); } + @SafeVarargs @Override - public void registerWorkingStations(Identifier category, List... workingStations) { + public final void registerWorkingStations(Identifier category, List... workingStations) { categoryWorkingStations.get(category).addAll(Arrays.asList(workingStations)); } @Override public void registerWorkingStations(Identifier category, EntryStack... workingStations) { - categoryWorkingStations.get(category).addAll(Arrays.asList(workingStations).stream().map(Collections::singletonList).collect(Collectors.toList())); + categoryWorkingStations.get(category).addAll(Arrays.stream(workingStations).map(Collections::singletonList).collect(Collectors.toList())); } @Override @@ -144,7 +141,7 @@ public class RecipeHelperImpl implements RecipeHelper { Map, List> 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)).collect(Collectors.toList())); + recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(this::isDisplayVisible).collect(Collectors.toList())); }); for (RecipeCategory category : Lists.newArrayList(recipeCategoryListMap.keySet())) if (recipeCategoryListMap.get(category).isEmpty()) @@ -178,33 +175,21 @@ public class RecipeHelperImpl implements RecipeHelper { categories.forEach(f -> categoriesMap.put(f.getIdentifier(), Sets.newLinkedHashSet())); for (Map.Entry> entry : recipeCategoryListMap.entrySet()) { boolean isWorkstationCategory = isStackWorkStationOfCategory(entry.getKey(), stack); - if (isWorkstationCategory) { - for (RecipeDisplay recipeDisplay : entry.getValue()) { - back: - for (List input : recipeDisplay.getInputEntries()) { - for (EntryStack otherEntry : input) { - if (otherEntry.equals(stack)) { - categoriesMap.get(recipeDisplay.getRecipeCategory()).add(recipeDisplay); - break back; - } + for (RecipeDisplay recipeDisplay : entry.getValue()) { + back: + for (List input : recipeDisplay.getInputEntries()) { + for (EntryStack otherEntry : input) { + if (otherEntry.equals(stack)) { + categoriesMap.get(recipeDisplay.getRecipeCategory()).add(recipeDisplay); + break back; } } } + } + if (isWorkstationCategory) { for (RecipeDisplay recipeDisplay : entry.getValue()) { categoriesMap.get(recipeDisplay.getRecipeCategory()).add(recipeDisplay); } - } else { - for (RecipeDisplay recipeDisplay : entry.getValue()) { - back: - for (List input : recipeDisplay.getInputEntries()) { - for (EntryStack otherEntry : input) { - if (otherEntry.equals(stack)) { - categoriesMap.get(recipeDisplay.getRecipeCategory()).add(recipeDisplay); - break back; - } - } - } - } } } for (LiveRecipeGenerator liveRecipeGenerator : liveRecipeGenerators) { @@ -213,7 +198,7 @@ public class RecipeHelperImpl implements RecipeHelper { Map, List> recipeCategoryListMap = Maps.newLinkedHashMap(); for (RecipeCategory category : categories) { if (categoriesMap.containsKey(category.getIdentifier()) && !categoriesMap.get(category.getIdentifier()).isEmpty()) - recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()).stream().filter(display -> isDisplayVisible(display)).collect(Collectors.toList())); + recipeCategoryListMap.put(category, CollectionUtils.filterSetToList(categoriesMap.get(category.getIdentifier()), this::isDisplayVisible)); } for (RecipeCategory category : Lists.newArrayList(recipeCategoryListMap.keySet())) if (recipeCategoryListMap.get(category).isEmpty()) @@ -241,7 +226,6 @@ public class RecipeHelperImpl implements RecipeHelper { autoCraftAreaSupplierMap.put(category, rectangle); } - @SuppressWarnings("deprecation") public void recipesLoaded(RecipeManager recipeManager) { long startTime = System.currentTimeMillis(); arePluginsLoading = true; @@ -262,11 +246,12 @@ public class RecipeHelperImpl implements RecipeHelper { BaseBoundsHandler baseBoundsHandler = new BaseBoundsHandlerImpl(); DisplayHelper.getInstance().registerBoundsHandler(baseBoundsHandler); ((DisplayHelperImpl) DisplayHelper.getInstance()).setBaseBoundsHandler(baseBoundsHandler); - List plugins = Lists.newLinkedList(RoughlyEnoughItemsCore.getPlugins()); + List plugins = RoughlyEnoughItemsCore.getPlugins(); plugins.sort(Comparator.comparingInt(REIPluginEntry::getPriority).reversed()); RoughlyEnoughItemsCore.LOGGER.info("[REI] Loading %d plugins: %s", plugins.size(), plugins.stream().map(REIPluginEntry::getPluginIdentifier).map(Identifier::toString).collect(Collectors.joining(", "))); Collections.reverse(plugins); ((EntryRegistryImpl) EntryRegistry.getInstance()).reset(); + @SuppressWarnings("OptionalGetWithoutIsPresent") Version reiVersion = FabricLoader.getInstance().getModContainer("roughlyenoughitems").get().getMetadata().getVersion(); if (!(reiVersion instanceof SemanticVersion)) RoughlyEnoughItemsCore.LOGGER.warn("[REI] Roughly Enough Items is not using semantic versioning, will be ignoring plugins' minimum versions!"); @@ -347,7 +332,7 @@ public class RecipeHelperImpl implements RecipeHelper { ScreenHelper.getOptionalOverlay().ifPresent(overlay -> overlay.shouldReInit = true); long usedTime = System.currentTimeMillis() - startTime; - RoughlyEnoughItemsCore.LOGGER.info("[REI] Registered %d stack entries, %d recipes displays, %d exclusion zones suppliers, %d bounds handler, %d visibility handlers and %d categories (%s) in %d ms.", EntryRegistry.getInstance().getStacksList().size(), recipeCount[0], DisplayHelper.getInstance().getBaseBoundsHandler().supplierSize(), DisplayHelper.getInstance().getAllBoundsHandlers().size(), getDisplayVisibilityHandlers().size(), categories.size(), String.join(", ", categories.stream().map(RecipeCategory::getCategoryName).collect(Collectors.toList())), usedTime); + RoughlyEnoughItemsCore.LOGGER.info("[REI] Registered %d stack entries, %d recipes displays, %d exclusion zones suppliers, %d bounds handler, %d visibility handlers and %d categories (%s) in %d ms.", EntryRegistry.getInstance().getStacksList().size(), recipeCount[0], DisplayHelper.getInstance().getBaseBoundsHandler().supplierSize(), DisplayHelper.getInstance().getAllBoundsHandlers().size(), getDisplayVisibilityHandlers().size(), categories.size(), categories.stream().map(RecipeCategory::getCategoryName).collect(Collectors.joining(", ")), usedTime); } @Override @@ -405,13 +390,11 @@ 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()); @@ -460,7 +443,7 @@ public class RecipeHelperImpl implements RecipeHelper { return screenClickAreas; } - private class ScreenClickAreaImpl implements ScreenClickArea { + private static class ScreenClickAreaImpl implements ScreenClickArea { Class> screenClass; Rectangle rectangle; Identifier[] categories; @@ -485,7 +468,7 @@ public class RecipeHelperImpl implements RecipeHelper { } @SuppressWarnings("rawtypes") - private class RecipeFunction { + private static class RecipeFunction { Identifier category; Predicate recipeFilter; Function mappingFunction; diff --git a/src/main/java/me/shedaniel/rei/utils/CollectionUtils.java b/src/main/java/me/shedaniel/rei/utils/CollectionUtils.java index b23b802c7..296c9c747 100644 --- a/src/main/java/me/shedaniel/rei/utils/CollectionUtils.java +++ b/src/main/java/me/shedaniel/rei/utils/CollectionUtils.java @@ -5,6 +5,8 @@ package me.shedaniel.rei.utils; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.annotations.Internal; @@ -55,7 +57,27 @@ public class CollectionUtils { } public static List filter(List list, Predicate predicate) { - List l = new LinkedList<>(); + List l = Lists.newArrayList(); + for (T t : list) { + if (predicate.test(t)) { + l.add(t); + } + } + return l; + } + + public static Set filter(Set list, Predicate predicate) { + Set l = Sets.newLinkedHashSet(); + for (T t : list) { + if (predicate.test(t)) { + l.add(t); + } + } + return l; + } + + public static List filterSetToList(Set list, Predicate predicate) { + List l = Lists.newArrayList(); for (T t : list) { if (predicate.test(t)) { l.add(t); @@ -65,7 +87,7 @@ public class CollectionUtils { } public static List map(List list, Function function) { - List l = new LinkedList<>(); + List l = Lists.newArrayList(); for (T t : list) { l.add(function.apply(t)); } @@ -73,7 +95,7 @@ public class CollectionUtils { } public static List map(T[] list, Function function) { - List l = new LinkedList<>(); + List l = Lists.newArrayList(); for (T t : list) { l.add(function.apply(t)); } @@ -149,7 +171,7 @@ public class CollectionUtils { for (T t : list) { if (predicate.test(t)) { if (l == null) - l = new LinkedList<>(); + l = Lists.newArrayList(); l.add(function.apply(t)); } } -- cgit