aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-06-11 14:56:39 +0800
committershedaniel <daniel@shedaniel.me>2020-06-11 14:58:06 +0800
commit14802dfe0c02bd5b9c442672de62f4f113524954 (patch)
tree61e24271025b45d1d91a059453a96a41e67f4ab8 /src
parenta5da8d98938c518783b57a7459376d63a893a543 (diff)
downloadRoughlyEnoughItems-14802dfe0c02bd5b9c442672de62f4f113524954.tar.gz
RoughlyEnoughItems-14802dfe0c02bd5b9c442672de62f4f113524954.tar.bz2
RoughlyEnoughItems-14802dfe0c02bd5b9c442672de62f4f113524954.zip
Fix tags in favorites, fix #349
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'src')
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java2
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java38
2 files changed, 27 insertions, 13 deletions
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java
index 7d239eaa2..d862dcce6 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java
@@ -376,7 +376,7 @@ public class EntryWidget extends Slot {
entry.setAmount(127);
if (keyCode.matchesKey(int_1, int_2)) {
if (reverseFavoritesAction())
- ConfigObject.getInstance().getFavorites().remove(entry);
+ ConfigObject.getInstance().getFavorites().removeIf(entry::equalsIgnoreAmount);
else if (!CollectionUtils.anyMatchEqualsEntryIgnoreAmount(ConfigObject.getInstance().getFavorites(), entry))
ConfigObject.getInstance().getFavorites().add(entry);
ConfigManager.getInstance().saveConfig();
diff --git a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java
index bffcde62c..1f881c174 100644
--- a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java
+++ b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java
@@ -41,6 +41,7 @@ import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
+import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;
@@ -167,10 +168,10 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt
ItemStack otherStack = stack.getItemStack();
CompoundTag o1 = itemStack.getTag();
CompoundTag o2 = otherStack.getTag();
- return o1 == o2 || ((o1 != null && o2 != null) && equals(o1, o2));
+ return o1 == o2 || ((o1 != null && o2 != null) && equalsTagWithoutCount(o1, o2));
}
- public boolean equals(CompoundTag o1, CompoundTag o2) {
+ private boolean equalsTagWithoutCount(CompoundTag o1, CompoundTag o2) {
int o1Size = 0;
int o2Size = 0;
for (String key : o1.getKeys()) {
@@ -194,16 +195,8 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt
continue;
Tag value = o1.get(key);
Tag otherValue = o2.get(key);
- if (value == null) {
- if (!(otherValue == null && o2.contains(key)))
- return false;
- } else if (value instanceof CompoundTag && otherValue instanceof CompoundTag) {
- if (!(value == otherValue || (value != null && otherValue != null) && equals((CompoundTag) value, (CompoundTag) otherValue)))
- return false;
- } else {
- if (!value.asString().equals(otherValue.asString()))
- return false;
- }
+ if (!equalsTag(value, otherValue))
+ return false;
}
} catch (ClassCastException | NullPointerException unused) {
return false;
@@ -212,6 +205,27 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt
return true;
}
+ private boolean equalsTag(Tag tag, Tag otherTag) {
+ if (tag == null || otherTag == null) {
+ return tag == otherTag;
+ }
+ if (tag instanceof ListTag && otherTag instanceof ListTag)
+ return equalsList((ListTag) tag, (ListTag) otherTag);
+ return tag.equals(otherTag);
+ }
+
+ private boolean equalsList(ListTag listTag, ListTag otherListTag) {
+ if (listTag.size() != otherListTag.size())
+ return false;
+ for (int i = 0; i < listTag.size(); i++) {
+ Tag value = listTag.get(i);
+ Tag otherValue = otherListTag.get(i);
+ if (!equalsTag(value, otherValue))
+ return false;
+ }
+ return true;
+ }
+
@Override
public boolean equalsIgnoreTags(EntryStack stack) {
Boolean ifFluid = compareIfFluid(stack, 1);