5
5
6
6
package net .neoforged .neoforge .unittest ;
7
7
8
+ import com .mojang .serialization .JsonOps ;
8
9
import java .util .List ;
9
10
import java .util .stream .Stream ;
10
11
import net .minecraft .core .component .DataComponentPatch ;
17
18
import net .neoforged .neoforge .fluids .crafting .CompoundFluidIngredient ;
18
19
import net .neoforged .neoforge .fluids .crafting .DataComponentFluidIngredient ;
19
20
import net .neoforged .neoforge .fluids .crafting .FluidIngredient ;
21
+ import net .neoforged .neoforge .fluids .crafting .IntersectionFluidIngredient ;
20
22
import net .neoforged .testframework .junit .EphemeralTestServerProvider ;
21
23
import org .assertj .core .api .Assertions ;
22
24
import org .junit .jupiter .api .Test ;
@@ -74,6 +76,7 @@ void fluidIngredientComponentMatchingWorks(boolean strict, MinecraftServer serve
74
76
.isEqualTo (!strict );
75
77
}
76
78
79
+ @ Test
77
80
void singleFluidIngredientIgnoresSizeAndData (MinecraftServer server ) {
78
81
var ingredient = FluidIngredient .of (Fluids .WATER );
79
82
@@ -85,4 +88,30 @@ void singleFluidIngredientIgnoresSizeAndData(MinecraftServer server) {
85
88
.withFailMessage ("Single fluid ingredient should match regardless of fluid data!" )
86
89
.isTrue ();
87
90
}
91
+
92
+ @ Test
93
+ void customFluidIngredientSerialization (MinecraftServer server ) {
94
+ var ingredient1 = FluidIngredient .of (Fluids .WATER , Fluids .LAVA );
95
+ var ingredient2 = FluidIngredient .of (Fluids .LAVA );
96
+ var intersection = IntersectionFluidIngredient .of (ingredient1 , ingredient2 );
97
+
98
+ var ops = server .registryAccess ().createSerializationContext (JsonOps .INSTANCE );
99
+ var result = FluidIngredient .CODEC .encodeStart (ops , intersection )
100
+ .getOrThrow (error -> new RuntimeException ("Failed to serialize ingredient: " + error ));
101
+
102
+ var deserialized = FluidIngredient .CODEC .decode (ops , result )
103
+ .getOrThrow (error -> new RuntimeException ("Failed to deserialize ingredient: " + error ))
104
+ .getFirst ();
105
+
106
+ if (!(deserialized instanceof IntersectionFluidIngredient )) {
107
+ throw new AssertionError ("Deserialized ingredient is not an IntersectionFluidIngredient! Got " + deserialized );
108
+ }
109
+
110
+ if (deserialized .test (new FluidStack (Fluids .WATER , 1 ))) {
111
+ throw new AssertionError ("Deserialized ingredient should not match water!" );
112
+ }
113
+ if (!deserialized .test (new FluidStack (Fluids .LAVA , 1 ))) {
114
+ throw new AssertionError ("Deserialized ingredient should match lava!" );
115
+ }
116
+ }
88
117
}
0 commit comments