diff --git a/docs/content/Modpacks/Changes/v8.0.0.md b/docs/content/Modpacks/Changes/v8.0.0.md index d751234d0e8..9e9aae3f31a 100644 --- a/docs/content/Modpacks/Changes/v8.0.0.md +++ b/docs/content/Modpacks/Changes/v8.0.0.md @@ -138,3 +138,9 @@ A large number of machine feature interfaces have been removed, and have had the - `IHPCAComponentHatch` - Use `HPCAComponentTrait` - `IHPCAComputationProvider` - Use `HPCAComputationProviderTrait` - `IHPCACoolantProvider` - Use `HPCACoolantProviderTrait` + + +## Other Changes + +- `BlastingRecipeBuilder`, `CampfireRecipeBuilder`, `SmeltingRecipeBuilder` and `SmokingRecipeBuilder` have been merged into `SimpleCookingRecipeBuilder` + - Example usage: `SimpleCookingRecipeBuilder.campfireCooking("cooking_chicken").input(new ItemStack(Items.CHICKEN)).output(new ItemStacks(Items.COOKED_CHICKEN)).cookingTime(100).experience(100).save(provider);` \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java index 4b3bb603ab6..cc9e0345d30 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java @@ -64,13 +64,13 @@ public static void addSmeltingRecipe(Consumer provider, @NotNull public static void addSmeltingRecipe(Consumer provider, @NotNull ResourceLocation regName, Ingredient input, ItemStack output, float experience) { - new SmeltingRecipeBuilder(regName).input(input).output(output).cookingTime(200).experience(experience) + SimpleCookingRecipeBuilder.smelting(regName).input(input).output(output).cookingTime(200).experience(experience) .save(provider); } public static void addSmeltingRecipe(Consumer provider, @NotNull ResourceLocation regName, TagKey input, ItemStack output, float experience) { - new SmeltingRecipeBuilder(regName).input(input).output(output).cookingTime(200).experience(experience) + SimpleCookingRecipeBuilder.smelting(regName).input(input).output(output).cookingTime(200).experience(experience) .save(provider); } @@ -97,7 +97,7 @@ public static void addSmeltingRecipe(Consumer provider, @NotNull public static void addSmeltingRecipe(Consumer provider, @NotNull ResourceLocation regName, ItemStack input, ItemStack output, float experience) { - new SmeltingRecipeBuilder(regName).input(input).output(output).cookingTime(200).experience(experience) + SimpleCookingRecipeBuilder.smelting(regName).input(input).output(output).cookingTime(200).experience(experience) .save(provider); } @@ -133,13 +133,13 @@ public static void addBlastingRecipe(Consumer provider, @NotNull public static void addBlastingRecipe(Consumer provider, @NotNull ResourceLocation regName, Ingredient input, ItemStack output, float experience) { - new BlastingRecipeBuilder(regName).input(input).output(output).cookingTime(100).experience(experience) + SimpleCookingRecipeBuilder.blasting(regName).input(input).output(output).cookingTime(100).experience(experience) .save(provider); } public static void addBlastingRecipe(Consumer provider, @NotNull ResourceLocation regName, TagKey input, ItemStack output, float experience) { - new BlastingRecipeBuilder(regName).input(input).output(output).cookingTime(100).experience(experience) + SimpleCookingRecipeBuilder.blasting(regName).input(input).output(output).cookingTime(100).experience(experience) .save(provider); } @@ -171,13 +171,13 @@ public static void addSmokingRecipe(Consumer provider, @NotNull public static void addSmokingRecipe(Consumer provider, @NotNull ResourceLocation regName, TagKey input, ItemStack output, float experience) { - new SmokingRecipeBuilder(regName).input(input).output(output).cookingTime(100).experience(experience) + SimpleCookingRecipeBuilder.smoking(regName).input(input).output(output).cookingTime(100).experience(experience) .save(provider); } public static void addSmokingRecipe(Consumer provider, @NotNull ResourceLocation regName, ItemStack input, ItemStack output, float experience) { - new SmokingRecipeBuilder(regName).input(input).output(output).cookingTime(100).experience(experience) + SimpleCookingRecipeBuilder.smoking(regName).input(input).output(output).cookingTime(100).experience(experience) .save(provider); } @@ -199,7 +199,8 @@ public static void addCampfireRecipe(Consumer provider, @NotNull public static void addCampfireRecipe(Consumer provider, @NotNull ResourceLocation regName, ItemStack input, ItemStack output, float experience) { - new CampfireRecipeBuilder(regName).input(input).output(output).cookingTime(100).experience(experience) + SimpleCookingRecipeBuilder.campfireCooking(regName).input(input).output(output).cookingTime(100) + .experience(experience) .save(provider); } @@ -215,7 +216,8 @@ public static void addCampfireRecipe(Consumer provider, @NotNull public static void addCampfireRecipe(Consumer provider, @NotNull ResourceLocation regName, TagKey input, ItemStack output, float experience) { - new CampfireRecipeBuilder(regName).input(input).output(output).cookingTime(100).experience(experience) + SimpleCookingRecipeBuilder.campfireCooking(regName).input(input).output(output).cookingTime(100) + .experience(experience) .save(provider); } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/BlastingRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/BlastingRecipeBuilder.java deleted file mode 100644 index 1b5718716f7..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/BlastingRecipeBuilder.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.gregtechceu.gtceu.data.recipe.builder; - -import com.gregtechceu.gtceu.GTCEu; - -import com.lowdragmc.lowdraglib.utils.NBTToJsonConverter; - -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.data.recipes.FinishedRecipe; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -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.RecipeSerializer; -import net.minecraft.world.level.ItemLike; -import net.minecraftforge.common.crafting.StrictNBTIngredient; - -import com.google.gson.JsonObject; -import lombok.Setter; -import lombok.experimental.Accessors; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Consumer; - -@Accessors(chain = true, fluent = true) -public class BlastingRecipeBuilder { - - private Ingredient input; - @Setter - protected String group; - - private ItemStack output = ItemStack.EMPTY; - @Setter - private float experience; - @Setter - private int cookingTime; - @Setter - protected ResourceLocation id; - - public BlastingRecipeBuilder(@Nullable ResourceLocation id) { - this.id = id; - } - - public BlastingRecipeBuilder input(TagKey itemStack) { - return input(Ingredient.of(itemStack)); - } - - public BlastingRecipeBuilder input(ItemStack itemStack) { - input = itemStack.hasTag() ? StrictNBTIngredient.of(itemStack) : Ingredient.of(itemStack); - return this; - } - - public BlastingRecipeBuilder input(ItemLike itemLike) { - return input(Ingredient.of(itemLike)); - } - - public BlastingRecipeBuilder input(Ingredient ingredient) { - input = ingredient; - return this; - } - - public BlastingRecipeBuilder output(ItemStack itemStack) { - this.output = itemStack.copy(); - return this; - } - - public BlastingRecipeBuilder output(ItemStack itemStack, int count) { - this.output = itemStack.copy(); - this.output.setCount(count); - return this; - } - - public BlastingRecipeBuilder output(ItemStack itemStack, int count, CompoundTag nbt) { - this.output = itemStack.copy(); - this.output.setCount(count); - this.output.setTag(nbt); - return this; - } - - protected ResourceLocation defaultId() { - return BuiltInRegistries.ITEM.getKey(output.getItem()); - } - - public void toJson(JsonObject json) { - if (group != null) { - json.addProperty("group", group); - } - - if (!input.isEmpty()) { - json.add("ingredient", input.toJson()); - } - - if (output.isEmpty()) { - GTCEu.LOGGER.error("shapeless recipe {} output is empty", id); - throw new IllegalArgumentException(id + ": output items is empty"); - } else { - JsonObject result = new JsonObject(); - result.addProperty("item", BuiltInRegistries.ITEM.getKey(output.getItem()).toString()); - if (output.getCount() > 1) { - result.addProperty("count", output.getCount()); - } - if (output.hasTag() && output.getTag() != null) { - result.add("nbt", NBTToJsonConverter.getObject(output.getTag())); - } - json.add("result", result); - } - - json.addProperty("experience", experience); - json.addProperty("cookingtime", cookingTime); - } - - public void save(Consumer consumer) { - consumer.accept(new FinishedRecipe() { - - @Override - public void serializeRecipeData(JsonObject pJson) { - toJson(pJson); - } - - @Override - public ResourceLocation getId() { - var ID = id == null ? defaultId() : id; - return new ResourceLocation(ID.getNamespace(), "blasting" + "/" + ID.getPath()); - } - - @Override - public RecipeSerializer getType() { - return RecipeSerializer.BLASTING_RECIPE; - } - - @Nullable - @Override - public JsonObject serializeAdvancement() { - return null; - } - - @Nullable - @Override - public ResourceLocation getAdvancementId() { - return null; - } - }); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/CampfireRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/CampfireRecipeBuilder.java deleted file mode 100644 index b95064c1fad..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/CampfireRecipeBuilder.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.gregtechceu.gtceu.data.recipe.builder; - -import com.gregtechceu.gtceu.GTCEu; - -import com.lowdragmc.lowdraglib.utils.NBTToJsonConverter; - -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.data.recipes.FinishedRecipe; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -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.RecipeSerializer; -import net.minecraft.world.level.ItemLike; -import net.minecraftforge.common.crafting.StrictNBTIngredient; - -import com.google.gson.JsonObject; -import lombok.Setter; -import lombok.experimental.Accessors; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Consumer; - -@Accessors(chain = true, fluent = true) -public class CampfireRecipeBuilder { - - private Ingredient input; - @Setter - protected String group; - - private ItemStack output = ItemStack.EMPTY; - @Setter - private float experience; - @Setter - private int cookingTime; - @Setter - protected ResourceLocation id; - - public CampfireRecipeBuilder(@Nullable ResourceLocation id) { - this.id = id; - } - - public CampfireRecipeBuilder input(TagKey itemStack) { - return input(Ingredient.of(itemStack)); - } - - public CampfireRecipeBuilder input(ItemStack itemStack) { - input = itemStack.hasTag() ? StrictNBTIngredient.of(itemStack) : Ingredient.of(itemStack); - return this; - } - - public CampfireRecipeBuilder input(ItemLike itemLike) { - return input(Ingredient.of(itemLike)); - } - - public CampfireRecipeBuilder input(Ingredient ingredient) { - input = ingredient; - return this; - } - - public CampfireRecipeBuilder output(ItemStack itemStack) { - this.output = itemStack.copy(); - return this; - } - - public CampfireRecipeBuilder output(ItemStack itemStack, int count) { - this.output = itemStack.copy(); - this.output.setCount(count); - return this; - } - - public CampfireRecipeBuilder output(ItemStack itemStack, int count, CompoundTag nbt) { - this.output = itemStack.copy(); - this.output.setCount(count); - this.output.setTag(nbt); - return this; - } - - protected ResourceLocation defaultId() { - return BuiltInRegistries.ITEM.getKey(output.getItem()); - } - - public void toJson(JsonObject json) { - if (group != null) { - json.addProperty("group", group); - } - - if (!input.isEmpty()) { - json.add("ingredient", input.toJson()); - } - - if (output.isEmpty()) { - GTCEu.LOGGER.error("shapeless recipe {} output is empty", id); - throw new IllegalArgumentException(id + ": output items is empty"); - } else { - JsonObject result = new JsonObject(); - result.addProperty("item", BuiltInRegistries.ITEM.getKey(output.getItem()).toString()); - if (output.getCount() > 1) { - result.addProperty("count", output.getCount()); - } - if (output.hasTag() && output.getTag() != null) { - result.add("nbt", NBTToJsonConverter.getObject(output.getTag())); - } - json.add("result", result); - } - - json.addProperty("experience", experience); - json.addProperty("cookingtime", cookingTime); - } - - public void save(Consumer consumer) { - consumer.accept(new FinishedRecipe() { - - @Override - public void serializeRecipeData(JsonObject pJson) { - toJson(pJson); - } - - @Override - public ResourceLocation getId() { - var ID = id == null ? defaultId() : id; - return new ResourceLocation(ID.getNamespace(), "campfire" + "/" + ID.getPath()); - } - - @Override - public RecipeSerializer getType() { - return RecipeSerializer.CAMPFIRE_COOKING_RECIPE; - } - - @Nullable - @Override - public JsonObject serializeAdvancement() { - return null; - } - - @Nullable - @Override - public ResourceLocation getAdvancementId() { - return null; - } - }); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/SimpleCookingRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/SimpleCookingRecipeBuilder.java new file mode 100644 index 00000000000..cd8d604e533 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/SimpleCookingRecipeBuilder.java @@ -0,0 +1,161 @@ +package com.gregtechceu.gtceu.data.recipe.builder; + +import com.gregtechceu.gtceu.GTCEu; + +import com.lowdragmc.lowdraglib.utils.NBTToJsonConverter; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.*; +import net.minecraft.world.level.ItemLike; +import net.minecraftforge.common.crafting.StrictNBTIngredient; + +import com.google.gson.JsonObject; +import lombok.Setter; +import lombok.experimental.Accessors; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Consumer; + +@Accessors(chain = true, fluent = true) +@SuppressWarnings("deprecation") +public class SimpleCookingRecipeBuilder { + + protected final String folder; + protected final RecipeSerializer serializer; + protected @Nullable Ingredient input; + @Setter + protected @Nullable String group; + @Setter + protected CookingBookCategory category = CookingBookCategory.MISC; + + protected ItemStack output = ItemStack.EMPTY; + @Setter + protected float experience; + @Setter + protected int cookingTime; + @Setter + protected @Nullable ResourceLocation id; + + protected SimpleCookingRecipeBuilder(@Nullable ResourceLocation id, String folder, RecipeSerializer serializer) { + this.id = id; + this.folder = folder; + this.serializer = serializer; + } + + public static SimpleCookingRecipeBuilder campfireCooking(@Nullable ResourceLocation id) { + return new SimpleCookingRecipeBuilder<>(id, "campfire_cooking", RecipeSerializer.CAMPFIRE_COOKING_RECIPE); + } + + public static SimpleCookingRecipeBuilder smelting(@Nullable ResourceLocation id) { + return new SimpleCookingRecipeBuilder<>(id, "smelting", RecipeSerializer.SMELTING_RECIPE); + } + + public static SimpleCookingRecipeBuilder blasting(@Nullable ResourceLocation id) { + return new SimpleCookingRecipeBuilder<>(id, "blasting", RecipeSerializer.BLASTING_RECIPE); + } + + public static SimpleCookingRecipeBuilder smoking(@Nullable ResourceLocation id) { + return new SimpleCookingRecipeBuilder<>(id, "smoking", RecipeSerializer.SMOKING_RECIPE); + } + + public SimpleCookingRecipeBuilder input(TagKey tag) { + return input(Ingredient.of(tag)); + } + + public SimpleCookingRecipeBuilder input(ItemStack itemStack) { + input = itemStack.hasTag() ? StrictNBTIngredient.of(itemStack) : Ingredient.of(itemStack); + return this; + } + + public SimpleCookingRecipeBuilder input(ItemLike itemLike) { + return input(Ingredient.of(itemLike)); + } + + public SimpleCookingRecipeBuilder input(Ingredient ingredient) { + input = ingredient; + return this; + } + + public SimpleCookingRecipeBuilder output(ItemStack itemStack) { + this.output = itemStack.copy(); + return this; + } + + public SimpleCookingRecipeBuilder output(ItemStack itemStack, int count) { + this.output = itemStack.copyWithCount(count); + return this; + } + + protected ResourceLocation defaultId() { + return BuiltInRegistries.ITEM.getKey(output.getItem()); + } + + public void toJson(JsonObject json) { + if (group != null) { + json.addProperty("group", group); + } + + if (input == null || input.isEmpty()) { + GTCEu.LOGGER.error("{} recipe {} input is empty", folder, id); + throw new IllegalArgumentException(id + ": input item is empty"); + } + if (output.isEmpty()) { + GTCEu.LOGGER.error("{} recipe {} output is empty", folder, id); + throw new IllegalArgumentException(id + ": output item is empty"); + } + + json.add("ingredient", input.toJson()); + + JsonObject result = new JsonObject(); + result.addProperty("item", BuiltInRegistries.ITEM.getKey(output.getItem()).toString()); + if (output.getCount() > 1) { + result.addProperty("count", output.getCount()); + } + if (output.hasTag() && output.getTag() != null) { + result.add("nbt", NBTToJsonConverter.getObject(output.getTag())); + } + json.add("result", result); + + json.addProperty("experience", experience); + json.addProperty("cookingtime", cookingTime); + } + + public void save(Consumer consumer) { + ResourceLocation recipeId = (id == null ? defaultId() : id).withPrefix(folder + "/"); + + consumer.accept(new FinishedRecipe() { + + @Override + public void serializeRecipeData(JsonObject pJson) { + toJson(pJson); + } + + @Override + public ResourceLocation getId() { + return recipeId; + } + + @Override + public RecipeSerializer getType() { + return serializer; + } + + @Nullable + @Override + public JsonObject serializeAdvancement() { + return null; + } + + @Nullable + @Override + public ResourceLocation getAdvancementId() { + return null; + } + }); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/SmeltingRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/SmeltingRecipeBuilder.java deleted file mode 100644 index 696aee1a594..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/SmeltingRecipeBuilder.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.gregtechceu.gtceu.data.recipe.builder; - -import com.gregtechceu.gtceu.GTCEu; - -import com.lowdragmc.lowdraglib.utils.NBTToJsonConverter; - -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.data.recipes.FinishedRecipe; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -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.RecipeSerializer; -import net.minecraft.world.level.ItemLike; -import net.minecraftforge.common.crafting.StrictNBTIngredient; - -import com.google.gson.JsonObject; -import lombok.Setter; -import lombok.experimental.Accessors; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Consumer; - -@Accessors(chain = true, fluent = true) -public class SmeltingRecipeBuilder { - - private Ingredient input; - @Setter - protected String group; - - private ItemStack output = ItemStack.EMPTY; - @Setter - private float experience; - @Setter - private int cookingTime; - @Setter - protected ResourceLocation id; - - public SmeltingRecipeBuilder(@Nullable ResourceLocation id) { - this.id = id; - } - - public SmeltingRecipeBuilder input(TagKey itemStack) { - return input(Ingredient.of(itemStack)); - } - - public SmeltingRecipeBuilder input(ItemStack itemStack) { - input = itemStack.hasTag() ? StrictNBTIngredient.of(itemStack) : Ingredient.of(itemStack); - return this; - } - - public SmeltingRecipeBuilder input(ItemLike itemLike) { - return input(Ingredient.of(itemLike)); - } - - public SmeltingRecipeBuilder input(Ingredient ingredient) { - input = ingredient; - return this; - } - - public SmeltingRecipeBuilder output(ItemStack itemStack) { - this.output = itemStack.copy(); - return this; - } - - public SmeltingRecipeBuilder output(ItemStack itemStack, int count) { - this.output = itemStack.copy(); - this.output.setCount(count); - return this; - } - - public SmeltingRecipeBuilder output(ItemStack itemStack, int count, CompoundTag nbt) { - this.output = itemStack.copy(); - this.output.setCount(count); - this.output.setTag(nbt); - return this; - } - - protected ResourceLocation defaultId() { - return BuiltInRegistries.ITEM.getKey(output.getItem()); - } - - public void toJson(JsonObject json) { - if (group != null) { - json.addProperty("group", group); - } - - if (!input.isEmpty()) { - json.add("ingredient", input.toJson()); - } - - if (output.isEmpty()) { - GTCEu.LOGGER.error("shapeless recipe {} output is empty", id); - throw new IllegalArgumentException(id + ": output items is empty"); - } else { - JsonObject result = new JsonObject(); - result.addProperty("item", BuiltInRegistries.ITEM.getKey(output.getItem()).toString()); - if (output.getCount() > 1) { - result.addProperty("count", output.getCount()); - } - if (output.hasTag() && output.getTag() != null) { - result.add("nbt", NBTToJsonConverter.getObject(output.getTag())); - } - json.add("result", result); - } - - json.addProperty("experience", experience); - json.addProperty("cookingtime", cookingTime); - } - - public void save(Consumer consumer) { - consumer.accept(new FinishedRecipe() { - - @Override - public void serializeRecipeData(JsonObject pJson) { - toJson(pJson); - } - - @Override - public ResourceLocation getId() { - var ID = id == null ? defaultId() : id; - return new ResourceLocation(ID.getNamespace(), "smelting" + "/" + ID.getPath()); - } - - @Override - public RecipeSerializer getType() { - return RecipeSerializer.SMELTING_RECIPE; - } - - @Nullable - @Override - public JsonObject serializeAdvancement() { - return null; - } - - @Nullable - @Override - public ResourceLocation getAdvancementId() { - return null; - } - }); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/SmokingRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/SmokingRecipeBuilder.java deleted file mode 100644 index 17ac75350a3..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/SmokingRecipeBuilder.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.gregtechceu.gtceu.data.recipe.builder; - -import com.gregtechceu.gtceu.GTCEu; - -import com.lowdragmc.lowdraglib.utils.NBTToJsonConverter; - -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.data.recipes.FinishedRecipe; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -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.RecipeSerializer; -import net.minecraft.world.level.ItemLike; -import net.minecraftforge.common.crafting.StrictNBTIngredient; - -import com.google.gson.JsonObject; -import lombok.Setter; -import lombok.experimental.Accessors; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Consumer; - -@Accessors(chain = true, fluent = true) -public class SmokingRecipeBuilder { - - private Ingredient input; - @Setter - protected String group; - - private ItemStack output = ItemStack.EMPTY; - @Setter - private float experience; - @Setter - private int cookingTime; - @Setter - protected ResourceLocation id; - - public SmokingRecipeBuilder(@Nullable ResourceLocation id) { - this.id = id; - } - - public SmokingRecipeBuilder input(TagKey itemStack) { - return input(Ingredient.of(itemStack)); - } - - public SmokingRecipeBuilder input(ItemStack itemStack) { - input = itemStack.hasTag() ? StrictNBTIngredient.of(itemStack) : Ingredient.of(itemStack); - return this; - } - - public SmokingRecipeBuilder input(ItemLike itemLike) { - return input(Ingredient.of(itemLike)); - } - - public SmokingRecipeBuilder input(Ingredient ingredient) { - input = ingredient; - return this; - } - - public SmokingRecipeBuilder output(ItemStack itemStack) { - this.output = itemStack.copy(); - return this; - } - - public SmokingRecipeBuilder output(ItemStack itemStack, int count) { - this.output = itemStack.copy(); - this.output.setCount(count); - return this; - } - - public SmokingRecipeBuilder output(ItemStack itemStack, int count, CompoundTag nbt) { - this.output = itemStack.copy(); - this.output.setCount(count); - this.output.setTag(nbt); - return this; - } - - protected ResourceLocation defaultId() { - return BuiltInRegistries.ITEM.getKey(output.getItem()); - } - - public void toJson(JsonObject json) { - if (group != null) { - json.addProperty("group", group); - } - - if (!input.isEmpty()) { - json.add("ingredient", input.toJson()); - } - - if (output.isEmpty()) { - GTCEu.LOGGER.error("shapeless recipe {} output is empty", id); - throw new IllegalArgumentException(id + ": output items is empty"); - } else { - JsonObject result = new JsonObject(); - result.addProperty("item", BuiltInRegistries.ITEM.getKey(output.getItem()).toString()); - if (output.getCount() > 1) { - result.addProperty("count", output.getCount()); - } - if (output.hasTag() && output.getTag() != null) { - result.add("nbt", NBTToJsonConverter.getObject(output.getTag())); - } - json.add("result", result); - } - - json.addProperty("experience", experience); - json.addProperty("cookingtime", cookingTime); - } - - public void save(Consumer consumer) { - consumer.accept(new FinishedRecipe() { - - @Override - public void serializeRecipeData(JsonObject pJson) { - toJson(pJson); - } - - @Override - public ResourceLocation getId() { - var ID = id == null ? defaultId() : id; - return new ResourceLocation(ID.getNamespace(), "smoking" + "/" + ID.getPath()); - } - - @Override - public RecipeSerializer getType() { - return RecipeSerializer.SMOKING_RECIPE; - } - - @Nullable - @Override - public JsonObject serializeAdvancement() { - return null; - } - - @Nullable - @Override - public ResourceLocation getAdvancementId() { - return null; - } - }); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/package-info.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/package-info.java new file mode 100644 index 00000000000..db8f1b93e0b --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.data.recipe.builder; + +import org.jetbrains.annotations.NotNullByDefault;