From 43ae584e12c7ed0755301eb34223f644a717183e Mon Sep 17 00:00:00 2001 From: shedaniel Date: Thu, 18 Mar 2021 02:16:22 +0800 Subject: Add EntryStack normalization Signed-off-by: shedaniel --- .../rei/gui/modules/entries/EntryStackSubsetsMenuEntry.java | 2 +- .../shedaniel/rei/gui/modules/entries/SubSubsetsMenuEntry.java | 2 +- .../java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java | 8 ++++---- .../me/shedaniel/rei/gui/plugin/entry/FluidEntryDefinition.java | 9 ++++++++- .../me/shedaniel/rei/gui/plugin/entry/ItemEntryDefinition.java | 9 ++++++++- .../java/me/shedaniel/rei/gui/widget/EntryListEntryWidget.java | 2 +- .../main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java | 4 ++-- .../src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java | 2 +- .../me/shedaniel/rei/impl/AmountIgnoredEntryStackWrapper.java | 4 ++-- runtime/src/main/java/me/shedaniel/rei/impl/TypedEntryStack.java | 9 +++++++++ .../java/me/shedaniel/rei/impl/entry/EmptyEntryDefinition.java | 5 +++++ .../shedaniel/rei/impl/filtering/rules/ManualFilteringRule.java | 2 +- .../me/shedaniel/rei/impl/registry/CategoryRegistryImpl.java | 1 - .../java/me/shedaniel/rei/impl/subsets/SubsetsRegistryImpl.java | 4 ++-- 14 files changed, 45 insertions(+), 18 deletions(-) (limited to 'runtime/src/main/java/me') diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/modules/entries/EntryStackSubsetsMenuEntry.java b/runtime/src/main/java/me/shedaniel/rei/gui/modules/entries/EntryStackSubsetsMenuEntry.java index 89cea637c..43fe57510 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/modules/entries/EntryStackSubsetsMenuEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/modules/entries/EntryStackSubsetsMenuEntry.java @@ -100,7 +100,7 @@ public class EntryStackSubsetsMenuEntry extends MenuEntry { if (isFiltered()) { filteredStacks.removeIf(next -> EntryStacks.equalsIgnoreCount(next, stack)); } else { - filteredStacks.add(stack.copy()); + filteredStacks.add(stack.normalize()); } Menu menu = ((ContainerScreenOverlay) REIHelper.getInstance().getOverlay().get()).getOverlayMenu(); if (menu != null) diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/modules/entries/SubSubsetsMenuEntry.java b/runtime/src/main/java/me/shedaniel/rei/gui/modules/entries/SubSubsetsMenuEntry.java index 095e0320f..7efe4f886 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/modules/entries/SubSubsetsMenuEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/modules/entries/SubSubsetsMenuEntry.java @@ -175,7 +175,7 @@ public class SubSubsetsMenuEntry extends MenuEntry { if (!filtered) { filteredStacks.removeIf(next -> EntryStacks.equalsIgnoreCount(next, ((EntryStackSubsetsMenuEntry) entry).stack)); } else { - filteredStacks.add(((EntryStackSubsetsMenuEntry) entry).stack.copy()); + filteredStacks.add(((EntryStackSubsetsMenuEntry) entry).stack.normalize()); } } if (subsetsMenu != null) diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java index b0f2a7ebf..f12b169fd 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/DefaultRuntimePlugin.java @@ -193,12 +193,12 @@ public class DefaultRuntimePlugin implements REIPlugin { private final int hashIgnoreAmount; public EntryStackFavoriteEntry(EntryStack stack) { - this.stack = stack.copy(); + this.stack = stack.normalize(); if (this.stack.getType() == VanillaEntryTypes.ITEM) this.stack.setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE); else if (this.stack.getType() == VanillaEntryTypes.FLUID) this.stack.setting(EntryStack.Settings.Fluid.AMOUNT_TOOLTIP, CANCEL_FLUID_AMOUNT); - this.hashIgnoreAmount = stack.hash(ComparisonContext.IGNORE_COUNT); + this.hashIgnoreAmount = EntryStacks.hashIgnoreCount(this.stack); } @Override @@ -237,7 +237,7 @@ public class DefaultRuntimePlugin implements REIPlugin { @Override public FavoriteEntry copy() { - return new EntryStackFavoriteEntry(stack.copy()); + return new EntryStackFavoriteEntry(stack.normalize()); } @Override @@ -249,7 +249,7 @@ public class DefaultRuntimePlugin implements REIPlugin { public boolean isSame(FavoriteEntry other) { if (!(other instanceof EntryStackFavoriteEntry)) return false; EntryStackFavoriteEntry that = (EntryStackFavoriteEntry) other; - return EntryStacks.equals(stack, that.stack, ComparisonContext.IGNORE_COUNT); + return EntryStacks.equalsIgnoreCount(stack, that.stack); } } } diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/FluidEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/FluidEntryDefinition.java index 0db3e1705..2123001c6 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/FluidEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/FluidEntryDefinition.java @@ -86,10 +86,17 @@ public class FluidEntryDefinition implements EntryDefinition, EntryS } @Override - public @NotNull FluidStack copy(EntryStack entry, FluidStack value) { + public FluidStack copy(EntryStack entry, FluidStack value) { return value.copy(); } + @Override + public FluidStack normalize(EntryStack entry, FluidStack value) { + FluidStack copy = value.copy(); + copy.setAmount(FluidStack.bucketAmount()); + return copy; + } + @Override public int hash(EntryStack entry, FluidStack value, ComparisonContext context) { int code = 1; diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/ItemEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/ItemEntryDefinition.java index 66d460784..4bd13e725 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/ItemEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/ItemEntryDefinition.java @@ -92,10 +92,17 @@ public class ItemEntryDefinition implements EntryDefinition, EntrySer } @Override - public @NotNull ItemStack copy(EntryStack entry, ItemStack value) { + public ItemStack copy(EntryStack entry, ItemStack value) { return value.copy(); } + @Override + public ItemStack normalize(EntryStack entry, ItemStack value) { + ItemStack copy = value.copy(); + copy.setCount(127); + return copy; + } + @Override public int hash(EntryStack entry, ItemStack value, ComparisonContext context) { int code = 1; diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListEntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListEntryWidget.java index c3f41bcb2..d2e1e822e 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListEntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListEntryWidget.java @@ -107,7 +107,7 @@ public abstract class EntryListEntryWidget extends EntryWidget { entry = EntryStacks.of(bucketItem); } } - return EntryStacks.equals(entry, stack, ComparisonContext.IGNORE_COUNT); + return EntryStacks.equalsIgnoreCount(entry, stack); } } return super.cancelDeleteItems(stack); diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java index 9ae643bd1..e95cfec59 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java @@ -535,7 +535,7 @@ public class EntryListWidget extends WidgetWithBounds { List> filtered = Lists.newArrayList(); for (EntryStack stack : partitionStacks) { if (canLastSearchTermsBeAppliedTo(stack)) { - if (workingItems != null && !workingItems.contains(stack.hash(ComparisonContext.IGNORE_COUNT))) + if (workingItems != null && !workingItems.contains(EntryStacks.hashIgnoreCount(stack))) continue; filtered.add(stack.rewrap().setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE)); } @@ -556,7 +556,7 @@ public class EntryListWidget extends WidgetWithBounds { } else { for (EntryStack stack : stacks) { if (canLastSearchTermsBeAppliedTo(stack)) { - if (workingItems != null && !workingItems.contains(stack.hash(ComparisonContext.IGNORE_COUNT))) + if (workingItems != null && !workingItems.contains(EntryStacks.hashIgnoreCount(stack))) continue; list.add(stack.rewrap().setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE)); } diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java index 586a894f6..68c783982 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java @@ -406,7 +406,7 @@ public class EntryWidget extends Slot implements DraggableStackProvider { @ApiStatus.Internal protected FavoriteEntry asFavoriteEntry() { - return FavoriteEntry.fromEntryStack(getCurrentEntry().copy()); + return FavoriteEntry.fromEntryStack(getCurrentEntry().normalize()); } @ApiStatus.Internal diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/AmountIgnoredEntryStackWrapper.java b/runtime/src/main/java/me/shedaniel/rei/impl/AmountIgnoredEntryStackWrapper.java index 829026318..344173e15 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/AmountIgnoredEntryStackWrapper.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/AmountIgnoredEntryStackWrapper.java @@ -24,7 +24,7 @@ package me.shedaniel.rei.impl; import me.shedaniel.rei.api.ingredient.EntryStack; -import me.shedaniel.rei.api.ingredient.entry.ComparisonContext; +import me.shedaniel.rei.api.ingredient.util.EntryStacks; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import org.jetbrains.annotations.ApiStatus; @@ -39,7 +39,7 @@ public class AmountIgnoredEntryStackWrapper { public AmountIgnoredEntryStackWrapper(EntryStack stack) { this.stack = Objects.requireNonNull(stack); - this.hash = stack.hash(ComparisonContext.IGNORE_COUNT); + this.hash = EntryStacks.hashIgnoreCount(stack); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/TypedEntryStack.java b/runtime/src/main/java/me/shedaniel/rei/impl/TypedEntryStack.java index 6c6da8652..f5c53c4a4 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/TypedEntryStack.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/TypedEntryStack.java @@ -93,6 +93,15 @@ public class TypedEntryStack extends AbstractEntryStack { return stack; } + @Override + public EntryStack normalize() { + TypedEntryStack stack = new TypedEntryStack<>(definition, getDefinition().normalize(this, value)); + for (Short2ObjectMap.Entry entry : getSettings().short2ObjectEntrySet()) { + stack.setting(EntryStack.Settings.getById(entry.getShortKey()), entry.getValue()); + } + return stack; + } + @Override public boolean equals(EntryStack other, ComparisonContext context) { return this.getDefinition().equals(value, other.getValue(), context); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/entry/EmptyEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/impl/entry/EmptyEntryDefinition.java index 59fa733ad..81614a3fb 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/entry/EmptyEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/entry/EmptyEntryDefinition.java @@ -96,6 +96,11 @@ public enum EmptyEntryDefinition implements EntryDefinition, EntrySerial return value; } + @Override + public Object normalize(EntryStack entry, Object value) { + return value; + } + @Override public int hash(EntryStack entry, Object value, ComparisonContext context) { return ordinal(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/filtering/rules/ManualFilteringRule.java b/runtime/src/main/java/me/shedaniel/rei/impl/filtering/rules/ManualFilteringRule.java index 89477641b..466ce6e36 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/filtering/rules/ManualFilteringRule.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/filtering/rules/ManualFilteringRule.java @@ -62,7 +62,7 @@ public class ManualFilteringRule extends AbstractFilteringRule> stacks, FilteringResult result) { IntSet filteredStacks = CollectionUtils.mapParallel(ConfigObject.getInstance().getFilteredStacks(), EntryStacks::hashIgnoreCount, IntOpenHashSet::new); - result.hide(stacks.parallelStream().filter(stack -> filteredStacks.contains(stack.hash(ComparisonContext.IGNORE_COUNT))).collect(Collectors.toList())); + result.hide(stacks.parallelStream().filter(stack -> filteredStacks.contains(EntryStacks.hashIgnoreCount(stack))).collect(Collectors.toList())); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/registry/CategoryRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/registry/CategoryRegistryImpl.java index 6283451b9..1d49bc6e3 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/registry/CategoryRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/registry/CategoryRegistryImpl.java @@ -132,6 +132,5 @@ public class CategoryRegistryImpl implements CategoryRegistry, Reloadable { public ResourceLocation getIdentifier() { return this.category.getIdentifier(); } - } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/subsets/SubsetsRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/subsets/SubsetsRegistryImpl.java index 5652efaab..816f28113 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/subsets/SubsetsRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/subsets/SubsetsRegistryImpl.java @@ -68,14 +68,14 @@ public class SubsetsRegistryImpl implements SubsetsRegistry { @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)); + getOrCreatePathEntries(path).add(stack.normalize().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> stacks) { Set> 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)); + entries.add(stack.normalize().setting(EntryStack.Settings.CHECK_AMOUNT, EntryStack.Settings.FALSE).setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE).setting(EntryStack.Settings.CHECK_TAGS, EntryStack.Settings.TRUE)); } } -- cgit