diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-04-20 01:29:05 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-04-20 01:29:05 +0800 |
| commit | b12bf996dd2b786b9166bd4534bdd3182a078d2f (patch) | |
| tree | d34efa77d1ac179ffd411f90b2c370207afb3bfe /src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java | |
| parent | f1c9330818037365503f5eb6bce5c09d1d1a045d (diff) | |
| download | RoughlyEnoughItems-b12bf996dd2b786b9166bd4534bdd3182a078d2f.tar.gz RoughlyEnoughItems-b12bf996dd2b786b9166bd4534bdd3182a078d2f.tar.bz2 RoughlyEnoughItems-b12bf996dd2b786b9166bd4534bdd3182a078d2f.zip | |
Fix endless recursion with item and fluid
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java')
| -rw-r--r-- | src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java index cceea85a6..23f3061d9 100644 --- a/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java +++ b/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java @@ -111,26 +111,56 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt return itemStack; } + /** + * type: + * 0: ignore tags and amount + * 1: ignore tags + * 2: ignore amount + * 3: all + */ + private Boolean compareIfFluid(EntryStack stack, int type) { + EntryStack fluid = EntryStack.copyItemToFluid(this); + if (fluid.isEmpty()) return null; + if (stack.getType() == Type.ITEM) + stack = EntryStack.copyItemToFluid(stack); + if (stack.isEmpty()) return null; + switch (type) { + case 0: + return fluid.equalsIgnoreTagsAndAmount(stack); + case 1: + return fluid.equalsIgnoreTags(stack); + case 2: + return fluid.equalsIgnoreAmount(stack); + case 3: + return fluid.equalsAll(stack); + } + return null; + } + @Override public boolean equalsIgnoreTagsAndAmount(EntryStack stack) { + Boolean ifFluid = compareIfFluid(stack, 0); + if (ifFluid != null) return ifFluid; if (stack.getType() != Type.ITEM) - return EntryStack.copyItemToFluid(this).equalsIgnoreTagsAndAmount(stack); - return itemStack.getItem() == stack.getItem(); + return false; + return itemStack.getItem() == stack.getItem() || (stack.getType() != Type.ITEM ? stack : EntryStack.copyItemToFluid(stack)).equalsIgnoreTagsAndAmount(EntryStack.copyItemToFluid(this)); } @Override public boolean equalsAll(EntryStack stack) { + Boolean ifFluid = compareIfFluid(stack, 3); + if (ifFluid != null) return ifFluid; if (stack.getType() != Type.ITEM) - return EntryStack.copyItemToFluid(this).equalsAll(stack); - if (itemStack.getItem() != stack.getItem() || getAmount() != stack.getAmount()) return false; - return ItemStack.areTagsEqual(itemStack, stack.getItemStack()); + return itemStack.getItem() == stack.getItem() && getAmount() != stack.getAmount() && ItemStack.areTagsEqual(itemStack, stack.getItemStack()); } @Override public boolean equalsIgnoreAmount(EntryStack stack) { + Boolean ifFluid = compareIfFluid(stack, 2); + if (ifFluid != null) return ifFluid; if (stack.getType() != Type.ITEM) - return EntryStack.copyItemToFluid(this).equalsIgnoreAmount(stack); + return false; if (itemStack.getItem() != stack.getItem()) return false; ItemStack otherStack = stack.getItemStack(); @@ -183,8 +213,10 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt @Override public boolean equalsIgnoreTags(EntryStack stack) { + Boolean ifFluid = compareIfFluid(stack, 1); + if (ifFluid != null) return ifFluid; if (stack.getType() != Type.ITEM) - return EntryStack.copyItemToFluid(this).equalsIgnoreTags(stack); + return false; if (itemStack.getItem() != stack.getItem()) return false; return getAmount() == stack.getAmount(); |
