Skip to content

Commit f4f0f6f

Browse files
committed
Merge
2 parents 1800c7a + fc95b63 commit f4f0f6f

File tree

13 files changed

+201
-271
lines changed

13 files changed

+201
-271
lines changed

src/main/java/de/dafuqs/spectrum/blocks/fluid/SpectrumFluid.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public void onEntityCollision(BlockState state, World world, BlockPos pos, Entit
9898
if (world.random.nextInt(100) == 0) {
9999
ItemStack itemStack = itemEntity.getStack();
100100
FluidConvertingRecipe recipe = getConversionRecipeFor(getDippingRecipeType(), world, itemStack);
101-
if (recipe != null && !recipe.getOutput(world.getRegistryManager()).isOf(itemStack.getItem())) { // do not try to convert items into itself for performance reasons
101+
if (recipe != null && !recipe.getResult(world.getRegistryManager()).isOf(itemStack.getItem())) { // do not try to convert items into itself for performance reasons
102102
world.playSound(null, itemEntity.getBlockPos(), SoundEvents.BLOCK_WOOL_BREAK, SoundCategory.NEUTRAL, 1.0F, 0.9F + world.getRandom().nextFloat() * 0.2F);
103103

104104
ItemStack result = craft(recipe, itemStack, world);
@@ -121,9 +121,11 @@ public void onEntityCollision(BlockState state, World world, BlockPos pos, Entit
121121

122122
private static final AutoCraftingInventory AUTO_INVENTORY = new AutoCraftingInventory(1, 1);
123123

124-
public <R extends FluidConvertingRecipe> R getConversionRecipeFor(RecipeType<R> recipeType, @NotNull World world, ItemStack itemStack) {
124+
125+
public @Nullable <R extends FluidConvertingRecipe> R getConversionRecipeFor(RecipeType<R> recipeType, @NotNull World world, ItemStack itemStack) {
125126
AUTO_INVENTORY.setInputInventory(Collections.singletonList(itemStack));
126-
return world.getRecipeManager().getFirstMatch(recipeType, AUTO_INVENTORY, world).orElse(null);
127+
RecipeEntry<R> entry = world.getRecipeManager().getFirstMatch(recipeType, AUTO_INVENTORY, world).orElse(null);
128+
return entry == null ? null : entry.value();
127129
}
128130

129131
public ItemStack craft(FluidConvertingRecipe recipe, ItemStack itemStack, World world) {

src/main/java/de/dafuqs/spectrum/blocks/potion_workshop/PotionWorkshopBlockEntity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package de.dafuqs.spectrum.blocks.potion_workshop;
22

3-
import de.dafuqs.matchbooks.recipe.*;
3+
44
import de.dafuqs.revelationary.api.advancements.*;
55
import de.dafuqs.spectrum.*;
66
import de.dafuqs.spectrum.api.block.*;
@@ -221,7 +221,7 @@ private static void craftRecipe(PotionWorkshopBlockEntity potionWorkshopBlockEnt
221221
}
222222

223223
// output
224-
InventoryHelper.addToInventory(potionWorkshopBlockEntity.inventory, recipe.getOutput(potionWorkshopBlockEntity.world.getRegistryManager()).copy(), FIRST_INVENTORY_SLOT, FIRST_INVENTORY_SLOT + INVENTORY_SLOT_COUNT);
224+
InventoryHelper.addToInventory(potionWorkshopBlockEntity.inventory, recipe.getResult(potionWorkshopBlockEntity.world.getRegistryManager()).copy(), FIRST_INVENTORY_SLOT, FIRST_INVENTORY_SLOT + INVENTORY_SLOT_COUNT);
225225
}
226226

227227
private static void brewRecipe(PotionWorkshopBlockEntity potionWorkshopBlockEntity, PotionWorkshopBrewingRecipe brewingRecipe) {

src/main/java/de/dafuqs/spectrum/blocks/spirit_instiller/SpiritInstillerBlockEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package de.dafuqs.spectrum.blocks.spirit_instiller;
22

3-
import de.dafuqs.matchbooks.recipe.*;
43
import de.dafuqs.spectrum.api.block.*;
54
import de.dafuqs.spectrum.api.color.*;
65
import de.dafuqs.spectrum.blocks.*;
@@ -10,6 +9,7 @@
109
import de.dafuqs.spectrum.helpers.*;
1110
import de.dafuqs.spectrum.networking.*;
1211
import de.dafuqs.spectrum.particle.*;
12+
import de.dafuqs.spectrum.recipe.*;
1313
import de.dafuqs.spectrum.recipe.spirit_instiller.*;
1414
import de.dafuqs.spectrum.registries.*;
1515
import net.minecraft.block.*;

src/main/java/de/dafuqs/spectrum/blocks/titration_barrel/TitrationBarrelBlockEntity.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import net.minecraft.inventory.*;
1616
import net.minecraft.item.*;
1717
import net.minecraft.nbt.*;
18+
import net.minecraft.recipe.*;
1819
import net.minecraft.registry.RegistryWrapper;
1920
import net.minecraft.server.network.*;
2021
import net.minecraft.sound.*;
@@ -78,7 +79,8 @@ public TitrationBarrelBlockEntity(BlockPos pos, BlockState state) {
7879
protected void writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLookup) {
7980
super.writeNbt(nbt, registryLookup);
8081
Inventories.writeNbt(nbt, items, registryLookup);
81-
nbt.put("FluidVariant", this.fluidStorage.variant.toNbt());
82+
// FIXME - No longer an NBT element
83+
nbt.put("FluidVariant", this.fluidStorage.variant);
8284
nbt.putLong("FluidAmount", this.fluidStorage.amount);
8385
nbt.putLong("SealTime", this.sealTime);
8486
nbt.putLong("TapTime", this.tapTime);
@@ -91,7 +93,7 @@ public void readNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup registryLooku
9193

9294
this.items = DefaultedList.ofSize(INVENTORY_SIZE, ItemStack.EMPTY);
9395
Inventories.readNbt(nbt, items, registryLookup);
94-
this.fluidStorage.variant = FluidVariant.fromNbt(nbt.getCompound("FluidVariant"));
96+
this.fluidStorage.variant = FluidVariant.CODEC.parse(NbtOps.INSTANCE, nbt.getCompound("FluidVariant")).getOrThrow();
9597
this.fluidStorage.amount = nbt.getLong("FluidAmount");
9698
this.sealTime = nbt.contains("SealTime", NbtElement.LONG_TYPE) ? nbt.getLong("SealTime") : -1;
9799
this.tapTime = nbt.contains("TapTime", NbtElement.LONG_TYPE) ? nbt.getLong("TapTime") : -1;
@@ -169,7 +171,7 @@ public ItemStack tryHarvest(World world, BlockPos blockPos, BlockState blockStat
169171
int daysSealed = getSealMinecraftDays();
170172
int inventoryCount = InventoryHelper.countItemsInInventory(this.getItems());
171173

172-
Optional<ITitrationBarrelRecipe> optionalRecipe = getRecipeForInventory(world);
174+
Optional<RecipeEntry<ITitrationBarrelRecipe>> optionalRecipe = getRecipeForInventory(world);
173175
if (optionalRecipe.isEmpty()) {
174176
if (getItems().isEmpty() && getFluidVariant().isBlank()) {
175177
message = Text.translatable("block.spectrum.titration_barrel.empty_when_tapping");
@@ -178,7 +180,7 @@ public ItemStack tryHarvest(World world, BlockPos blockPos, BlockState blockStat
178180
}
179181
shouldReset = true;
180182
} else {
181-
ITitrationBarrelRecipe recipe = optionalRecipe.get();
183+
ITitrationBarrelRecipe recipe = optionalRecipe.get().value();
182184
if (recipe.getFluidInput().test(this.getFluidVariant())) {
183185
if (recipe.canPlayerCraft(player)) {
184186
boolean canTap = true;
@@ -229,7 +231,7 @@ public ItemStack tryHarvest(World world, BlockPos blockPos, BlockState blockStat
229231
return harvestedStack;
230232
}
231233

232-
public Optional<ITitrationBarrelRecipe> getRecipeForInventory(World world) {
234+
public Optional<RecipeEntry<ITitrationBarrelRecipe>> getRecipeForInventory(World world) {
233235
return world.getRecipeManager().getFirstMatch(SpectrumRecipeTypes.TITRATION_BARREL, this, world);
234236
}
235237

@@ -258,13 +260,22 @@ public boolean canBeSealed(PlayerEntity player) {
258260
}
259261

260262
if (world != null) {
261-
Optional<ITitrationBarrelRecipe> optionalRecipe = getRecipeForInventory(world);
263+
Optional<RecipeEntry<ITitrationBarrelRecipe>> optionalRecipe = getRecipeForInventory(world);
262264
return optionalRecipe.isPresent()
263-
&& optionalRecipe.get().canPlayerCraft(player)
264-
&& optionalRecipe.get().getFluidInput().test(this.getFluidVariant().getFluid());
265+
&& optionalRecipe.get().value().canPlayerCraft(player)
266+
&& optionalRecipe.get().value().getFluidInput().test(this.getFluidVariant().getFluid());
265267
}
266268

267269
return false;
268270
}
269271

272+
@Override
273+
public ItemStack getStackInSlot(int slot) {
274+
return this.items.get(slot);
275+
}
276+
277+
@Override
278+
public int getSize() {
279+
return INVENTORY_SIZE;
280+
}
270281
}
Lines changed: 22 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,34 @@
11
package de.dafuqs.spectrum.recipe.cinderhearth;
22

3-
import com.mojang.serialization.*;
4-
import com.mojang.serialization.codecs.*;
53
import de.dafuqs.spectrum.api.recipe.*;
64
import de.dafuqs.spectrum.recipe.*;
5+
import io.wispforest.endec.*;
6+
import io.wispforest.endec.impl.*;
77
import io.wispforest.owo.serialization.*;
8+
import io.wispforest.owo.serialization.endec.*;
89
import net.minecraft.item.*;
9-
import net.minecraft.network.*;
10-
import net.minecraft.network.codec.*;
1110
import net.minecraft.util.*;
1211

13-
import java.util.*;
14-
15-
public class CinderhearthRecipeSerializer implements GatedRecipeSerializer<CinderhearthRecipe> {
16-
17-
private static final MapCodec<CinderhearthRecipe> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(
18-
Codec.STRING.optionalFieldOf("group", "").forGetter(recipe -> recipe.group),
19-
Codec.BOOL.optionalFieldOf("secret", false).forGetter(recipe -> recipe.secret),
20-
Identifier.CODEC.fieldOf("required_advancement").forGetter(recipe -> recipe.requiredAdvancementIdentifier),
21-
CodecUtils.toCodec(IngredientStack.Serializer.ENDEC).fieldOf("ingredient").forGetter(recipe -> recipe.ingredient),
22-
Codec.INT.fieldOf("time").forGetter(recipe -> recipe.time),
23-
Codec.FLOAT.fieldOf("experience").forGetter(recipe -> recipe.experience),
24-
RecordCodecBuilder.<Pair<ItemStack, Float>>create(resultInstance -> resultInstance.group(
25-
ItemStack.VALIDATED_CODEC.fieldOf("result").forGetter(Pair::getLeft),
26-
Codec.FLOAT.optionalFieldOf("chance", 1.0F).forGetter(Pair::getRight)
27-
).apply(resultInstance, Pair::new)).listOf().fieldOf("results").forGetter(recipe -> recipe.resultsWithChance)
28-
).apply(instance, CinderhearthRecipe::new));
29-
private static final PacketCodec<RegistryByteBuf, CinderhearthRecipe> PACKET_CODEC = PacketCodec.ofStatic(CinderhearthRecipeSerializer::write, CinderhearthRecipeSerializer::read);
30-
31-
public static void write(RegistryByteBuf buf, CinderhearthRecipe recipe) {
32-
buf.writeString(recipe.group);
33-
buf.writeBoolean(recipe.secret);
34-
GatedRecipeSerializer.writeNullableIdentifier(buf, recipe.requiredAdvancementIdentifier);
35-
recipe.ingredient.write(buf);
36-
buf.writeInt(recipe.time);
37-
buf.writeFloat(recipe.experience);
38-
buf.writeInt(recipe.resultsWithChance.size());
39-
for (Pair<ItemStack, Float> output : recipe.resultsWithChance) {
40-
ItemStack.PACKET_CODEC.encode(buf, output.getLeft());
41-
buf.writeFloat(output.getRight());
42-
}
43-
}
12+
public class CinderhearthRecipeSerializer extends EndecRecipeSerializer<CinderhearthRecipe> implements GatedRecipeSerializer<CinderhearthRecipe> {
4413

45-
public static CinderhearthRecipe read(RegistryByteBuf buf) {
46-
String group = buf.readString();
47-
boolean secret = buf.readBoolean();
48-
Identifier requiredAdvancementIdentifier = GatedRecipeSerializer.readNullableIdentifier(buf);
49-
IngredientStack ingredient = IngredientStack.fromByteBuf(buf);
50-
int time = buf.readInt();
51-
float experience = buf.readFloat();
52-
int outputCount = buf.readInt();
53-
List<Pair<ItemStack, Float>> resultsWithChance = new ArrayList<>(outputCount);
54-
for (int i = 0; i < outputCount; i++) {
55-
resultsWithChance.add(new Pair<>(ItemStack.PACKET_CODEC.decode(buf), buf.readFloat()));
56-
}
57-
return new CinderhearthRecipe(group, secret, requiredAdvancementIdentifier, ingredient, time, experience, resultsWithChance);
58-
}
59-
60-
@Override
61-
public MapCodec<CinderhearthRecipe> codec() {
62-
return CODEC;
63-
}
14+
public static final StructEndec<Pair<ItemStack, Float>> STACK_WITH_CHANCE_ENDEC = StructEndecBuilder.of(
15+
MinecraftEndecs.ITEM_STACK.fieldOf("result", Pair::getLeft),
16+
Endec.FLOAT.optionalFieldOf("chance", Pair::getRight, 1.0f),
17+
Pair::new
18+
);
6419

65-
@Override
66-
public PacketCodec<RegistryByteBuf, CinderhearthRecipe> packetCodec() {
67-
return PACKET_CODEC;
20+
public static final StructEndec<CinderhearthRecipe> ENDEC = StructEndecBuilder.of(
21+
Endec.STRING.optionalFieldOf("group", recipe -> recipe.group, ""),
22+
Endec.BOOLEAN.optionalFieldOf("secret", recipe -> recipe.secret, false),
23+
MinecraftEndecs.IDENTIFIER.fieldOf("required_advancement", recipe -> recipe.requiredAdvancementIdentifier),
24+
IngredientStack.Serializer.ENDEC.fieldOf("ingredient", recipe -> recipe.ingredient),
25+
Endec.INT.fieldOf("time", recipe -> recipe.time),
26+
Endec.FLOAT.optionalFieldOf("experience", recipe -> recipe.experience, 0f),
27+
STACK_WITH_CHANCE_ENDEC.listOf().fieldOf("results", recipe -> recipe.resultsWithChance),
28+
CinderhearthRecipe::new
29+
);
30+
31+
public CinderhearthRecipeSerializer() {
32+
super(ENDEC);
6833
}
6934
}

src/main/java/de/dafuqs/spectrum/recipe/enchanter/EnchanterRecipe.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import de.dafuqs.spectrum.api.item.*;
55
import de.dafuqs.spectrum.recipe.*;
66
import de.dafuqs.spectrum.registries.*;
7-
import net.minecraft.inventory.*;
87
import net.minecraft.item.*;
98
import net.minecraft.recipe.*;
109
import net.minecraft.recipe.input.*;
@@ -13,11 +12,13 @@
1312
import net.minecraft.util.collection.*;
1413
import net.minecraft.world.*;
1514

15+
import java.util.*;
16+
1617
public class EnchanterRecipe extends GatedSpectrumRecipe<RecipeInput> {
1718

1819
public static final Identifier UNLOCK_IDENTIFIER = SpectrumCommon.locate("midgame/build_enchanting_structure");
1920

20-
protected final DefaultedList<Ingredient> inputs; // first input is the center, all others around clockwise
21+
protected final List<Ingredient> inputs; // first input is the center, all others around clockwise
2122
protected final ItemStack output;
2223

2324
protected final int requiredExperience;
@@ -26,7 +27,7 @@ public class EnchanterRecipe extends GatedSpectrumRecipe<RecipeInput> {
2627
// copy all nbt data from the first stack in the ingredients to the output stack
2728
protected final boolean copyNbt;
2829

29-
public EnchanterRecipe(String group, boolean secret, Identifier requiredAdvancementIdentifier, DefaultedList<Ingredient> inputs, ItemStack output, int craftingTime, int requiredExperience, boolean noBenefitsFromYieldAndEfficiencyUpgrades, boolean copyNbt) {
30+
public EnchanterRecipe(String group, boolean secret, Identifier requiredAdvancementIdentifier, List<Ingredient> inputs, ItemStack output, int craftingTime, int requiredExperience, boolean noBenefitsFromYieldAndEfficiencyUpgrades, boolean copyNbt) {
3031
super(group, secret, requiredAdvancementIdentifier);
3132

3233
this.inputs = inputs;
@@ -105,7 +106,9 @@ public RecipeType<?> getType() {
105106

106107
@Override
107108
public DefaultedList<Ingredient> getIngredients() {
108-
return inputs;
109+
DefaultedList<Ingredient> ingredients = DefaultedList.ofSize(inputs.size());
110+
ingredients.addAll(inputs);
111+
return ingredients;
109112
}
110113

111114
public int getRequiredExperience() {
Lines changed: 21 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,30 @@
11
package de.dafuqs.spectrum.recipe.enchanter;
22

3-
import com.google.gson.*;
43
import de.dafuqs.spectrum.api.recipe.*;
5-
import de.dafuqs.spectrum.recipe.*;
6-
import net.minecraft.item.*;
7-
import net.minecraft.network.*;
4+
import io.wispforest.endec.*;
5+
import io.wispforest.endec.impl.*;
6+
import io.wispforest.owo.serialization.*;
7+
import io.wispforest.owo.serialization.endec.*;
88
import net.minecraft.recipe.*;
9-
import net.minecraft.util.*;
10-
import net.minecraft.util.collection.*;
119

12-
public class EnchanterRecipeSerializer implements GatedRecipeSerializer<EnchanterRecipe> {
13-
14-
public final EnchanterRecipeSerializer.RecipeFactory recipeFactory;
15-
16-
public EnchanterRecipeSerializer(EnchanterRecipeSerializer.RecipeFactory recipeFactory) {
17-
this.recipeFactory = recipeFactory;
18-
}
19-
20-
public interface RecipeFactory {
21-
EnchanterRecipe create(Identifier id, String group, boolean secret, Identifier requiredAdvancementIdentifier, DefaultedList<Ingredient> inputs, ItemStack output, int craftingTime, int requiredExperience, boolean noBenefitsFromYieldAndEfficiencyUpgrades, boolean copyNbt);
22-
}
10+
import java.util.*;
11+
12+
public class EnchanterRecipeSerializer extends EndecRecipeSerializer<EnchanterRecipe> implements GatedRecipeSerializer<EnchanterRecipe> {
2313

24-
@Override
25-
public EnchanterRecipe read(Identifier identifier, JsonObject jsonObject) {
26-
String group = readGroup(jsonObject);
27-
boolean secret = readSecret(jsonObject);
28-
Identifier requiredAdvancementIdentifier = readRequiredAdvancementIdentifier(jsonObject);
29-
30-
JsonArray ingredientArray = JsonHelper.getArray(jsonObject, "ingredients");
31-
DefaultedList<Ingredient> craftingInputs = DefaultedList.ofSize(ingredientArray.size());
32-
for (int i = 0; i < ingredientArray.size(); i++) {
33-
craftingInputs.add(Ingredient.fromJson(ingredientArray.get(i)));
34-
}
35-
36-
ItemStack output = RecipeUtils.itemStackWithNbtFromJson(JsonHelper.getObject(jsonObject, "result"));
37-
38-
int requiredExperience = JsonHelper.getInt(jsonObject, "required_experience", 0);
39-
int craftingTime = JsonHelper.getInt(jsonObject, "time", 200);
40-
41-
boolean noBenefitsFromYieldAndEfficiencyUpgrades = JsonHelper.getBoolean(jsonObject, "disable_yield_and_efficiency_upgrades", false);
42-
boolean copyNbt = JsonHelper.getBoolean(jsonObject, "copy_nbt", false);
43-
44-
return this.recipeFactory.create(identifier, group, secret, requiredAdvancementIdentifier, craftingInputs, output, craftingTime, requiredExperience, noBenefitsFromYieldAndEfficiencyUpgrades, copyNbt);
45-
}
14+
public static final StructEndec<EnchanterRecipe> ENDEC = StructEndecBuilder.of(
15+
Endec.STRING.optionalFieldOf("group", recipe -> recipe.group, ""),
16+
Endec.BOOLEAN.optionalFieldOf("secret", recipe -> recipe.secret, false),
17+
MinecraftEndecs.IDENTIFIER.fieldOf("required_advancement", recipe -> recipe.requiredAdvancementIdentifier),
18+
CodecUtils.toEndec(Ingredient.DISALLOW_EMPTY_CODEC).listOf().optionalFieldOf("ingredients", recipe -> recipe.inputs, List.of()),
19+
MinecraftEndecs.ITEM_STACK.fieldOf("output", recipe -> recipe.output),
20+
Endec.INT.optionalFieldOf("required_experience", recipe -> recipe.requiredExperience, 0),
21+
Endec.INT.optionalFieldOf("time", recipe -> recipe.craftingTime, 200),
22+
Endec.BOOLEAN.optionalFieldOf("disable_yield_and_efficiency_upgrades", recipe -> recipe.noBenefitsFromYieldAndEfficiencyUpgrades, false),
23+
Endec.BOOLEAN.optionalFieldOf("copy_components", recipe -> recipe.copyNbt, false),
24+
EnchanterRecipe::new
25+
);
4626

47-
@Override
48-
public void write(PacketByteBuf packetByteBuf, EnchanterRecipe recipe) {
49-
packetByteBuf.writeString(recipe.group);
50-
packetByteBuf.writeBoolean(recipe.secret);
51-
writeNullableIdentifier(packetByteBuf, recipe.requiredAdvancementIdentifier);
52-
53-
packetByteBuf.writeShort(recipe.inputs.size());
54-
for (Ingredient ingredient : recipe.inputs) {
55-
ingredient.write(packetByteBuf);
56-
}
57-
58-
packetByteBuf.writeItemStack(recipe.output);
59-
packetByteBuf.writeInt(recipe.craftingTime);
60-
packetByteBuf.writeInt(recipe.requiredExperience);
61-
packetByteBuf.writeBoolean(recipe.noBenefitsFromYieldAndEfficiencyUpgrades);
62-
packetByteBuf.writeBoolean(recipe.copyNbt);
27+
public EnchanterRecipeSerializer() {
28+
super(ENDEC);
6329
}
64-
65-
@Override
66-
public EnchanterRecipe read(Identifier identifier, PacketByteBuf packetByteBuf) {
67-
String group = packetByteBuf.readString();
68-
boolean secret = packetByteBuf.readBoolean();
69-
Identifier requiredAdvancementIdentifier = readNullableIdentifier(packetByteBuf);
70-
71-
short craftingInputCount = packetByteBuf.readShort();
72-
DefaultedList<Ingredient> ingredients = DefaultedList.ofSize(craftingInputCount, Ingredient.EMPTY);
73-
for (short i = 0; i < craftingInputCount; i++) {
74-
ingredients.set(i, Ingredient.fromPacket(packetByteBuf));
75-
}
76-
77-
ItemStack output = packetByteBuf.readItemStack();
78-
int craftingTime = packetByteBuf.readInt();
79-
int requiredExperience = packetByteBuf.readInt();
80-
boolean noBenefitsFromYieldAndEfficiencyUpgrades = packetByteBuf.readBoolean();
81-
boolean copyNbt = packetByteBuf.readBoolean();
82-
83-
return this.recipeFactory.create(identifier, group, secret, requiredAdvancementIdentifier, ingredients, output, craftingTime, requiredExperience, noBenefitsFromYieldAndEfficiencyUpgrades, copyNbt);
84-
}
85-
8630
}

0 commit comments

Comments
 (0)