[add] DataGenerators

This commit is contained in:
2026-09-24 17:05:12 +02:00
parent 9f7f876343
commit 5372a87e55
9 changed files with 281 additions and 2 deletions
@@ -58,7 +58,7 @@ public class Masterwild {
// You can use SubscribeEvent and let the Event Bus discover methods to call
@SubscribeEvent
public void onServerStarting(ServerStartingEvent event) {
LOGGER.info("yipi you installed MasterWild :3");
LOGGER.info("[SERVER] yipi you installed MasterWild :3");
}
// You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent
@@ -66,7 +66,7 @@ public class Masterwild {
public static class ClientModEvents {
@SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event) {
LOGGER.info("yipi you installed MasterWild :3");
LOGGER.info("[CLIENT] yipi you installed MasterWild :3");
EntityRenderers.register(ModEntities.PINGUIN.get(), PinguinRenderer::new);
EntityRenderers.register(ModEntities.FIREFLY.get(), FireflyRenderer::new);
@@ -0,0 +1,42 @@
package ovh.glitchlabs.masterwild.datagen;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.PackOutput;
import net.minecraft.data.loot.LootTableProvider;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.common.data.BlockTagsProvider;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import net.neoforged.neoforge.data.event.GatherDataEvent;
import ovh.glitchlabs.masterwild.Masterwild;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@EventBusSubscriber(modid = Masterwild.MODID, bus = EventBusSubscriber.Bus.MOD)
public class DataGenerators {
@SubscribeEvent
public 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 LootTableProvider(packOutput, Collections.emptySet(),
List.of(new LootTableProvider.SubProviderEntry(ModBlockLootTableProvider::new, LootContextParamSets.BLOCK)), lookupProvider));
generator.addProvider(event.includeServer(), new ModRecipeProvider(packOutput, lookupProvider));
BlockTagsProvider blockTagsProvider = new ModBlockTagProvider(packOutput, lookupProvider, existingFileHelper);
generator.addProvider(event.includeServer(), blockTagsProvider);
generator.addProvider(event.includeServer(), new ModItemTagProvider(packOutput, lookupProvider, blockTagsProvider.contentsGetter(), existingFileHelper));
generator.addProvider(event.includeServer(), new ModDataMapProvider(packOutput, lookupProvider));
generator.addProvider(event.includeClient(), new ModItemModelProvider(packOutput, existingFileHelper));
generator.addProvider(event.includeClient(), new ModBlockStateProvider(packOutput, existingFileHelper));
}
}
@@ -0,0 +1,56 @@
package ovh.glitchlabs.masterwild.datagen;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.loot.BlockLootSubProvider;
import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount;
import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction;
import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator;
import ovh.glitchlabs.masterwild.Block.ModBlocks;
import ovh.glitchlabs.masterwild.Item.ModItems;
import java.util.Set;
public class ModBlockLootTableProvider extends BlockLootSubProvider {
protected ModBlockLootTableProvider(HolderLookup.Provider registries) {
super(Set.of(), FeatureFlags.REGISTRY.allFlags(), registries);
}
@Override
protected void generate() {
/*
dropSelf(ModBlocks.BISMUTH_BLOCK.get());
// dropSelf(ModBlocks.MAGIC_BLOCK.get());
add(ModBlocks.BISMUTH_ORE.get(),
block -> createOreDrop(ModBlocks.BISMUTH_ORE.get(), ModItems.RAW_BISMUTH.get()));
add(ModBlocks.BISMUTH_DEEPSLATE_ORE.get(),
block -> createMultipleOreDrops(ModBlocks.BISMUTH_DEEPSLATE_ORE.get(), ModItems.RAW_BISMUTH.get(), 2, 5));
*/
}
protected LootTable.Builder createMultipleOreDrops(Block pBlock, Item item, float minDrops, float maxDrops) {
HolderLookup.RegistryLookup<Enchantment> registrylookup = this.registries.lookupOrThrow(Registries.ENCHANTMENT);
return this.createSilkTouchDispatchTable(pBlock,
this.applyExplosionDecay(pBlock, LootItem.lootTableItem(item)
.apply(SetItemCountFunction.setCount(UniformGenerator.between(minDrops, maxDrops)))
.apply(ApplyBonusCount.addOreBonusCount(registrylookup.getOrThrow(Enchantments.FORTUNE)))));
}
@Override
protected Iterable<Block> getKnownBlocks() {
return ModBlocks.BLOCKS.getEntries().stream().map(Holder::value)::iterator;
}
}
@@ -0,0 +1,24 @@
package ovh.glitchlabs.masterwild.datagen;
import net.minecraft.data.PackOutput;
import net.neoforged.neoforge.client.model.generators.BlockStateProvider;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import net.neoforged.neoforge.registries.DeferredBlock;
import ovh.glitchlabs.masterwild.Block.ModBlocks;
import ovh.glitchlabs.masterwild.Masterwild;
public class ModBlockStateProvider extends BlockStateProvider {
public ModBlockStateProvider(PackOutput output, ExistingFileHelper exFileHelper) {
super(output, Masterwild.MODID, exFileHelper);
}
@Override
protected void registerStatesAndModels() {
// blockWithItem(ModBlocks.BISMUTH_BLOCK);
}
private void blockWithItem(DeferredBlock<?> deferredBlock) {
simpleBlockWithItem(deferredBlock.get(), cubeAll(deferredBlock.get()));
}
}
@@ -0,0 +1,26 @@
package ovh.glitchlabs.masterwild.datagen;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.BlockTags;
import net.neoforged.neoforge.common.data.BlockTagsProvider;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import org.jetbrains.annotations.Nullable;
import ovh.glitchlabs.masterwild.Block.ModBlocks;
import ovh.glitchlabs.masterwild.Masterwild;
import java.util.concurrent.CompletableFuture;
public class ModBlockTagProvider extends BlockTagsProvider {
public ModBlockTagProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> lookupProvider, @Nullable ExistingFileHelper existingFileHelper) {
super(output, lookupProvider, Masterwild.MODID, existingFileHelper);
}
@Override
protected void addTags(HolderLookup.Provider provider) {
tag(BlockTags.MINEABLE_WITH_PICKAXE)
;
}
}
@@ -0,0 +1,23 @@
package ovh.glitchlabs.masterwild.datagen;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.neoforged.neoforge.common.data.DataMapProvider;
import net.neoforged.neoforge.registries.datamaps.builtin.FurnaceFuel;
import net.neoforged.neoforge.registries.datamaps.builtin.NeoForgeDataMaps;
import ovh.glitchlabs.masterwild.Item.ModItems;
import java.util.concurrent.CompletableFuture;
public class ModDataMapProvider extends DataMapProvider {
protected ModDataMapProvider(PackOutput packOutput, CompletableFuture<HolderLookup.Provider> lookupProvider) {
super(packOutput, lookupProvider);
}
@Override
protected void gather() {
this.builder(NeoForgeDataMaps.FURNACE_FUELS)
//.add(ModItems.STARLIGHT_ASHES.getId(), new FurnaceFuel(1200), false)
;
}
}
@@ -0,0 +1,18 @@
package ovh.glitchlabs.masterwild.datagen;
import net.minecraft.data.PackOutput;
import net.neoforged.neoforge.client.model.generators.ItemModelProvider;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import ovh.glitchlabs.masterwild.Item.ModItems;
import ovh.glitchlabs.masterwild.Masterwild;
public class ModItemModelProvider extends ItemModelProvider {
public ModItemModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) {
super(output, Masterwild.MODID, existingFileHelper);
}
@Override
protected void registerModels() {
//basicItem(ModItems.BISMUTH.get());
}
}
@@ -0,0 +1,26 @@
package ovh.glitchlabs.masterwild.datagen;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.data.tags.ItemTagsProvider;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import org.jetbrains.annotations.Nullable;
import ovh.glitchlabs.masterwild.Item.ModItems;
import ovh.glitchlabs.masterwild.Masterwild;
import java.util.concurrent.CompletableFuture;
public class ModItemTagProvider extends ItemTagsProvider {
public ModItemTagProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> lookupProvider,
CompletableFuture<TagLookup<Block>> blockTags, @Nullable ExistingFileHelper existingFileHelper) {
super(output, lookupProvider, blockTags, Masterwild.MODID, existingFileHelper);
}
@Override
protected void addTags(HolderLookup.Provider provider) {
//tag(ModTags.Items.TRANSFORMABLE_ITEMS);
}
}
@@ -0,0 +1,64 @@
package ovh.glitchlabs.masterwild.datagen;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.data.recipes.*;
import net.minecraft.world.item.crafting.*;
import net.minecraft.world.level.ItemLike;
import net.neoforged.neoforge.common.conditions.IConditionBuilder;
import ovh.glitchlabs.masterwild.Block.ModBlocks;
import ovh.glitchlabs.masterwild.Item.ModItems;
import ovh.glitchlabs.masterwild.Masterwild;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public class ModRecipeProvider extends RecipeProvider implements IConditionBuilder {
public ModRecipeProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> registries) {
super(output, registries);
}
@Override
protected void buildRecipes(RecipeOutput recipeOutput) {
/*
List<ItemLike> BISMUTH_SMELTABLES = List.of(ModItems.RAW_BISMUTH,
ModBlocks.BISMUTH_ORE, ModBlocks.BISMUTH_DEEPSLATE_ORE);
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.BISMUTH_BLOCK.get())
.pattern("BBB")
.pattern("BBB")
.pattern("BBB")
.define('B', ModItems.BISMUTH.get())
.unlockedBy("has_bismuth", has(ModItems.BISMUTH)).save(recipeOutput);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.BISMUTH.get(), 9)
.requires(ModBlocks.BISMUTH_BLOCK)
.unlockedBy("has_bismuth_block", has(ModBlocks.BISMUTH_BLOCK)).save(recipeOutput);
oreSmelting(recipeOutput, BISMUTH_SMELTABLES, RecipeCategory.MISC, ModItems.BISMUTH.get(), 0.25f, 200, "bismuth");
*/
}
protected static void oreSmelting(RecipeOutput recipeOutput, List<ItemLike> pIngredients, RecipeCategory pCategory, ItemLike pResult,
float pExperience, int pCookingTIme, String pGroup) {
oreCooking(recipeOutput, RecipeSerializer.SMELTING_RECIPE, SmeltingRecipe::new, pIngredients, pCategory, pResult,
pExperience, pCookingTIme, pGroup, "_from_smelting");
}
protected static void oreBlasting(RecipeOutput recipeOutput, List<ItemLike> pIngredients, RecipeCategory pCategory, ItemLike pResult,
float pExperience, int pCookingTime, String pGroup) {
oreCooking(recipeOutput, RecipeSerializer.BLASTING_RECIPE, BlastingRecipe::new, pIngredients, pCategory, pResult,
pExperience, pCookingTime, pGroup, "_from_blasting");
}
protected static <T extends AbstractCookingRecipe> void oreCooking(RecipeOutput recipeOutput, RecipeSerializer<T> pCookingSerializer, AbstractCookingRecipe.Factory<T> factory,
List<ItemLike> pIngredients, RecipeCategory pCategory, ItemLike pResult, float pExperience, int pCookingTime, String pGroup, String pRecipeName) {
for(ItemLike itemlike : pIngredients) {
SimpleCookingRecipeBuilder.generic(Ingredient.of(itemlike), pCategory, pResult, pExperience, pCookingTime, pCookingSerializer, factory).group(pGroup).unlockedBy(getHasName(itemlike), has(itemlike))
.save(recipeOutput, Masterwild.MODID + ":" + getItemName(pResult) + pRecipeName + "_" + getItemName(itemlike));
}
}
}