Theoretical performance fix for #2062 "Massive search lag with external storage". Needs confirmation.

This commit is contained in:
raoulvdberge
2018-10-31 15:53:31 +01:00
parent ff19fd8551
commit bba5735604
4 changed files with 49 additions and 23 deletions

View File

@@ -1,35 +1,18 @@
package com.raoulvdberge.refinedstorage.gui.grid.filtering; package com.raoulvdberge.refinedstorage.gui.grid.filtering;
import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack; import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.ModContainer;
import java.util.function.Predicate; import java.util.function.Predicate;
public class GridFilterMod implements Predicate<IGridStack> { public class GridFilterMod implements Predicate<IGridStack> {
private String modName; private String inputModName;
public GridFilterMod(String modName) { public GridFilterMod(String inputModName) {
this.modName = modName.toLowerCase().replace(" ", ""); this.inputModName = inputModName.toLowerCase().replace(" ", "");
}
private String getModNameFromModId(String id) {
ModContainer container = Loader.instance().getActiveModList().stream()
.filter(m -> m.getModId().toLowerCase().equals(id))
.findFirst()
.orElse(null);
return container == null ? id : container.getName().toLowerCase().replace(" ", "");
} }
@Override @Override
public boolean test(IGridStack stack) { public boolean test(IGridStack stack) {
String otherModId = stack.getModId().toLowerCase(); return stack.getModId().contains(inputModName) || stack.getModName().contains(inputModName);
if (!getModNameFromModId(otherModId).contains(modName)) {
return stack.getModId().contains(modName);
}
return true;
} }
} }

View File

@@ -15,6 +15,8 @@ public class GridStackFluid implements IGridStack {
private IStorageTracker.IStorageTrackerEntry entry; private IStorageTracker.IStorageTrackerEntry entry;
private boolean craftable; private boolean craftable;
private boolean displayCraftText; private boolean displayCraftText;
private String modId;
private String modName;
public GridStackFluid(int hash, FluidStack stack, @Nullable IStorageTracker.IStorageTrackerEntry entry, boolean craftable, boolean displayCraftText) { public GridStackFluid(int hash, FluidStack stack, @Nullable IStorageTracker.IStorageTrackerEntry entry, boolean craftable, boolean displayCraftText) {
this.hash = hash; this.hash = hash;
@@ -55,7 +57,20 @@ public class GridStackFluid implements IGridStack {
@Override @Override
public String getModId() { public String getModId() {
return stack.getFluid().getStill(stack).getNamespace(); if (modId == null) {
modId = stack.getFluid().getStill(stack).getNamespace();
}
return modId;
}
@Override
public String getModName() {
if (modName == null) {
modName = GridStackItem.getModNameByModId(getModId());
}
return modName;
} }
@Override @Override

View File

@@ -9,6 +9,8 @@ import com.raoulvdberge.refinedstorage.util.StackUtils;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.ModContainer;
import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.OreDictionary;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -24,6 +26,8 @@ public class GridStackItem implements IGridStack {
private String[] oreIds = null; private String[] oreIds = null;
@Nullable @Nullable
private IStorageTracker.IStorageTrackerEntry entry; private IStorageTracker.IStorageTrackerEntry entry;
private String modId;
private String modName;
public GridStackItem(ItemStack stack) { public GridStackItem(ItemStack stack) {
this.stack = stack; this.stack = stack;
@@ -41,6 +45,15 @@ public class GridStackItem implements IGridStack {
} }
} }
static String getModNameByModId(String modId) {
ModContainer container = Loader.instance().getActiveModList().stream()
.filter(m -> m.getModId().toLowerCase().equals(modId))
.findFirst()
.orElse(null);
return container == null ? modId : container.getName().toLowerCase().replace(" ", "");
}
public ItemStack getStack() { public ItemStack getStack() {
return stack; return stack;
} }
@@ -84,7 +97,20 @@ public class GridStackItem implements IGridStack {
@Override @Override
public String getModId() { public String getModId() {
return stack.getItem().getCreatorModId(stack); if (modId == null) {
modId = stack.getItem().getCreatorModId(stack);
}
return modId;
}
@Override
public String getModName() {
if (modName == null) {
modName = getModNameByModId(getModId());
}
return modName;
} }
@Override @Override

View File

@@ -12,6 +12,8 @@ public interface IGridStack {
String getModId(); String getModId();
String getModName();
String[] getOreIds(); String[] getOreIds();
String getTooltip(); String getTooltip();