Skip to content

Commit ccccac1

Browse files
committed
Fix #3731 Ingredient list gets disordered after a resource reload
1 parent 02facb0 commit ccccac1

File tree

4 files changed

+27
-15
lines changed

4 files changed

+27
-15
lines changed

Gui/src/main/java/mezz/jei/gui/ingredients/IListElement.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ public interface IListElement<V> {
99

1010
void setSortedIndex(int sortIndex);
1111

12+
int getCreatedIndex();
13+
1214
boolean isVisible();
1315

1416
void setVisible(boolean visible);

Gui/src/main/java/mezz/jei/gui/ingredients/IngredientListElementFactory.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,11 @@ public static <V> List<IListElementInfo<V>> createTestList(IIngredientManager in
3838
.toList();
3939
}
4040

41-
public static List<IListElementInfo<?>> rebuildList(IIngredientManager ingredientManager, Collection<IListElement<?>> ingredients, IModIdHelper modIdHelper) {
41+
public static List<IListElementInfo<?>> rebuildList(IIngredientManager ingredientManager, Collection<IListElement<?>> elements, IModIdHelper modIdHelper) {
4242
List<IListElementInfo<?>> results = new ArrayList<>();
4343

44-
for (IListElement<?> ingredient : ingredients) {
45-
ITypedIngredient<?> typedIngredient = ingredient.getTypedIngredient();
46-
IListElementInfo<?> orderedElement = ListElementInfo.create(typedIngredient, ingredientManager, modIdHelper);
44+
for (IListElement<?> element : elements) {
45+
IListElementInfo<?> orderedElement = ListElementInfo.createFromElement(element, ingredientManager, modIdHelper);
4746
if (orderedElement != null) {
4847
results.add(orderedElement);
4948
}

Gui/src/main/java/mezz/jei/gui/ingredients/ListElement.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44

55
public class ListElement<V> implements IListElement<V> {
66
private final ITypedIngredient<V> ingredient;
7-
private int sortIndex = Integer.MAX_VALUE;
7+
private final int createdIndex;
8+
private int sortIndex;
89
private boolean visible = true;
910

10-
public ListElement(ITypedIngredient<V> ingredient, int sortIndex) {
11+
public ListElement(ITypedIngredient<V> ingredient, int createdIndex) {
1112
this.ingredient = ingredient;
12-
this.sortIndex = sortIndex;
13+
this.createdIndex = createdIndex;
14+
this.sortIndex = createdIndex;
1315
}
1416

1517
@Override
@@ -27,6 +29,11 @@ public void setSortedIndex(int sortIndex) {
2729
this.sortIndex = sortIndex;
2830
}
2931

32+
@Override
33+
public int getCreatedIndex() {
34+
return createdIndex;
35+
}
36+
3037
@Override
3138
public boolean isVisible() {
3239
return visible;

Gui/src/main/java/mezz/jei/gui/ingredients/ListElementInfo.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,23 @@ public class ListElementInfo<V> implements IListElementInfo<V> {
3737
private final List<String> modIds;
3838
private final List<String> modNames;
3939
private final ResourceLocation resourceLocation;
40-
private final int createdIndex;
4140

4241
@Nullable
4342
public static <V> IListElementInfo<V> create(ITypedIngredient<V> value, IIngredientManager ingredientManager, IModIdHelper modIdHelper) {
4443
int createdIndex = elementCount++;
45-
IIngredientHelper<V> ingredientHelper = ingredientManager.getIngredientHelper(value.getType());
4644
ListElement<V> element = new ListElement<>(value, createdIndex);
45+
return createFromElement(element, ingredientManager, modIdHelper);
46+
}
47+
48+
@Nullable
49+
public static <V> IListElementInfo<V> createFromElement(IListElement<V> element, IIngredientManager ingredientManager, IModIdHelper modIdHelper) {
4750
try {
48-
return new ListElementInfo<>(element, ingredientHelper, ingredientManager, modIdHelper, createdIndex);
51+
return new ListElementInfo<>(element, ingredientManager, modIdHelper);
4952
} catch (RuntimeException e) {
5053
try {
51-
String ingredientInfo = ingredientHelper.getErrorInfo(value.getIngredient());
54+
ITypedIngredient<V> typedIngredient = element.getTypedIngredient();
55+
IIngredientHelper<V> ingredientHelper = ingredientManager.getIngredientHelper(typedIngredient.getType());
56+
String ingredientInfo = ingredientHelper.getErrorInfo(typedIngredient.getIngredient());
5257
LOGGER.warn("Found a broken ingredient {}", ingredientInfo, e);
5358
} catch (RuntimeException e2) {
5459
LOGGER.warn("Found a broken ingredient.", e2);
@@ -57,12 +62,11 @@ public static <V> IListElementInfo<V> create(ITypedIngredient<V> value, IIngredi
5762
}
5863
}
5964

60-
protected ListElementInfo(IListElement<V> element, IIngredientHelper<V> ingredientHelper, IIngredientManager ingredientManager, IModIdHelper modIdHelper, int createdIndex) {
61-
this.createdIndex = createdIndex;
62-
65+
protected ListElementInfo(IListElement<V> element, IIngredientManager ingredientManager, IModIdHelper modIdHelper) {
6366
this.element = element;
6467
ITypedIngredient<V> value = element.getTypedIngredient();
6568
V ingredient = value.getIngredient();
69+
IIngredientHelper<V> ingredientHelper = ingredientManager.getIngredientHelper(value.getType());
6670
this.resourceLocation = ingredientHelper.getResourceLocation(ingredient);
6771
String displayModId = ingredientHelper.getDisplayModId(ingredient);
6872
String modId = this.resourceLocation.getNamespace();
@@ -193,6 +197,6 @@ public ITypedIngredient<V> getTypedIngredient() {
193197

194198
@Override
195199
public int getCreatedIndex() {
196-
return createdIndex;
200+
return element.getCreatedIndex();
197201
}
198202
}

0 commit comments

Comments
 (0)