diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-02-12 03:12:09 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-02-12 03:12:09 +0800 |
| commit | bd8aed1e2716fc57fefc640d303e403ba761e3b1 (patch) | |
| tree | 334fa7ae51918ddf3d37db4961b14e77a0a441b9 /runtime/src/main/java/me/shedaniel/rei/impl/client | |
| parent | dbd26b5bd394957d1bd73016779b87baff3668b0 (diff) | |
| download | RoughlyEnoughItems-bd8aed1e2716fc57fefc640d303e403ba761e3b1.tar.gz RoughlyEnoughItems-bd8aed1e2716fc57fefc640d303e403ba761e3b1.tar.bz2 RoughlyEnoughItems-bd8aed1e2716fc57fefc640d303e403ba761e3b1.zip | |
Update to 22w06a
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/impl/client')
4 files changed, 30 insertions, 39 deletions
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<T extends FilteringRule<?>> { - ResourceKey<Registry<FilteringRule<?>>> REGISTRY_KEY = ResourceKey.createRegistryKey(new ResourceLocation("roughlyenoughitems", "filtering_rule")); - Registry<FilteringRule<?>> 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<ResourceLocation, FilteringRule<?>> 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<T extends 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<DisplayCategory<?>, List<DisplaySpec>> categoryMap; @@ -171,7 +169,6 @@ public abstract class AbstractDisplayViewingScreen extends Screen implements Dis } protected void setupTags(List<Widget> widgets) { - TagContainer tags = Minecraft.getInstance().getConnection().getTags(); outer: for (EntryWidget widget : Widgets.<EntryWidget>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<Object> objects; + Stream<? extends TagKey<?>> collection; + List<Holder<?>> objects; if (type == VanillaEntryTypes.ITEM) { - collection = tags.getOrEmpty(Registry.ITEM_REGISTRY); - objects = CollectionUtils.map(widget.getEntries(), stack -> stack.<ItemStack>castValue().getItem()); + collection = Registry.ITEM.getTagNames(); + objects = CollectionUtils.map(widget.getEntries(), stack -> stack.<ItemStack>castValue().getItem().builtInRegistryHolder()); } else if (type == VanillaEntryTypes.FLUID) { - collection = tags.getOrEmpty(Registry.FLUID_REGISTRY); - objects = CollectionUtils.map(widget.getEntries(), stack -> stack.<FluidStack>castValue().getFluid()); + collection = Registry.FLUID.getTagNames(); + objects = CollectionUtils.map(widget.getEntries(), stack -> stack.<FluidStack>castValue().getFluid().builtInRegistryHolder()); } else continue; - Map.Entry<ResourceLocation, ? extends Tag<?>> firstOrNull = CollectionUtils.findFirstOrNull(collection.getAllTags().entrySet(), entry -> entry.getValue().getValues().equals(objects)); + TagKey<?> firstOrNull = collection.filter(key -> + CollectionUtils.anyMatch(objects, holder -> ((Holder<Object>) holder).is((TagKey<Object>) 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<Unit, String[]> { @Override public boolean matches(Mutable<String[]> data, EntryStack<?> stack, String searchText, Unit filterData) { if (data.getValue() == null) { - Collection<ResourceLocation> 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<TagKey<?>> 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<Unit, String[]> { return Unit.INSTANCE; } + private static String toString(TagKey<?> tagKey) { + return Objects.toString(tagKey.location()); + } + private TagArgumentType() { } } |
