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.stripFormatting()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/返回值
- 引用位置:
-
- 引用位置:
字段/方法调用/返回值 - 关联成员:
SearchTree.empty()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.backgroundExecutor()
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
Item.TooltipContext.of()
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SlotDisplayContext.fromLevel()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: