diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-04-01 20:01:34 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-04-01 20:01:34 +0800 |
| commit | 66abc317e5fc36a397ca1cc919e388fbe143956b (patch) | |
| tree | 915cc4799d89297b8d4bd2dbe1046c177f4d1627 /src/main/java/me/shedaniel/rei/impl/subsets/SubsetsRegistryImpl.java | |
| parent | 3919ec1e15d6eb9a8aa4564bb2d4e4dfdbeb54e3 (diff) | |
| download | RoughlyEnoughItems-66abc317e5fc36a397ca1cc919e388fbe143956b.tar.gz RoughlyEnoughItems-66abc317e5fc36a397ca1cc919e388fbe143956b.tar.bz2 RoughlyEnoughItems-66abc317e5fc36a397ca1cc919e388fbe143956b.zip | |
ScrollingContainer & SubsetsMenu && 20w18b
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'src/main/java/me/shedaniel/rei/impl/subsets/SubsetsRegistryImpl.java')
| -rw-r--r-- | src/main/java/me/shedaniel/rei/impl/subsets/SubsetsRegistryImpl.java | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/main/java/me/shedaniel/rei/impl/subsets/SubsetsRegistryImpl.java b/src/main/java/me/shedaniel/rei/impl/subsets/SubsetsRegistryImpl.java new file mode 100644 index 000000000..58e19dd9f --- /dev/null +++ b/src/main/java/me/shedaniel/rei/impl/subsets/SubsetsRegistryImpl.java @@ -0,0 +1,83 @@ +package me.shedaniel.rei.impl.subsets; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.subsets.SubsetsRegistry; +import me.shedaniel.rei.utils.CollectionUtils; +import net.minecraft.util.Identifier; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.*; + +@ApiStatus.Experimental +@ApiStatus.Internal +public class SubsetsRegistryImpl implements SubsetsRegistry { + private final Map<String, Set<EntryStack>> entryPaths = Maps.newHashMap(); + + public void reset() { + entryPaths.clear(); + } + + @Override + public @NotNull List<String> getEntryPaths(@NotNull EntryStack stack) { + List<String> strings = null; + for (Map.Entry<String, Set<EntryStack>> entry : entryPaths.entrySet()) { + if (CollectionUtils.findFirstOrNullEqualsEntryIgnoreAmount(entry.getValue(), stack) != null) { + if (strings == null) + strings = Lists.newArrayList(); + strings.add(entry.getKey()); + } + } + return strings == null ? Collections.emptyList() : strings; + } + + @Override + public void registerPathEntry(@NotNull String path, @NotNull EntryStack stack) { + getOrCreatePathEntries(path).add(stack.copy().setting(EntryStack.Settings.CHECK_AMOUNT, EntryStack.Settings.FALSE).setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE).setting(EntryStack.Settings.CHECK_TAGS, EntryStack.Settings.TRUE)); + } + + @Override + public void registerPathEntries(@NotNull String path, @NotNull Collection<EntryStack> stacks) { + Set<EntryStack> entries = getOrCreatePathEntries(path); + for (EntryStack stack : stacks) { + entries.add(stack.copy().setting(EntryStack.Settings.CHECK_AMOUNT, EntryStack.Settings.FALSE).setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE).setting(EntryStack.Settings.CHECK_TAGS, EntryStack.Settings.TRUE)); + } + } + + @Nullable + @Override + public Set<EntryStack> getPathEntries(@NotNull String path) { + if (!isPathValid(path)) + throw new IllegalArgumentException("Illegal path: " + path); + return entryPaths.get(path); + } + + @Override + public @NotNull Set<String> getPaths() { + return entryPaths.keySet(); + } + + @NotNull + @Override + public Set<EntryStack> getOrCreatePathEntries(@NotNull String path) { + Set<EntryStack> paths = getPathEntries(path); + if (paths == null) { + entryPaths.put(path, Sets.newLinkedHashSet()); + paths = Objects.requireNonNull(getPathEntries(path)); + } + return paths; + } + + private boolean isPathValid(String path) { + String[] pathSegments = path.split("/"); + for (String pathSegment : pathSegments) { + if (!Identifier.isValid(pathSegment)) + return false; + } + return true; + } +} |
