adds datagen for block and entity loot
This commit is contained in:
@@ -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.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 java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@EventBusSubscriber(modid = Constants.MOD_ID)
|
||||
@@ -28,5 +32,15 @@ public class DataGenerators {
|
||||
BlockTagsProvider blockTagsProvider = new NeoForgeBlockTagProvider(packOutput, lookupProvider, existingFileHelper);
|
||||
generator.addProvider(event.includeServer(), blockTagsProvider);
|
||||
generator.addProvider(event.includeServer(), new NeoForgeItemTagProvider(packOutput, lookupProvider, blockTagsProvider.contentsGetter(), existingFileHelper));
|
||||
|
||||
generator.addProvider(event.includeServer(), new LootTableProvider(packOutput, Collections.emptySet(),
|
||||
List.of(
|
||||
new LootTableProvider.SubProviderEntry(NeoForgeBlockLootTableProvider::new, LootContextParamSets.BLOCK),
|
||||
new LootTableProvider.SubProviderEntry(NeoForgeEntityLootTableProvider::new, LootContextParamSets.ENTITY)
|
||||
),
|
||||
lookupProvider
|
||||
));
|
||||
|
||||
generator.addProvider(event.includeServer(), new NeoForgeGlobalLootModifierProvider(packOutput));
|
||||
}
|
||||
}
|
||||
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
package net.cmr.jurassicrevived.datagen;
|
||||
|
||||
import net.cmr.jurassicrevived.block.ModBlocks;
|
||||
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 java.util.Set;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
public class NeoForgeBlockLootTableProvider extends BlockLootSubProvider implements ModBlockLootTableProvider.BlockLootHelper {
|
||||
protected NeoForgeBlockLootTableProvider(HolderLookup.Provider provider) {
|
||||
super(Set.of(), FeatureFlags.REGISTRY.allFlags(), provider);
|
||||
}
|
||||
|
||||
@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) {
|
||||
HolderLookup.RegistryLookup<Enchantment> registrylookup = this.registries.lookupOrThrow(Registries.ENCHANTMENT);
|
||||
return this.createSilkTouchDispatchTable(block, this.applyExplosionDecay(block,
|
||||
LootItem.lootTableItem(item)
|
||||
.apply(SetItemCountFunction.setCount(UniformGenerator.between(minDrops, maxDrops)))
|
||||
.apply(ApplyBonusCount.addOreBonusCount(registrylookup.getOrThrow(Enchantments.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();
|
||||
}
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
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 org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
public class NeoForgeEntityLootTableProvider extends EntityLootSubProvider implements ModEntityLootTableProvider.EntityLootHelper {
|
||||
|
||||
public NeoForgeEntityLootTableProvider(HolderLookup.Provider provider) {
|
||||
super(FeatureFlags.REGISTRY.allFlags(), provider);
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user