From bd8aed1e2716fc57fefc640d303e403ba761e3b1 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 12 Feb 2022 03:12:09 +0800 Subject: Update to 22w06a --- .../config/entries/FilteringAddRuleScreen.java | 2 +- .../impl/client/entry/filtering/FilteringRule.java | 17 ++++++-------- .../gui/screen/AbstractDisplayViewingScreen.java | 27 +++++++++++----------- .../search/argument/type/TagArgumentType.java | 23 ++++++++---------- .../rei/impl/common/entry/AbstractEntryStack.java | 23 ++++-------------- .../impl/common/entry/type/EntryRegistryImpl.java | 2 +- .../entry/type/types/BuiltinEntryDefinition.java | 9 ++++---- .../plugin/client/entry/FluidEntryDefinition.java | 10 +++----- .../plugin/client/entry/ItemEntryDefinition.java | 11 ++++----- 9 files changed, 46 insertions(+), 78 deletions(-) (limited to 'runtime/src/main/java') diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringAddRuleScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringAddRuleScreen.java index af4c79d48..61f16508f 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringAddRuleScreen.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringAddRuleScreen.java @@ -65,7 +65,7 @@ public class FilteringAddRuleScreen extends Screen { })); } rulesList = addWidget(new RulesList(minecraft, width, height, 30, height, BACKGROUND_LOCATION)); - for (FilteringRule rule : FilteringRule.REGISTRY) { + for (FilteringRule rule : FilteringRule.REGISTRY.values()) { if (!(rule instanceof ManualFilteringRule)) rulesList.addItem(new DefaultRuleEntry(parent, entry, rule.createNew(), null)); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/FilteringRule.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/FilteringRule.java index a3a8a5e67..e18d2e4ea 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/FilteringRule.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/FilteringRule.java @@ -23,7 +23,8 @@ package me.shedaniel.rei.impl.client.entry.filtering; -import com.mojang.serialization.Lifecycle; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; import me.shedaniel.rei.impl.client.config.entries.FilteringEntry; import me.shedaniel.rei.impl.client.entry.filtering.rules.ManualFilteringRule; import me.shedaniel.rei.impl.client.entry.filtering.rules.SearchFilteringRule; @@ -31,11 +32,8 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.Util; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.core.MappedRegistry; -import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.ApiStatus; @@ -46,14 +44,13 @@ import java.util.function.BiFunction; @ApiStatus.Experimental @Environment(EnvType.CLIENT) public interface FilteringRule> { - ResourceKey>> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation("roughlyenoughitems", "filtering_rule")); - Registry> REGISTRY = Util.make(new MappedRegistry<>(REGISTRY_KEY, Lifecycle.stable()), registry -> { - Registry.register(registry, new ResourceLocation("roughlyenoughitems", "search"), new SearchFilteringRule()); - Registry.register(registry, new ResourceLocation("roughlyenoughitems", "manual"), new ManualFilteringRule()); + BiMap> REGISTRY = Util.make(HashBiMap.create(), registry -> { + registry.put(new ResourceLocation("roughlyenoughitems", "search"), new SearchFilteringRule()); + registry.put(new ResourceLocation("roughlyenoughitems", "manual"), new ManualFilteringRule()); }); static CompoundTag save(FilteringRule rule, CompoundTag tag) { - tag.putString("id", REGISTRY.getKey(rule).toString()); + tag.putString("id", REGISTRY.inverse().get(rule).toString()); tag.put("rule", rule.save(new CompoundTag())); return tag; } @@ -74,7 +71,7 @@ public interface FilteringRule> { } default Component getTitle() { - return Component.nullToEmpty(FilteringRule.REGISTRY.getKey(this).toString()); + return Component.nullToEmpty(FilteringRule.REGISTRY.inverse().get(this).toString()); } default Component getSubtitle() { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java index be9a9754c..4d8263f46 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/AbstractDisplayViewingScreen.java @@ -42,15 +42,12 @@ import me.shedaniel.rei.api.common.util.CollectionUtils; import me.shedaniel.rei.impl.client.ClientHelperImpl; import me.shedaniel.rei.impl.client.gui.widget.EntryWidget; import me.shedaniel.rei.impl.display.DisplaySpec; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.chat.NarratorChatListener; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.core.Holder; import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.Tag; -import net.minecraft.tags.TagCollection; -import net.minecraft.tags.TagContainer; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.Nullable; @@ -58,6 +55,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.stream.Stream; public abstract class AbstractDisplayViewingScreen extends Screen implements DisplayScreen { protected final Map, List> categoryMap; @@ -171,7 +169,6 @@ public abstract class AbstractDisplayViewingScreen extends Screen implements Dis } protected void setupTags(List widgets) { - TagContainer tags = Minecraft.getInstance().getConnection().getTags(); outer: for (EntryWidget widget : Widgets.walk(widgets, EntryWidget.class::isInstance)) { widget.removeTagMatch = false; @@ -185,18 +182,20 @@ public abstract class AbstractDisplayViewingScreen extends Screen implements Dis } } // TODO: Don't hardcode - TagCollection collection; - List objects; + Stream> collection; + List> objects; if (type == VanillaEntryTypes.ITEM) { - collection = tags.getOrEmpty(Registry.ITEM_REGISTRY); - objects = CollectionUtils.map(widget.getEntries(), stack -> stack.castValue().getItem()); + collection = Registry.ITEM.getTagNames(); + objects = CollectionUtils.map(widget.getEntries(), stack -> stack.castValue().getItem().builtInRegistryHolder()); } else if (type == VanillaEntryTypes.FLUID) { - collection = tags.getOrEmpty(Registry.FLUID_REGISTRY); - objects = CollectionUtils.map(widget.getEntries(), stack -> stack.castValue().getFluid()); + collection = Registry.FLUID.getTagNames(); + objects = CollectionUtils.map(widget.getEntries(), stack -> stack.castValue().getFluid().builtInRegistryHolder()); } else continue; - Map.Entry> firstOrNull = CollectionUtils.findFirstOrNull(collection.getAllTags().entrySet(), entry -> entry.getValue().getValues().equals(objects)); + TagKey firstOrNull = collection.filter(key -> + CollectionUtils.anyMatch(objects, holder -> ((Holder) holder).is((TagKey) key))) + .findAny().orElse(null); if (firstOrNull != null) { - widget.tagMatch = firstOrNull.getKey(); + widget.tagMatch = firstOrNull.location(); } } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TagArgumentType.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TagArgumentType.java index e64ebff9b..0e6fa7f98 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TagArgumentType.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/type/TagArgumentType.java @@ -30,13 +30,14 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.network.chat.Style; import net.minecraft.network.chat.TextColor; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; import net.minecraft.util.Unit; import org.apache.commons.lang3.mutable.Mutable; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -import java.util.Collection; +import java.util.Objects; +import java.util.stream.Stream; @ApiStatus.Internal @Environment(EnvType.CLIENT) @@ -69,18 +70,8 @@ public final class TagArgumentType extends ArgumentType { @Override public boolean matches(Mutable data, EntryStack stack, String searchText, Unit filterData) { if (data.getValue() == null) { - Collection tags = stack.getTagsFor(); - if (tags.isEmpty()) { - data.setValue(EMPTY_ARRAY); - } else { - data.setValue(new String[tags.size()]); - int i = 0; - - for (ResourceLocation identifier : tags) { - data.getValue()[i] = identifier.toString(); - i++; - } - } + Stream> tags = stack.getTagsFor(); + data.setValue(tags.map(TagArgumentType::toString).toArray(String[]::new)); } for (String tag : data.getValue()) { if (!tag.isEmpty() && tag.contains(searchText)) { @@ -95,6 +86,10 @@ public final class TagArgumentType extends ArgumentType { return Unit.INSTANCE; } + private static String toString(TagKey tagKey) { + return Objects.toString(tagKey.location()); + } + private TagArgumentType() { } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java index b8de9d7ca..568c5235a 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java @@ -24,8 +24,6 @@ package me.shedaniel.rei.impl.common.entry; import com.mojang.blaze3d.vertex.PoseStack; -import dev.architectury.platform.Platform; -import dev.architectury.utils.Env; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectMaps; import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; @@ -43,19 +41,17 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.CrashReport; import net.minecraft.CrashReportCategory; -import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.SerializationTags; -import net.minecraft.tags.TagContainer; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.ItemStack; import org.apache.commons.lang3.mutable.Mutable; import org.apache.commons.lang3.mutable.MutableObject; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -import java.util.Collection; import java.util.Iterator; +import java.util.stream.Stream; @ApiStatus.Internal public abstract class AbstractEntryStack implements EntryStack, Renderer { @@ -247,19 +243,8 @@ public abstract class AbstractEntryStack implements EntryStack, Renderer { } @Override - public Collection getTagsFor() { - TagContainer container; - if (Platform.getEnvironment() == Env.CLIENT) { - container = getClientTagContainer(); - } else { - container = SerializationTags.getInstance(); - } - return getDefinition().getTagsFor(container, this, getValue()); - } - - @Environment(EnvType.CLIENT) - private static TagContainer getClientTagContainer() { - return Minecraft.getInstance().getConnection().getTags(); + public Stream> getTagsFor() { + return (Stream>) getDefinition().getTagsFor(this, getValue()); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java index 247de3c47..d56f32e10 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryImpl.java @@ -142,7 +142,7 @@ public class EntryRegistryImpl implements EntryRegistry { FilteringRule rule = rules.get(i); cache.setCache(rule, rule.prepareCache(true)); context.handleResult(rule.processFilteredStacks(context, cache, true)); - RoughlyEnoughItemsCore.LOGGER.debug("Refiltered rule [%s] in %s.", FilteringRule.REGISTRY.getKey(rule).toString(), innerStopwatch.stop().toString()); + RoughlyEnoughItemsCore.LOGGER.debug("Refiltered rule [%s] in %s.", FilteringRule.REGISTRY.inverse().get(rule).toString(), innerStopwatch.stop().toString()); } Set hiddenStacks = context.stacks.get(FilteringContextType.HIDDEN); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java index e7d8ddca3..d87a94300 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java @@ -37,14 +37,13 @@ import net.fabricmc.api.Environment; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagContainer; +import net.minecraft.tags.TagKey; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -import java.util.Collection; -import java.util.Collections; import java.util.Objects; import java.util.function.Supplier; +import java.util.stream.Stream; @ApiStatus.Internal public class BuiltinEntryDefinition implements EntryDefinition, EntrySerializer { @@ -127,8 +126,8 @@ public class BuiltinEntryDefinition implements EntryDefinition, EntrySeria } @Override - public Collection getTagsFor(TagContainer tagContainer, EntryStack entry, T value) { - return Collections.emptyList(); + public Stream> getTagsFor(EntryStack entry, T value) { + return Stream.empty(); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java index a8b578a45..142f80b0e 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java @@ -63,8 +63,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextComponent; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagCollection; -import net.minecraft.tags.TagContainer; +import net.minecraft.tags.TagKey; import net.minecraft.util.Mth; import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.item.Item; @@ -73,8 +72,6 @@ import net.minecraft.world.level.material.FlowingFluid; import net.minecraft.world.level.material.Fluid; import org.jetbrains.annotations.Nullable; -import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -198,9 +195,8 @@ public class FluidEntryDefinition implements EntryDefinition, EntryS } @Override - public Collection getTagsFor(TagContainer tagContainer, EntryStack entry, FluidStack value) { - TagCollection collection = tagContainer.getOrEmpty(Registry.FLUID_REGISTRY); - return collection == null ? Collections.emptyList() : collection.getMatchingTags(value.getFluid()); + public Stream> getTagsFor(EntryStack entry, FluidStack value) { + return value.getFluid().builtInRegistryHolder().tags(); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java index 1515ed6ae..41c2bda04 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java @@ -61,18 +61,16 @@ import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagCollection; -import net.minecraft.tags.TagContainer; +import net.minecraft.tags.TagKey; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import org.jetbrains.annotations.Nullable; -import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Optional; +import java.util.stream.Stream; public class ItemEntryDefinition implements EntryDefinition, EntrySerializer { @Environment(EnvType.CLIENT) @@ -200,9 +198,8 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer } @Override - public Collection getTagsFor(TagContainer tagContainer, EntryStack entry, ItemStack value) { - TagCollection collection = tagContainer.getOrEmpty(Registry.ITEM_REGISTRY); - return collection == null ? Collections.emptyList() : collection.getMatchingTags(value.getItem()); + public Stream> getTagsFor(EntryStack entry, ItemStack value) { + return value.getTags(); } @Environment(EnvType.CLIENT) -- cgit