Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package mezz.jei.gui.overlay.bookmarks;

import it.unimi.dsi.fastutil.ints.IntList;
import mezz.jei.Internal;
import mezz.jei.bookmarks.BookmarkItem;
import mezz.jei.config.Config;
Expand Down Expand Up @@ -33,7 +34,7 @@ public class BookmarkGridWithNavigation implements IShowsRecipeFocuses, IMouseHa

private int firstItemIndex = 0;
private final IPaged pageDelegate;
private List<Integer> pageBoundaries;
private IntList pageBoundaries;
private final PageNavigation navigation;

private BookmarkGroupOrganizer groupOrganizer;
Expand Down Expand Up @@ -190,15 +191,15 @@ public boolean nextPage() {
updateLayout(true);
return true;
}
firstItemIndex = pageBoundaries.get(pageNum + 1);
firstItemIndex = pageBoundaries.getInt(pageNum + 1);
updateLayout(false);
return true;
}

@Override
public boolean previousPage() {
int pageNum = getPageNumber();
firstItemIndex = pageBoundaries.get(pageNum == 0 ? pageBoundaries.size() - 1 : pageNum - 1);
firstItemIndex = pageBoundaries.getInt(pageNum == 0 ? pageBoundaries.size() - 1 : pageNum - 1);
updateLayout(false);
return true;
}
Expand Down Expand Up @@ -232,7 +233,7 @@ public int getPageNumber() {
index--;
}
}
firstItemIndex = pageBoundaries.get(index); // This side effect is fine.
firstItemIndex = pageBoundaries.getInt(index); // This side effect is fine.
return index;
}
}
Expand Down
41 changes: 31 additions & 10 deletions src/main/java/mezz/jei/render/BookmarkListBatchRenderer.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package mezz.jei.render;

import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList;
import mezz.jei.config.Config;
import mezz.jei.gui.ingredients.IIngredientListElement;
import mezz.jei.gui.overlay.bookmarks.group.BookmarkGroupOrganizer;
Expand Down Expand Up @@ -33,7 +34,7 @@ public void set(final int startIndex, List<IIngredientListElement> ingredientLis
if (!ingredientList.isEmpty()) {
int i = startIndex;
int currentGroup = ingredientList.get(i).getGroupIndex();
List<Integer> groupIndices = new IntArrayList();
IntList groupIndices = new IntArrayList();
for (List<IngredientListSlot> row : slots) {
for (int column = 0; column < row.size(); column++) {
IngredientListSlot ingredientListSlot = row.get(column);
Expand Down Expand Up @@ -69,36 +70,56 @@ public void set(final int startIndex, List<IIngredientListElement> ingredientLis
invalidateBuffer();
}

public List<Integer> sizePages(List<IIngredientListElement> ingredientList) {
List<Integer> pages = new IntArrayList();
public IntList sizePages(List<IIngredientListElement> ingredientList) {
IntList pages = new IntArrayList();
pages.add(0);
if (ingredientList.isEmpty() || slots.isEmpty()) {
return pages;
}

int ingredientIndex = 0;
int currentGroup = ingredientList.get(ingredientIndex).getGroupIndex();
while (true) {
for (int rowIndex = 0; rowIndex < slots.size(); rowIndex++) {

while (ingredientIndex < ingredientList.size()) {
int pageStartIndex = ingredientIndex;
boolean hasUsableSlot = false;

for (int rowIndex = 0; rowIndex < slots.size() && ingredientIndex < ingredientList.size(); rowIndex++) {
List<IngredientListSlot> row = slots.get(rowIndex);
for (int column = 0; column < row.size(); column++) {
if (row.isEmpty()) {
continue;
}

for (int column = 0; column < row.size() && ingredientIndex < ingredientList.size(); column++) {
IngredientListSlot ingredientListSlot = row.get(column);
if (ingredientListSlot.isBlocked()) {
continue;
}

hasUsableSlot = true;

IIngredientListElement<?> element = ingredientList.get(ingredientIndex);
if (element.getGroupIndex() != currentGroup || element.startsNewRow()) {
currentGroup = element.getGroupIndex();
if (column > 0) {
break;
}
}
if (ingredientList.size() <= ++ingredientIndex) {
return pages;
}

ingredientIndex++;
}
}
pages.add(ingredientIndex);

if (!hasUsableSlot || ingredientIndex == pageStartIndex) {
return pages;
}

if (ingredientIndex < ingredientList.size()) {
pages.add(ingredientIndex);
currentGroup = ingredientList.get(ingredientIndex).getGroupIndex();
}
}

return pages;
}
}