diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-08-20 22:18:59 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-08-20 22:18:59 +0800 |
| commit | 38779f9b8e3804a6efa0e47d28226017e2584c13 (patch) | |
| tree | a65afdd6351938108300b322de5f94ec7253aff1 /RoughlyEnoughItems-runtime/src/main/java/me | |
| parent | 2ea877295f2fd55eb208af2e296b83df6d443f84 (diff) | |
| download | RoughlyEnoughItems-38779f9b8e3804a6efa0e47d28226017e2584c13.tar.gz RoughlyEnoughItems-38779f9b8e3804a6efa0e47d28226017e2584c13.tar.bz2 RoughlyEnoughItems-38779f9b8e3804a6efa0e47d28226017e2584c13.zip | |
Some changes to partitioning search and optimisations to asFormattedText in ItemEntryStack.
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'RoughlyEnoughItems-runtime/src/main/java/me')
7 files changed, 37 insertions, 38 deletions
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java index 3bc546295..227de4e30 100644 --- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java +++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java @@ -43,6 +43,7 @@ import me.shedaniel.rei.impl.InternalWidgets; import me.shedaniel.rei.impl.ScreenHelper; import me.shedaniel.rei.impl.widgets.PanelWidget; import me.shedaniel.rei.utils.CollectionUtils; +import me.shedaniel.rei.utils.ImmutableLiteralText; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.Screen; @@ -285,7 +286,7 @@ public class RecipeViewingScreen extends Screen implements RecipeScreen { RecipeViewingScreen.this.choosePageActivated = true; RecipeViewingScreen.this.init(); }).onRender((matrices, label) -> { - label.setText(new LiteralText(String.format("%d/%d", page + 1, getTotalPages(selectedCategory)))); + label.setText(new ImmutableLiteralText(String.format("%d/%d", page + 1, getTotalPages(selectedCategory)))); label.setClickable(getTotalPages(selectedCategory) > 1); }).tooltipSupplier(label -> label.isClickable() ? I18n.translate("text.rei.choose_page") : null)); widgets.add(recipeNext = Widgets.createButton(new Rectangle(bounds.getMaxX() - 17, bounds.getY() + 19, 12, 12), new TranslatableText("text.rei.right_arrow")) diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java index 101665d8d..3546d6df6 100644 --- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java +++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java @@ -27,6 +27,7 @@ import com.google.common.collect.Lists; import me.shedaniel.rei.gui.credits.CreditsEntryListWidget.TextCreditsItem; import me.shedaniel.rei.gui.credits.CreditsEntryListWidget.TranslationCreditsItem; import me.shedaniel.rei.impl.ScreenHelper; +import me.shedaniel.rei.utils.ImmutableLiteralText; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.metadata.CustomValue; import net.minecraft.client.gui.screen.Screen; @@ -100,16 +101,16 @@ public class CreditsScreen extends Screen { for (String line : String.format("§lRoughly Enough Items (v%s)\n§7Originally a fork for Almost Enough Items.\n\n§lLanguage Translation\n%s\n\n§lLicense\n§7Roughly Enough Items is licensed under MIT.", FabricLoader.getInstance().getModContainer("roughlyenoughitems").map(mod -> mod.getMetadata().getVersion().getFriendlyString()).orElse("Unknown"), "%translators%").split("\n")) if (line.equalsIgnoreCase("%translators%")) { if (exception[0] != null) { - entryListWidget.creditsAddEntry(new TextCreditsItem(new LiteralText("Failed to get translators: " + exception[0].toString()))); + entryListWidget.creditsAddEntry(new TextCreditsItem(new ImmutableLiteralText("Failed to get translators: " + exception[0].toString()))); for (StackTraceElement traceElement : exception[0].getStackTrace()) - entryListWidget.creditsAddEntry(new TextCreditsItem(new LiteralText(" at " + traceElement))); + entryListWidget.creditsAddEntry(new TextCreditsItem(new ImmutableLiteralText(" at " + traceElement))); } else { int maxWidth = translatorsMapped.stream().mapToInt(pair -> textRenderer.getStringWidth(pair.getLeft())).max().orElse(0) + 5; for (Pair<String, String> pair : translatorsMapped) { entryListWidget.creditsAddEntry(new TranslationCreditsItem(new TranslatableText(pair.getLeft()), new TranslatableText(pair.getRight()), i - maxWidth - 10, maxWidth)); } } - } else entryListWidget.creditsAddEntry(new TextCreditsItem(new LiteralText(line))); + } else entryListWidget.creditsAddEntry(new TextCreditsItem(new ImmutableLiteralText(line))); entryListWidget.creditsAddEntry(new TextCreditsItem(NarratorManager.EMPTY)); children.add(buttonDone = new AbstractPressableButtonWidget(width / 2 - 100, height - 26, 200, 20, new TranslatableText("gui.done")) { @Override diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java index 43973392b..12931fb94 100644 --- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java +++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java @@ -441,15 +441,11 @@ public class EntryListWidget extends WidgetWithBounds { List<EntryStack> stacks = EntryRegistry.getInstance().getPreFilteredList(); if (stacks instanceof CopyOnWriteArrayList && !stacks.isEmpty()) { if (ConfigObject.getInstance().shouldAsyncSearch()) { - int size = ConfigObject.getInstance().getNumberAsyncSearch(); List<CompletableFuture<List<EntryStack>>> completableFutures = Lists.newArrayList(); - for (int i = 0; i < stacks.size(); i += size) { - int[] start = {i}; + for (Iterable<EntryStack> partitionStacks : CollectionUtils.partition(stacks, ConfigObject.getInstance().getAsyncSearchPartitionSize())) { completableFutures.add(CompletableFuture.supplyAsync(() -> { - int end = Math.min(stacks.size(), start[0] + size); List<EntryStack> filtered = Lists.newArrayList(); - for (; start[0] < end; start[0]++) { - EntryStack stack = stacks.get(start[0]); + for (EntryStack stack : partitionStacks) { if (canLastSearchTermsBeAppliedTo(stack)) { if (workingItems != null && !workingItems.contains(stack.hashIgnoreAmount())) continue; diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java index f4792168c..9c8b9c091 100644 --- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java +++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java @@ -317,8 +317,8 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { @Override @ApiStatus.Experimental - public int getNumberAsyncSearch() { - return advanced.search.numberAsyncSearch; + public int getAsyncSearchPartitionSize() { + return advanced.search.asyncSearchPartitionSize; } @Override @@ -452,7 +452,7 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { @Comment("Declares whether search time should be debugged.") private boolean debugSearchTimeRequired = false; @Comment("Declares whether REI should search async.") private boolean asyncSearch = true; @Comment("Declares how many entries should be grouped one async search.") @ConfigEntry.BoundedDiscrete(min = 25, max = 400) - private int numberAsyncSearch = 50; + private int asyncSearchPartitionSize = 100; } public static class Commands { diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java index ce8b5ef94..bced484c6 100644 --- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java +++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java @@ -32,6 +32,8 @@ import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.fractions.Fraction; import me.shedaniel.rei.api.widgets.Tooltip; import me.shedaniel.rei.utils.CollectionUtils; +import me.shedaniel.rei.utils.FormattingUtils; +import me.shedaniel.rei.utils.ImmutableLiteralText; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.BufferBuilder; import net.minecraft.client.render.Tessellator; @@ -44,8 +46,6 @@ import net.minecraft.fluid.Fluid; import net.minecraft.fluid.Fluids; import net.minecraft.text.LiteralText; import net.minecraft.text.Text; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import net.minecraft.util.math.Matrix4f; import net.minecraft.util.registry.Registry; @@ -206,7 +206,7 @@ public class FluidEntryStack extends AbstractEntryStack { final String modId = ClientHelper.getInstance().getModFromIdentifier(id); boolean alreadyHasMod = false; for (Text s : toolTip) - if (Formatting.strip(s.getString()).equalsIgnoreCase(modId)) { + if (FormattingUtils.stripFormatting(s.getString()).equalsIgnoreCase(modId)) { alreadyHasMod = true; break; } @@ -247,7 +247,7 @@ public class FluidEntryStack extends AbstractEntryStack { public Text asFormattedText() { Identifier id = Registry.FLUID.getId(fluid); if (I18n.hasTranslation("block." + id.toString().replaceFirst(":", "."))) - return new TranslatableText("block." + id.toString().replaceFirst(":", ".")); - return new LiteralText(CollectionUtils.mapAndJoinToString(id.getPath().split("_"), StringUtils::capitalize, " ")); + return new ImmutableLiteralText(I18n.translate("block." + id.toString().replaceFirst(":", "."))); + return new ImmutableLiteralText(CollectionUtils.mapAndJoinToString(id.getPath().split("_"), StringUtils::capitalize, " ")); } } diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java index 2cc66f959..46f6f6327 100644 --- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java +++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java @@ -26,6 +26,8 @@ package me.shedaniel.rei.impl; import com.google.common.collect.Lists; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; +import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; +import it.unimi.dsi.fastutil.objects.ReferenceSet; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.ClientHelper; @@ -33,6 +35,8 @@ import me.shedaniel.rei.api.ConfigObject; import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.fractions.Fraction; import me.shedaniel.rei.api.widgets.Tooltip; +import me.shedaniel.rei.utils.FormattingUtils; +import me.shedaniel.rei.utils.ImmutableLiteralText; import net.minecraft.client.MinecraftClient; import net.minecraft.client.item.TooltipContext; import net.minecraft.client.render.DiffuseLighting; @@ -40,6 +44,7 @@ import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.render.model.json.ModelTransformation; +import net.minecraft.client.resource.language.I18n; import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.Item; @@ -47,10 +52,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; -import net.minecraft.text.LiteralText; import net.minecraft.text.Text; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import net.minecraft.util.registry.Registry; @@ -284,7 +286,7 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt final String modId = ClientHelper.getInstance().getModFromItem(getItem()); boolean alreadyHasMod = false; for (Text s : toolTip) - if (Formatting.strip(s.getString()).equalsIgnoreCase(modId)) { + if (FormattingUtils.stripFormatting(s.getString()).equalsIgnoreCase(modId)) { alreadyHasMod = true; break; } @@ -377,32 +379,32 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt } } - private static final List<Item> SEARCH_BLACKLISTED = Lists.newArrayList(); + private static final ReferenceSet<Item> SEARCH_BLACKLISTED = new ReferenceOpenHashSet<>(); @Override public @NotNull Text asFormattedText() { - if (!SEARCH_BLACKLISTED.contains(getItem())) + if (!SEARCH_BLACKLISTED.contains(itemStack.getItem())) try { - return getItemStack().getName(); + return itemStack.getName(); } catch (Throwable e) { e.printStackTrace(); - SEARCH_BLACKLISTED.add(getItem()); + SEARCH_BLACKLISTED.add(itemStack.getItem()); } try { - return new TranslatableText("item." + Registry.ITEM.getId(getItem()).toString().replace(":", ".")); + return new ImmutableLiteralText(I18n.translate("item." + Registry.ITEM.getId(itemStack.getItem()).toString().replace(":", "."))); } catch (Throwable e) { e.printStackTrace(); } - return new LiteralText("ERROR"); + return new ImmutableLiteralText("ERROR"); } private List<Text> tryGetItemStackToolTip(boolean careAboutAdvanced) { - if (!SEARCH_BLACKLISTED.contains(getItem())) + if (!SEARCH_BLACKLISTED.contains(itemStack.getItem())) try { return itemStack.getTooltip(MinecraftClient.getInstance().player, MinecraftClient.getInstance().options.advancedItemTooltips && careAboutAdvanced ? TooltipContext.Default.ADVANCED : TooltipContext.Default.NORMAL); } catch (Throwable e) { e.printStackTrace(); - SEARCH_BLACKLISTED.add(getItem()); + SEARCH_BLACKLISTED.add(itemStack.getItem()); } return Lists.newArrayList(asFormattedText()); } diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/filtering/rules/SearchFilteringRule.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/filtering/rules/SearchFilteringRule.java index 432985ce8..d62e14464 100644 --- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/filtering/rules/SearchFilteringRule.java +++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/filtering/rules/SearchFilteringRule.java @@ -31,6 +31,7 @@ import me.shedaniel.rei.impl.SearchArgument; import me.shedaniel.rei.impl.filtering.AbstractFilteringRule; import me.shedaniel.rei.impl.filtering.FilteringContext; import me.shedaniel.rei.impl.filtering.FilteringResult; +import me.shedaniel.rei.utils.CollectionUtils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.screen.Screen; @@ -40,7 +41,10 @@ import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -109,15 +113,10 @@ public class SearchFilteringRule extends AbstractFilteringRule<SearchFilteringRu } private void processList(Collection<EntryStack> stacks, List<CompletableFuture<List<EntryStack>>> completableFutures) { - int size = 100; - Iterator<EntryStack> iterator = stacks.iterator(); - for (int i = 0; i < stacks.size(); i += size) { - int[] start = {i}; + for (Iterable<EntryStack> partitionStacks : CollectionUtils.partition((List<EntryStack>) stacks, 100)) { completableFutures.add(CompletableFuture.supplyAsync(() -> { - int end = Math.min(stacks.size(), start[0] + size); List<EntryStack> output = Lists.newArrayList(); - for (; start[0] < end; start[0]++) { - EntryStack stack = ((List<EntryStack>) stacks).get(start[0]); + for (EntryStack stack : partitionStacks) { boolean shown = SearchArgument.canSearchTermsBeAppliedTo(stack, arguments); if (shown) { output.add(stack); |
