aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryStack.java7
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/fluid/FluidSupportProvider.java46
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/utils/FormattingUtils.java2
-rw-r--r--RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java16
-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
-rw-r--r--gradle.properties2
8 files changed, 92 insertions, 44 deletions
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryStack.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryStack.java
index 0b1431a35..e1ff44c24 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryStack.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryStack.java
@@ -51,6 +51,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.function.Function;
import java.util.function.Supplier;
+import java.util.stream.Stream;
@Environment(EnvType.CLIENT)
public interface EntryStack extends TextRepresentable {
@@ -207,10 +208,16 @@ public interface EntryStack extends TextRepresentable {
return copyItemToFluid(stack);
}
+ @Deprecated
+ @ApiStatus.ScheduledForRemoval
static EntryStack copyItemToFluid(EntryStack stack) {
return FluidSupportProvider.getInstance().itemToFluid(stack);
}
+ static Stream<EntryStack> copyItemToFluids(EntryStack stack) {
+ return FluidSupportProvider.getInstance().itemToFluids(stack);
+ }
+
Optional<ResourceLocation> getIdentifier();
EntryStack.Type getType();
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/fluid/FluidSupportProvider.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/fluid/FluidSupportProvider.java
index 414b80171..76d964965 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/fluid/FluidSupportProvider.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/fluid/FluidSupportProvider.java
@@ -27,8 +27,13 @@ import me.shedaniel.rei.api.EntryStack;
import me.shedaniel.rei.impl.Internals;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
+import net.minecraft.world.InteractionResultHolder;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Objects;
+import java.util.stream.Stream;
/**
* Experimental library, scheduled to change if needed.
@@ -40,13 +45,13 @@ public interface FluidSupportProvider {
@ApiStatus.ScheduledForRemoval
FluidSupportProvider INSTANCE = new FluidSupportProvider() {
@Override
- public void registerFluidProvider(@NotNull FluidProvider provider) {
- getInstance().registerFluidProvider(provider);
+ public void registerProvider(@NotNull Provider provider) {
+ getInstance().registerProvider(provider);
}
@Override
- public @NotNull EntryStack itemToFluid(@NotNull EntryStack itemStack) {
- return getInstance().itemToFluid(itemStack);
+ public @NotNull Stream<EntryStack> itemToFluids(@NotNull EntryStack itemStack) {
+ return getInstance().itemToFluids(itemStack);
}
};
@@ -54,7 +59,21 @@ public interface FluidSupportProvider {
return Internals.getFluidSupportProvider();
}
- void registerFluidProvider(@NotNull FluidProvider provider);
+ /**
+ * @deprecated Please switch to {@link FluidSupportProvider#registerProvider(Provider)}
+ */
+ @Deprecated
+ @ApiStatus.ScheduledForRemoval
+ default void registerFluidProvider(@NotNull FluidProvider provider) {
+ registerProvider(itemStack -> {
+ EntryStack stack = Objects.requireNonNull(provider.itemToFluid(itemStack));
+ if (!stack.isEmpty())
+ return InteractionResultHolder.success(Stream.of(stack));
+ return InteractionResultHolder.pass(null);
+ });
+ }
+
+ void registerProvider(@NotNull Provider provider);
@Deprecated
@ApiStatus.ScheduledForRemoval
@@ -64,8 +83,15 @@ public interface FluidSupportProvider {
}
@NotNull
- EntryStack itemToFluid(@NotNull EntryStack itemStack);
+ default EntryStack itemToFluid(@NotNull EntryStack itemStack) {
+ return itemToFluids(itemStack).findFirst().orElse(EntryStack.empty());
+ }
+
+ @NotNull
+ Stream<EntryStack> itemToFluids(@NotNull EntryStack itemStack);
+ @Deprecated
+ @ApiStatus.ScheduledForRemoval
interface FluidProvider {
@Deprecated
@ApiStatus.ScheduledForRemoval
@@ -74,9 +100,17 @@ public interface FluidSupportProvider {
return EntryStack.empty();
}
+ @Deprecated
+ @ApiStatus.ScheduledForRemoval
@NotNull
default EntryStack itemToFluid(@NotNull EntryStack itemStack) {
return EntryStack.empty();
}
}
+
+ @FunctionalInterface
+ interface Provider {
+ @NotNull
+ InteractionResultHolder<@Nullable Stream<@NotNull EntryStack>> itemToFluid(@NotNull EntryStack itemStack);
+ }
}
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/utils/FormattingUtils.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/utils/FormattingUtils.java
index 411518b37..5d1b3f5c8 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/utils/FormattingUtils.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/utils/FormattingUtils.java
@@ -30,7 +30,7 @@ public final class FormattingUtils {
for (char c : string.toCharArray()) {
if (lastSpecial) {
lastSpecial = false;
- if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || c == 'r' || (c >= 'A' && c <= 'F') || c == 'R')) {
+ if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'k' && c <= 'o') || c == 'r' || (c >= 'A' && c <= 'F') || (c >= 'K' && c <= 'O') || c == 'R')) {
builder.append('ยง');
builder.append(c);
}
diff --git a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
index 0da32a6cc..3c1ef8c46 100644
--- a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
+++ b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
@@ -81,6 +81,7 @@ import net.minecraft.tags.ItemTags;
import net.minecraft.tags.Tag;
import net.minecraft.util.LazyLoadedValue;
import net.minecraft.util.Mth;
+import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.item.*;
import net.minecraft.world.item.alchemy.PotionUtils;
import net.minecraft.world.item.crafting.*;
@@ -93,10 +94,10 @@ import net.minecraft.world.level.material.Fluid;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.ApiStatus;
-import org.jetbrains.annotations.NotNull;
import java.util.*;
import java.util.function.UnaryOperator;
+import java.util.stream.Stream;
import static me.shedaniel.rei.impl.Internals.attachInstance;
@@ -370,14 +371,11 @@ public class DefaultPlugin implements REIPluginV0, BuiltinPlugin {
recipeHelper.registerScreenClickArea(new Rectangle(78, 32, 28, 23), FurnaceScreen.class, SMELTING);
recipeHelper.registerScreenClickArea(new Rectangle(78, 32, 28, 23), SmokerScreen.class, SMOKING);
recipeHelper.registerScreenClickArea(new Rectangle(78, 32, 28, 23), BlastFurnaceScreen.class, BLASTING);
- FluidSupportProvider.getInstance().registerFluidProvider(new FluidSupportProvider.FluidProvider() {
- @Override
- public @NotNull EntryStack itemToFluid(@NotNull EntryStack itemStack) {
- Item item = itemStack.getItem();
- if (item instanceof BucketItem)
- return EntryStack.create(((BucketItem) item).content, 1000);
- return EntryStack.empty();
- }
+ FluidSupportProvider.getInstance().registerProvider(itemStack -> {
+ Item item = itemStack.getItem();
+ if (item instanceof BucketItem)
+ return InteractionResultHolder.success(Stream.of(EntryStack.create(((BucketItem) item).content, 1000)));
+ return InteractionResultHolder.pass(null);
});
// SubsetsRegistry subsetsRegistry = SubsetsRegistry.INSTANCE;
// subsetsRegistry.registerPathEntry("roughlyenoughitems:food", EntryStack.create(Items.MILK_BUCKET));
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())
diff --git a/gradle.properties b/gradle.properties
index b9ff923bc..38930efad 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,5 +1,5 @@
org.gradle.jvmargs=-Xmx3G
-mod_version=5.2.11
+mod_version=5.3.0
supported_version=1.16.2
minecraft_version=1.16.2-rc1
yarn_version=1.16.2-rc1+build.4+legacy.20w09a+build.8