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
@@ -0,0 +1,224 @@
package net.cmr.jurassicrevived.datagen;
import net.cmr.jurassicrevived.block.ModBlocks;
import net.cmr.jurassicrevived.item.ModItems;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
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;
public class ModBlockLootTableProvider {
public interface BlockLootHelper {
void dropSelf(Block block);
void add(Block block, LootTable.Builder builder);
LootTable.Builder createMultipleOreDrops(Block block, Item item, float minDrops, float maxDrops);
LootTable.Builder createPotFlowerItemTable(Block block);
}
public static void registerBlockLootTables(BlockLootHelper helper) {
helper.dropSelf(ModBlocks.CAT_PLUSHIE.get());
helper.dropSelf(ModBlocks.TRASH_CAN.get());
helper.dropSelf(ModBlocks.BENCH.get());
helper.dropSelf(ModBlocks.CHARRED_TERRACOTTA.get());
helper.dropSelf(ModBlocks.FENCE_LIGHT.get());
helper.dropSelf(ModBlocks.LIGHT_POST.get());
helper.dropSelf(ModBlocks.GYPSUM_COBBLESTONE.get());
helper.dropSelf(ModBlocks.GYPSUM_STONE_BRICKS.get());
helper.dropSelf(ModBlocks.SMOOTH_GYPSUM_STONE.get());
helper.dropSelf(ModBlocks.CHISELED_GYPSUM_STONE.get());
helper.dropSelf(ModBlocks.GYPSUM_BRICK_STAIRS.get());
helper.dropSelf(ModBlocks.GYPSUM_BRICK_SLAB.get());
helper.dropSelf(ModBlocks.GYPSUM_BRICK_WALL.get());
helper.dropSelf(ModBlocks.STONE_FOSSIL.get());
helper.dropSelf(ModBlocks.DEEPSLATE_FOSSIL.get());
helper.dropSelf(ModBlocks.LOW_SECURITY_FENCE_POLE.get());
helper.dropSelf(ModBlocks.LOW_SECURITY_FENCE_WIRE.get());
helper.dropSelf(ModBlocks.MEDIUM_SECURITY_FENCE_POLE.get());
helper.dropSelf(ModBlocks.MEDIUM_SECURITY_FENCE_WIRE.get());
helper.dropSelf(ModBlocks.ITEM_PIPE.get());
helper.dropSelf(ModBlocks.FLUID_PIPE.get());
helper.dropSelf(ModBlocks.POWER_PIPE.get());
helper.add(ModBlocks.GYPSUM_STONE.get(),
helper.createMultipleOreDrops(ModBlocks.GYPSUM_STONE.get(), ModBlocks.GYPSUM_COBBLESTONE.get().asItem(),1, 1));
helper.add(ModBlocks.AMBER_ORE.get(),
helper.createMultipleOreDrops(ModBlocks.AMBER_ORE.get(), ModItems.MOSQUITO_IN_AMBER.get(),1, 1));
helper.add(ModBlocks.DEEPSLATE_ICE_SHARD_ORE.get(),
helper.createMultipleOreDrops(ModBlocks.DEEPSLATE_ICE_SHARD_ORE.get(), ModItems.FROZEN_LEECH.get(),1, 1));
helper.dropSelf(ModBlocks.REINFORCED_STONE.get());
helper.dropSelf(ModBlocks.REINFORCED_STONE_BRICKS.get());
helper.dropSelf(ModBlocks.CHISELED_REINFORCED_STONE.get());
helper.dropSelf(ModBlocks.REINFORCED_BRICK_STAIRS.get());
helper.dropSelf(ModBlocks.REINFORCED_BRICK_SLAB.get());
helper.dropSelf(ModBlocks.REINFORCED_BRICK_WALL.get());
helper.dropSelf(ModBlocks.APATOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.ALBERTOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.BRACHIOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.CERATOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.DILOPHOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.TRICERATOPS_EGG.get());
helper.dropSelf(ModBlocks.SPINOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.OURANOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.PARASAUROLOPHUS_EGG.get());
helper.dropSelf(ModBlocks.INDOMINUS_REX_EGG.get());
helper.dropSelf(ModBlocks.GALLIMIMUS_EGG.get());
helper.dropSelf(ModBlocks.DIPLODOCUS_EGG.get());
helper.dropSelf(ModBlocks.COMPSOGNATHUS_EGG.get());
helper.dropSelf(ModBlocks.TYRANNOSAURUS_REX_EGG.get());
helper.dropSelf(ModBlocks.VELOCIRAPTOR_EGG.get());
helper.dropSelf(ModBlocks.BARYONYX_EGG.get());
helper.dropSelf(ModBlocks.CARNOTAURUS_EGG.get());
helper.dropSelf(ModBlocks.CONCAVENATOR_EGG.get());
helper.dropSelf(ModBlocks.DEINONYCHUS_EGG.get());
helper.dropSelf(ModBlocks.EDMONTOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.GIGANOTOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.GUANLONG_EGG.get());
helper.dropSelf(ModBlocks.HERRERASAURUS_EGG.get());
helper.dropSelf(ModBlocks.MAJUNGASAURUS_EGG.get());
helper.dropSelf(ModBlocks.PROCOMPSOGNATHUS_EGG.get());
helper.dropSelf(ModBlocks.PROTOCERATOPS_EGG.get());
helper.dropSelf(ModBlocks.RUGOPS_EGG.get());
helper.dropSelf(ModBlocks.SHANTUNGOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.STEGOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.STYRACOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.THERIZINOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.DISTORTUS_REX_EGG.get());
helper.dropSelf(ModBlocks.ALLOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.ALVAREZSAURUS_EGG.get());
helper.dropSelf(ModBlocks.ANKYLOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.ARAMBOURGIANIA_EGG.get());
helper.dropSelf(ModBlocks.CARCHARODONTOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.CEARADACTYLUS_EGG.get());
helper.dropSelf(ModBlocks.CHASMOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.COELOPHYSIS_EGG.get());
helper.dropSelf(ModBlocks.COELURUS_EGG.get());
helper.dropSelf(ModBlocks.CORYTHOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.DIMORPHODON_EGG.get());
helper.dropSelf(ModBlocks.DRYOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.GEOSTERNBERGIA_EGG.get());
helper.dropSelf(ModBlocks.GUIDRACO_EGG.get());
helper.dropSelf(ModBlocks.HADROSAURUS_EGG.get());
helper.dropSelf(ModBlocks.HYPSILOPHODON_EGG.get());
helper.dropSelf(ModBlocks.INDORAPTOR_EGG.get());
helper.dropSelf(ModBlocks.INOSTRANCEVIA_EGG.get());
helper.dropSelf(ModBlocks.LAMBEOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.LUDODACTYLUS_EGG.get());
helper.dropSelf(ModBlocks.MAMENCHISAURUS_EGG.get());
helper.dropSelf(ModBlocks.METRIACANTHOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.MOGANOPTERUS_EGG.get());
helper.dropSelf(ModBlocks.NYCTOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.ORNITHOLESTES_EGG.get());
helper.dropSelf(ModBlocks.ORNITHOMIMUS_EGG.get());
helper.dropSelf(ModBlocks.OVIRAPTOR_EGG.get());
helper.dropSelf(ModBlocks.PACHYCEPHALOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.PROCERATOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.PTERANODON_EGG.get());
helper.dropSelf(ModBlocks.PTERODAUSTRO_EGG.get());
helper.dropSelf(ModBlocks.QUETZALCOATLUS_EGG.get());
helper.dropSelf(ModBlocks.RAJASAURUS_EGG.get());
helper.dropSelf(ModBlocks.SEGISAURUS_EGG.get());
helper.dropSelf(ModBlocks.TAPEJARA_EGG.get());
helper.dropSelf(ModBlocks.TITANOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.TROODON_EGG.get());
helper.dropSelf(ModBlocks.TROPEOGNATHUS_EGG.get());
helper.dropSelf(ModBlocks.TUPUXUARA_EGG.get());
helper.dropSelf(ModBlocks.UTAHRAPTOR_EGG.get());
helper.dropSelf(ModBlocks.ZHENYUANOPTERUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_APATOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_ALBERTOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_BRACHIOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_CERATOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_DILOPHOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_TRICERATOPS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_SPINOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_OURANOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_PARASAUROLOPHUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_INDOMINUS_REX_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_GALLIMIMUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_DIPLODOCUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_COMPSOGNATHUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_TYRANNOSAURUS_REX_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_VELOCIRAPTOR_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_BARYONYX_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_CARNOTAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_CONCAVENATOR_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_DEINONYCHUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_EDMONTOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_GIGANOTOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_GUANLONG_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_HERRERASAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_MAJUNGASAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_PROCOMPSOGNATHUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_PROTOCERATOPS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_RUGOPS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_SHANTUNGOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_STEGOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_STYRACOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_THERIZINOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_DISTORTUS_REX_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_ALLOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_ALVAREZSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_ANKYLOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_ARAMBOURGIANIA_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_CARCHARODONTOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_CEARADACTYLUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_CHASMOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_COELOPHYSIS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_COELURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_CORYTHOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_DIMORPHODON_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_DRYOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_GEOSTERNBERGIA_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_GUIDRACO_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_HADROSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_HYPSILOPHODON_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_INDORAPTOR_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_INOSTRANCEVIA_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_LAMBEOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_LUDODACTYLUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_MAMENCHISAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_METRIACANTHOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_MOGANOPTERUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_NYCTOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_ORNITHOLESTES_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_ORNITHOMIMUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_OVIRAPTOR_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_PACHYCEPHALOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_PROCERATOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_PTERANODON_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_PTERODAUSTRO_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_QUETZALCOATLUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_RAJASAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_SEGISAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_TAPEJARA_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_TITANOSAURUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_TROODON_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_TROPEOGNATHUS_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_TUPUXUARA_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_UTAHRAPTOR_EGG.get());
helper.dropSelf(ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get());
helper.dropSelf(ModBlocks.ROYAL_FERN.get());
helper.add(ModBlocks.POTTED_ROYAL_FERN.get(), helper.createPotFlowerItemTable(ModBlocks.ROYAL_FERN.get()));
helper.dropSelf(ModBlocks.HORSETAIL_FERN.get());
helper.add(ModBlocks.POTTED_HORSETAIL_FERN.get(), helper.createPotFlowerItemTable(ModBlocks.HORSETAIL_FERN.get()));
helper.dropSelf(ModBlocks.WESTERN_SWORD_FERN.get());
helper.add(ModBlocks.POTTED_WESTERN_SWORD_FERN.get(), helper.createPotFlowerItemTable(ModBlocks.WESTERN_SWORD_FERN.get()));
helper.dropSelf(ModBlocks.ONYCHIOPSIS.get());
helper.add(ModBlocks.POTTED_ONYCHIOPSIS.get(), helper.createPotFlowerItemTable(ModBlocks.ONYCHIOPSIS.get()));
}
}
@@ -0,0 +1,500 @@
package net.cmr.jurassicrevived.datagen;
import net.cmr.jurassicrevived.entity.ModEntities;
import net.cmr.jurassicrevived.item.ModItems;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.level.storage.loot.LootPool;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
public class ModEntityLootTableProvider {
public interface EntityLootHelper {
void add(EntityType<?> type, LootTable.Builder builder);
}
public static void registerEntityLootTables(EntityLootHelper helper) {
helper.add(ModEntities.FDUCK.get(), LootTable.lootTable());
helper.add(ModEntities.CHICKENOSAURUS.get(), LootTable.lootTable());
// Albertosaurus
helper.add(ModEntities.ALBERTOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_ALBERTOSAURUS_SKULL.get()))));
// Apatosaurus
helper.add(ModEntities.APATOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_APATOSAURUS_SKULL.get()))));
// Baryonyx
helper.add(ModEntities.BARYONYX.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_BARYONYX_SKULL.get()))));
// Brachiosaurus
helper.add(ModEntities.BRACHIOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_BRACHIOSAURUS_SKULL.get()))));
// Carnotaurus
helper.add(ModEntities.CARNOTAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_CARNOTAURUS_SKULL.get()))));
// Ceratosaurus
helper.add(ModEntities.CERATOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_CERATOSAURUS_SKULL.get()))));
// Compsognathus
helper.add(ModEntities.COMPSOGNATHUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_COMPSOGNATHUS_SKULL.get()))));
// Concavenator
helper.add(ModEntities.CONCAVENATOR.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_CONCAVENATOR_SKULL.get()))));
// Deinonychus
helper.add(ModEntities.DEINONYCHUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_DEINONYCHUS_SKULL.get()))));
// Dilophosaurus
helper.add(ModEntities.DILOPHOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_DILOPHOSAURUS_SKULL.get()))));
// Diplodocus
helper.add(ModEntities.DIPLODOCUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_DIPLODOCUS_SKULL.get()))));
// D Rex -> Distortus Rex
helper.add(ModEntities.DISTORTUS_REX.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_DISTORTUS_REX_SKULL.get()))));
// Edmontosaurus
helper.add(ModEntities.EDMONTOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_EDMONTOSAURUS_SKULL.get()))));
// Gallimimus
helper.add(ModEntities.GALLIMIMUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_GALLIMIMUS_SKULL.get()))));
// Giganotosaurus
helper.add(ModEntities.GIGANOTOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_GIGANOTOSAURUS_SKULL.get()))));
// Guanlong
helper.add(ModEntities.GUANLONG.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_GUANLONG_SKULL.get()))));
// Herrerasaurus
helper.add(ModEntities.HERRERASAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_HERRERASAURUS_SKULL.get()))));
// Indominus Rex
helper.add(ModEntities.INDOMINUS_REX.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_INDOMINUS_REX_SKULL.get()))));
// Majungasaurus
helper.add(ModEntities.MAJUNGASAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_MAJUNGASAURUS_SKULL.get()))));
// Ouranosaurus
helper.add(ModEntities.OURANOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_OURANOSAURUS_SKULL.get()))));
// Parasaurolophus
helper.add(ModEntities.PARASAUROLOPHUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_PARASAUROLOPHUS_SKULL.get()))));
// Procompsognathus
helper.add(ModEntities.PROCOMPSOGNATHUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_PROCOMPSOGNATHUS_SKULL.get()))));
// Protoceratops
helper.add(ModEntities.PROTOCERATOPS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_PROTOCERATOPS_SKULL.get()))));
// Rugops
helper.add(ModEntities.RUGOPS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_RUGOPS_SKULL.get()))));
// Shantungosaurus
helper.add(ModEntities.SHANTUNGOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_SHANTUNGOSAURUS_SKULL.get()))));
// Spinosaurus
helper.add(ModEntities.SPINOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_SPINOSAURUS_SKULL.get()))));
// Stegosaurus
helper.add(ModEntities.STEGOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_STEGOSAURUS_SKULL.get()))));
// Styracosaurus
helper.add(ModEntities.STYRACOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_STYRACOSAURUS_SKULL.get()))));
// Therizinosaurus
helper.add(ModEntities.THERIZINOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_THERIZINOSAURUS_SKULL.get()))));
// Triceratops
helper.add(ModEntities.TRICERATOPS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_TRICERATOPS_SKULL.get()))));
// Tyrannosaurus Rex
helper.add(ModEntities.TYRANNOSAURUS_REX.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_TYRANNOSAURUS_REX_SKULL.get()))));
// Velociraptor
helper.add(ModEntities.VELOCIRAPTOR.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_VELOCIRAPTOR_SKULL.get()))));
helper.add(ModEntities.ALLOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_ALLOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.ALVAREZSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_ALVAREZSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.ANKYLOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_ANKYLOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.ARAMBOURGIANIA.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_ARAMBOURGIANIA_SKULL.get()))
)
);
helper.add(ModEntities.CARCHARODONTOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_CARCHARODONTOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.CEARADACTYLUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_CEARADACTYLUS_SKULL.get()))
)
);
helper.add(ModEntities.CHASMOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_CHASMOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.COELOPHYSIS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_COELOPHYSIS_SKULL.get()))
)
);
helper.add(ModEntities.COELURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_COELURUS_SKULL.get()))
)
);
helper.add(ModEntities.CORYTHOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_CORYTHOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.DIMORPHODON.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_DIMORPHODON_SKULL.get()))
)
);
helper.add(ModEntities.DRYOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_DRYOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.GEOSTERNBERGIA.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_GEOSTERNBERGIA_SKULL.get()))
)
);
helper.add(ModEntities.GUIDRACO.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_GUIDRACO_SKULL.get()))
)
);
helper.add(ModEntities.HADROSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_HADROSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.HYPSILOPHODON.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_HYPSILOPHODON_SKULL.get()))
)
);
helper.add(ModEntities.INDORAPTOR.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_INDORAPTOR_SKULL.get()))
)
);
helper.add(ModEntities.INOSTRANCEVIA.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_INOSTRANCEVIA_SKULL.get()))
)
);
helper.add(ModEntities.LAMBEOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_LAMBEOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.LUDODACTYLUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_LUDODACTYLUS_SKULL.get()))
)
);
helper.add(ModEntities.MAMENCHISAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_MAMENCHISAURUS_SKULL.get()))
)
);
helper.add(ModEntities.METRIACANTHOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_METRIACANTHOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.MOGANOPTERUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_MOGANOPTERUS_SKULL.get()))
)
);
helper.add(ModEntities.NYCTOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_NYCTOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.ORNITHOLESTES.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_ORNITHOLESTES_SKULL.get()))
)
);
helper.add(ModEntities.ORNITHOMIMUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_ORNITHOMIMUS_SKULL.get()))
)
);
helper.add(ModEntities.OVIRAPTOR.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_OVIRAPTOR_SKULL.get()))
)
);
helper.add(ModEntities.PACHYCEPHALOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_PACHYCEPHALOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.PROCERATOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_PROCERATOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.PTERANODON.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_PTERANODON_SKULL.get()))
)
);
helper.add(ModEntities.PTERODAUSTRO.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_PTERODAUSTRO_SKULL.get()))
)
);
helper.add(ModEntities.QUETZALCOATLUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_QUETZALCOATLUS_SKULL.get()))
)
);
helper.add(ModEntities.RAJASAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_RAJASAURUS_SKULL.get()))
)
);
helper.add(ModEntities.SEGISAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_SEGISAURUS_SKULL.get()))
)
);
helper.add(ModEntities.TAPEJARA.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_TAPEJARA_SKULL.get()))
)
);
helper.add(ModEntities.TITANOSAURUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_TITANOSAURUS_SKULL.get()))
)
);
helper.add(ModEntities.TROODON.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_TROODON_SKULL.get()))
)
);
helper.add(ModEntities.TROPEOGNATHUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_TROPEOGNATHUS_SKULL.get()))
)
);
helper.add(ModEntities.TUPUXUARA.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_TUPUXUARA_SKULL.get()))
)
);
helper.add(ModEntities.UTAHRAPTOR.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_UTAHRAPTOR_SKULL.get()))
)
);
helper.add(ModEntities.ZHENYUANOPTERUS.get(), LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(ModItems.FRESH_ZHENYUANOPTERUS_SKULL.get()))
)
);
}
}
@@ -11,5 +11,7 @@ public class DataGenerators implements DataGeneratorEntrypoint {
pack.addProvider(FabricModModelProvider::new);
pack.addProvider(FabricBlockTagProvider::new);
pack.addProvider(FabricItemTagProvider::new);
pack.addProvider(FabricBlockLootTableProvider::new);
pack.addProvider(FabricEntityLootTableProvider::new);
}
}
@@ -0,0 +1,66 @@
package net.cmr.jurassicrevived.datagen;
import net.cmr.jurassicrevived.block.ModBlocks;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
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.concurrent.CompletableFuture;
public class FabricBlockLootTableProvider extends net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider implements ModBlockLootTableProvider.BlockLootHelper {
//? if >1.20.1 {
/*public FabricBlockLootTableProvider(FabricDataOutput dataOutput, CompletableFuture<HolderLookup.Provider> registryLookup) {
super(dataOutput, registryLookup);
}
*///?} else {
public FabricBlockLootTableProvider(FabricDataOutput dataOutput) {
super(dataOutput);
}
//?}
@Override
public 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) {
//? if >1.20.1 {
/*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)))));
*///?} else {
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);
}
}
@@ -0,0 +1,59 @@
package net.cmr.jurassicrevived.datagen;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiConsumer;
public class FabricEntityLootTableProvider extends SimpleFabricLootTableProvider implements ModEntityLootTableProvider.EntityLootHelper {
//? if >1.20.1 {
/*public FabricEntityLootTableProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registryLookup) {
super(output, registryLookup, LootContextParamSets.ENTITY);
}
@Override
public void generate(BiConsumer<ResourceKey<LootTable>, LootTable.Builder> biConsumer) {
this.currentBiConsumer = biConsumer;
ModEntityLootTableProvider.registerEntityLootTables(this);
this.currentBiConsumer = null;
}
@Override
public void add(EntityType<?> type, LootTable.Builder builder) {
if (currentBiConsumer != null) {
currentBiConsumer.accept(type.getDefaultLootTable(), builder);
}
}
private BiConsumer<ResourceKey<LootTable>, LootTable.Builder> currentBiConsumer;
*///?} else {
public FabricEntityLootTableProvider(FabricDataOutput output) {
super(output, LootContextParamSets.ENTITY);
}
@Override
public void generate(BiConsumer<ResourceLocation, LootTable.Builder> biConsumer) {
this.currentBiConsumer = biConsumer;
ModEntityLootTableProvider.registerEntityLootTables(this);
this.currentBiConsumer = null;
}
@Override
public void add(EntityType<?> type, LootTable.Builder builder) {
if (currentBiConsumer != null) {
currentBiConsumer.accept(type.getDefaultLootTable(), builder);
}
}
private BiConsumer<ResourceLocation, LootTable.Builder> currentBiConsumer;
//?}
}
@@ -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);
}
}
@@ -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));
}
}
@@ -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();
}
}
@@ -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);
}
}