From 0d1886cd3a85e7829646b666c36b35cf3321f1b0 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Tue, 22 Jun 2021 01:11:38 +0800 Subject: Fix #559 --- .../rei/impl/client/gui/ScreenOverlayImpl.java | 17 ++++++++--------- .../rei/impl/client/gui/widget/EntryWidget.java | 8 ++++++-- .../rei/impl/client/gui/widget/FavoritesListWidget.java | 4 ++-- .../entry/comparison/EntryComparatorRegistryImpl.java | 4 +++- .../entry/comparison/FluidComparatorRegistryImpl.java | 15 +++++++++++++++ .../entry/comparison/ItemComparatorRegistryImpl.java | 15 +++++++++++++++ 6 files changed, 49 insertions(+), 14 deletions(-) (limited to 'runtime/src/main/java/me') 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 implements EntryComparat public abstract S getEntry(T stack); + public abstract EntryComparator defaultComparator(); + @Override public long hashOf(ComparisonContext context, T stack) { EntryComparator 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,16 +24,31 @@ 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 implements FluidComparatorRegistry { + private final EntryComparator fluidNbt = EntryComparator.fluidNbt(); + private final EntryComparator 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 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,17 +23,32 @@ 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 implements ItemComparatorRegistry { + private final EntryComparator itemNbt = EntryComparator.itemNbt(); + private final EntryComparator 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 defaultComparator() { + return defaultComparator; + } + @Override public void acceptPlugin(REIPlugin plugin) { plugin.registerItemComparators(this); -- cgit