diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-06-20 20:42:33 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2023-05-29 21:02:40 +0800 |
| commit | 35841904482b47e315643ca59c3ca42a5187172e (patch) | |
| tree | 860565de839f698b16affa505783e4f24d6d92b4 /runtime/src/main/java | |
| parent | 74893ae97ff5406745bb6d388f09f0060488893f (diff) | |
| download | RoughlyEnoughItems-35841904482b47e315643ca59c3ca42a5187172e.tar.gz RoughlyEnoughItems-35841904482b47e315643ca59c3ca42a5187172e.tar.bz2 RoughlyEnoughItems-35841904482b47e315643ca59c3ca42a5187172e.zip | |
Separate stacks in the EntryListWidget
Diffstat (limited to 'runtime/src/main/java')
4 files changed, 37 insertions, 16 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java index b0cef4aef..e28d1c552 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/EntryListWidget.java @@ -66,7 +66,6 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.ApiStatus; -import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -76,7 +75,6 @@ public abstract class EntryListWidget extends WidgetWithBounds implements Overla private static final int SIZE = 18; protected final RegionRenderingDebugger debugger = new RegionRenderingDebugger(); protected Rectangle bounds, innerBounds; - protected List<EntryStack<?>> allStacks = Collections.emptyList(); protected List<EntryListStackEntry> entries = Collections.emptyList(); public final NumberAnimator<Double> scaleIndicator = ValueAnimator.ofDouble(0.0D) .withConvention(() -> 0.0D, 8000); @@ -264,7 +262,7 @@ public abstract class EntryListWidget extends WidgetWithBounds implements Overla if (favoritesListWidget != null) { favoritesListWidget.updateFavoritesBounds(searchTerm); } - if (allStacks == null || (ConfigObject.getInstance().isFavoritesEnabled() && favoritesListWidget == null)) { + if (ConfigObject.getInstance().isFavoritesEnabled() && favoritesListWidget == null) { updateSearch(searchTerm, true); } else { updateEntriesPosition(); @@ -292,14 +290,13 @@ public abstract class EntryListWidget extends WidgetWithBounds implements Overla protected abstract void updateEntries(int entrySize, boolean zoomed); - @ApiStatus.Internal - public List<EntryStack<?>> getAllStacks() { - return allStacks; - } + public abstract List<EntryStack<?>> getStacks(); + + protected abstract void setStacks(List<EntryStack<?>> stacks); public void updateSearch(String searchTerm, boolean ignoreLastSearch) { EntryListSearchManager.INSTANCE.update(searchTerm, ignoreLastSearch, stacks -> { - allStacks = stacks; + setStacks(stacks); updateEntriesPosition(); }); debugger.debugTime = ConfigObject.getInstance().doDebugRenderTimeRequired(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java index 2f0329149..926c8726f 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/PaginatedEntryListWidget.java @@ -40,11 +40,13 @@ import me.shedaniel.rei.impl.client.gui.widget.EntryWidget; import net.minecraft.util.Mth; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class PaginatedEntryListWidget extends EntryListWidget { + private List<EntryStack<?>> stacks = new ArrayList<>(); private int page; @Override @@ -89,7 +91,7 @@ public class PaginatedEntryListWidget extends EntryListWidget { @Override public int getTotalPages() { - return Mth.ceil(allStacks.size() / (float) entries.size()); + return Mth.ceil(stacks.size() / (float) entries.size()); } @Override @@ -108,7 +110,7 @@ public class PaginatedEntryListWidget extends EntryListWidget { } } page = Math.max(Math.min(page, getTotalPages() - 1), 0); - List<EntryStack<?>> subList = allStacks.stream().skip(Math.max(0, page * entries.size())).limit(Math.max(0, entries.size() - Math.max(0, -page * entries.size()))).collect(Collectors.toList()); + List<EntryStack<?>> subList = stacks.stream().skip(Math.max(0, page * entries.size())).limit(Math.max(0, entries.size() - Math.max(0, -page * entries.size()))).collect(Collectors.toList()); for (int i = 0; i < subList.size(); i++) { EntryStack<?> stack = subList.get(i); entries.get(i + Math.max(0, -page * entries.size())).clearStacks().entry(stack); @@ -117,6 +119,16 @@ public class PaginatedEntryListWidget extends EntryListWidget { } @Override + public List<EntryStack<?>> getStacks() { + return stacks; + } + + @Override + public void setStacks(List<EntryStack<?>> stacks) { + this.stacks = stacks; + } + + @Override public Stream<EntryStack<?>> getEntries() { return entries.stream().map(EntryWidget::getCurrentEntry); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/ScrolledEntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/ScrolledEntryListWidget.java index 2e4cd8b20..2edde5a34 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/ScrolledEntryListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/entrylist/ScrolledEntryListWidget.java @@ -37,10 +37,12 @@ import me.shedaniel.rei.impl.client.gui.widget.EntryWidget; import net.minecraft.client.gui.screens.Screen; import net.minecraft.util.Mth; +import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; public class ScrolledEntryListWidget extends EntryListWidget { + private List<EntryStack<?>> stacks = new ArrayList<>(); protected int blockedCount; protected final ScrollingContainer scrolling = new ScrollingContainer() { @Override @@ -50,7 +52,7 @@ public class ScrolledEntryListWidget extends EntryListWidget { @Override public int getMaxScrollHeight() { - return Mth.ceil((allStacks.size() + blockedCount) / (innerBounds.width / (float) entrySize())) * entrySize(); + return Mth.ceil((stacks.size() + blockedCount) / (innerBounds.width / (float) entrySize())) * entrySize(); } }; @@ -70,9 +72,9 @@ public class ScrolledEntryListWidget extends EntryListWidget { entryBounds.y = entry.backupY - scrolling.scrollAmountInt(); if (entryBounds.y > this.bounds.getMaxY()) break; - if (allStacks.size() <= i) break; + if (stacks.size() <= i) break; if (notSteppingOnExclusionZones(entryBounds.x, entryBounds.y, entryBounds.width, entryBounds.height)) { - EntryStack<?> stack = allStacks.get(i++); + EntryStack<?> stack = stacks.get(i++); entry.clearStacks(); if (!stack.isEmpty()) { entry.entry(stack); @@ -109,7 +111,7 @@ public class ScrolledEntryListWidget extends EntryListWidget { protected void updateEntries(int entrySize, boolean zoomed) { int width = innerBounds.width / entrySize; int pageHeight = innerBounds.height / entrySize; - int slotsToPrepare = Math.max(allStacks.size() * 3, width * pageHeight * 3); + int slotsToPrepare = Math.max(stacks.size() * 3, width * pageHeight * 3); int currentX = 0; int currentY = 0; List<EntryListStackEntry> entries = Lists.newArrayList(); @@ -152,6 +154,16 @@ public class ScrolledEntryListWidget extends EntryListWidget { } @Override + public List<EntryStack<?>> getStacks() { + return stacks; + } + + @Override + public void setStacks(List<EntryStack<?>> stacks) { + this.stacks = stacks; + } + + @Override public Stream<EntryStack<?>> getEntries() { int skip = Math.max(0, Mth.floor(scrolling.scrollAmount() / (float) entrySize())); int nextIndex = skip * innerBounds.width / entrySize(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchField.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchField.java index 88dc31964..bb4d236fa 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchField.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/search/OverlaySearchField.java @@ -95,7 +95,7 @@ public class OverlaySearchField extends TextFieldWidget implements TextFieldWidg return TextTransformations.forwardWithTransformation(text, (s, charIndex, c) -> { byte arg = highlighter.highlighted[charIndex + index]; Style style = Style.EMPTY; - if (isMain && ScreenOverlayImpl.getEntryListWidget().getAllStacks().isEmpty() && !getText().isEmpty()) { + if (isMain && ScreenOverlayImpl.getEntryListWidget().getStacks().isEmpty() && !getText().isEmpty()) { style = ERROR_STYLE; } if (arg > 0) { @@ -239,7 +239,7 @@ public class OverlaySearchField extends TextFieldWidget implements TextFieldWidg isHighlighting = isHighlighting && ConfigObject.getInstance().isInventoryHighlightingAllowed(); if (isMain && isHighlighting) { fill(matrices, this.getBounds().x - 1, this.getBounds().y - 1, this.getBounds().x + this.getBounds().width + 1, this.getBounds().y + this.getBounds().height + 1, -852212); - } else if (isMain && ScreenOverlayImpl.getEntryListWidget().getAllStacks().isEmpty() && !getText().isEmpty()) { + } else if (isMain && ScreenOverlayImpl.getEntryListWidget().getStacks().isEmpty() && !getText().isEmpty()) { fill(matrices, this.getBounds().x - 1, this.getBounds().y - 1, this.getBounds().x + this.getBounds().width + 1, this.getBounds().y + this.getBounds().height + 1, -43691); } else { super.renderBorder(matrices); |
