1

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));
    }
}
The mod block state provider:

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()));
    }

}
The mod Itematggenerator:

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?

3
  • 1
    Small point: Stack snippets are for runnable JavaScript/HTML/CSS. When you click the "run" button on any/all of your snippets you will see that they fail (for obvious reasons). You can edit your question to convert all snippets to formatted code blocks instead. Commented Mar 27 at 22:49
  • 2
    Also, please consider creating a minimal reproducible example and showing us that instead. There is a lot of code in your question. Show us only the absolutely essential code needed to recreate your problem. Commented Mar 27 at 22:51
  • 1
    Add the complete error with stack trace to the question. Commented Mar 28 at 0:05

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.