diff --git a/src/main/java/appeng/util/ItemSorters.java b/src/main/java/appeng/util/ItemSorters.java index 0a0d7fc65..1dc785f50 100644 --- a/src/main/java/appeng/util/ItemSorters.java +++ b/src/main/java/appeng/util/ItemSorters.java @@ -11,20 +11,25 @@ package appeng.util; import java.util.Comparator; +import java.util.regex.Pattern; + +import com.gtnewhorizon.gtnhlib.util.font.FontRendering; import appeng.api.config.SortDir; import appeng.api.storage.data.IAEStack; public class ItemSorters { + private static final Pattern FORMATTING_PATTERN = Pattern.compile("(?s)" + '\u00a7' + "."); + private static SortDir direction = SortDir.ASCENDING; public static final Comparator> CONFIG_BASED_SORT_BY_NAME = Comparator - .comparing(IAEStack::getDisplayName, (a, b) -> a.compareToIgnoreCase(b) * direction.sortHint); + .comparing(ItemSorters::getSortName, (a, b) -> a.compareToIgnoreCase(b) * direction.sortHint); public static final Comparator> CONFIG_BASED_SORT_BY_MOD = Comparator .comparing((IAEStack stack) -> stack.getModId(), (a, b) -> a.compareToIgnoreCase(b) * direction.sortHint) - .thenComparing(IAEStack::getDisplayName); + .thenComparing(ItemSorters::getSortName); public static final Comparator> CONFIG_BASED_SORT_BY_SIZE = Comparator .comparing(IAEStack::getStackSize, (a, b) -> Long.compare(b, a) * direction.sortHint); @@ -42,6 +47,11 @@ public class ItemSorters { } }; + /** Display name without format codes, so &-styled or colored names sort by their visible text. */ + private static String getSortName(final IAEStack stack) { + return FORMATTING_PATTERN.matcher(FontRendering.preprocessText(stack.getDisplayName())).replaceAll(""); + } + public static int compareInt(final int a, final int b) { // for backwards compat for ext mods... return Integer.compare(a, b);