SessionSearchTrees.java

net.minecraft.client.multiplayer.SessionSearchTrees

信息

  • 全限定名:net.minecraft.client.multiplayer.SessionSearchTrees
  • 类型:public class
  • 包:net.minecraft.client.multiplayer
  • 源码路径:src/main/java/net/minecraft/client/multiplayer/SessionSearchTrees.java
  • 起始行号:L32
  • 职责:

    TODO

字段/常量

  • RECIPE_COLLECTIONS

    • 类型: SessionSearchTrees.Key
    • 修饰符: private static final
    • 源码定位: L33
    • 说明:

      TODO

  • CREATIVE_NAMES

    • 类型: SessionSearchTrees.Key
    • 修饰符: private static final
    • 源码定位: L34
    • 说明:

      TODO

  • CREATIVE_TAGS

    • 类型: SessionSearchTrees.Key
    • 修饰符: private static final
    • 源码定位: L35
    • 说明:

      TODO

  • creativeByNameSearch

    • 类型: CompletableFuture<SearchTree<ItemStack>>
    • 修饰符: private
    • 源码定位: L36
    • 说明:

      TODO

  • creativeByTagSearch

    • 类型: CompletableFuture<SearchTree<ItemStack>>
    • 修饰符: private
    • 源码定位: L37
    • 说明:

      TODO

  • recipeSearch

    • 类型: CompletableFuture<SearchTree<RecipeCollection>>
    • 修饰符: private
    • 源码定位: L38
    • 说明:

      TODO

  • reloaders

    • 类型: Map<SessionSearchTrees.Key,Runnable>
    • 修饰符: private final
    • 源码定位: L39
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.multiplayer.SessionSearchTrees.Key
    • 类型: class
    • 修饰符: private static
    • 源码定位: L133
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

private void register(SessionSearchTrees.Key location, Runnable updater) @ L41

  • 方法名:register
  • 源码定位:L41
  • 返回类型:void
  • 修饰符:private

参数:

  • location: SessionSearchTrees.Key
  • updater: Runnable

说明:

TODO

public void rebuildAfterLanguageChange() @ L46

  • 方法名:rebuildAfterLanguageChange
  • 源码定位:L46
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

private static Stream<String> getTooltipLines(Stream<ItemStack> items, Item.TooltipContext context, TooltipFlag flag) @ L52

  • 方法名:getTooltipLines
  • 源码定位:L52
  • 返回类型:Stream
  • 修饰符:private static

参数:

  • items: Stream
  • context: Item.TooltipContext
  • flag: TooltipFlag

说明:

TODO

public void updateRecipes(ClientRecipeBook recipeBook, Level level) @ L58

  • 方法名:updateRecipes
  • 源码定位:L58
  • 返回类型:void
  • 修饰符:public

参数:

  • recipeBook: ClientRecipeBook
  • level: Level

说明:

TODO

public SearchTree<RecipeCollection> recipes() @ L87

  • 方法名:recipes
  • 源码定位:L87
  • 返回类型:SearchTree
  • 修饰符:public

参数:

说明:

TODO

public void updateCreativeTags(List<ItemStack> items) @ L91

  • 方法名:updateCreativeTags
  • 源码定位:L91
  • 返回类型:void
  • 修饰符:public

参数:

  • items: List

说明:

TODO

public SearchTree<ItemStack> creativeTagSearch() @ L104

  • 方法名:creativeTagSearch
  • 源码定位:L104
  • 返回类型:SearchTree
  • 修饰符:public

参数:

说明:

TODO

public void updateCreativeTooltips(HolderLookup.Provider registries, List<ItemStack> itemStacks) @ L108

  • 方法名:updateCreativeTooltips
  • 源码定位:L108
  • 返回类型:void
  • 修饰符:public

参数:

  • registries: HolderLookup.Provider
  • itemStacks: List

说明:

TODO

public SearchTree<ItemStack> creativeNameSearch() @ L128

  • 方法名:creativeNameSearch
  • 源码定位:L128
  • 返回类型:SearchTree
  • 修饰符:public

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class SessionSearchTrees {
    private static final SessionSearchTrees.Key RECIPE_COLLECTIONS = new SessionSearchTrees.Key();
    private static final SessionSearchTrees.Key CREATIVE_NAMES = new SessionSearchTrees.Key();
    private static final SessionSearchTrees.Key CREATIVE_TAGS = new SessionSearchTrees.Key();
    private CompletableFuture<SearchTree<ItemStack>> creativeByNameSearch = CompletableFuture.completedFuture(SearchTree.empty());
    private CompletableFuture<SearchTree<ItemStack>> creativeByTagSearch = CompletableFuture.completedFuture(SearchTree.empty());
    private CompletableFuture<SearchTree<RecipeCollection>> recipeSearch = CompletableFuture.completedFuture(SearchTree.empty());
    private final Map<SessionSearchTrees.Key, Runnable> reloaders = new IdentityHashMap<>();
 
    private void register(SessionSearchTrees.Key location, Runnable updater) {
        updater.run();
        this.reloaders.put(location, updater);
    }
 
    public void rebuildAfterLanguageChange() {
        for (Runnable value : this.reloaders.values()) {
            value.run();
        }
    }
 
    private static Stream<String> getTooltipLines(Stream<ItemStack> items, Item.TooltipContext context, TooltipFlag flag) {
        return items.<Component>flatMap(item -> item.getTooltipLines(context, null, flag).stream())
            .map(l -> ChatFormatting.stripFormatting(l.getString()).trim())
            .filter(s -> !s.isEmpty());
    }
 
    public void updateRecipes(ClientRecipeBook recipeBook, Level level) {
        this.register(
            RECIPE_COLLECTIONS,
            () -> {
                List<RecipeCollection> recipes = recipeBook.getCollections();
                RegistryAccess registryAccess = level.registryAccess();
                Registry<Item> itemRegistries = registryAccess.lookupOrThrow(Registries.ITEM);
                Item.TooltipContext tooltipContext = Item.TooltipContext.of(registryAccess);
                ContextMap recipeContext = SlotDisplayContext.fromLevel(level);
                TooltipFlag tooltipFlag = TooltipFlag.Default.NORMAL;
                CompletableFuture<?> previous = this.recipeSearch;
                this.recipeSearch = CompletableFuture.supplyAsync(
                    () -> new FullTextSearchTree<>(
                        collection -> getTooltipLines(
                            collection.getRecipes().stream().flatMap(e -> e.resultItems(recipeContext).stream()), tooltipContext, tooltipFlag
                        ),
                        collection -> collection.getRecipes()
                            .stream()
                            .flatMap(e -> e.resultItems(recipeContext).stream())
                            .map(stack -> itemRegistries.getKey(stack.getItem())),
                        recipes
                    ),
                    Util.backgroundExecutor()
                );
                previous.cancel(true);
            }
        );
    }
 
    public SearchTree<RecipeCollection> recipes() {
        return this.recipeSearch.join();
    }
 
    public void updateCreativeTags(List<ItemStack> items) {
        this.register(
            CREATIVE_TAGS,
            () -> {
                CompletableFuture<?> previous = this.creativeByTagSearch;
                this.creativeByTagSearch = CompletableFuture.supplyAsync(
                    () -> new IdSearchTree<>(itemStack -> itemStack.tags().map(TagKey::location), items), Util.backgroundExecutor()
                );
                previous.cancel(true);
            }
        );
    }
 
    public SearchTree<ItemStack> creativeTagSearch() {
        return this.creativeByTagSearch.join();
    }
 
    public void updateCreativeTooltips(HolderLookup.Provider registries, List<ItemStack> itemStacks) {
        this.register(
            CREATIVE_NAMES,
            () -> {
                Item.TooltipContext tooltipContext = Item.TooltipContext.of(registries);
                TooltipFlag tooltipFlag = TooltipFlag.Default.NORMAL.asCreative();
                CompletableFuture<?> previous = this.creativeByNameSearch;
                this.creativeByNameSearch = CompletableFuture.supplyAsync(
                    () -> new FullTextSearchTree<>(
                        itemStack -> getTooltipLines(Stream.of(itemStack), tooltipContext, tooltipFlag),
                        itemStack -> itemStack.typeHolder().unwrapKey().map(ResourceKey::identifier).stream(),
                        itemStacks
                    ),
                    Util.backgroundExecutor()
                );
                previous.cancel(true);
            }
        );
    }
 
    public SearchTree<ItemStack> creativeNameSearch() {
        return this.creativeByNameSearch.join();
    }
 
    @OnlyIn(Dist.CLIENT)
    private static class Key {
    }
}

引用的其他类

  • ChatFormatting

    • 引用位置: 方法调用
    • 关联成员: ChatFormatting.stripFormatting()
  • ClientRecipeBook

    • 引用位置: 参数
  • RecipeCollection

    • 引用位置: 字段/返回值
  • SearchTree

    • 引用位置: 字段/方法调用/返回值
    • 关联成员: SearchTree.empty()
  • HolderLookup

    • 引用位置: 参数
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.backgroundExecutor()
  • Item

    • 引用位置: 参数/方法调用
    • 关联成员: Item.TooltipContext.of()
  • ItemStack

    • 引用位置: 参数/字段/返回值
  • TooltipFlag

    • 引用位置: 参数
  • SlotDisplayContext

    • 引用位置: 方法调用
    • 关联成员: SlotDisplayContext.fromLevel()
  • Level

    • 引用位置: 参数