diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-11-27 17:50:11 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-11-27 18:05:58 +0800 |
| commit | 2123544fcf3ad7ec6d89e671a993a75737e3a44e (patch) | |
| tree | d9f47994a2d3f715914eaa703ad05c55aba274b5 /api/src/main/java/me/shedaniel | |
| parent | 9c865aff50b8c49e89ee1a7d6319d52cdcdd229a (diff) | |
| download | RoughlyEnoughItems-2123544fcf3ad7ec6d89e671a993a75737e3a44e.tar.gz RoughlyEnoughItems-2123544fcf3ad7ec6d89e671a993a75737e3a44e.tar.bz2 RoughlyEnoughItems-2123544fcf3ad7ec6d89e671a993a75737e3a44e.zip | |
Make filtering more immediate
Diffstat (limited to 'api/src/main/java/me/shedaniel')
4 files changed, 64 insertions, 0 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringContext.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringContext.java index d46709af9..8cf2179e0 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringContext.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringContext.java @@ -23,6 +23,7 @@ package me.shedaniel.rei.api.client.entry.filtering; +import it.unimi.dsi.fastutil.longs.LongCollection; import me.shedaniel.rei.api.common.entry.EntryStack; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -53,4 +54,28 @@ public interface FilteringContext { * @return the list of stacks that are previously marked as hidden from other filtering rules. */ Collection<EntryStack<?>> getHiddenStacks(); + + /** + * Returns the list of hashes that are previously marked as <b>shown</b> from other filtering rules. + * + * @return the list of hashes that are previously marked as shown from other filtering rules. + */ + @ApiStatus.Experimental + LongCollection getShownExactHashes(); + + /** + * Returns the list of hashes that are previously marked as <b>hidden</b> from other filtering rules. + * + * @return the list of hashes that are previously marked as hidden from other filtering rules. + */ + @ApiStatus.Experimental + LongCollection getUnsetExactHashes(); + + /** + * Returns the list of hashes that are previously marked as <b>hidden</b> from other filtering rules. + * + * @return the list of hashes that are previously marked as hidden from other filtering rules. + */ + @ApiStatus.Experimental + LongCollection getHiddenExactHashes(); } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRule.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRule.java index 1f3cb5b50..a133de686 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRule.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRule.java @@ -23,9 +23,15 @@ package me.shedaniel.rei.api.client.entry.filtering; +import it.unimi.dsi.fastutil.longs.LongCollection; +import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; +import me.shedaniel.rei.api.common.entry.EntryStack; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; + +import java.util.Collection; /** * A filtering rule type that is used to filter the entries on the entry panel, @@ -63,4 +69,20 @@ public interface FilteringRule<Cache> { * @return the result of the processing */ FilteringResult processFilteredStacks(FilteringContext context, FilteringResultFactory resultFactory, Cache cache, boolean async); + + /** + * Returns whether the entry registry is in its reloading phase. + * Registration after the reloading phase will be slow and may not be reflected immediately. + * + * @return whether the entry registry is in its reloading phase + */ + @ApiStatus.NonExtendable + default boolean isReloading() { + return EntryRegistry.getInstance().isReloading(); + } + + @ApiStatus.NonExtendable + default void markDirty(Collection<EntryStack<?>> stacks, @Nullable LongCollection hashes) { + EntryRegistry.getInstance().markFilteringRuleDirty(this, stacks, hashes); + } }
\ No newline at end of file diff --git a/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/base/BasicFilteringRule.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/base/BasicFilteringRule.java index 26b2986c2..4800a430e 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/base/BasicFilteringRule.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/base/BasicFilteringRule.java @@ -26,11 +26,15 @@ package me.shedaniel.rei.api.client.entry.filtering.base; import me.shedaniel.rei.api.client.entry.filtering.FilteringResult; import me.shedaniel.rei.api.client.entry.filtering.FilteringRule; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; +import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.registry.Reloadable; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import org.jetbrains.annotations.ApiStatus; +import java.util.Collection; +import java.util.function.Supplier; + /** * The basic filtering rule that can be used to filter entries, * without registering a new filtering rule type, for external @@ -41,4 +45,12 @@ import org.jetbrains.annotations.ApiStatus; @ApiStatus.Experimental @Environment(EnvType.CLIENT) public interface BasicFilteringRule<Cache> extends Reloadable<REIClientPlugin>, FilteringRule<Cache>, FilteringResult { + MarkDirty hide(Supplier<Collection<EntryStack<?>>> provider); + + MarkDirty show(Supplier<Collection<EntryStack<?>>> provider); + + @ApiStatus.NonExtendable + interface MarkDirty { + void markDirty(); + } } diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/entry/EntryRegistry.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/entry/EntryRegistry.java index 63ed14d72..9e4713957 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/entry/EntryRegistry.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/entry/EntryRegistry.java @@ -23,6 +23,8 @@ package me.shedaniel.rei.api.client.registry.entry; +import it.unimi.dsi.fastutil.longs.LongCollection; +import me.shedaniel.rei.api.client.entry.filtering.FilteringRule; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.plugins.PluginManager; @@ -207,4 +209,7 @@ public interface EntryRegistry extends Reloadable<REIClientPlugin> { * @return whether the registry is in its reloading phase */ boolean isReloading(); + + @ApiStatus.Experimental + <Cache> void markFilteringRuleDirty(FilteringRule<Cache> cacheFilteringRule, Collection<EntryStack<?>> stacks, @Nullable LongCollection hashes); } |
