diff --git a/loader-neoforge/src/main/java/org/cyclops/cyclopscore/client/gui/container/ContainerScreenScrolling.java b/loader-neoforge/src/main/java/org/cyclops/cyclopscore/client/gui/container/ContainerScreenScrolling.java index ae3f718b3d..21f0144119 100644 --- a/loader-neoforge/src/main/java/org/cyclops/cyclopscore/client/gui/container/ContainerScreenScrolling.java +++ b/loader-neoforge/src/main/java/org/cyclops/cyclopscore/client/gui/container/ContainerScreenScrolling.java @@ -4,6 +4,7 @@ import net.minecraft.client.gui.components.EditBox; import net.minecraft.core.NonNullList; import net.minecraft.network.chat.Component; +import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.Slot; import org.cyclops.cyclopscore.client.gui.component.WidgetScrollBar; @@ -62,7 +63,7 @@ public void init() { this.scrollbar = new WidgetScrollBar(this.leftPos + getScrollX(), this.topPos + getScrollY(), getScrollHeight(), Component.translatable("gui.cyclopscore.scrollbar"), getMenu(), getMenu().getPageSize(), getScrollRegion()); - this.scrollbar.setTotalRows(getMenu().getFilteredItemCount() / getMenu().getColumns()); + this.scrollbar.setTotalRows(getTotalRows()); } else { this.scrollbar.setX(this.leftPos + getScrollX()); this.scrollbar.setY(this.topPos + getScrollY()); @@ -147,10 +148,22 @@ public boolean mouseDragged(double mouseX, double mouseY, int mouseButton, doubl protected void updateSearch(String searchString) { getMenu().updateFilter(searchString); - this.scrollbar.setTotalRows(getMenu().getFilteredItemCount() / getMenu().getColumns()); + this.scrollbar.setTotalRows(getTotalRows()); this.scrollbar.scrollTo(0); } + /** + * The number of rows that the filtered elements occupy. + * + * This is rounded up, as a last row that is only partially filled + * must still be reachable by the scrollbar. + * + * @return The number of rows. + */ + protected int getTotalRows() { + return Mth.ceil((double) getMenu().getFilteredItemCount() / getMenu().getColumns()); + } + public EditBox getSearchField() { return searchField; } diff --git a/loader-neoforge/src/main/java/org/cyclops/cyclopscore/inventory/container/ScrollingInventoryContainer.java b/loader-neoforge/src/main/java/org/cyclops/cyclopscore/inventory/container/ScrollingInventoryContainer.java index 29db532e0a..6563a67a65 100644 --- a/loader-neoforge/src/main/java/org/cyclops/cyclopscore/inventory/container/ScrollingInventoryContainer.java +++ b/loader-neoforge/src/main/java/org/cyclops/cyclopscore/inventory/container/ScrollingInventoryContainer.java @@ -40,7 +40,7 @@ public ScrollingInventoryContainer(@Nullable MenuType type, int id, Inventory this.unfilteredItems = Lists.newArrayList(items); this.filteredItems = Lists.newLinkedList(); this.visibleItems = (List) Arrays.asList(new Object[getPageSize() * getColumns()]); - for(int i = 0; i < getPageSize(); i++) { + for(int i = 0; i < this.visibleItems.size(); i++) { this.visibleItems.set(i, null); } this.itemSearchPredicate = filterer; @@ -114,11 +114,11 @@ protected void enableElementAt(int visibleIndex, int elementIndex, E element) { /** * Check if the given element is visible. - * @param row The row the the given element is at. + * @param row The index of the given element within the visible elements. * @return If it is visible. */ public boolean isElementVisible(int row) { - return row < getPageSize() && getVisibleElement(row) != null; + return row < getPageSize() * getColumns() && getVisibleElement(row) != null; } /**