aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/fluid/FluidSupportProvider.java4
-rwxr-xr-xbuild.gradle2
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java18
-rw-r--r--forge/src/main/java/me/shedaniel/rei/plugin/common/forge/DefaultPluginImpl.java58
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/fluid/FluidSupportProviderImpl.java6
5 files changed, 81 insertions, 7 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/fluid/FluidSupportProvider.java b/api/src/main/java/me/shedaniel/rei/api/common/fluid/FluidSupportProvider.java
index f6260a4fc..84ea91b84 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/fluid/FluidSupportProvider.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/fluid/FluidSupportProvider.java
@@ -46,10 +46,10 @@ public interface FluidSupportProvider extends Reloadable<REIPlugin<?>>, List<Flu
void register(Provider provider);
- Optional<Stream<EntryStack<FluidStack>>> itemToFluids(EntryStack<? extends ItemStack> itemStack);
+ Optional<Stream<EntryStack<FluidStack>>> itemToFluids(EntryStack<? extends ItemStack> stack);
@FunctionalInterface
interface Provider {
- InteractionResultHolder<@Nullable Stream<EntryStack<FluidStack>>> itemToFluid(EntryStack<? extends ItemStack> itemStack);
+ InteractionResultHolder<@Nullable Stream<EntryStack<FluidStack>>> itemToFluid(EntryStack<? extends ItemStack> stack);
}
}
diff --git a/build.gradle b/build.gradle
index 4cbfbd082..2440b9ab2 100755
--- a/build.gradle
+++ b/build.gradle
@@ -1,5 +1,5 @@
plugins {
- id("architectury-plugin") version("3.0-SNAPSHOT")
+ id("architectury-plugin") version("3.1-SNAPSHOT")
id("forgified-fabric-loom") version("0.6-SNAPSHOT") apply false
id("org.cadixdev.licenser") version("0.5.0")
id("com.matthewprenger.cursegradle") version("1.4.0")
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java
index 136ab6a61..94593cb64 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java
@@ -23,7 +23,10 @@
package me.shedaniel.rei.plugin.common;
+import me.shedaniel.architectury.annotations.ExpectPlatform;
+import me.shedaniel.architectury.annotations.PlatformOnly;
import me.shedaniel.architectury.hooks.FluidStackHooks;
+import me.shedaniel.architectury.platform.Platform;
import me.shedaniel.architectury.utils.NbtType;
import me.shedaniel.rei.api.common.display.DisplaySerializerRegistry;
import me.shedaniel.rei.api.common.entry.comparison.ItemComparator;
@@ -52,6 +55,7 @@ import net.minecraft.world.inventory.*;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
+import net.minecraft.world.level.material.Fluid;
import java.util.List;
import java.util.function.Function;
@@ -80,10 +84,22 @@ public class DefaultPlugin implements BuiltinPlugin, REIServerPlugin {
support.register(entry -> {
ItemStack stack = entry.getValue();
if (stack.getItem() instanceof BucketItem) {
- return InteractionResultHolder.success(Stream.of(EntryStacks.of(((BucketItem) stack.getItem()).content, FluidStackHooks.bucketAmount())));
+ Fluid fluid = ((BucketItem) stack.getItem()).content;
+ if (fluid != null) {
+ return InteractionResultHolder.success(Stream.of(EntryStacks.of(fluid, FluidStackHooks.bucketAmount())));
+ }
}
return InteractionResultHolder.pass(null);
});
+ if (Platform.isForge()) {
+ registerForgeFluidSupport(support);
+ }
+ }
+
+ @ExpectPlatform
+ @PlatformOnly(PlatformOnly.FORGE)
+ private static void registerForgeFluidSupport(FluidSupportProvider support) {
+
}
@Override
diff --git a/forge/src/main/java/me/shedaniel/rei/plugin/common/forge/DefaultPluginImpl.java b/forge/src/main/java/me/shedaniel/rei/plugin/common/forge/DefaultPluginImpl.java
new file mode 100644
index 000000000..7d44dd528
--- /dev/null
+++ b/forge/src/main/java/me/shedaniel/rei/plugin/common/forge/DefaultPluginImpl.java
@@ -0,0 +1,58 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020 shedaniel
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package me.shedaniel.rei.plugin.common.forge;
+
+import com.google.common.base.Predicates;
+import me.shedaniel.architectury.hooks.forge.FluidStackHooksForge;
+import me.shedaniel.rei.api.common.fluid.FluidSupportProvider;
+import me.shedaniel.rei.api.common.util.EntryStacks;
+import net.minecraft.world.InteractionResultHolder;
+import net.minecraft.world.item.ItemStack;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.FluidUtil;
+import net.minecraftforge.fluids.capability.IFluidHandlerItem;
+
+import java.util.stream.IntStream;
+
+public class DefaultPluginImpl {
+ public static void registerForgeFluidSupport(FluidSupportProvider support) {
+ support.register(stack -> {
+ ItemStack itemStack = stack.getValue();
+ LazyOptional<IFluidHandlerItem> handlerOptional = FluidUtil.getFluidHandler(itemStack);
+ if (handlerOptional.isPresent()) {
+ IFluidHandlerItem handler = handlerOptional.orElse(null);
+ if (handler.getTanks() > 0) {
+ return InteractionResultHolder.success(IntStream.range(0, handler.getTanks())
+ .mapToObj(handler::getFluidInTank)
+ .filter(Predicates.not(FluidStack::isEmpty))
+ .map(FluidStackHooksForge::fromForge)
+ .map(EntryStacks::of));
+ }
+ }
+
+ return InteractionResultHolder.pass(null);
+ });
+ }
+}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/fluid/FluidSupportProviderImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/fluid/FluidSupportProviderImpl.java
index 736b38e3e..d9d7295f0 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/fluid/FluidSupportProviderImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/fluid/FluidSupportProviderImpl.java
@@ -62,10 +62,10 @@ public class FluidSupportProviderImpl extends ForwardingList<FluidSupportProvide
}
@Override
- public Optional<Stream<EntryStack<FluidStack>>> itemToFluids(EntryStack<? extends ItemStack> itemStack) {
- if (itemStack.isEmpty()) return Optional.empty();
+ public Optional<Stream<EntryStack<FluidStack>>> itemToFluids(EntryStack<? extends ItemStack> stack) {
+ if (stack.isEmpty()) return Optional.empty();
for (Provider provider : providers) {
- InteractionResultHolder<@Nullable Stream<EntryStack<FluidStack>>> resultHolder = Objects.requireNonNull(provider.itemToFluid(itemStack));
+ InteractionResultHolder<@Nullable Stream<EntryStack<FluidStack>>> resultHolder = Objects.requireNonNull(provider.itemToFluid(stack));
Stream<EntryStack<FluidStack>> stream = resultHolder.getObject();
if (stream != null) {
if (resultHolder.getResult().consumesAction()) {