Merge remote-tracking branch 'origin/1.19.2' into 1.20
This commit is contained in:
commit
b0ed60c2f0
|
|
@ -7,7 +7,7 @@ import net.minecraft.world.item.ItemStack;
|
|||
import org.embeddedt.modernfix.ModernFix;
|
||||
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
|
||||
import org.embeddedt.modernfix.platform.ModernFixPlatformHooks;
|
||||
import org.embeddedt.modernfix.searchtree.DummySearchTree;
|
||||
import org.embeddedt.modernfix.searchtree.RecipeBookSearchTree;
|
||||
import org.embeddedt.modernfix.searchtree.SearchTreeProviderRegistry;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
import org.lwjgl.glfw.GLFWErrorCallback;
|
||||
|
|
@ -37,7 +37,7 @@ public abstract class MinecraftMixin {
|
|||
SearchRegistry.TreeBuilderSupplier<ItemStack> tagSupplier = list -> provider.getSearchTree(true);
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_NAMES, nameSupplier);
|
||||
this.searchRegistry.register(SearchRegistry.CREATIVE_TAGS, tagSupplier);
|
||||
this.searchRegistry.register(SearchRegistry.RECIPE_COLLECTIONS, list -> new DummySearchTree<>());
|
||||
this.searchRegistry.register(SearchRegistry.RECIPE_COLLECTIONS, list -> new RecipeBookSearchTree(provider.getSearchTree(false)));
|
||||
ModernFixPlatformHooks.INSTANCE.registerCreativeSearchTrees(this.searchRegistry, nameSupplier, tagSupplier, this::populateSearchTree);
|
||||
// grab components for all key mappings in order to prevent them from being loaded off-thread later
|
||||
// this populates the LazyLoadedValues
|
||||
|
|
|
|||
|
|
@ -0,0 +1,64 @@
|
|||
package org.embeddedt.modernfix.searchtree;
|
||||
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
|
||||
import net.minecraft.client.gui.screens.recipebook.RecipeCollection;
|
||||
import net.minecraft.client.searchtree.SearchTree;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class RecipeBookSearchTree extends DummySearchTree<RecipeCollection> {
|
||||
private final SearchTree<ItemStack> stackCollector;
|
||||
private Map<Item, List<RecipeCollection>> collectionsByItem = null;
|
||||
private final List<RecipeCollection> allCollections = new ArrayList<>();
|
||||
|
||||
public RecipeBookSearchTree(SearchTree<ItemStack> stackCollector) {
|
||||
this.stackCollector = stackCollector;
|
||||
}
|
||||
|
||||
private Map<Item, List<RecipeCollection>> populateCollectionMap() {
|
||||
Map<Item, List<RecipeCollection>> collections = this.collectionsByItem;
|
||||
if(collections == null) {
|
||||
collections = new Object2ObjectOpenHashMap<>();
|
||||
Map<Item, List<RecipeCollection>> finalCollection = collections;
|
||||
for(RecipeCollection collection : allCollections) {
|
||||
collection.getRecipes().stream().map(recipe -> recipe.getResultItem().getItem()).distinct().forEach(item -> {
|
||||
finalCollection.computeIfAbsent(item, k -> new ArrayList<>()).add(collection);
|
||||
});
|
||||
}
|
||||
this.collectionsByItem = collections;
|
||||
}
|
||||
return collections;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(RecipeCollection pObj) {
|
||||
this.allCollections.add(pObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
this.allCollections.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
this.collectionsByItem = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RecipeCollection> search(String pSearchText) {
|
||||
// Avoid constructing the recipe collection map until the first real search
|
||||
if(pSearchText.trim().length() == 0) {
|
||||
return this.allCollections;
|
||||
}
|
||||
List<ItemStack> stacks = stackCollector.search(pSearchText);
|
||||
Map<Item, List<RecipeCollection>> collections = this.populateCollectionMap();
|
||||
return stacks.stream().map(ItemStack::getItem).distinct().flatMap(item -> collections.getOrDefault(item, Collections.emptyList()).stream()).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user