adds datagen for block and entity loot

This commit is contained in:
2026-01-17 13:06:21 -05:00
parent 0a13f07689
commit a949d4eddd
11 changed files with 1066 additions and 0 deletions
@@ -4,12 +4,16 @@ import net.cmr.jurassicrevived.Constants;
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.minecraftforge.common.data.BlockTagsProvider;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.data.event.GatherDataEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@Mod.EventBusSubscriber(modid = Constants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
@@ -28,5 +32,12 @@ public class DataGenerators {
BlockTagsProvider blockTagsProvider = new ForgeBlockTagProvider(packOutput, lookupProvider, existingFileHelper);
generator.addProvider(event.includeServer(), blockTagsProvider);
generator.addProvider(event.includeServer(), new ForgeItemTagProvider(packOutput, lookupProvider, blockTagsProvider.contentsGetter(), existingFileHelper));
generator.addProvider(event.includeServer(), new LootTableProvider(packOutput, Collections.emptySet(),
List.of(
new LootTableProvider.SubProviderEntry(ForgeBlockLootTableProvider::new, LootContextParamSets.BLOCK),
new LootTableProvider.SubProviderEntry(ForgeEntityLootTableProvider::new, LootContextParamSets.ENTITY)
)
));
}
}
@@ -0,0 +1,58 @@
package net.cmr.jurassicrevived.datagen;
import net.cmr.jurassicrevived.block.ModBlocks;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.loot.BlockLootSubProvider;
import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.item.Item;
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 java.util.Set;
import java.util.stream.StreamSupport;
public class ForgeBlockLootTableProvider extends BlockLootSubProvider implements ModBlockLootTableProvider.BlockLootHelper {
public ForgeBlockLootTableProvider() {
super(Set.of(), FeatureFlags.REGISTRY.allFlags());
}
@Override
protected void generate() {
ModBlockLootTableProvider.registerBlockLootTables(this);
}
@Override
public void dropSelf(Block block) {
super.dropSelf(block);
}
@Override
public void add(Block block, LootTable.Builder builder) {
super.add(block, builder);
}
@Override
public LootTable.Builder createMultipleOreDrops(Block block, Item item, float minDrops, float maxDrops) {
return this.createSilkTouchDispatchTable(block, this.applyExplosionDecay(block,
LootItem.lootTableItem(item)
.apply(SetItemCountFunction.setCount(UniformGenerator.between(minDrops, maxDrops)))
.apply(ApplyBonusCount.addOreBonusCount(Enchantments.BLOCK_FORTUNE))));
}
@Override
public LootTable.Builder createPotFlowerItemTable(Block block) {
return super.createPotFlowerItemTable(block);
}
@Override
protected Iterable<Block> getKnownBlocks() {
return StreamSupport.stream(ModBlocks.BLOCKS.spliterator(), false)
.map(dev.architectury.registry.registries.RegistrySupplier::get)
.toList();
}
}
@@ -0,0 +1,36 @@
package net.cmr.jurassicrevived.datagen;
import net.cmr.jurassicrevived.entity.ModEntities;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.loot.EntityLootSubProvider;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraftforge.registries.RegistryObject;
import org.jetbrains.annotations.NotNull;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
public class ForgeEntityLootTableProvider extends EntityLootSubProvider implements ModEntityLootTableProvider.EntityLootHelper {
public ForgeEntityLootTableProvider() {
super(FeatureFlags.REGISTRY.allFlags());
}
@Override
public void generate() {
ModEntityLootTableProvider.registerEntityLootTables(this);
}
@Override
public void add(EntityType<?> type, LootTable.Builder builder) {
super.add(type, builder);
}
@Override
protected @NotNull Stream<EntityType<?>> getKnownEntityTypes() {
return StreamSupport.stream(ModEntities.ENTITIES.spliterator(), false)
.map(dev.architectury.registry.registries.RegistrySupplier::get);
}
}