diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-11-09 22:22:39 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-11-09 22:23:11 +0800 |
| commit | a932ccf66dc4f0b14de780879b00e4d4a9ea1f0c (patch) | |
| tree | daec80c222da6969bef0c42f0b1636a21381438b | |
| parent | 66bd26b6ab2172a834d06e9f70d09a659faa8ebd (diff) | |
| parent | c6f180f73bcbf5aa23b8b741e6a4f617439214e5 (diff) | |
| download | RoughlyEnoughItems-a932ccf66dc4f0b14de780879b00e4d4a9ea1f0c.tar.gz RoughlyEnoughItems-a932ccf66dc4f0b14de780879b00e4d4a9ea1f0c.tar.bz2 RoughlyEnoughItems-a932ccf66dc4f0b14de780879b00e4d4a9ea1f0c.zip | |
Merge remote-tracking branch 'origin/9.x-1.19' into feature/1.19.3
65 files changed, 2489 insertions, 804 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java b/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java index c994980cd..a932071db 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/config/ConfigObject.java @@ -28,6 +28,7 @@ import me.shedaniel.rei.api.client.REIRuntime; import me.shedaniel.rei.api.client.config.entry.EntryStackProvider; import me.shedaniel.rei.api.client.favorites.FavoriteEntry; import me.shedaniel.rei.api.client.gui.config.*; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.resources.ResourceLocation; @@ -35,6 +36,7 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.Map; @Environment(EnvType.CLIENT) public interface ConfigObject { @@ -311,6 +313,9 @@ public interface ConfigObject { boolean shouldFilterDisplays(); @ApiStatus.Experimental + Map<CategoryIdentifier<?>, Boolean> getFilteringQuickCraftCategories(); + + @ApiStatus.Experimental boolean shouldAsyncSearch(); @ApiStatus.Experimental 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 new file mode 100644 index 000000000..d46709af9 --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringContext.java @@ -0,0 +1,56 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.api.client.entry.filtering; + +import me.shedaniel.rei.api.common.entry.EntryStack; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import org.jetbrains.annotations.ApiStatus; + +import java.util.Collection; + +@ApiStatus.Experimental +@Environment(EnvType.CLIENT) +public interface FilteringContext { + /** + * Returns the list of stacks that are previously marked as <b>shown</b> from other filtering rules. + * + * @return the list of stacks that are previously marked as shown from other filtering rules. + */ + Collection<EntryStack<?>> getShownStacks(); + + /** + * Returns the list of stacks that have not been processed by any filtering rules. + * + * @return the list of stacks that have not been processed by any filtering rules. + */ + Collection<EntryStack<?>> getUnsetStacks(); + + /** + * Returns the list of stacks that are previously marked as <b>hidden</b> from other filtering rules. + * + * @return the list of stacks that are previously marked as hidden from other filtering rules. + */ + Collection<EntryStack<?>> getHiddenStacks(); +} diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/AbstractFilteringRule.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringResult.java index 4ab670fbc..4d4392ae9 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/AbstractFilteringRule.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringResult.java @@ -21,20 +21,23 @@ * SOFTWARE. */ -package me.shedaniel.rei.impl.client.entry.filtering; +package me.shedaniel.rei.api.client.entry.filtering; +import me.shedaniel.rei.api.common.entry.EntryStack; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import org.jetbrains.annotations.ApiStatus; + +import java.util.Collection; @Environment(EnvType.CLIENT) -public abstract class AbstractFilteringRule<T extends AbstractFilteringRule<?>> implements FilteringRule<T> { - @Override - public boolean equals(Object obj) { - return getClass() == obj.getClass(); - } +@ApiStatus.Experimental +public interface FilteringResult { + FilteringResult hide(EntryStack<?> stack); + + FilteringResult hide(Collection<? extends EntryStack<?>> stacks); + + FilteringResult show(EntryStack<?> stack); - @Override - public int hashCode() { - return getClass().hashCode(); - } + FilteringResult show(Collection<? extends EntryStack<?>> stacks); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/FilteringCache.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringResultFactory.java index 388652210..fa391362a 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/FilteringCache.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringResultFactory.java @@ -21,11 +21,9 @@ * SOFTWARE. */ -package me.shedaniel.rei.impl.client.entry.filtering; +package me.shedaniel.rei.api.client.entry.filtering; -import org.jetbrains.annotations.Nullable; - -public interface FilteringCache { - @Nullable - Object getCache(FilteringRule<?> rule); +@FunctionalInterface +public interface FilteringResultFactory { + FilteringResult create(); } 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 new file mode 100644 index 000000000..1f3cb5b50 --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRule.java @@ -0,0 +1,66 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.api.client.entry.filtering; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import org.jetbrains.annotations.ApiStatus; + +/** + * A filtering rule type that is used to filter the entries on the entry panel, + * dictate what shows up in slots, or hide the entire display if all ingredients are filtered. + * + * @param <Cache> the type of the cache + */ +@ApiStatus.Experimental +@Environment(EnvType.CLIENT) +public interface FilteringRule<Cache> { + /** + * Returns the type of this filtering rule. + * + * @return the type of this filtering rule + */ + FilteringRuleType<? extends FilteringRule<Cache>> getType(); + + /** + * Prepares the cache for this filtering rule. + * + * @param async whether the cache should be prepared asynchronously + * @return the cache + */ + default Cache prepareCache(boolean async) { + return null; + } + + /** + * Processes the specified entry with the specified cache. + * + * @param context the context of this filtering + * @param resultFactory the result factory + * @param cache the cache + * @param async whether the stacks should be processed asynchronously + * @return the result of the processing + */ + FilteringResult processFilteredStacks(FilteringContext context, FilteringResultFactory resultFactory, Cache cache, boolean async); +}
\ No newline at end of file diff --git a/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRuleType.java b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRuleType.java new file mode 100644 index 000000000..7891ebbc5 --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/client/entry/filtering/FilteringRuleType.java @@ -0,0 +1,148 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.api.client.entry.filtering; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; + +import java.util.Objects; +import java.util.function.Function; + +/** + * A type of filtering rule. A filtering rule will filter the entries on the entry panel, + * dictate what shows up in slots, or hide the entire display if all ingredients are filtered. + * + * @param <T> the type of the filtering rule + */ +@ApiStatus.Experimental +@Environment(EnvType.CLIENT) +public interface FilteringRuleType<T extends FilteringRule<?>> { + /** + * Serializes the specified filtering rule to a compound tag. + * + * @param rule the filtering rule + * @param tag the compound tag + * @return the serialized compound tag + */ + static CompoundTag save(FilteringRule<?> rule, CompoundTag tag) { + tag.putString("id", rule.getType().getId().toString()); + tag.put("rule", ((FilteringRuleType<FilteringRule<?>>) rule.getType()).saveTo(rule, new CompoundTag())); + return tag; + } + + /** + * Serializes the specified filtering rule to a compound tag. + * + * @param rule the filtering rule + * @param tag the compound tag + * @return the serialized compound tag + */ + CompoundTag saveTo(T rule, CompoundTag tag); + + /** + * Deserializes the specified compound tag to a filtering rule. + * + * @param tag the compound tag + * @return the deserialized filtering rule + */ + @Nullable + static FilteringRule&l |
