diff --git a/src/main/java/thedarkcolour/exdeorum/compat/GroupedSieveRecipe.java b/src/main/java/thedarkcolour/exdeorum/compat/GroupedSieveRecipe.java index d4af6e9e..e4e1adf3 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/GroupedSieveRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/GroupedSieveRecipe.java @@ -27,12 +27,12 @@ import net.minecraft.util.Mth; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraft.world.level.storage.loot.providers.number.NumberProvider; import thedarkcolour.exdeorum.recipe.RecipeUtil; import thedarkcolour.exdeorum.recipe.sieve.SieveRecipe; import thedarkcolour.exdeorum.registry.EItems; -import thedarkcolour.exdeorum.registry.ERecipeTypes; import java.util.ArrayList; import java.util.Comparator; @@ -43,11 +43,11 @@ import java.util.Objects; public record GroupedSieveRecipe(Ingredient ingredient, ItemStack mesh, List results) { public static int maxSieveRows; - public static ImmutableList getAllRecipesGrouped() { + public static ImmutableList getAllRecipesGrouped(RecipeType recipeType) { maxSieveRows = 1; // copy the list so we can do removals - List recipes = new ArrayList<>(Objects.requireNonNull(Minecraft.getInstance().level).getRecipeManager().getAllRecipesFor(ERecipeTypes.SIEVE.get())); + List recipes = new ArrayList<>(Objects.requireNonNull(Minecraft.getInstance().level).getRecipeManager().getAllRecipesFor(recipeType)); Multimap ingredientGrouper = ArrayListMultimap.create(); for (int i = 0; i < recipes.size(); i++) { diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jei/ExDeorumJeiPlugin.java b/src/main/java/thedarkcolour/exdeorum/compat/jei/ExDeorumJeiPlugin.java index 21ddbeb9..6bddab7d 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jei/ExDeorumJeiPlugin.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jei/ExDeorumJeiPlugin.java @@ -192,7 +192,7 @@ public class ExDeorumJeiPlugin implements IModPlugin { crookRecipes.add(CrookJeiRecipe.create(recipe)); } registration.addRecipes(CROOK, crookRecipes); - registration.addRecipes(SIEVE, GroupedSieveRecipe.getAllRecipesGrouped()); + registration.addRecipes(SIEVE, GroupedSieveRecipe.getAllRecipesGrouped(ERecipeTypes.SIEVE.get())); addCrucibleHeatSources(registration); } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/hammer/HammerRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/hammer/HammerRecipe.java index 4c97fe16..265fe8d1 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/hammer/HammerRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/hammer/HammerRecipe.java @@ -27,12 +27,13 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.storage.loot.providers.number.NumberProvider; -import org.jetbrains.annotations.Nullable; import thedarkcolour.exdeorum.recipe.ProbabilityRecipe; import thedarkcolour.exdeorum.recipe.RecipeUtil; import thedarkcolour.exdeorum.registry.ERecipeSerializers; import thedarkcolour.exdeorum.registry.ERecipeTypes; +import java.util.Objects; + public class HammerRecipe extends ProbabilityRecipe { public HammerRecipe(ResourceLocation id, Ingredient ingredient, Item result, NumberProvider resultAmount) { super(id, ingredient, result, resultAmount); @@ -48,28 +49,39 @@ public class HammerRecipe extends ProbabilityRecipe { return ERecipeTypes.HAMMER.get(); } - public static class Serializer implements RecipeSerializer { + public static abstract class AbstractSerializer implements RecipeSerializer { + protected abstract HammerRecipe createHammerRecipe(ResourceLocation id, Ingredient ingredient, Item result, NumberProvider resultAmount); + @Override public HammerRecipe fromJson(ResourceLocation name, JsonObject json) { Ingredient ingredient = RecipeUtil.readIngredient(json, "ingredient"); Item result = RecipeUtil.readItem(json, "result"); NumberProvider resultAmount = RecipeUtil.readNumberProvider(json, "result_amount"); - return new HammerRecipe(name, ingredient, result, resultAmount); + return createHammerRecipe(name, ingredient, result, resultAmount); } @Override - public @Nullable HammerRecipe fromNetwork(ResourceLocation name, FriendlyByteBuf buffer) { + @SuppressWarnings("deprecation") + public HammerRecipe fromNetwork(ResourceLocation name, FriendlyByteBuf buffer) { Ingredient ingredient = Ingredient.fromNetwork(buffer); - Item result = buffer.readById(BuiltInRegistries.ITEM); + Item result = Objects.requireNonNull(buffer.readById(BuiltInRegistries.ITEM)); NumberProvider resultAmount = RecipeUtil.fromNetworkNumberProvider(buffer); - return new HammerRecipe(name, ingredient, result, resultAmount); + return createHammerRecipe(name, ingredient, result, resultAmount); } @Override + @SuppressWarnings("deprecation") public void toNetwork(FriendlyByteBuf buffer, HammerRecipe recipe) { recipe.getIngredient().toNetwork(buffer); buffer.writeId(BuiltInRegistries.ITEM, recipe.result); RecipeUtil.toNetworkNumberProvider(buffer, recipe.resultAmount); } } + + public static class Serializer extends AbstractSerializer { + @Override + protected HammerRecipe createHammerRecipe(ResourceLocation id, Ingredient ingredient, Item result, NumberProvider resultAmount) { + return new HammerRecipe(id, ingredient, result, resultAmount); + } + } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java index 76a89d5c..30bb1740 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/sieve/SieveRecipe.java @@ -19,6 +19,7 @@ package thedarkcolour.exdeorum.recipe.sieve; import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; @@ -39,6 +40,8 @@ import thedarkcolour.exdeorum.recipe.RecipeUtil; import thedarkcolour.exdeorum.registry.ERecipeSerializers; import thedarkcolour.exdeorum.registry.ERecipeTypes; +import java.util.Objects; + public class SieveRecipe extends ProbabilityRecipe { public final Item mesh; public final boolean byHandOnly; @@ -60,7 +63,9 @@ public class SieveRecipe extends ProbabilityRecipe { return ERecipeTypes.SIEVE.get(); } - public static class Serializer implements RecipeSerializer { + public static abstract class AbstractSerializer implements RecipeSerializer { + protected abstract SieveRecipe createSieveRecipe(ResourceLocation id, Ingredient ingredient, Item mesh, Item result, NumberProvider resultAmount, boolean byHandOnly); + @Override public SieveRecipe fromJson(ResourceLocation id, JsonObject json) { Ingredient ingredient = RecipeUtil.readIngredient(json, "ingredient"); @@ -78,23 +83,22 @@ public class SieveRecipe extends ProbabilityRecipe { return null; } } else { - ExDeorum.LOGGER.error("Failed to load recipe {}, missing \"result\" item location or \"result_tag\" tag location", id); - return null; + throw new JsonSyntaxException("missing \"result\" item location or \"result_tag\" tag location"); } NumberProvider resultAmount = RecipeUtil.readNumberProvider(json, "result_amount"); boolean byHandOnly = json.has("by_hand_only") && json.get("by_hand_only").getAsBoolean(); - return new SieveRecipe(id, ingredient, mesh, result, resultAmount, byHandOnly); + return createSieveRecipe(id, ingredient, mesh, result, resultAmount, byHandOnly); } @SuppressWarnings("deprecation") @Override public @Nullable SieveRecipe fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { Ingredient ingredient = Ingredient.fromNetwork(buffer); - Item mesh = buffer.readById(BuiltInRegistries.ITEM); - Item result = buffer.readById(BuiltInRegistries.ITEM); + Item mesh = Objects.requireNonNull(buffer.readById(BuiltInRegistries.ITEM)); + Item result = Objects.requireNonNull(buffer.readById(BuiltInRegistries.ITEM)); NumberProvider resultAmount = RecipeUtil.fromNetworkNumberProvider(buffer); - return new SieveRecipe(id, ingredient, mesh, result, resultAmount, buffer.readBoolean()); + return createSieveRecipe(id, ingredient, mesh, result, resultAmount, buffer.readBoolean()); } @SuppressWarnings("deprecation") @@ -107,4 +111,11 @@ public class SieveRecipe extends ProbabilityRecipe { buffer.writeBoolean(recipe.byHandOnly); } } + + public static class Serializer extends AbstractSerializer { + @Override + protected SieveRecipe createSieveRecipe(ResourceLocation id, Ingredient ingredient, Item mesh, Item result, NumberProvider resultAmount, boolean byHandOnly) { + return new SieveRecipe(id, ingredient, mesh, result, resultAmount, byHandOnly); + } + } }