aboutsummaryrefslogtreecommitdiff
path: root/RoughlyEnoughItems-runtime/src/main/java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-09-07 23:02:24 +0800
committershedaniel <daniel@shedaniel.me>2020-09-07 23:02:24 +0800
commitafe32352abcef8d501acf7985d2e9b1f3fcb673e (patch)
tree53c671ccbc3b58fb9dc7ef1f968a1c3e958820a3 /RoughlyEnoughItems-runtime/src/main/java
parent973978aa763f8fa4d5e5b6991a5032cbb246594d (diff)
downloadRoughlyEnoughItems-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')
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java6
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidSupportProviderImpl.java27
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java30
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())