aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-06-22 01:11:38 +0800
committershedaniel <daniel@shedaniel.me>2021-06-22 01:11:38 +0800
commit0d1886cd3a85e7829646b666c36b35cf3321f1b0 (patch)
treeaf34bc9109845fad52a25f2ec32fb4f1e1b8bb57
parent2cc2cfa70062efac58335d62ad8e47105c15fdd7 (diff)
downloadRoughlyEnoughItems-0d1886cd3a85e7829646b666c36b35cf3321f1b0.tar.gz
RoughlyEnoughItems-0d1886cd3a85e7829646b666c36b35cf3321f1b0.tar.bz2
RoughlyEnoughItems-0d1886cd3a85e7829646b666c36b35cf3321f1b0.zip
Fix #559
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/entry/comparison/EntryComparatorRegistry.java4
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java14
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java17
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/FluidComparatorRegistryImpl.java15
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java15
8 files changed, 60 insertions, 21 deletions
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
index ba77326e6..7c051bac1 100644
--- 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
@@ -28,7 +28,9 @@ 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.
+ * The default comparator is {@link EntryComparator#noop()} when fuzzy, which does not compare the NBT of the entries;
+ * and nbt when exact.
+ *
* <p>
* This comparator is used when the comparison context is {@link ComparisonContext#EXACT}.
*/
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java
index 902e51f76..807fec537 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java
@@ -51,10 +51,7 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag;
import net.minecraft.world.inventory.*;
-import net.minecraft.world.item.BucketItem;
-import net.minecraft.world.item.Item;
-import net.minecraft.world.item.ItemStack;
-import net.minecraft.world.item.Items;
+import net.minecraft.world.item.*;
import net.minecraft.world.level.material.Fluid;
import org.jetbrains.annotations.ApiStatus;
@@ -69,8 +66,13 @@ public class DefaultPlugin implements BuiltinPlugin, REIServerPlugin {
Function<ItemStack, ListTag> enchantmentTag = stack -> {
CompoundTag tag = stack.getTag();
if (tag == null) return null;
- if (!tag.contains("Enchantments", NbtType.LIST)) return null;
- return tag.getList("Enchantments", NbtType.COMPOUND);
+ if (!tag.contains(ItemStack.TAG_ENCH, NbtType.LIST)) {
+ if (tag.contains(EnchantedBookItem.TAG_STORED_ENCHANTMENTS, NbtType.LIST)) {
+ return tag.getList(EnchantedBookItem.TAG_STORED_ENCHANTMENTS, NbtType.COMPOUND);
+ }
+ return null;
+ }
+ return tag.getList(ItemStack.TAG_ENCH, NbtType.COMPOUND);
};
registry.register((context, stack) -> nbtHasher.hash(context, enchantmentTag.apply(stack)), Items.ENCHANTED_BOOK);
registry.registerNbt(Items.POTION);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java
index fabe48aed..07dd71186 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java
@@ -75,7 +75,6 @@ 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.client.gui.screens.inventory.AbstractContainerScreen;
-import net.minecraft.client.gui.screens.inventory.tooltip.ClientTextTooltip;
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.multiplayer.PlayerInfo;
@@ -83,10 +82,12 @@ import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.client.resources.sounds.SimpleSoundInstance;
import net.minecraft.locale.Language;
-import net.minecraft.network.chat.*;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.chat.Style;
+import net.minecraft.network.chat.TextComponent;
+import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvents;
-import net.minecraft.util.FormattedCharSequence;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.ItemStack;
@@ -643,9 +644,8 @@ public class ScreenOverlayImpl extends ScreenOverlay {
return ViewSearchBuilder.builder().addUsagesFor(stack).open();
} else if (ConfigObject.getInstance().getFavoriteKeyCode().matchesKey(keyCode, scanCode)) {
FavoriteEntry favoriteEntry = FavoriteEntry.fromEntryStack(stack);
- if (!ConfigObject.getInstance().getFavoriteEntries().contains(favoriteEntry)) {
- ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry);
- }
+ ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
+ ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry);
ConfigManager.getInstance().saveConfig();
FavoritesListWidget favoritesListWidget = ScreenOverlayImpl.getFavoritesListWidget();
if (favoritesListWidget != null)
@@ -704,9 +704,8 @@ public class ScreenOverlayImpl extends ScreenOverlay {
return ViewSearchBuilder.builder().addUsagesFor(stack).open();
} else if (visible && ConfigObject.getInstance().getFavoriteKeyCode().matchesMouse(button)) {
FavoriteEntry favoriteEntry = FavoriteEntry.fromEntryStack(stack);
- if (!ConfigObject.getInstance().getFavoriteEntries().contains(favoriteEntry)) {
- ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry);
- }
+ ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
+ ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry);
ConfigManager.getInstance().saveConfig();
FavoritesListWidget favoritesListWidget = ScreenOverlayImpl.getFavoritesListWidget();
if (favoritesListWidget != null)
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
index 659862c02..55bb8f98d 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/EntryWidget.java
@@ -385,8 +385,10 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
FavoriteEntry favoriteEntry = asFavoriteEntry();
if (reverseFavoritesAction())
ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
- else if (!ConfigObject.getInstance().getFavoriteEntries().contains(favoriteEntry))
+ else {
+ ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry);
+ }
ConfigManager.getInstance().saveConfig();
FavoritesListWidget favoritesListWidget = ScreenOverlayImpl.getFavoritesListWidget();
if (favoritesListWidget != null)
@@ -432,8 +434,10 @@ public class EntryWidget extends Slot implements DraggableStackProviderWidget {
FavoriteEntry favoriteEntry = asFavoriteEntry();
if (reverseFavoritesAction())
ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
- else if (!ConfigObject.getInstance().getFavoriteEntries().contains(favoriteEntry))
+ else {
+ ConfigObject.getInstance().getFavoriteEntries().remove(favoriteEntry);
ConfigObject.getInstance().getFavoriteEntries().add(favoriteEntry);
+ }
ConfigManager.getInstance().saveConfig();
FavoritesListWidget favoritesListWidget = ScreenOverlayImpl.getFavoritesListWidget();
if (favoritesListWidget != null)
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java
index 63ca1094e..e48af7699 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/FavoritesListWidget.java
@@ -461,7 +461,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt
}
double x = position.x - 8;
- double y = position.y - 8;
+ double y = position.y + scrolling.scrollAmount - 8;
return Mth.clamp(entriesPoints.stream()
.filter(value -> {
@@ -486,7 +486,7 @@ public class FavoritesListWidget extends WidgetWithBounds implements DraggableSt
public void drop(Entry entry, DraggableStack stack, FavoriteEntry favoriteEntry) {
DraggingContext<?> context = DraggingContext.getInstance();
double x = context.getCurrentPosition().x;
- double y = context.getCurrentPosition().y;
+ double y = context.getCurrentPosition().y + scrolling.scrollAmount;
entry.startedDraggingPosition = null;
entry.x.setAs(x - 8);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java
index b4c12be04..51d91cb14 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java
@@ -53,13 +53,15 @@ public abstract class EntryComparatorRegistryImpl<T, S> implements EntryComparat
public abstract S getEntry(T stack);
+ public abstract EntryComparator<T> defaultComparator();
+
@Override
public long hashOf(ComparisonContext context, T stack) {
EntryComparator<T> comparator = comparators.get(getEntry(stack));
if (comparator != null) {
return comparator.hash(context, stack);
}
- return 1;
+ return defaultComparator().hash(context, stack);
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/FluidComparatorRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/FluidComparatorRegistryImpl.java
index fd394d04d..ab31dcbe1 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/FluidComparatorRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/FluidComparatorRegistryImpl.java
@@ -24,17 +24,32 @@
package me.shedaniel.rei.impl.common.entry.comparison;
import dev.architectury.fluid.FluidStack;
+import me.shedaniel.rei.api.common.entry.comparison.EntryComparator;
import me.shedaniel.rei.api.common.entry.comparison.FluidComparatorRegistry;
import me.shedaniel.rei.api.common.plugins.REIPlugin;
import net.minecraft.world.level.material.Fluid;
public class FluidComparatorRegistryImpl extends EntryComparatorRegistryImpl<FluidStack, Fluid> implements FluidComparatorRegistry {
+ private final EntryComparator<FluidStack> fluidNbt = EntryComparator.fluidNbt();
+ private final EntryComparator<FluidStack> defaultComparator = (context, stack) -> {
+ if (context.isExact()) {
+ return fluidNbt.hash(context, stack);
+ } else {
+ return 1;
+ }
+ };
+
@Override
public Fluid getEntry(FluidStack stack) {
return stack.getFluid();
}
@Override
+ public EntryComparator<FluidStack> defaultComparator() {
+ return defaultComparator;
+ }
+
+ @Override
public void acceptPlugin(REIPlugin<?> plugin) {
plugin.registerFluidComparators(this);
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java
index e1c7b7a3b..08de7333f 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java
@@ -23,18 +23,33 @@
package me.shedaniel.rei.impl.common.entry.comparison;
+import me.shedaniel.rei.api.common.entry.comparison.EntryComparator;
import me.shedaniel.rei.api.common.entry.comparison.ItemComparatorRegistry;
import me.shedaniel.rei.api.common.plugins.REIPlugin;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
public class ItemComparatorRegistryImpl extends EntryComparatorRegistryImpl<ItemStack, Item> implements ItemComparatorRegistry {
+ private final EntryComparator<ItemStack> itemNbt = EntryComparator.itemNbt();
+ private final EntryComparator<ItemStack> defaultComparator = (context, stack) -> {
+ if (context.isExact()) {
+ return itemNbt.hash(context, stack);
+ } else {
+ return 1;
+ }
+ };
+
@Override
public Item getEntry(ItemStack stack) {
return stack.getItem();
}
@Override
+ public EntryComparator<ItemStack> defaultComparator() {
+ return defaultComparator;
+ }
+
+ @Override
public void acceptPlugin(REIPlugin<?> plugin) {
plugin.registerItemComparators(this);
}