diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-06-11 14:56:39 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-06-11 14:58:06 +0800 |
| commit | 14802dfe0c02bd5b9c442672de62f4f113524954 (patch) | |
| tree | 61e24271025b45d1d91a059453a96a41e67f4ab8 /src/main/java/me | |
| parent | a5da8d98938c518783b57a7459376d63a893a543 (diff) | |
| download | RoughlyEnoughItems-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/main/java/me')
| -rw-r--r-- | src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java | 2 | ||||
| -rw-r--r-- | src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java | 38 |
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); |
