diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-05-16 17:45:22 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-05-16 17:45:22 +0800 |
| commit | b657842bcddcb65fb658d4cd9835e7fa15e1c236 (patch) | |
| tree | f42511d9bb3ac413c03245391f26cfa6b0496c72 /api | |
| parent | 4b55e2af04551f7b01047c9b47822e3a184e6362 (diff) | |
| download | RoughlyEnoughItems-b657842bcddcb65fb658d4cd9835e7fa15e1c236.tar.gz RoughlyEnoughItems-b657842bcddcb65fb658d4cd9835e7fa15e1c236.tar.bz2 RoughlyEnoughItems-b657842bcddcb65fb658d4cd9835e7fa15e1c236.zip | |
Update JEI API to 7.6.4 & Fix #520
Diffstat (limited to 'api')
| -rw-r--r-- | api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparator.java (renamed from api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/ItemComparator.java) | 27 | ||||
| -rw-r--r-- | api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparatorRegistry.java | 49 | ||||
| -rw-r--r-- | api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/FluidComparatorRegistry.java | 45 | ||||
| -rw-r--r-- | api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/ItemComparatorRegistry.java | 28 | ||||
| -rw-r--r-- | api/src/main/java/me/shedaniel/rei/api/common/plugins/REIPlugin.java | 10 |
5 files changed, 125 insertions, 34 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/ItemComparator.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparator.java index 09c36cec6..c40966887 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/ItemComparator.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparator.java @@ -23,6 +23,7 @@ package me.shedaniel.rei.api.common.entry.comparison; +import me.shedaniel.architectury.fluid.FluidStack; import me.shedaniel.rei.impl.Internals; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; @@ -32,15 +33,15 @@ import java.util.Objects; import java.util.function.ToLongFunction; /** - * Hasher implementation for {@link ItemStack}. + * Hasher implementation for {@link T}. */ @FunctionalInterface -public interface ItemComparator { - static ItemComparator noop() { +public interface EntryComparator<T> { + static <T> EntryComparator<T> noop() { return (context, stack) -> 1; } - static ItemComparator itemNbt() { + static EntryComparator<ItemStack> itemNbt() { ToLongFunction<Tag> nbtHasher = nbtHasher("Count"); return (context, stack) -> { CompoundTag tag = stack.getTag(); @@ -48,23 +49,31 @@ public interface ItemComparator { }; } + static EntryComparator<FluidStack> fluidNbt() { + ToLongFunction<Tag> nbtHasher = nbtHasher("Amount"); + return (context, stack) -> { + CompoundTag tag = stack.getTag(); + return tag == null ? 0L : nbtHasher.applyAsLong(tag); + }; + } + static ToLongFunction<Tag> nbtHasher(String... ignoredKeys) { return Internals.getNbtHasher(ignoredKeys); } - long hash(ComparisonContext context, ItemStack stack); + long hash(ComparisonContext context, T stack); - default ItemComparator onlyExact() { - ItemComparator self = this; + default EntryComparator<T> onlyExact() { + EntryComparator<T> self = this; return (context, stack) -> { return context.isExact() ? self.hash(context, stack) : 1; }; } - default ItemComparator then(ItemComparator other) { + default EntryComparator<T> then(EntryComparator<T> other) { Objects.requireNonNull(other); - ItemComparator self = this; + EntryComparator<T> self = this; return (context, stack) -> { long hash = 1L; diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparatorRegistry.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparatorRegistry.java new file mode 100644 index 000000000..ba77326e6 --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparatorRegistry.java @@ -0,0 +1,49 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021 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.common.entry.comparison; + +import me.shedaniel.rei.api.common.plugins.REIPlugin; +import me.shedaniel.rei.api.common.registry.Reloadable; + +/** + * Registry for registering custom methods for identifying variants of {@link T}. + * The default comparator is {@link EntryComparator#noop()}, which does not compare the NBT of the entries. + * <p> + * This comparator is used when the comparison context is {@link ComparisonContext#EXACT}. + */ +public interface EntryComparatorRegistry<T, S> extends Reloadable<REIPlugin<?>> { + void register(EntryComparator<T> comparator, S entry); + + default void register(EntryComparator<T> comparator, S... entries) { + for (S entry : entries) { + register(comparator, entry); + } + } + + long hashOf(ComparisonContext context, T stack); + + boolean containsComparator(S entry); + + int comparatorSize(); +} diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/FluidComparatorRegistry.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/FluidComparatorRegistry.java new file mode 100644 index 000000000..f8489ef2e --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/FluidComparatorRegistry.java @@ -0,0 +1,45 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021 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.common.entry.comparison; + +import me.shedaniel.architectury.fluid.FluidStack; +import me.shedaniel.rei.api.common.plugins.PluginManager; +import net.minecraft.world.level.material.Fluid; + +public interface FluidComparatorRegistry extends EntryComparatorRegistry<FluidStack, Fluid> { + /** + * @return the instance of {@link FluidComparatorRegistry} + */ + static FluidComparatorRegistry getInstance() { + return PluginManager.getInstance().get(FluidComparatorRegistry.class); + } + + default void registerNbt(Fluid fluid) { + register(EntryComparator.fluidNbt(), fluid); + } + + default void registerNbt(Fluid... fluids) { + register(EntryComparator.fluidNbt(), fluids); + } +} diff --git a/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/ItemComparatorRegistry.java b/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/ItemComparatorRegistry.java index 99f8a0038..299eab648 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/ItemComparatorRegistry.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/ItemComparatorRegistry.java @@ -24,18 +24,10 @@ package me.shedaniel.rei.api.common.entry.comparison; import me.shedaniel.rei.api.common.plugins.PluginManager; -import me.shedaniel.rei.api.common.plugins.REIPlugin; -import me.shedaniel.rei.api.common.registry.Reloadable; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -/** - * Registry for registering custom methods for identifying variants of {@link net.minecraft.world.item.ItemStack}. - * The default comparator is {@link ItemComparator#noop()}, which does not compare the NBT of the items. - * <p> - * This comparator is used when the comparison context is {@link ComparisonContext#EXACT}. - */ -public interface ItemComparatorRegistry extends Reloadable<REIPlugin<?>> { +public interface ItemComparatorRegistry extends EntryComparatorRegistry<ItemStack, Item> { /** * @return the instance of {@link ItemComparatorRegistry} */ @@ -43,25 +35,11 @@ public interface ItemComparatorRegistry extends Reloadable<REIPlugin<?>> { return PluginManager.getInstance().get(ItemComparatorRegistry.class); } - void register(ItemComparator comparator, Item item); - - default void register(ItemComparator comparator, Item... items) { - for (Item item : items) { - register(comparator, item); - } - } - default void registerNbt(Item item) { - register(ItemComparator.itemNbt(), item); + register(EntryComparator.itemNbt(), item); } default void registerNbt(Item... items) { - register(ItemComparator.itemNbt(), items); + register(EntryComparator.itemNbt(), items); } - - long hashOf(ComparisonContext context, ItemStack stack); - - boolean containsComparator(Item item); - - int comparatorSize(); } diff --git a/api/src/main/java/me/shedaniel/rei/api/common/plugins/REIPlugin.java b/api/src/main/java/me/shedaniel/rei/api/common/plugins/REIPlugin.java index 0c5559f05..44998c914 100644 --- a/api/src/main/java/me/shedaniel/rei/api/common/plugins/REIPlugin.java +++ b/api/src/main/java/me/shedaniel/rei/api/common/plugins/REIPlugin.java @@ -24,6 +24,7 @@ package me.shedaniel.rei.api.common.plugins; import me.shedaniel.rei.api.common.display.DisplaySerializerRegistry; +import me.shedaniel.rei.api.common.entry.comparison.FluidComparatorRegistry; import me.shedaniel.rei.api.common.entry.comparison.ItemComparatorRegistry; import me.shedaniel.rei.api.common.entry.type.EntryTypeRegistry; import me.shedaniel.rei.api.common.fluid.FluidSupportProvider; @@ -69,6 +70,15 @@ public interface REIPlugin<P extends REIPlugin<?>> extends Comparable<REIPlugin< } /** + * Registers fluid comparators for identifying variants of {@link me.shedaniel.architectury.fluid.FluidStack}. + * + * @see FluidComparatorRegistry + */ + @ApiStatus.OverrideOnly + default void registerFluidComparators(FluidComparatorRegistry registry) { + } + + /** * Registers new item to fluid support providers. * * @param support the support registry |
