diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-09-07 23:02:24 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-09-07 23:02:24 +0800 |
| commit | afe32352abcef8d501acf7985d2e9b1f3fcb673e (patch) | |
| tree | 53c671ccbc3b58fb9dc7ef1f968a1c3e958820a3 /RoughlyEnoughItems-runtime/src/main/java | |
| parent | 973978aa763f8fa4d5e5b6991a5032cbb246594d (diff) | |
| download | RoughlyEnoughItems-afe32352abcef8d501acf7985d2e9b1f3fcb673e.tar.gz RoughlyEnoughItems-afe32352abcef8d501acf7985d2e9b1f3fcb673e.tar.bz2 RoughlyEnoughItems-afe32352abcef8d501acf7985d2e9b1f3fcb673e.zip | |
Made FluidSupportProvider capable in returning more than 1 fluid and fix hwyla double modid tooltip
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'RoughlyEnoughItems-runtime/src/main/java')
3 files changed, 36 insertions, 27 deletions
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java index e1dda377f..65019ba8b 100644 --- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java +++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java @@ -138,7 +138,7 @@ public class FluidEntryStack extends AbstractEntryStack { @Override public boolean equalsIgnoreTagsAndAmount(EntryStack stack) { if (stack.getType() == Type.ITEM) - return equalsIgnoreTagsAndAmount(EntryStack.copyItemToFluid(stack)); + return EntryStack.copyItemToFluids(stack).anyMatch(this::equalsIgnoreTagsAndAmount); if (stack.getType() != Type.FLUID) return false; return fluid == stack.getFluid(); @@ -147,7 +147,7 @@ public class FluidEntryStack extends AbstractEntryStack { @Override public boolean equalsIgnoreTags(EntryStack stack) { if (stack.getType() == Type.ITEM) - return equalsIgnoreTags(EntryStack.copyItemToFluid(stack)); + return EntryStack.copyItemToFluids(stack).anyMatch(this::equalsIgnoreTags); if (stack.getType() != Type.FLUID) return false; return fluid == stack.getFluid() && (amount.equals(IGNORE_AMOUNT) || stack.getAccurateAmount().equals(IGNORE_AMOUNT) || amount.equals(stack.getAccurateAmount())); @@ -156,7 +156,7 @@ public class FluidEntryStack extends AbstractEntryStack { @Override public boolean equalsIgnoreAmount(EntryStack stack) { if (stack.getType() == Type.ITEM) - return equalsIgnoreAmount(EntryStack.copyItemToFluid(stack)); + return EntryStack.copyItemToFluids(stack).anyMatch(this::equalsIgnoreAmount); if (stack.getType() != Type.FLUID) return false; return fluid == stack.getFluid(); diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidSupportProviderImpl.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidSupportProviderImpl.java index a26ee663f..724cf39f3 100644 --- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidSupportProviderImpl.java +++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidSupportProviderImpl.java @@ -26,35 +26,46 @@ package me.shedaniel.rei.impl; import com.google.common.collect.Lists; import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.fluid.FluidSupportProvider; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Objects; +import java.util.stream.Stream; @ApiStatus.Experimental @ApiStatus.Internal public class FluidSupportProviderImpl implements FluidSupportProvider { - private final List<FluidProvider> providers = Lists.newCopyOnWriteArrayList(); + private final List<Provider> providers = Lists.newCopyOnWriteArrayList(); public void reset() { providers.clear(); } @Override - public void registerFluidProvider(@NotNull FluidProvider provider) { + public void registerProvider(@NotNull Provider provider) { providers.add(Objects.requireNonNull(provider, "Registered provider is null!")); } @Override - public @NotNull EntryStack itemToFluid(@NotNull EntryStack itemStack) { - if (itemStack.isEmpty()) return EntryStack.empty(); + public @NotNull Stream<EntryStack> itemToFluids(@NotNull EntryStack itemStack) { + if (itemStack.isEmpty()) return Stream.empty(); if (itemStack.getType() != EntryStack.Type.ITEM) throw new IllegalArgumentException("EntryStack must be item!"); - for (FluidProvider provider : providers) { - EntryStack stack = Objects.requireNonNull(provider.itemToFluid(itemStack)); - if (!stack.isEmpty()) return stack; + for (Provider provider : providers) { + InteractionResultHolder<@Nullable Stream<@NotNull EntryStack>> resultHolder = Objects.requireNonNull(provider.itemToFluid(itemStack)); + Stream<@NotNull EntryStack> stream = resultHolder.getObject(); + if (stream != null) { + if (resultHolder.getResult().consumesAction()) { + return stream; + } else if (resultHolder.getResult() == InteractionResult.FAIL) { + return Stream.empty(); + } + } } - return EntryStack.empty(); + return Stream.empty(); } } diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java index 267f72e1e..0e3e17d89 100644 --- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java +++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java @@ -63,6 +63,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.stream.Stream; @ApiStatus.Internal public class ItemEntryStack extends AbstractEntryStack implements OptimalEntryStack { @@ -128,29 +129,28 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt * 2: ignore amount * 3: all */ - private Boolean compareIfFluid(EntryStack stack, int type) { - EntryStack fluid = EntryStack.copyItemToFluid(this); - if (fluid.isEmpty()) return null; + private boolean compareIfFluid(EntryStack stack, int type) { + Stream<EntryStack> fluids = EntryStack.copyItemToFluids(this); + Stream<EntryStack> stacks = Stream.empty(); if (stack.getType() == Type.ITEM) - stack = EntryStack.copyItemToFluid(stack); - if (stack.isEmpty()) return null; + stacks = EntryStack.copyItemToFluids(stack); switch (type) { case 0: - return fluid.equalsIgnoreTagsAndAmount(stack); + return stacks.anyMatch(entryStack -> fluids.anyMatch(entryStack::equalsIgnoreTagsAndAmount)); case 1: - return fluid.equalsIgnoreTags(stack); + return stacks.anyMatch(entryStack -> fluids.anyMatch(entryStack::equalsIgnoreTags)); case 2: - return fluid.equalsIgnoreAmount(stack); + return stacks.anyMatch(entryStack -> fluids.anyMatch(entryStack::equalsIgnoreAmount)); case 3: - return fluid.equalsAll(stack); + return stacks.anyMatch(entryStack -> fluids.anyMatch(entryStack::equalsAll)); } - return null; + + return false; } @Override public boolean equalsIgnoreTagsAndAmount(EntryStack stack) { - Boolean ifFluid = compareIfFluid(stack, 0); - if (ifFluid != null) return ifFluid; + if (compareIfFluid(stack, 0)) return true; if (stack.getType() != Type.ITEM) return false; return itemStack.getItem() == stack.getItem(); @@ -165,8 +165,7 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt @Override public boolean equalsIgnoreAmount(EntryStack stack) { - Boolean ifFluid = compareIfFluid(stack, 2); - if (ifFluid != null) return ifFluid; + if (compareIfFluid(stack, 2)) return true; if (stack.getType() != Type.ITEM) return false; if (itemStack.getItem() != stack.getItem()) @@ -234,8 +233,7 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt @Override public boolean equalsIgnoreTags(EntryStack stack) { - Boolean ifFluid = compareIfFluid(stack, 1); - if (ifFluid != null) return ifFluid; + if (compareIfFluid(stack, 1)) return true; if (stack.getType() != Type.ITEM) return false; if (itemStack.getItem() != stack.getItem()) |
