aboutsummaryrefslogtreecommitdiff
path: root/RoughlyEnoughItems-runtime/src/main/java/me
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-08-20 22:18:59 +0800
committershedaniel <daniel@shedaniel.me>2020-08-20 22:18:59 +0800
commit38779f9b8e3804a6efa0e47d28226017e2584c13 (patch)
treea65afdd6351938108300b322de5f94ec7253aff1 /RoughlyEnoughItems-runtime/src/main/java/me
parent2ea877295f2fd55eb208af2e296b83df6d443f84 (diff)
downloadRoughlyEnoughItems-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')
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java3
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java7
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java8
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java6
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java10
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java26
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/filtering/rules/SearchFilteringRule.java15
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);