diff options
| author | shedaniel <daniel@shedaniel.me> | 2024-09-17 13:46:46 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2024-09-17 13:46:57 +0800 |
| commit | b8d0975527d86b79a1f9c160415baf8a6e6cf5cb (patch) | |
| tree | 1101fc8b899598ac8e88362932eab01c95a3475c /runtime/src | |
| parent | 428d5359f0aff3b9922c7a80058f5214cf7f8340 (diff) | |
| download | RoughlyEnoughItems-b8d0975527d86b79a1f9c160415baf8a6e6cf5cb.tar.gz RoughlyEnoughItems-b8d0975527d86b79a1f9c160415baf8a6e6cf5cb.tar.bz2 RoughlyEnoughItems-b8d0975527d86b79a1f9c160415baf8a6e6cf5cb.zip | |
New Slot.withEntriesListener
Diffstat (limited to 'runtime/src')
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java | 7 | ||||
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/impl/client/util/OriginalRetainingCyclingList.java | 42 |
2 files changed, 42 insertions, 7 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java index 58e745e34..874e94087 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java @@ -84,6 +84,7 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; import java.util.*; +import java.util.function.Consumer; import java.util.function.Supplier; import java.util.function.UnaryOperator; import java.util.stream.Collectors; @@ -271,6 +272,12 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget { return this; } + @Override + public Slot withEntriesListener(Consumer<Slot> listener) { + this.getCyclingEntries().addListener($ -> listener.accept(this)); + return this; + } + public Slot entries(CyclingList<EntryStack<?>> stacks) { this.getCyclingEntries().setBacking(stacks); if (removeTagMatch) tagMatch = null; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/util/OriginalRetainingCyclingList.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/util/OriginalRetainingCyclingList.java index aeb557d45..50627c2a1 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/util/OriginalRetainingCyclingList.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/util/OriginalRetainingCyclingList.java @@ -26,16 +26,15 @@ package me.shedaniel.rei.impl.client.util; import com.google.common.collect.Iterables; import org.jetbrains.annotations.Nullable; -import java.util.AbstractList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; +import java.util.*; +import java.util.function.Consumer; import java.util.function.Supplier; public class OriginalRetainingCyclingList<T> implements CyclingList.Mutable<T> { private final Supplier<T> empty; @Nullable private CyclingList<T> backing = null; + private List<Consumer<CyclingList<T>>> listeners = List.of(); public OriginalRetainingCyclingList(Supplier<T> empty) { this.empty = empty; @@ -56,7 +55,9 @@ public class OriginalRetainingCyclingList<T> implements CyclingList.Mutable<T> { @Override public T previous() { if (this.backing == null) return empty.get(); - return this.backing.previous(); + T previous = this.backing.previous(); + notifyListeners(); + return previous; } @Override @@ -72,7 +73,9 @@ public class OriginalRetainingCyclingList<T> implements CyclingList.Mutable<T> { @Override public T next() { if (this.backing == null) return empty.get(); - return this.backing.next(); + T next = this.backing.next(); + notifyListeners(); + return next; } @Override @@ -86,11 +89,16 @@ public class OriginalRetainingCyclingList<T> implements CyclingList.Mutable<T> { mutable.add(entry); this.backing = mutable; } + + notifyListeners(); } @Override public void resetToStart() { - if (this.backing != null) this.backing.resetToStart(); + if (this.backing != null) { + this.backing.resetToStart(); + notifyListeners(); + }; } @Override @@ -118,6 +126,8 @@ public class OriginalRetainingCyclingList<T> implements CyclingList.Mutable<T> { mutable.addAll(entries); this.backing = mutable; } + + notifyListeners(); } } @@ -128,10 +138,13 @@ public class OriginalRetainingCyclingList<T> implements CyclingList.Mutable<T> { } else { this.backing = null; } + + notifyListeners(); } public void setBacking(@Nullable CyclingList<T> backing) { this.backing = backing; + notifyListeners(); } private static <T> AbstractList<T> getListFromCollection(Collection<? extends T> entries) { @@ -173,4 +186,19 @@ public class OriginalRetainingCyclingList<T> implements CyclingList.Mutable<T> { if (this.backing == null) return CyclingList.of(this.empty); return this.backing; } + + public void addListener(Consumer<CyclingList<T>> listener) { + if (this.listeners instanceof ArrayList<Consumer<CyclingList<T>>> list) { + list.add(listener); + } else { + this.listeners = new ArrayList<>(this.listeners); + this.listeners.add(listener); + } + } + + private void notifyListeners() { + for (Consumer<CyclingList<T>> listener : this.listeners) { + listener.accept(this); + } + } } |
