So was creating the datagen folders for a minecraft mod and when i try to run my code it shows me this error: java.lang.reflect.InvocationTargetException
I created every datagen folder:
package net.jaimunchu.tutorialmod.datagen;
import net.jaimunchu.tutorialmod.TutorialMod;
import net.jaimunchu.tutorialmod.block.ModBlocks;
import net.jaimunchu.tutorialmod.item.ModItems;
import net.minecraft.data.PackOutput;
import net.minecraft.data.recipes.*;
import net.minecraft.world.item.crafting.AbstractCookingRecipe;
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.conditions.IConditionBuilder;
import java.util.List;
import java.util.function.Consumer;
//ModBlocks.RUBI_ORE.get())., (para cuando tenga el ore_block)
public class ModRecipeProvider extends RecipeProvider implements IConditionBuilder {
private static final List<ItemLike> RUBI_SMELTEABLES = List.of(ModItems.RAW_RUBI.get());
public ModRecipeProvider(PackOutput pOutput) {
super(pOutput);
}
@Override
protected void buildRecipes(Consumer<FinishedRecipe> pWriter) {
oreSmelting(pWriter, RUBI_SMELTEABLES, RecipeCategory.MISC, ModItems.RUBI.get(), 0.25f, 100, "rubi");
oreBlasting(pWriter, RUBI_SMELTEABLES, RecipeCategory.MISC, ModItems.RUBI.get(), 0.25f, 100, "rubi");
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.RUBI_BLOCK.get())
.pattern("SSS")
.pattern("SSS")
.pattern("SSS")
.define('S', ModItems.RUBI.get())
.unlockedBy(getHasName(ModItems.RUBI.get()), has(ModItems.RUBI.get()))
.save(pWriter);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.RUBI.get(), 9)
.requires(ModBlocks.RUBI_BLOCK.get())
.unlockedBy(getHasName(ModBlocks.RUBI_BLOCK.get()), has(ModBlocks.RUBI_BLOCK.get()))
.save(pWriter);
}
protected static void oreSmelting(Consumer<FinishedRecipe> pFinishedRecipeConsumer, List<ItemLike> pIngredients, RecipeCategory pCategory, ItemLike pResult, float pExperience, int pCookingTIme, String pGroup) {
oreCooking(pFinishedRecipeConsumer, RecipeSerializer.SMELTING_RECIPE, pIngredients, pCategory, pResult, pExperience, pCookingTIme, pGroup, "_from_smelting");
}
protected static void oreBlasting(Consumer<FinishedRecipe> pFinishedRecipeConsumer, List<ItemLike> pIngredients, RecipeCategory pCategory, ItemLike pResult, float pExperience, int pCookingTime, String pGroup) {
oreCooking(pFinishedRecipeConsumer, RecipeSerializer.BLASTING_RECIPE, pIngredients, pCategory, pResult, pExperience, pCookingTime, pGroup, "_from_blasting");
}
protected static void oreCooking(Consumer<FinishedRecipe> pFinishedRecipeConsumer, RecipeSerializer<? extends AbstractCookingRecipe> pCookingSerializer, List<ItemLike> pIngredients, RecipeCategory pCategory, ItemLike pResult, float pExperience, int pCookingTime, String pGroup, String pRecipeName) {
for(ItemLike itemlike : pIngredients) {
SimpleCookingRecipeBuilder.generic(Ingredient.of(new ItemLike[]{itemlike}), pCategory, pResult, pExperience, pCookingTime, pCookingSerializer).group(pGroup).unlockedBy(getHasName(itemlike),
has(itemlike)).save(pFinishedRecipeConsumer, TutorialMod.MODID + ":" + getItemName(pResult) + pRecipeName + "_" + getItemName(itemlike));
}
}
}
The Data generators:
@Mod.EventBusSubscriber(modid = TutorialMod.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class DataGenerators {
@SubscribeEvent
private static void gatherData(GatherDataEvent event) {
DataGenerator generator = event.getGenerator();
PackOutput packOutput = generator.getPackOutput();
ExistingFileHelper existingFileHelper = event.getExistingFileHelper();
CompletableFuture<HolderLookup.Provider> lookupProvider = event.getLookupProvider();
generator.addProvider(event.includeServer(), new ModRecipeProvider(packOutput));
generator.addProvider(event.includeServer(), ModLootTableProvider.create(packOutput));
generator.addProvider(event.includeClient(), new ModBlockStateProvider(packOutput, existingFileHelper));
generator.addProvider(event.includeClient(), new ModItemModelProvider(packOutput, existingFileHelper));
ModBlockTagGenerator blockTagGenerator = generator.addProvider(event.includeServer(),
new ModBlockTagGenerator(packOutput, lookupProvider, existingFileHelper));
generator.addProvider(event.includeClient(), new ModItemTagGenerator(packOutput, lookupProvider, blockTagGenerator.contentsGetter(), existingFileHelper));
}
}
package net.jaimunchu.tutorialmod.datagen;
import net.jaimunchu.tutorialmod.TutorialMod;
import net.jaimunchu.tutorialmod.block.ModBlocks;
import net.minecraft.data.PackOutput;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.client.model.generators.BlockStateProvider;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.registries.RegistryObject;
public class ModBlockStateProvider extends BlockStateProvider {
public ModBlockStateProvider(PackOutput output, ExistingFileHelper exFileHelper) {
super(output, TutorialMod.MODID, exFileHelper);
}
@Override
protected void registerStatesAndModels() {
BlockWithItem(ModBlocks.DIORITE_BRICKS);
BlockWithItem(ModBlocks.MOSSY_DIORITE_BRICKS);
BlockWithItem(ModBlocks.RUBI_BLOCK);
BlockWithItem(ModBlocks.RAW_RUBI_BLOCK);
BlockWithItem(ModBlocks.CRACKED_DIORITE_BRICKS);
BlockWithItem(ModBlocks.GRANITE_BRICKS);
BlockWithItem(ModBlocks.MOSSY_GRANITE_BRICKS);
BlockWithItem(ModBlocks.CRACKED_GRANITE_BRICKS);
}
private void BlockWithItem(RegistryObject<Block> blockRegistryObject) {
simpleBlockWithItem(blockRegistryObject.get(), cubeAll(blockRegistryObject.get()));
}
}
The mod blockTagGenerator:
package net.jaimunchu.tutorialmod.datagen;
import net.jaimunchu.tutorialmod.TutorialMod;
import net.jaimunchu.tutorialmod.block.ModBlocks;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.BlockTags;
import net.minecraftforge.common.Tags;
import net.minecraftforge.common.data.BlockTagsProvider;
import net.minecraftforge.common.data.ExistingFileHelper;
import org.jetbrains.annotations.Nullable;
import java.util.concurrent.CompletableFuture;
public class ModBlockTagGenerator extends BlockTagsProvider {
public ModBlockTagGenerator(PackOutput output, CompletableFuture<HolderLookup.Provider> lookupProvider, @Nullable ExistingFileHelper existingFileHelper) {
super(output, lookupProvider, TutorialMod.MODID, existingFileHelper);
}
@Override
protected void addTags(HolderLookup.Provider provider) {
this.tag(Tags.Blocks.NEEDS_NETHERITE_TOOL);
this.tag(BlockTags.NEEDS_DIAMOND_TOOL);
this.tag(BlockTags.NEEDS_IRON_TOOL)
.add(ModBlocks.RUBI_BLOCK.get(),
ModBlocks.RAW_RUBI_BLOCK.get()
);
this.tag(BlockTags.NEEDS_DIAMOND_TOOL);
this.tag(BlockTags.NEEDS_STONE_TOOL)
.add(ModBlocks.DIORITE_BRICKS.get(),
ModBlocks.MOSSY_DIORITE_BRICKS.get(),
ModBlocks.CRACKED_DIORITE_BRICKS.get(),
ModBlocks.GRANITE_BRICKS.get(),
ModBlocks.MOSSY_GRANITE_BRICKS.get(),
ModBlocks.CRACKED_GRANITE_BRICKS.get()
);
this.tag(BlockTags.MINEABLE_WITH_PICKAXE)
.add(ModBlocks.DIORITE_BRICKS.get(),
ModBlocks.MOSSY_DIORITE_BRICKS.get(),
ModBlocks.CRACKED_DIORITE_BRICKS.get(),
ModBlocks.GRANITE_BRICKS.get(),
ModBlocks.MOSSY_GRANITE_BRICKS.get(),
ModBlocks.CRACKED_GRANITE_BRICKS.get(),
ModBlocks.RUBI_BLOCK.get(),
ModBlocks.RAW_RUBI_BLOCK.get()
);
this.tag(BlockTags.MINEABLE_WITH_AXE);
this.tag(BlockTags.MINEABLE_WITH_SHOVEL);
this.tag(BlockTags.MINEABLE_WITH_HOE);
}
}
The Item model provider
package net.jaimunchu.tutorialmod.datagen;
import net.jaimunchu.tutorialmod.TutorialMod;
import net.jaimunchu.tutorialmod.item.ModItems;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraftforge.client.model.generators.ItemModelBuilder;
import net.minecraftforge.client.model.generators.ItemModelProvider;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.registries.RegistryObject;
public class ModItemModelProvider extends ItemModelProvider {
public ModItemModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) {
super(output, TutorialMod.MODID, existingFileHelper);
}
@Override
protected void registerModels() {
simpleItem(ModItems.RUBI);
simpleItem(ModItems.RUBI_SHARD);
simpleItem(ModItems.DIORITE_BRICK);
simpleItem(ModItems.GRANITE_BRICK);
}
private ItemModelBuilder simpleItem(RegistryObject<Item> item) {
return withExistingParent(item.getId().getPath(),
new ResourceLocation("item/generated")).texture("layer0",
new ResourceLocation(TutorialMod.MODID, "item/" + item.getId().getPath()));
}
}
package net.jaimunchu.tutorialmod.datagen;
import net.jaimunchu.tutorialmod.TutorialMod;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.data.tags.ItemTagsProvider;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.common.data.ExistingFileHelper;
import org.jetbrains.annotations.Nullable;
import java.util.concurrent.CompletableFuture;
public class ModItemTagGenerator extends ItemTagsProvider {
public ModItemTagGenerator(PackOutput p_275343_, CompletableFuture<HolderLookup.Provider> p_275729_, CompletableFuture<TagLookup<Block>> p_275322_, @Nullable ExistingFileHelper existingFileHelper) {
super(p_275343_, p_275729_, p_275322_, TutorialMod.MODID, existingFileHelper);
}
@Override
protected void addTags(HolderLookup.Provider provider) {
}
}
The ModLootTableProvider:
package net.jaimunchu.tutorialmod.datagen;
import net.jaimunchu.tutorialmod.datagen.loot.ModBlockLootTables;
import net.minecraft.data.PackOutput;
import net.minecraft.data.loot.LootTableProvider;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
import java.util.List;
import java.util.Set;
public class ModLootTableProvider {
public static LootTableProvider create(PackOutput output) {
return new LootTableProvider(output, Set.of(), List.of(
new LootTableProvider.SubProviderEntry(ModBlockLootTables::new, LootContextParamSets.BLOCK)
));
}
}
And the modRecipeProvider:
package net.jaimunchu.tutorialmod.datagen;
import net.jaimunchu.tutorialmod.TutorialMod;
import net.jaimunchu.tutorialmod.block.ModBlocks;
import net.jaimunchu.tutorialmod.item.ModItems;
import net.minecraft.data.PackOutput;
import net.minecraft.data.recipes.*;
import net.minecraft.world.item.crafting.AbstractCookingRecipe;
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.conditions.IConditionBuilder;
import java.util.List;
import java.util.function.Consumer;
//ModBlocks.RUBI_ORE.get())., (para cuando tenga el ore_block)
public class ModRecipeProvider extends RecipeProvider implements IConditionBuilder {
private static final List<ItemLike> RUBI_SMELTEABLES = List.of(ModItems.RAW_RUBI.get());
public ModRecipeProvider(PackOutput pOutput) {
super(pOutput);
}
@Override
protected void buildRecipes(Consumer<FinishedRecipe> pWriter) {
oreSmelting(pWriter, RUBI_SMELTEABLES, RecipeCategory.MISC, ModItems.RUBI.get(), 0.25f, 100, "rubi");
oreBlasting(pWriter, RUBI_SMELTEABLES, RecipeCategory.MISC, ModItems.RUBI.get(), 0.25f, 100, "rubi");
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.RUBI_BLOCK.get())
.pattern("SSS")
.pattern("SSS")
.pattern("SSS")
.define('S', ModItems.RUBI.get())
.unlockedBy(getHasName(ModItems.RUBI.get()), has(ModItems.RUBI.get()))
.save(pWriter);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.RUBI.get(), 9)
.requires(ModBlocks.RUBI_BLOCK.get())
.unlockedBy(getHasName(ModBlocks.RUBI_BLOCK.get()), has(ModBlocks.RUBI_BLOCK.get()))
.save(pWriter);
}
protected static void oreSmelting(Consumer<FinishedRecipe> pFinishedRecipeConsumer, List<ItemLike> pIngredients, RecipeCategory pCategory, ItemLike pResult, float pExperience, int pCookingTIme, String pGroup) {
oreCooking(pFinishedRecipeConsumer, RecipeSerializer.SMELTING_RECIPE, pIngredients, pCategory, pResult, pExperience, pCookingTIme, pGroup, "_from_smelting");
}
protected static void oreBlasting(Consumer<FinishedRecipe> pFinishedRecipeConsumer, List<ItemLike> pIngredients, RecipeCategory pCategory, ItemLike pResult, float pExperience, int pCookingTime, String pGroup) {
oreCooking(pFinishedRecipeConsumer, RecipeSerializer.BLASTING_RECIPE, pIngredients, pCategory, pResult, pExperience, pCookingTime, pGroup, "_from_blasting");
}
protected static void oreCooking(Consumer<FinishedRecipe> pFinishedRecipeConsumer, RecipeSerializer<? extends AbstractCookingRecipe> pCookingSerializer, List<ItemLike> pIngredients, RecipeCategory pCategory, ItemLike pResult, float pExperience, int pCookingTime, String pGroup, String pRecipeName) {
for(ItemLike itemlike : pIngredients) {
SimpleCookingRecipeBuilder.generic(Ingredient.of(new ItemLike[]{itemlike}), pCategory, pResult, pExperience, pCookingTime, pCookingSerializer).group(pGroup).unlockedBy(getHasName(itemlike),
has(itemlike)).save(pFinishedRecipeConsumer, TutorialMod.MODID + ":" + getItemName(pResult) + pRecipeName + "_" + getItemName(itemlike));
}
}
}
Im doing it for minecraft 1.20.1 following YT tutorials of a guy named Kauppenjoe.
Any ideas why it gives me that error?