Skip to content

Java Data Generation

You can register new researches and research packs using the BootstrapContext in your data generation. Researches and research packs are DataPackRegistries, meaning they are loaded from data packs.

Research Packs

Here is an example of how to register a new research pack:

import com.portingdeadmods.researchd.ResearchdRegistries;
import com.portingdeadmods.researchd.api.research.packs.ResearchPack;
import net.minecraft.data.worldgen.BootstrapContext;
import net.minecraft.resources.ResourceKey;

public final class YourModResearchPacks {
    public static final ResourceKey<SimpleResearchPack> OVERWORLD = key("overworld");

    public static void bootstrap(BootstrapContext<SimpleResearchPack> context) {
        register(context, OVERWORLD, SimpleResearchPack.builder()
                .sortingValue(1)
                .color(222, 0, 0)
        );
    }

    private static void register(BootstrapContext<SimpleResearchPack> context, ResourceKey<SimpleResearchPack> key, SimpleResearchPack.Builder builder) {
        context.register(key, builder.build());
    }

    private static ResourceKey<SimpleResearchPack> key(String name) {
        return ResourceKey.create(ResearchdRegistries.RESEARCH_PACK_KEY, YourMod.rl(name));
    }
}

Researches

Here is an example of how to register a new research:

import com.portingdeadmods.researchd.ResearchdRegistries;
import com.portingdeadmods.researchd.api.research.Research;
import com.portingdeadmods.researchd.impl.research.SimpleResearch;
import com.portingdeadmods.researchd.impl.research.method.ConsumeItemResearchMethod;
import net.minecraft.data.worldgen.BootstrapContext;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;

import java.util.HashMap;
import java.util.Map;
import java.util.function.UnaryOperator;

public final class YourModResearches {
    private static final Map<ResourceKey<Research>, Research.Builder<?>> RESEARCHES = new HashMap<>();

    public static final ResourceKey<Research> WOOD = register("wood", builder -> builder
            .icon(Items.OAK_LOG)
            .researchMethod(
                    new ConsumeItemResearchMethod(Ingredient.of(Items.DIRT), 8)
            ));

    public static void bootstrap(BootstrapContext<Research> context) {
        for (Map.Entry<ResourceKey<Research>, Research.Builder<?>> research : RESEARCHES.entrySet()) {
            register(context, research.getKey(), research.getValue());
        }
    }

    private static void register(BootstrapContext<Research> context, ResourceKey<Research> key, Research.Builder<?> builder) {
        context.register(key, builder.build());
    }

    private static ResourceKey<Research> key(String name) {
        return ResourceKey.create(ResearchdRegistries.RESEARCH_KEY, YourMod.rl(name));
    }

    private static ResourceKey<Research> register(String name, UnaryOperator<SimpleResearch.Builder> builder) {
        ResourceKey<Research> key = key(name);
        RESEARCHES.put(key, builder.apply(SimpleResearch.Builder.of()));
        return key;
    }
}