Skip to content

Commit b163ad5

Browse files
committed
Wrap shaped recipes in a way that is lazier and doesn't require ATs
1 parent 6820c02 commit b163ad5

File tree

8 files changed

+77
-37
lines changed

8 files changed

+77
-37
lines changed

src/datagen/main/java/mekanism/common/recipe/builder/ExtendedShapedRecipeBuilder.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import net.minecraft.tags.TagKey;
1515
import net.minecraft.world.item.Item;
1616
import net.minecraft.world.item.ItemStack;
17-
import net.minecraft.world.item.crafting.CraftingBookCategory;
1817
import net.minecraft.world.item.crafting.Ingredient;
1918
import net.minecraft.world.item.crafting.Recipe;
2019
import net.minecraft.world.item.crafting.ShapedRecipe;
@@ -102,16 +101,16 @@ protected void validate(ResourceLocation id) {
102101

103102
@Override
104103
protected Recipe<?> asRecipe() {
105-
return wrapRecipe(
104+
return wrapRecipe(new ShapedRecipe(
106105
Objects.requireNonNullElse(this.group, ""),
107106
RecipeBuilder.determineBookCategory(this.category),
108107
ShapedRecipePattern.of(this.key, this.pattern),
109108
new ItemStack(this.result, this.count),
110109
this.showNotification
111-
);
110+
));
112111
}
113112

114-
protected Recipe<?> wrapRecipe(String group, CraftingBookCategory category, ShapedRecipePattern pattern, ItemStack result, boolean showNotification) {
115-
return new ShapedRecipe(group, category, pattern, result, showNotification);
113+
protected Recipe<?> wrapRecipe(ShapedRecipe recipe) {
114+
return recipe;
116115
}
117116
}

src/datagen/main/java/mekanism/common/recipe/builder/MekDataShapedRecipeBuilder.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
import mekanism.api.annotations.NothingNullByDefault;
44
import mekanism.common.recipe.upgrade.MekanismShapedRecipe;
5-
import net.minecraft.world.item.ItemStack;
6-
import net.minecraft.world.item.crafting.CraftingBookCategory;
75
import net.minecraft.world.item.crafting.Recipe;
8-
import net.minecraft.world.item.crafting.ShapedRecipePattern;
6+
import net.minecraft.world.item.crafting.ShapedRecipe;
97
import net.minecraft.world.level.ItemLike;
108

119
@NothingNullByDefault
@@ -24,7 +22,7 @@ public static MekDataShapedRecipeBuilder shapedRecipe(ItemLike result, int count
2422
}
2523

2624
@Override
27-
protected Recipe<?> wrapRecipe(String group, CraftingBookCategory category, ShapedRecipePattern pattern, ItemStack result, boolean showNotification) {
28-
return new MekanismShapedRecipe(group, category, pattern, result, showNotification);
25+
protected Recipe<?> wrapRecipe(ShapedRecipe recipe) {
26+
return new MekanismShapedRecipe(recipe);
2927
}
3028
}

src/datagen/tools/java/mekanism/tools/common/recipe/PaxelShapedRecipeBuilder.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
import mekanism.api.annotations.NothingNullByDefault;
44
import mekanism.common.recipe.builder.ExtendedShapedRecipeBuilder;
55
import net.minecraft.data.recipes.RecipeCategory;
6-
import net.minecraft.world.item.ItemStack;
7-
import net.minecraft.world.item.crafting.CraftingBookCategory;
86
import net.minecraft.world.item.crafting.Recipe;
9-
import net.minecraft.world.item.crafting.ShapedRecipePattern;
7+
import net.minecraft.world.item.crafting.ShapedRecipe;
108
import net.minecraft.world.level.ItemLike;
119

1210
@NothingNullByDefault
@@ -26,7 +24,7 @@ public static PaxelShapedRecipeBuilder shapedRecipe(ItemLike result, int count)
2624
}
2725

2826
@Override
29-
protected Recipe<?> wrapRecipe(String group, CraftingBookCategory category, ShapedRecipePattern pattern, ItemStack result, boolean showNotification) {
30-
return new PaxelRecipe(group, category, pattern, result, showNotification);
27+
protected Recipe<?> wrapRecipe(ShapedRecipe recipe) {
28+
return new PaxelRecipe(recipe);
3129
}
3230
}

src/main/java/mekanism/common/recipe/WrappedShapedRecipe.java

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,27 @@
22

33
import mekanism.api.annotations.NothingNullByDefault;
44
import net.minecraft.core.HolderLookup;
5+
import net.minecraft.core.NonNullList;
56
import net.minecraft.world.item.ItemStack;
6-
import net.minecraft.world.item.crafting.CraftingBookCategory;
77
import net.minecraft.world.item.crafting.CraftingInput;
8+
import net.minecraft.world.item.crafting.Ingredient;
89
import net.minecraft.world.item.crafting.ShapedRecipe;
9-
import net.minecraft.world.item.crafting.ShapedRecipePattern;
1010
import net.minecraft.world.level.Level;
1111

1212
@NothingNullByDefault
1313
public abstract class WrappedShapedRecipe extends ShapedRecipe {
1414

15-
protected WrappedShapedRecipe(String group, CraftingBookCategory category, ShapedRecipePattern pattern, ItemStack result, boolean showNotification) {
16-
super(group, category, pattern, result, showNotification);
15+
private final ShapedRecipe internal;
16+
17+
protected WrappedShapedRecipe(ShapedRecipe internal) {
18+
//Note: We override all uses and calls to pattern and result, so we can just pass null and empty to them
19+
// Because pattern is AT'd to public however, we make use of it to pass it to super, in case another mod is querying the value
20+
super(internal.getGroup(), internal.category(), internal.pattern, ItemStack.EMPTY, internal.showNotification());
21+
this.internal = internal;
22+
}
23+
24+
public ShapedRecipe getInternal() {
25+
return internal;
1726
}
1827

1928
@Override
@@ -23,6 +32,51 @@ protected WrappedShapedRecipe(String group, CraftingBookCategory category, Shape
2332
public boolean matches(CraftingInput input, Level world) {
2433
//Note: We do not override the matches method if it matches ignoring NBT,
2534
// to ensure that we return the proper value for if there is a match that gives a proper output
26-
return super.matches(input, world) && !assemble(input, world.registryAccess()).isEmpty();
35+
return internal.matches(input, world) && !assemble(input, world.registryAccess()).isEmpty();
36+
}
37+
38+
@Override
39+
public boolean canCraftInDimensions(int width, int height) {
40+
return internal.canCraftInDimensions(width, height);
41+
}
42+
43+
@Override
44+
public ItemStack getResultItem(HolderLookup.Provider provider) {
45+
return internal.getResultItem(provider);
46+
}
47+
48+
@Override
49+
public NonNullList<ItemStack> getRemainingItems(CraftingInput input) {
50+
return internal.getRemainingItems(input);
51+
}
52+
53+
@Override
54+
public NonNullList<Ingredient> getIngredients() {
55+
return internal.getIngredients();
56+
}
57+
58+
@Override
59+
public boolean isSpecial() {
60+
return internal.isSpecial();
61+
}
62+
63+
@Override
64+
public ItemStack getToastSymbol() {
65+
return internal.getToastSymbol();
66+
}
67+
68+
@Override
69+
public int getWidth() {
70+
return internal.getWidth();
71+
}
72+
73+
@Override
74+
public int getHeight() {
75+
return internal.getHeight();
76+
}
77+
78+
@Override
79+
public boolean isIncomplete() {
80+
return internal.isIncomplete();
2781
}
2882
}

src/main/java/mekanism/common/recipe/serializer/MekanismRecipeSerializer.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.mojang.datafixers.util.Function3;
44
import com.mojang.datafixers.util.Function4;
5-
import com.mojang.datafixers.util.Function5;
65
import com.mojang.datafixers.util.Function7;
76
import com.mojang.serialization.Codec;
87
import com.mojang.serialization.DataResult;
@@ -54,11 +53,9 @@
5453
import net.minecraft.network.codec.StreamCodec;
5554
import net.minecraft.util.ExtraCodecs;
5655
import net.minecraft.world.item.ItemStack;
57-
import net.minecraft.world.item.crafting.CraftingBookCategory;
5856
import net.minecraft.world.item.crafting.Recipe;
5957
import net.minecraft.world.item.crafting.RecipeSerializer;
6058
import net.minecraft.world.item.crafting.ShapedRecipe;
61-
import net.minecraft.world.item.crafting.ShapedRecipePattern;
6259
import net.neoforged.neoforge.fluids.FluidStack;
6360
import net.neoforged.neoforge.network.codec.NeoForgeStreamCodecs;
6461

@@ -67,10 +64,10 @@ public record MekanismRecipeSerializer<RECIPE extends Recipe<?>>(MapCodec<RECIPE
6764

6865
private static final Codec<FloatingLong> FLOAT_LONG_AT_LEAST_ONE = FloatingLong.CODEC.validate(fl -> fl.smallerThan(FloatingLong.ONE) ? DataResult.error(() -> "Expected energyMultiplier to be at least one.") : DataResult.success(fl));
6966

70-
public static <RECIPE extends WrappedShapedRecipe> MekanismRecipeSerializer<RECIPE> wrapped(Function5<String, CraftingBookCategory, ShapedRecipePattern, ItemStack, Boolean, RECIPE> wrapper) {
67+
public static <RECIPE extends WrappedShapedRecipe> MekanismRecipeSerializer<RECIPE> wrapped(Function<ShapedRecipe, RECIPE> wrapper) {
7168
return new MekanismRecipeSerializer<>(
72-
RecipeSerializer.SHAPED_RECIPE.codec().xmap(shaped -> wrapper.apply(shaped.getGroup(), shaped.category(), shaped.pattern, shaped.result, shaped.showNotification()), Function.identity()),
73-
RecipeSerializer.SHAPED_RECIPE.streamCodec().map(shaped -> wrapper.apply(shaped.getGroup(), shaped.category(), shaped.pattern, shaped.result, shaped.showNotification()), Function.identity())
69+
RecipeSerializer.SHAPED_RECIPE.codec().xmap(wrapper, WrappedShapedRecipe::getInternal),
70+
RecipeSerializer.SHAPED_RECIPE.streamCodec().map(wrapper, WrappedShapedRecipe::getInternal)
7471
);
7572
}
7673

src/main/java/mekanism/common/recipe/upgrade/MekanismShapedRecipe.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,15 @@
1111
import mekanism.common.registries.MekanismRecipeSerializersInternal;
1212
import net.minecraft.core.HolderLookup;
1313
import net.minecraft.world.item.ItemStack;
14-
import net.minecraft.world.item.crafting.CraftingBookCategory;
1514
import net.minecraft.world.item.crafting.CraftingInput;
1615
import net.minecraft.world.item.crafting.RecipeSerializer;
1716
import net.minecraft.world.item.crafting.ShapedRecipe;
18-
import net.minecraft.world.item.crafting.ShapedRecipePattern;
1917

2018
@NothingNullByDefault
2119
public class MekanismShapedRecipe extends WrappedShapedRecipe {
2220

23-
public MekanismShapedRecipe(String group, CraftingBookCategory category, ShapedRecipePattern pattern, ItemStack result, boolean showNotification) {
24-
super(group, category, pattern, result, showNotification);
21+
public MekanismShapedRecipe(ShapedRecipe internal) {
22+
super(internal);
2523
}
2624

2725
@Override

src/main/resources/META-INF/accesstransformer.cfg

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,4 @@ public net.minecraft.world.level.levelgen.placement.PlacedFeature placeWithConte
111111
public net.minecraft.world.level.material.MapColor MATERIAL_COLORS
112112
public net.minecraft.world.level.storage.loot.functions.CopyNbtFunction$Path
113113

114-
public net.minecraft.world.phys.AABB getDirection(Lnet/minecraft/world/phys/AABB;Lnet/minecraft/world/phys/Vec3;[DLnet/minecraft/core/Direction;DDD)Lnet/minecraft/core/Direction;
115-
116-
public net.minecraft.world.item.crafting.ShapedRecipe result
114+
public net.minecraft.world.phys.AABB getDirection(Lnet/minecraft/world/phys/AABB;Lnet/minecraft/world/phys/Vec3;[DLnet/minecraft/core/Direction;DDD)Lnet/minecraft/core/Direction;

src/tools/java/mekanism/tools/common/recipe/PaxelRecipe.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,15 @@
66
import mekanism.tools.common.registries.ToolsRecipeSerializers;
77
import net.minecraft.core.HolderLookup;
88
import net.minecraft.world.item.ItemStack;
9-
import net.minecraft.world.item.crafting.CraftingBookCategory;
109
import net.minecraft.world.item.crafting.CraftingInput;
1110
import net.minecraft.world.item.crafting.RecipeSerializer;
1211
import net.minecraft.world.item.crafting.ShapedRecipe;
13-
import net.minecraft.world.item.crafting.ShapedRecipePattern;
1412

1513
@NothingNullByDefault
1614
public class PaxelRecipe extends WrappedShapedRecipe {
1715

18-
public PaxelRecipe(String group, CraftingBookCategory category, ShapedRecipePattern pattern, ItemStack result, boolean showNotification) {
19-
super(group, category, pattern, result, showNotification);
16+
public PaxelRecipe(ShapedRecipe internal) {
17+
super(internal);
2018
}
2119

2220
@Override

0 commit comments

Comments
 (0)