From 8d9d53b65561fedea8f61d194d411565fd89b57e Mon Sep 17 00:00:00 2001 From: shedaniel Date: Fri, 15 Apr 2022 13:18:08 +0800 Subject: Fix #817 --- .../shedaniel/rei/plugin/common/DefaultPlugin.java | 9 ++- .../plugin/common/fabric/DefaultPluginImpl.java | 65 ++++++++++++++++++++++ .../resources/roughlyenoughitems.accessWidener | 1 - .../rei/plugin/common/forge/DefaultPluginImpl.java | 6 ++ .../main/resources/META-INF/accesstransformer.cfg | 1 - 5 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 fabric/src/main/java/me/shedaniel/rei/plugin/common/fabric/DefaultPluginImpl.java 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 74adb6305..5ba026cc5 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 @@ -88,7 +88,7 @@ public class DefaultPlugin implements BuiltinPlugin, REIServerPlugin { ItemStack stack = entry.getValue(); Item item = stack.getItem(); if (item instanceof BucketItem bucketItem) { - Fluid fluid = bucketItem.content; + Fluid fluid = getFluidFromBucket(bucketItem); if (fluid != null) { return CompoundEventResult.interruptTrue(Stream.of(EntryStacks.of(fluid, FluidStackHooks.bucketAmount()))); } @@ -103,7 +103,12 @@ public class DefaultPlugin implements BuiltinPlugin, REIServerPlugin { @ExpectPlatform @PlatformOnly(PlatformOnly.FORGE) private static void registerForgeFluidSupport(FluidSupportProvider support) { - + throw new AssertionError(); + } + + @ExpectPlatform + private static Fluid getFluidFromBucket(BucketItem item) { + throw new AssertionError(); } @Override diff --git a/fabric/src/main/java/me/shedaniel/rei/plugin/common/fabric/DefaultPluginImpl.java b/fabric/src/main/java/me/shedaniel/rei/plugin/common/fabric/DefaultPluginImpl.java new file mode 100644 index 000000000..e86a7cb50 --- /dev/null +++ b/fabric/src/main/java/me/shedaniel/rei/plugin/common/fabric/DefaultPluginImpl.java @@ -0,0 +1,65 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022 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.fabric; + +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.level.material.Fluid; +import org.jetbrains.annotations.NotNull; + +import java.lang.reflect.Field; +import java.util.Optional; + +public class DefaultPluginImpl { + public static Fluid getFluidFromBucket(BucketItem item) { + Field field = getContentField(); + if (field == null) return null; + try { + return (Fluid) field.get(item); + } catch (IllegalAccessException e) { + e.printStackTrace(); + return null; + } + } + + private static Optional field = null; + + @NotNull + private static Field getContentField() { + if (field == null) { + try { + Field field = BucketItem.class.getDeclaredField(FabricLoader.getInstance().getMappingResolver().mapFieldName("intermediary", "net.minecraft.class_1755", "field_7905", "Lnet/minecraft/class_3611;")); + field.setAccessible(true); + DefaultPluginImpl.field = Optional.of(field); + return field; + } catch (Throwable throwable) { + throwable.printStackTrace(); + DefaultPluginImpl.field = Optional.empty(); + return null; + } + } + + return field.orElse(null); + } +} diff --git a/fabric/src/main/resources/roughlyenoughitems.accessWidener b/fabric/src/main/resources/roughlyenoughitems.accessWidener index baa66082a..a9714d123 100644 --- a/fabric/src/main/resources/roughlyenoughitems.accessWidener +++ b/fabric/src/main/resources/roughlyenoughitems.accessWidener @@ -20,7 +20,6 @@ accessible field net/minecraft/world/item/alchemy/PotionBrewing accessible field net/minecraft/world/item/alchemy/PotionBrewing$Mix from Ljava/lang/Object; accessible field net/minecraft/world/item/alchemy/PotionBrewing$Mix ingredient Lnet/minecraft/world/item/crafting/Ingredient; accessible field net/minecraft/world/item/alchemy/PotionBrewing$Mix to Ljava/lang/Object; -accessible field net/minecraft/world/item/BucketItem content Lnet/minecraft/world/level/material/Fluid; accessible field net/minecraft/world/item/crafting/UpgradeRecipe addition Lnet/minecraft/world/item/crafting/Ingredient; accessible field net/minecraft/world/item/crafting/UpgradeRecipe base Lnet/minecraft/world/item/crafting/Ingredient; accessible field net/minecraft/world/item/CreativeModeTab langId Ljava/lang/String; 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 index a4db8f406..e2ee44500 100644 --- 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 @@ -28,7 +28,9 @@ import dev.architectury.event.CompoundEventResult; import dev.architectury.hooks.fluid.forge.FluidStackHooksForge; import me.shedaniel.rei.api.common.fluid.FluidSupportProvider; import me.shedaniel.rei.api.common.util.EntryStacks; +import net.minecraft.world.item.BucketItem; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.material.Fluid; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; @@ -55,4 +57,8 @@ public class DefaultPluginImpl { return CompoundEventResult.pass(); }); } + + public static Fluid getFluidFromBucket(BucketItem item) { + return item.getFluid(); + } } diff --git a/forge/src/main/resources/META-INF/accesstransformer.cfg b/forge/src/main/resources/META-INF/accesstransformer.cfg index d468de9f2..f43fc89ba 100644 --- a/forge/src/main/resources/META-INF/accesstransformer.cfg +++ b/forge/src/main/resources/META-INF/accesstransformer.cfg @@ -20,7 +20,6 @@ public net.minecraft.world.item.alchemy.PotionBrewing f_43494_ public net.minecraft.world.item.alchemy.PotionBrewing$Mix f_43532_ public net.minecraft.world.item.alchemy.PotionBrewing$Mix f_43533_ public net.minecraft.world.item.alchemy.PotionBrewing$Mix f_43534_ -public net.minecraft.world.item.BucketItem f_40687_ public net.minecraft.world.item.crafting.UpgradeRecipe f_44519_ public net.minecraft.world.item.crafting.UpgradeRecipe f_44518_ public net.minecraft.world.item.CreativeModeTab f_40763_ -- cgit