Browse Source

Introduce FluidBucketHooks.getFluid (#243)

* Introduce FluidBucketHooks.getFluid

* Update common/src/main/java/dev/architectury/hooks/fluid/FluidBucketHooks.java

Co-authored-by: Juuxel <6596629+Juuxel@users.noreply.github.com>

Co-authored-by: Juuxel <6596629+Juuxel@users.noreply.github.com>
(cherry picked from commit 85146c5cc08f9197533860bb9272f9e7bf73534c)

(cherry picked from commit 30d7d5015655b3af1d3bec92ec8c46e90f349c46)
shedaniel 3 years ago
parent
commit
aa67d29812

+ 38 - 0
common/src/main/java/me/shedaniel/architectury/hooks/FluidBucketHooks.java

@@ -0,0 +1,38 @@
+/*
+ * This file is part of architectury.
+ * Copyright (C) 2020, 2021, 2022 architectury
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+package me.shedaniel.architectury.hooks;
+
+import dev.architectury.injectables.annotations.ExpectPlatform;
+import net.minecraft.world.item.BucketItem;
+import net.minecraft.world.level.material.Fluid;
+
+public final class FluidBucketHooks {
+    /**
+     * Returns the fluid contained in the bucket.
+     * This requires special handling since forge defers the fiuid.
+     *
+     * @param item the bucket item
+     * @return the fluid contained in the bucket
+     */
+    @ExpectPlatform
+    public static Fluid getFluid(BucketItem item) {
+        throw new AssertionError();
+    }
+}

+ 30 - 0
fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/FluidBucketHooksImpl.java

@@ -0,0 +1,30 @@
+/*
+ * This file is part of architectury.
+ * Copyright (C) 2020, 2021, 2022 architectury
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+package me.shedaniel.architectury.hooks.fabric;
+
+import me.shedaniel.architectury.mixin.fabric.BucketItemAccessor;
+import net.minecraft.world.item.BucketItem;
+import net.minecraft.world.level.material.Fluid;
+
+public class FluidBucketHooksImpl {
+    public static Fluid getFluid(BucketItem item) {
+        return ((BucketItemAccessor) item).getContent();
+    }
+}

+ 31 - 0
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/BucketItemAccessor.java

@@ -0,0 +1,31 @@
+/*
+ * This file is part of architectury.
+ * Copyright (C) 2020, 2021, 2022 architectury
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+package me.shedaniel.architectury.mixin.fabric;
+
+import net.minecraft.world.item.BucketItem;
+import net.minecraft.world.level.material.Fluid;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+@Mixin(BucketItem.class)
+public interface BucketItemAccessor {
+    @Accessor("content")
+    Fluid getContent();
+}

+ 3 - 2
fabric/src/main/resources/architectury.mixins.json

@@ -5,6 +5,7 @@
   "compatibilityLevel": "JAVA_8",
   "minVersion": "0.7.11",
   "client": [
+    "client.ClientPlayerAttackInvoker",
     "client.MixinAbstractContainerScreen",
     "client.MixinClientLevel",
     "client.MixinClientPacketListener",
@@ -17,10 +18,10 @@
     "client.MixinMouseHandler",
     "client.MixinMultiPlayerGameMode",
     "client.MixinScreen",
-    "client.MixinTextureAtlas",
-    "client.ClientPlayerAttackInvoker"
+    "client.MixinTextureAtlas"
   ],
   "mixins": [
+    "BucketItemAccessor",
     "ExplosionPreInvoker",
     "LivingDeathInvoker",
     "MixinBaseSpawner",

+ 29 - 0
forge/src/main/java/me/shedaniel/architectury/hooks/forge/FluidBucketHooksImpl.java

@@ -0,0 +1,29 @@
+/*
+ * This file is part of architectury.
+ * Copyright (C) 2020, 2021, 2022 architectury
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+package me.shedaniel.architectury.hooks.forge;
+
+import net.minecraft.world.item.BucketItem;
+import net.minecraft.world.level.material.Fluid;
+
+public class FluidBucketHooksImpl {
+    public static Fluid getFluid(BucketItem item) {
+        return item.getFluid();
+    }
+}