From a949d4edddbf8e3df5ec37b579af451964470851 Mon Sep 17 00:00:00 2001 From: Eli Gibbs Date: Sat, 17 Jan 2026 13:06:21 -0500 Subject: [PATCH] adds datagen for block and entity loot --- .../datagen/ModBlockLootTableProvider.java | 224 ++++++++ .../datagen/ModEntityLootTableProvider.java | 500 ++++++++++++++++++ .../datagen/DataGenerators.java | 2 + .../datagen/FabricBlockLootTableProvider.java | 66 +++ .../FabricEntityLootTableProvider.java | 59 +++ .../datagen/DataGenerators.java | 11 + .../datagen/ForgeBlockLootTableProvider.java | 58 ++ .../datagen/ForgeEntityLootTableProvider.java | 36 ++ .../datagen/DataGenerators.java | 14 + .../NeoForgeBlockLootTableProvider.java | 61 +++ .../NeoForgeEntityLootTableProvider.java | 35 ++ 11 files changed, 1066 insertions(+) create mode 100644 common/src/main/java/net/cmr/jurassicrevived/datagen/ModBlockLootTableProvider.java create mode 100644 common/src/main/java/net/cmr/jurassicrevived/datagen/ModEntityLootTableProvider.java create mode 100644 fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricBlockLootTableProvider.java create mode 100644 fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricEntityLootTableProvider.java create mode 100644 minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeBlockLootTableProvider.java create mode 100644 minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeEntityLootTableProvider.java create mode 100644 neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeBlockLootTableProvider.java create mode 100644 neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeEntityLootTableProvider.java diff --git a/common/src/main/java/net/cmr/jurassicrevived/datagen/ModBlockLootTableProvider.java b/common/src/main/java/net/cmr/jurassicrevived/datagen/ModBlockLootTableProvider.java new file mode 100644 index 0000000..2f60156 --- /dev/null +++ b/common/src/main/java/net/cmr/jurassicrevived/datagen/ModBlockLootTableProvider.java @@ -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())); + } +} diff --git a/common/src/main/java/net/cmr/jurassicrevived/datagen/ModEntityLootTableProvider.java b/common/src/main/java/net/cmr/jurassicrevived/datagen/ModEntityLootTableProvider.java new file mode 100644 index 0000000..069cf50 --- /dev/null +++ b/common/src/main/java/net/cmr/jurassicrevived/datagen/ModEntityLootTableProvider.java @@ -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())) + ) + ); + } +} diff --git a/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java b/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java index 46a6ece..8abbdf7 100644 --- a/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java +++ b/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java @@ -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); } } diff --git a/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricBlockLootTableProvider.java b/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricBlockLootTableProvider.java new file mode 100644 index 0000000..b2bf542 --- /dev/null +++ b/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricBlockLootTableProvider.java @@ -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 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 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); + } +} diff --git a/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricEntityLootTableProvider.java b/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricEntityLootTableProvider.java new file mode 100644 index 0000000..50e16f8 --- /dev/null +++ b/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricEntityLootTableProvider.java @@ -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 registryLookup) { + super(output, registryLookup, LootContextParamSets.ENTITY); + } + + @Override + public void generate(BiConsumer, 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, LootTable.Builder> currentBiConsumer; + *///?} else { + public FabricEntityLootTableProvider(FabricDataOutput output) { + super(output, LootContextParamSets.ENTITY); + } + + @Override + public void generate(BiConsumer 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 currentBiConsumer; + //?} +} diff --git a/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java index 3e3029b..dd04c45 100644 --- a/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java +++ b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java @@ -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) + ) + )); } } diff --git a/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeBlockLootTableProvider.java b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeBlockLootTableProvider.java new file mode 100644 index 0000000..5ed93ea --- /dev/null +++ b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeBlockLootTableProvider.java @@ -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 getKnownBlocks() { + return StreamSupport.stream(ModBlocks.BLOCKS.spliterator(), false) + .map(dev.architectury.registry.registries.RegistrySupplier::get) + .toList(); + } +} diff --git a/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeEntityLootTableProvider.java b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeEntityLootTableProvider.java new file mode 100644 index 0000000..a083bb8 --- /dev/null +++ b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeEntityLootTableProvider.java @@ -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> getKnownEntityTypes() { + return StreamSupport.stream(ModEntities.ENTITIES.spliterator(), false) + .map(dev.architectury.registry.registries.RegistrySupplier::get); + } +} diff --git a/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java index 57832fb..2df93dc 100644 --- a/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java +++ b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java @@ -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)); } } diff --git a/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeBlockLootTableProvider.java b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeBlockLootTableProvider.java new file mode 100644 index 0000000..9abf02e --- /dev/null +++ b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeBlockLootTableProvider.java @@ -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 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 getKnownBlocks() { + return StreamSupport.stream(ModBlocks.BLOCKS.spliterator(), false) + .map(dev.architectury.registry.registries.RegistrySupplier::get) + .toList(); + } +} diff --git a/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeEntityLootTableProvider.java b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeEntityLootTableProvider.java new file mode 100644 index 0000000..d7a32b5 --- /dev/null +++ b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeEntityLootTableProvider.java @@ -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> getKnownEntityTypes() { + return StreamSupport.stream(ModEntities.ENTITIES.spliterator(), false) + .map(dev.architectury.registry.registries.RegistrySupplier::get); + } +}