From 7f0f7ddafefba7f5e6bbe8447825ca1eb7bd22f4 Mon Sep 17 00:00:00 2001 From: Eli Gibbs Date: Tue, 13 Jan 2026 17:00:57 -0500 Subject: [PATCH] datagen beginnings --- .../net/cmr/jurassicrevived/Constants.java | 8 + .../datagen/ModBlockStateProvider.java | 379 ++++++++++ .../datagen/ModItemModelProvider.java | 650 ++++++++++++++++++ fabricmc/build.gradle.kts | 24 +- .../datagen/DataGenerators.java | 13 + .../datagen/FabricModModelProvider.java | 250 +++++++ fabricmc/src/main/resources/fabric.mod.json | 3 + minecraftforge/legacy.gradle.kts | 7 + .../datagen/DataGenerators.java | 23 + .../datagen/ForgeBlockStateProvider.java | 271 ++++++++ .../datagen/ForgeItemModelProvider.java | 80 +++ neoforge/build.gradle.kts | 7 + .../datagen/DataGenerators.java | 23 + .../datagen/NeoForgeBlockStateProvider.java | 271 ++++++++ .../datagen/NeoForgeItemModelProvider.java | 74 ++ 15 files changed, 2081 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/net/cmr/jurassicrevived/datagen/ModBlockStateProvider.java create mode 100644 common/src/main/java/net/cmr/jurassicrevived/datagen/ModItemModelProvider.java create mode 100644 fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java create mode 100644 fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricModModelProvider.java create mode 100644 minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java create mode 100644 minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeBlockStateProvider.java create mode 100644 minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeItemModelProvider.java create mode 100644 neoforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java create mode 100644 neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeBlockStateProvider.java create mode 100644 neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeItemModelProvider.java diff --git a/common/src/main/java/net/cmr/jurassicrevived/Constants.java b/common/src/main/java/net/cmr/jurassicrevived/Constants.java index ef1d2af..d37191e 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/Constants.java +++ b/common/src/main/java/net/cmr/jurassicrevived/Constants.java @@ -18,4 +18,12 @@ public class Constants return new ResourceLocation(MOD_ID, path); //?} } + + public static ResourceLocation r2(String path) { + //? if >1.20.1 { + /*return ResourceLocation.parse(path); + *///?} else { + return new ResourceLocation(path); + //?} + } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/datagen/ModBlockStateProvider.java b/common/src/main/java/net/cmr/jurassicrevived/datagen/ModBlockStateProvider.java new file mode 100644 index 0000000..e5cc104 --- /dev/null +++ b/common/src/main/java/net/cmr/jurassicrevived/datagen/ModBlockStateProvider.java @@ -0,0 +1,379 @@ +package net.cmr.jurassicrevived.datagen; + +import net.cmr.jurassicrevived.Constants; +import net.cmr.jurassicrevived.block.ModBlocks; +import net.cmr.jurassicrevived.block.custom.FencePoleBlock; +import net.cmr.jurassicrevived.block.custom.FenceWireBlock; +import net.cmr.jurassicrevived.block.custom.PipeBlock; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; + +public class ModBlockStateProvider { + + public interface BlockStateHelper { + void simpleBlock(Block block, ResourceLocation texture); + void simpleBlock(Block block, String modelName, ResourceLocation texture); + void simpleBlockItem(Block block, ResourceLocation model); + + void simpleBlockWithExistingModel(Block block, ResourceLocation model); + + void crossBlock(Block block, ResourceLocation texture); + void pottedPlantBlock(Block block, ResourceLocation plantTexture); + + void blockWithItem(Block block); + void horizontalFacingWithItem(Block block); + void horizontalFacingLitWithItem(Block block); + void horizontalFacingLitNoBlockstateWithItem(Block block); + void eggLike(Block block); + + void pipeMultipartWithItem(Block block, String modelBaseName); + void customFenceMultipart(Block block, String base, String straight, String diag, BooleanProperty ne, BooleanProperty se, BooleanProperty sw, BooleanProperty nw); + + void stairsBlock(StairBlock block, ResourceLocation texture); + void slabBlock(SlabBlock block, ResourceLocation texture, ResourceLocation sideTexture); + void wallBlock(WallBlock block, ResourceLocation texture); + + ResourceLocation key(Block block); + } + + private static ResourceLocation modLoc(String path) { + return Constants.rl(path); + } + + public static void registerBlockStates(BlockStateHelper helper) { + //? if >1.20.1 { + /*if (ModBlocks.ROYAL_FERN.isPresent()) { + helper.crossBlock(ModBlocks.ROYAL_FERN.get(), + modLoc("block/" + ModBlocks.ROYAL_FERN.getId().getPath())); + } + if (ModBlocks.POTTED_ROYAL_FERN.isPresent()) { + helper.pottedPlantBlock(ModBlocks.POTTED_ROYAL_FERN.get(), + modLoc("block/" + ModBlocks.ROYAL_FERN.getId().getPath())); + } + + if (ModBlocks.HORSETAIL_FERN.isPresent()) { + helper.crossBlock(ModBlocks.HORSETAIL_FERN.get(), + modLoc("block/" + ModBlocks.HORSETAIL_FERN.getId().getPath())); + } + if (ModBlocks.POTTED_HORSETAIL_FERN.isPresent()) { + helper.pottedPlantBlock(ModBlocks.POTTED_HORSETAIL_FERN.get(), + modLoc("block/" + ModBlocks.HORSETAIL_FERN.getId().getPath())); + } + + if (ModBlocks.WESTERN_SWORD_FERN.isPresent()) { + helper.crossBlock(ModBlocks.WESTERN_SWORD_FERN.get(), + modLoc("block/" + ModBlocks.WESTERN_SWORD_FERN.getId().getPath())); + } + if (ModBlocks.POTTED_WESTERN_SWORD_FERN.isPresent()) { + helper.pottedPlantBlock(ModBlocks.POTTED_WESTERN_SWORD_FERN.get(), + modLoc("block/" + ModBlocks.WESTERN_SWORD_FERN.getId().getPath())); + } + + if (ModBlocks.ONYCHIOPSIS.isPresent()) { + helper.crossBlock(ModBlocks.ONYCHIOPSIS.get(), + modLoc("block/" + ModBlocks.ONYCHIOPSIS.getId().getPath())); + } + if (ModBlocks.POTTED_ONYCHIOPSIS.isPresent()) { + helper.pottedPlantBlock(ModBlocks.POTTED_ONYCHIOPSIS.get(), + modLoc("block/" + ModBlocks.ONYCHIOPSIS.getId().getPath())); + } + *///?} else { + if (ModBlocks.ROYAL_FERN.isPresent()) { + helper.crossBlock(ModBlocks.ROYAL_FERN.get(), + modLoc("block/" + ModBlocks.ROYAL_FERN.getId().getPath())); + } + if (ModBlocks.POTTED_ROYAL_FERN.isPresent()) { + helper.pottedPlantBlock(ModBlocks.POTTED_ROYAL_FERN.get(), + modLoc("block/" + ModBlocks.ROYAL_FERN.getId().getPath())); + } + + if (ModBlocks.HORSETAIL_FERN.isPresent()) { + helper.crossBlock(ModBlocks.HORSETAIL_FERN.get(), + modLoc("block/" + ModBlocks.HORSETAIL_FERN.getId().getPath())); + } + if (ModBlocks.POTTED_HORSETAIL_FERN.isPresent()) { + helper.pottedPlantBlock(ModBlocks.POTTED_HORSETAIL_FERN.get(), + modLoc("block/" + ModBlocks.HORSETAIL_FERN.getId().getPath())); + } + + if (ModBlocks.WESTERN_SWORD_FERN.isPresent()) { + helper.crossBlock(ModBlocks.WESTERN_SWORD_FERN.get(), + modLoc("block/" + ModBlocks.WESTERN_SWORD_FERN.getId().getPath())); + } + if (ModBlocks.POTTED_WESTERN_SWORD_FERN.isPresent()) { + helper.pottedPlantBlock(ModBlocks.POTTED_WESTERN_SWORD_FERN.get(), + modLoc("block/" + ModBlocks.WESTERN_SWORD_FERN.getId().getPath())); + } + + if (ModBlocks.ONYCHIOPSIS.isPresent()) { + helper.crossBlock(ModBlocks.ONYCHIOPSIS.get(), + modLoc("block/" + ModBlocks.ONYCHIOPSIS.getId().getPath())); + } + if (ModBlocks.POTTED_ONYCHIOPSIS.isPresent()) { + helper.pottedPlantBlock(ModBlocks.POTTED_ONYCHIOPSIS.get(), + modLoc("block/" + ModBlocks.ONYCHIOPSIS.getId().getPath())); + } + //?} + + helper.blockWithItem(ModBlocks.GYPSUM_STONE.get()); + helper.blockWithItem(ModBlocks.GYPSUM_COBBLESTONE.get()); + helper.blockWithItem(ModBlocks.GYPSUM_STONE_BRICKS.get()); + helper.blockWithItem(ModBlocks.SMOOTH_GYPSUM_STONE.get()); + helper.blockWithItem(ModBlocks.CHISELED_GYPSUM_STONE.get()); + + helper.blockWithItem(ModBlocks.STONE_FOSSIL.get()); + helper.blockWithItem(ModBlocks.DEEPSLATE_FOSSIL.get()); + helper.blockWithItem(ModBlocks.AMBER_ORE.get()); + helper.blockWithItem(ModBlocks.DEEPSLATE_ICE_SHARD_ORE.get()); + + helper.blockWithItem(ModBlocks.REINFORCED_STONE.get()); + helper.blockWithItem(ModBlocks.REINFORCED_STONE_BRICKS.get()); + helper.blockWithItem(ModBlocks.CHISELED_REINFORCED_STONE.get()); + + helper.stairsBlock((StairBlock) ModBlocks.REINFORCED_BRICK_STAIRS.get(), modLoc("block/" + ModBlocks.REINFORCED_STONE_BRICKS.getId().getPath())); + helper.slabBlock((SlabBlock) ModBlocks.REINFORCED_BRICK_SLAB.get(), modLoc("block/" + ModBlocks.REINFORCED_STONE_BRICKS.getId().getPath()), modLoc("block/" + ModBlocks.REINFORCED_STONE_BRICKS.getId().getPath())); + helper.wallBlock((WallBlock) ModBlocks.REINFORCED_BRICK_WALL.get(), modLoc("block/" + ModBlocks.REINFORCED_STONE_BRICKS.getId().getPath())); + + helper.simpleBlockItem(ModBlocks.REINFORCED_BRICK_STAIRS.get(), modLoc("block/" + ModBlocks.REINFORCED_BRICK_STAIRS.getId().getPath())); + helper.simpleBlockItem(ModBlocks.REINFORCED_BRICK_SLAB.get(), modLoc("block/" + ModBlocks.REINFORCED_BRICK_SLAB.getId().getPath())); + + helper.stairsBlock((StairBlock) ModBlocks.GYPSUM_BRICK_STAIRS.get(), modLoc("block/" + ModBlocks.GYPSUM_STONE_BRICKS.getId().getPath())); + helper.slabBlock((SlabBlock) ModBlocks.GYPSUM_BRICK_SLAB.get(), modLoc("block/" + ModBlocks.GYPSUM_STONE_BRICKS.getId().getPath()), modLoc("block/" + ModBlocks.GYPSUM_STONE_BRICKS.getId().getPath())); + helper.wallBlock((WallBlock) ModBlocks.GYPSUM_BRICK_WALL.get(), modLoc("block/" + ModBlocks.GYPSUM_STONE_BRICKS.getId().getPath())); + + helper.simpleBlockItem(ModBlocks.GYPSUM_BRICK_STAIRS.get(), modLoc("block/" + ModBlocks.GYPSUM_BRICK_STAIRS.getId().getPath())); + helper.simpleBlockItem(ModBlocks.GYPSUM_BRICK_SLAB.get(), modLoc("block/" + ModBlocks.GYPSUM_BRICK_SLAB.getId().getPath())); + + helper.horizontalFacingWithItem(ModBlocks.CAT_PLUSHIE.get()); + helper.horizontalFacingWithItem(ModBlocks.TRASH_CAN.get()); + helper.horizontalFacingWithItem(ModBlocks.BENCH.get()); + helper.blockWithItem(ModBlocks.CHARRED_TERRACOTTA.get()); + helper.horizontalFacingWithItem(ModBlocks.FENCE_LIGHT.get()); + helper.horizontalFacingWithItem(ModBlocks.LIGHT_POST.get()); + + helper.simpleBlockWithExistingModel(ModBlocks.TANK.get(), modLoc("block/tank")); + helper.simpleBlockWithExistingModel(ModBlocks.POWER_CELL.get(), modLoc("block/power_cell")); + helper.simpleBlockWithExistingModel(ModBlocks.WOOD_CRATE.get(), modLoc("block/wood_crate")); + helper.simpleBlockWithExistingModel(ModBlocks.IRON_CRATE.get(), modLoc("block/iron_crate")); + + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.GENERATOR.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.DNA_EXTRACTOR.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.DNA_ANALYZER.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.FOSSIL_GRINDER.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.FOSSIL_CLEANER.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.DNA_HYBRIDIZER.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.EMBRYONIC_MACHINE.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.EMBRYO_CALCIFICATION_MACHINE.get()); + helper.horizontalFacingLitWithItem(ModBlocks.INCUBATOR.get()); + + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.WHITE_GENERATOR.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.WHITE_DNA_EXTRACTOR.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.WHITE_DNA_ANALYZER.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.WHITE_FOSSIL_GRINDER.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.WHITE_FOSSIL_CLEANER.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.WHITE_DNA_HYBRIDIZER.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.WHITE_EMBRYONIC_MACHINE.get()); + helper.horizontalFacingLitNoBlockstateWithItem(ModBlocks.WHITE_EMBRYO_CALCIFICATION_MACHINE.get()); + helper.horizontalFacingLitWithItem(ModBlocks.WHITE_INCUBATOR.get()); + + helper.eggLike(ModBlocks.VELOCIRAPTOR_EGG.get()); + helper.eggLike(ModBlocks.TYRANNOSAURUS_REX_EGG.get()); + helper.eggLike(ModBlocks.TRICERATOPS_EGG.get()); + helper.eggLike(ModBlocks.SPINOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.OURANOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.PARASAUROLOPHUS_EGG.get()); + helper.eggLike(ModBlocks.INDOMINUS_REX_EGG.get()); + helper.eggLike(ModBlocks.GALLIMIMUS_EGG.get()); + helper.eggLike(ModBlocks.DIPLODOCUS_EGG.get()); + helper.eggLike(ModBlocks.DILOPHOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.COMPSOGNATHUS_EGG.get()); + helper.eggLike(ModBlocks.CERATOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.BRACHIOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.ALBERTOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.APATOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.BARYONYX_EGG.get()); + helper.eggLike(ModBlocks.CARNOTAURUS_EGG.get()); + helper.eggLike(ModBlocks.CONCAVENATOR_EGG.get()); + helper.eggLike(ModBlocks.DEINONYCHUS_EGG.get()); + helper.eggLike(ModBlocks.EDMONTOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.GIGANOTOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.GUANLONG_EGG.get()); + helper.eggLike(ModBlocks.HERRERASAURUS_EGG.get()); + helper.eggLike(ModBlocks.MAJUNGASAURUS_EGG.get()); + helper.eggLike(ModBlocks.PROCOMPSOGNATHUS_EGG.get()); + helper.eggLike(ModBlocks.PROTOCERATOPS_EGG.get()); + helper.eggLike(ModBlocks.RUGOPS_EGG.get()); + helper.eggLike(ModBlocks.SHANTUNGOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.STEGOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.STYRACOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.THERIZINOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.DISTORTUS_REX_EGG.get()); + helper.eggLike(ModBlocks.ALLOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.ALVAREZSAURUS_EGG.get()); + helper.eggLike(ModBlocks.ANKYLOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.ARAMBOURGIANIA_EGG.get()); + helper.eggLike(ModBlocks.CARCHARODONTOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.CEARADACTYLUS_EGG.get()); + helper.eggLike(ModBlocks.CHASMOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.COELOPHYSIS_EGG.get()); + helper.eggLike(ModBlocks.COELURUS_EGG.get()); + helper.eggLike(ModBlocks.CORYTHOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.DIMORPHODON_EGG.get()); + helper.eggLike(ModBlocks.DRYOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.GEOSTERNBERGIA_EGG.get()); + helper.eggLike(ModBlocks.GUIDRACO_EGG.get()); + helper.eggLike(ModBlocks.HADROSAURUS_EGG.get()); + helper.eggLike(ModBlocks.HYPSILOPHODON_EGG.get()); + helper.eggLike(ModBlocks.INDORAPTOR_EGG.get()); + helper.eggLike(ModBlocks.INOSTRANCEVIA_EGG.get()); + helper.eggLike(ModBlocks.LAMBEOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.LUDODACTYLUS_EGG.get()); + helper.eggLike(ModBlocks.MAMENCHISAURUS_EGG.get()); + helper.eggLike(ModBlocks.METRIACANTHOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.MOGANOPTERUS_EGG.get()); + helper.eggLike(ModBlocks.NYCTOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.ORNITHOLESTES_EGG.get()); + helper.eggLike(ModBlocks.ORNITHOMIMUS_EGG.get()); + helper.eggLike(ModBlocks.OVIRAPTOR_EGG.get()); + helper.eggLike(ModBlocks.PACHYCEPHALOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.PROCERATOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.PTERANODON_EGG.get()); + helper.eggLike(ModBlocks.PTERODAUSTRO_EGG.get()); + helper.eggLike(ModBlocks.QUETZALCOATLUS_EGG.get()); + helper.eggLike(ModBlocks.RAJASAURUS_EGG.get()); + helper.eggLike(ModBlocks.SEGISAURUS_EGG.get()); + helper.eggLike(ModBlocks.TAPEJARA_EGG.get()); + helper.eggLike(ModBlocks.TITANOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.TROODON_EGG.get()); + helper.eggLike(ModBlocks.TROPEOGNATHUS_EGG.get()); + helper.eggLike(ModBlocks.TUPUXUARA_EGG.get()); + helper.eggLike(ModBlocks.UTAHRAPTOR_EGG.get()); + helper.eggLike(ModBlocks.ZHENYUANOPTERUS_EGG.get()); + + helper.eggLike(ModBlocks.INCUBATED_VELOCIRAPTOR_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_TYRANNOSAURUS_REX_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_TRICERATOPS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_SPINOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_OURANOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_PARASAUROLOPHUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_INDOMINUS_REX_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_GALLIMIMUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_DIPLODOCUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_DILOPHOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_COMPSOGNATHUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_CERATOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_BRACHIOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_ALBERTOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_APATOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_BARYONYX_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_CARNOTAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_CONCAVENATOR_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_DEINONYCHUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_EDMONTOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_GIGANOTOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_GUANLONG_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_HERRERASAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_MAJUNGASAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_PROCOMPSOGNATHUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_PROTOCERATOPS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_RUGOPS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_SHANTUNGOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_STEGOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_STYRACOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_THERIZINOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_DISTORTUS_REX_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_ALLOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_ALVAREZSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_ANKYLOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_ARAMBOURGIANIA_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_CARCHARODONTOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_CEARADACTYLUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_CHASMOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_COELOPHYSIS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_COELURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_CORYTHOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_DIMORPHODON_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_DRYOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_GEOSTERNBERGIA_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_GUIDRACO_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_HADROSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_HYPSILOPHODON_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_INDORAPTOR_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_INOSTRANCEVIA_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_LAMBEOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_LUDODACTYLUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_MAMENCHISAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_METRIACANTHOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_MOGANOPTERUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_NYCTOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_ORNITHOLESTES_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_ORNITHOMIMUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_OVIRAPTOR_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_PACHYCEPHALOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_PROCERATOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_PTERANODON_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_PTERODAUSTRO_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_QUETZALCOATLUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_RAJASAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_SEGISAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_TAPEJARA_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_TITANOSAURUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_TROODON_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_TROPEOGNATHUS_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_TUPUXUARA_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_UTAHRAPTOR_EGG.get()); + helper.eggLike(ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get()); + + helper.customFenceMultipart( + ModBlocks.LOW_SECURITY_FENCE_POLE.get(), + "low_security_fence_pole", + "low_security_fence_pole_part", + "low_security_fence_pole_diag_part", + FencePoleBlock.NE, + FencePoleBlock.SE, + FencePoleBlock.SW, + FencePoleBlock.NW + ); + + helper.customFenceMultipart( + ModBlocks.LOW_SECURITY_FENCE_WIRE.get(), + "low_security_fence_wire", + "low_security_fence_wire_part", + "low_security_fence_wire_diag_part", + FenceWireBlock.NE, + FenceWireBlock.SE, + FenceWireBlock.SW, + FenceWireBlock.NW + ); + + helper.customFenceMultipart( + ModBlocks.MEDIUM_SECURITY_FENCE_POLE.get(), + "medium_security_fence_pole", + "medium_security_fence_pole_part", + "medium_security_fence_pole_diag_part", + FencePoleBlock.NE, + FencePoleBlock.SE, + FencePoleBlock.SW, + FencePoleBlock.NW + ); + + helper.customFenceMultipart( + ModBlocks.MEDIUM_SECURITY_FENCE_WIRE.get(), + "medium_security_fence_wire", + "medium_security_fence_wire_part", + "medium_security_fence_wire_diag_part", + FenceWireBlock.NE, + FenceWireBlock.SE, + FenceWireBlock.SW, + FenceWireBlock.NW + ); + + helper.pipeMultipartWithItem(ModBlocks.ITEM_PIPE.get(), "item_pipe"); + helper.pipeMultipartWithItem(ModBlocks.FLUID_PIPE.get(), "fluid_pipe"); + helper.pipeMultipartWithItem(ModBlocks.POWER_PIPE.get(), "power_pipe"); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/datagen/ModItemModelProvider.java b/common/src/main/java/net/cmr/jurassicrevived/datagen/ModItemModelProvider.java new file mode 100644 index 0000000..c98487e --- /dev/null +++ b/common/src/main/java/net/cmr/jurassicrevived/datagen/ModItemModelProvider.java @@ -0,0 +1,650 @@ +package net.cmr.jurassicrevived.datagen; + +import net.cmr.jurassicrevived.Constants; +import net.cmr.jurassicrevived.block.ModBlocks; +import net.cmr.jurassicrevived.item.ModItems; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; + +public class ModItemModelProvider { + + public interface ItemModelHelper { + void basicItemModel(Item item); // Renamed from basicItem + void spawnEgg(Item item); + void simpleBlockItemModel(Block block); // Renamed from simpleBlockItem + void flowerItem(Block block); + void wallItem(Block block, Block baseBlock); + void buttonItem(Block block, Block baseBlock); + void fenceItem(Block block, Block baseBlock); + void withExistingParentModel(Item item, ResourceLocation parent); // Renamed from withExistingParent + } + + public static void registerItemModels(ItemModelHelper helper) { + helper.spawnEgg(ModItems.APATOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.ALBERTOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.BRACHIOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.CERATOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.COMPSOGNATHUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.DILOPHOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.DIPLODOCUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.FDUCK_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.OURANOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.GALLIMIMUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.INDOMINUS_REX_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.PARASAUROLOPHUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.SPINOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.TRICERATOPS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.TYRANNOSAURUS_REX_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.VELOCIRAPTOR_SPAWN_EGG.get()); + + helper.spawnEgg(ModItems.BARYONYX_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.CARNOTAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.CONCAVENATOR_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.DEINONYCHUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.DISTORTUS_REX_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.EDMONTOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.GIGANOTOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.GUANLONG_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.HERRERASAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.MAJUNGASAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.PROCOMPSOGNATHUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.PROTOCERATOPS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.ARAMBOURGIANIA_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.CEARADACTYLUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.DIMORPHODON_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.GEOSTERNBERGIA_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.GUIDRACO_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.LUDODACTYLUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.MOGANOPTERUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.NYCTOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.PTERANODON_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.PTERODAUSTRO_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.QUETZALCOATLUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.TAPEJARA_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.TROPEOGNATHUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.TUPUXUARA_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.ZHENYUANOPTERUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.RUGOPS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.SHANTUNGOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.STEGOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.STYRACOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.THERIZINOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.CHICKENOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.ALLOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.ALVAREZSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.ANKYLOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.CARCHARODONTOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.CHASMOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.COELOPHYSIS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.COELURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.CORYTHOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.DRYOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.HADROSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.HYPSILOPHODON_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.INDORAPTOR_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.INOSTRANCEVIA_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.LAMBEOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.MAMENCHISAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.METRIACANTHOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.ORNITHOLESTES_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.ORNITHOMIMUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.OVIRAPTOR_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.PACHYCEPHALOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.PROCERATOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.RAJASAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.SEGISAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.TITANOSAURUS_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.TROODON_SPAWN_EGG.get()); + helper.spawnEgg(ModItems.UTAHRAPTOR_SPAWN_EGG.get()); + + helper.basicItemModel(ModItems.FROG_MATERIAL.get()); + helper.basicItemModel(ModItems.FROG_DNA.get()); + + helper.basicItemModel(ModItems.TEST_TUBE.get()); + helper.basicItemModel(ModItems.SYRINGE.get()); + helper.basicItemModel(ModItems.CRUSHED_FOSSIL.get()); + helper.basicItemModel(ModItems.MOSQUITO_IN_AMBER.get()); + helper.basicItemModel(ModItems.FROZEN_LEECH.get()); + helper.basicItemModel(ModItems.CABLE.get()); + helper.basicItemModel(ModItems.SCREEN.get()); + helper.basicItemModel(ModItems.PROCESSOR.get()); + helper.basicItemModel(ModItems.TIRE.get()); + helper.basicItemModel(ModItems.CUTTING_BLADES.get()); + helper.basicItemModel(ModItems.WRENCH.get()); + + //? if <=1.20.1 { + if (ModItems.MAC_N_CHEESE.isPresent()) helper.basicItemModel(ModItems.MAC_N_CHEESE.get()); + if (ModItems.WALNUT_PUMPKIN_PIE.isPresent()) helper.basicItemModel(ModItems.WALNUT_PUMPKIN_PIE.get()); + if (ModItems.BANANA_NUT_COOKIE.isPresent()) helper.basicItemModel(ModItems.BANANA_NUT_COOKIE.get()); + //?} + + helper.basicItemModel(ModItems.APATOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.ALBERTOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.BRACHIOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.CERATOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.COMPSOGNATHUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.DILOPHOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.DIPLODOCUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.GALLIMIMUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.PARASAUROLOPHUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.OURANOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.SPINOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.TRICERATOPS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.TYRANNOSAURUS_REX_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.VELOCIRAPTOR_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.BARYONYX_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.CARNOTAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.CONCAVENATOR_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.DEINONYCHUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.EDMONTOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.GIGANOTOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.GUANLONG_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.HERRERASAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.MAJUNGASAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.PROCOMPSOGNATHUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.PROTOCERATOPS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.RUGOPS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.SHANTUNGOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.STEGOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.STYRACOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.THERIZINOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.ALLOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.ALVAREZSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.ANKYLOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.ARAMBOURGIANIA_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.CARCHARODONTOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.CEARADACTYLUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.CHASMOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.COELOPHYSIS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.COELURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.CORYTHOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.DIMORPHODON_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.DRYOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.GEOSTERNBERGIA_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.GUIDRACO_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.HADROSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.HYPSILOPHODON_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.INOSTRANCEVIA_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.LAMBEOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.LUDODACTYLUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.MAMENCHISAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.METRIACANTHOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.MOGANOPTERUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.NYCTOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.ORNITHOLESTES_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.ORNITHOMIMUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.OVIRAPTOR_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.PACHYCEPHALOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.PROCERATOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.PTERANODON_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.PTERODAUSTRO_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.QUETZALCOATLUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.RAJASAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.SEGISAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.TAPEJARA_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.TITANOSAURUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.TROODON_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.TROPEOGNATHUS_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.TUPUXUARA_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.UTAHRAPTOR_SKULL_FOSSIL.get()); + helper.basicItemModel(ModItems.ZHENYUANOPTERUS_SKULL_FOSSIL.get()); + + helper.basicItemModel(ModItems.FRESH_APATOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_ALBERTOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_BRACHIOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_CERATOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_COMPSOGNATHUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_DILOPHOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_DIPLODOCUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_GALLIMIMUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_INDOMINUS_REX_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_PARASAUROLOPHUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_OURANOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_SPINOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_TRICERATOPS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_TYRANNOSAURUS_REX_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_VELOCIRAPTOR_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_BARYONYX_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_CARNOTAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_CONCAVENATOR_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_DEINONYCHUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_EDMONTOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_GIGANOTOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_GUANLONG_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_HERRERASAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_MAJUNGASAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_PROCOMPSOGNATHUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_PROTOCERATOPS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_RUGOPS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_SHANTUNGOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_STEGOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_STYRACOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_THERIZINOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_DISTORTUS_REX_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_ALLOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_ALVAREZSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_ANKYLOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_ARAMBOURGIANIA_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_CARCHARODONTOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_CEARADACTYLUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_CHASMOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_COELOPHYSIS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_COELURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_CORYTHOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_DIMORPHODON_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_DRYOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_GEOSTERNBERGIA_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_GUIDRACO_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_HADROSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_HYPSILOPHODON_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_INDORAPTOR_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_INOSTRANCEVIA_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_LAMBEOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_LUDODACTYLUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_MAMENCHISAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_METRIACANTHOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_MOGANOPTERUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_NYCTOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_ORNITHOLESTES_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_ORNITHOMIMUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_OVIRAPTOR_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_PACHYCEPHALOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_PROCERATOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_PTERANODON_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_PTERODAUSTRO_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_QUETZALCOATLUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_RAJASAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_SEGISAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_TAPEJARA_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_TITANOSAURUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_TROODON_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_TROPEOGNATHUS_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_TUPUXUARA_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_UTAHRAPTOR_SKULL.get()); + helper.basicItemModel(ModItems.FRESH_ZHENYUANOPTERUS_SKULL.get()); + + helper.basicItemModel(ModItems.APATOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.ALBERTOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.BRACHIOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.CERATOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.COMPSOGNATHUS_TISSUE.get()); + helper.basicItemModel(ModItems.DILOPHOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.DIPLODOCUS_TISSUE.get()); + helper.basicItemModel(ModItems.GALLIMIMUS_TISSUE.get()); + helper.basicItemModel(ModItems.INDOMINUS_REX_TISSUE.get()); + helper.basicItemModel(ModItems.OURANOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.PARASAUROLOPHUS_TISSUE.get()); + helper.basicItemModel(ModItems.SPINOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.TRICERATOPS_TISSUE.get()); + helper.basicItemModel(ModItems.TYRANNOSAURUS_REX_TISSUE.get()); + helper.basicItemModel(ModItems.VELOCIRAPTOR_TISSUE.get()); + helper.basicItemModel(ModItems.BARYONYX_TISSUE.get()); + helper.basicItemModel(ModItems.CARNOTAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.CONCAVENATOR_TISSUE.get()); + helper.basicItemModel(ModItems.DEINONYCHUS_TISSUE.get()); + helper.basicItemModel(ModItems.EDMONTOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.GIGANOTOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.GUANLONG_TISSUE.get()); + helper.basicItemModel(ModItems.HERRERASAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.MAJUNGASAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.PROCOMPSOGNATHUS_TISSUE.get()); + helper.basicItemModel(ModItems.PROTOCERATOPS_TISSUE.get()); + helper.basicItemModel(ModItems.RUGOPS_TISSUE.get()); + helper.basicItemModel(ModItems.SHANTUNGOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.STEGOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.STYRACOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.THERIZINOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.DISTORTUS_REX_TISSUE.get()); + helper.basicItemModel(ModItems.ALLOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.ALVAREZSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.ANKYLOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.ARAMBOURGIANIA_TISSUE.get()); + helper.basicItemModel(ModItems.CARCHARODONTOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.CEARADACTYLUS_TISSUE.get()); + helper.basicItemModel(ModItems.CHASMOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.COELOPHYSIS_TISSUE.get()); + helper.basicItemModel(ModItems.COELURUS_TISSUE.get()); + helper.basicItemModel(ModItems.CORYTHOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.DIMORPHODON_TISSUE.get()); + helper.basicItemModel(ModItems.DRYOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.GEOSTERNBERGIA_TISSUE.get()); + helper.basicItemModel(ModItems.GUIDRACO_TISSUE.get()); + helper.basicItemModel(ModItems.HADROSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.HYPSILOPHODON_TISSUE.get()); + helper.basicItemModel(ModItems.INDORAPTOR_TISSUE.get()); + helper.basicItemModel(ModItems.INOSTRANCEVIA_TISSUE.get()); + helper.basicItemModel(ModItems.LAMBEOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.LUDODACTYLUS_TISSUE.get()); + helper.basicItemModel(ModItems.MAMENCHISAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.METRIACANTHOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.MOGANOPTERUS_TISSUE.get()); + helper.basicItemModel(ModItems.NYCTOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.ORNITHOLESTES_TISSUE.get()); + helper.basicItemModel(ModItems.ORNITHOMIMUS_TISSUE.get()); + helper.basicItemModel(ModItems.OVIRAPTOR_TISSUE.get()); + helper.basicItemModel(ModItems.PACHYCEPHALOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.PROCERATOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.PTERANODON_TISSUE.get()); + helper.basicItemModel(ModItems.PTERODAUSTRO_TISSUE.get()); + helper.basicItemModel(ModItems.QUETZALCOATLUS_TISSUE.get()); + helper.basicItemModel(ModItems.RAJASAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.SEGISAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.TAPEJARA_TISSUE.get()); + helper.basicItemModel(ModItems.TITANOSAURUS_TISSUE.get()); + helper.basicItemModel(ModItems.TROODON_TISSUE.get()); + helper.basicItemModel(ModItems.TROPEOGNATHUS_TISSUE.get()); + helper.basicItemModel(ModItems.TUPUXUARA_TISSUE.get()); + helper.basicItemModel(ModItems.UTAHRAPTOR_TISSUE.get()); + helper.basicItemModel(ModItems.ZHENYUANOPTERUS_TISSUE.get()); + + helper.basicItemModel(ModItems.APATOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.ALBERTOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.BRACHIOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.CERATOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.COMPSOGNATHUS_DNA.get()); + helper.basicItemModel(ModItems.DILOPHOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.DIPLODOCUS_DNA.get()); + helper.basicItemModel(ModItems.GALLIMIMUS_DNA.get()); + helper.basicItemModel(ModItems.INDOMINUS_REX_DNA.get()); + helper.basicItemModel(ModItems.OURANOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.PARASAUROLOPHUS_DNA.get()); + helper.basicItemModel(ModItems.SPINOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.TRICERATOPS_DNA.get()); + helper.basicItemModel(ModItems.TYRANNOSAURUS_REX_DNA.get()); + helper.basicItemModel(ModItems.VELOCIRAPTOR_DNA.get()); + helper.basicItemModel(ModItems.BARYONYX_DNA.get()); + helper.basicItemModel(ModItems.CARNOTAURUS_DNA.get()); + helper.basicItemModel(ModItems.CONCAVENATOR_DNA.get()); + helper.basicItemModel(ModItems.DEINONYCHUS_DNA.get()); + helper.basicItemModel(ModItems.EDMONTOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.GIGANOTOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.GUANLONG_DNA.get()); + helper.basicItemModel(ModItems.HERRERASAURUS_DNA.get()); + helper.basicItemModel(ModItems.MAJUNGASAURUS_DNA.get()); + helper.basicItemModel(ModItems.PROCOMPSOGNATHUS_DNA.get()); + helper.basicItemModel(ModItems.PROTOCERATOPS_DNA.get()); + helper.basicItemModel(ModItems.RUGOPS_DNA.get()); + helper.basicItemModel(ModItems.SHANTUNGOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.STEGOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.STYRACOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.THERIZINOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.DISTORTUS_REX_DNA.get()); + helper.basicItemModel(ModItems.ALLOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.ALVAREZSAURUS_DNA.get()); + helper.basicItemModel(ModItems.ANKYLOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.ARAMBOURGIANIA_DNA.get()); + helper.basicItemModel(ModItems.CARCHARODONTOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.CEARADACTYLUS_DNA.get()); + helper.basicItemModel(ModItems.CHASMOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.COELOPHYSIS_DNA.get()); + helper.basicItemModel(ModItems.COELURUS_DNA.get()); + helper.basicItemModel(ModItems.CORYTHOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.DIMORPHODON_DNA.get()); + helper.basicItemModel(ModItems.DRYOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.GEOSTERNBERGIA_DNA.get()); + helper.basicItemModel(ModItems.GUIDRACO_DNA.get()); + helper.basicItemModel(ModItems.HADROSAURUS_DNA.get()); + helper.basicItemModel(ModItems.HYPSILOPHODON_DNA.get()); + helper.basicItemModel(ModItems.INDORAPTOR_DNA.get()); + helper.basicItemModel(ModItems.INOSTRANCEVIA_DNA.get()); + helper.basicItemModel(ModItems.LAMBEOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.LUDODACTYLUS_DNA.get()); + helper.basicItemModel(ModItems.MAMENCHISAURUS_DNA.get()); + helper.basicItemModel(ModItems.METRIACANTHOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.MOGANOPTERUS_DNA.get()); + helper.basicItemModel(ModItems.NYCTOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.ORNITHOLESTES_DNA.get()); + helper.basicItemModel(ModItems.ORNITHOMIMUS_DNA.get()); + helper.basicItemModel(ModItems.OVIRAPTOR_DNA.get()); + helper.basicItemModel(ModItems.PACHYCEPHALOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.PROCERATOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.PTERANODON_DNA.get()); + helper.basicItemModel(ModItems.PTERODAUSTRO_DNA.get()); + helper.basicItemModel(ModItems.QUETZALCOATLUS_DNA.get()); + helper.basicItemModel(ModItems.RAJASAURUS_DNA.get()); + helper.basicItemModel(ModItems.SEGISAURUS_DNA.get()); + helper.basicItemModel(ModItems.TAPEJARA_DNA.get()); + helper.basicItemModel(ModItems.TITANOSAURUS_DNA.get()); + helper.basicItemModel(ModItems.TROODON_DNA.get()); + helper.basicItemModel(ModItems.TROPEOGNATHUS_DNA.get()); + helper.basicItemModel(ModItems.TUPUXUARA_DNA.get()); + helper.basicItemModel(ModItems.UTAHRAPTOR_DNA.get()); + helper.basicItemModel(ModItems.ZHENYUANOPTERUS_DNA.get()); + + helper.basicItemModel(ModItems.APATOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.ALBERTOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.BRACHIOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.CERATOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.COMPSOGNATHUS_SYRINGE.get()); + helper.basicItemModel(ModItems.DILOPHOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.DIPLODOCUS_SYRINGE.get()); + helper.basicItemModel(ModItems.GALLIMIMUS_SYRINGE.get()); + helper.basicItemModel(ModItems.INDOMINUS_REX_SYRINGE.get()); + helper.basicItemModel(ModItems.OURANOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.PARASAUROLOPHUS_SYRINGE.get()); + helper.basicItemModel(ModItems.SPINOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.TRICERATOPS_SYRINGE.get()); + helper.basicItemModel(ModItems.TYRANNOSAURUS_REX_SYRINGE.get()); + helper.basicItemModel(ModItems.VELOCIRAPTOR_SYRINGE.get()); + helper.basicItemModel(ModItems.BARYONYX_SYRINGE.get()); + helper.basicItemModel(ModItems.CARNOTAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.CONCAVENATOR_SYRINGE.get()); + helper.basicItemModel(ModItems.DEINONYCHUS_SYRINGE.get()); + helper.basicItemModel(ModItems.EDMONTOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.GIGANOTOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.GUANLONG_SYRINGE.get()); + helper.basicItemModel(ModItems.HERRERASAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.MAJUNGASAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.PROCOMPSOGNATHUS_SYRINGE.get()); + helper.basicItemModel(ModItems.PROTOCERATOPS_SYRINGE.get()); + helper.basicItemModel(ModItems.RUGOPS_SYRINGE.get()); + helper.basicItemModel(ModItems.SHANTUNGOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.STEGOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.STYRACOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.THERIZINOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.DISTORTUS_REX_SYRINGE.get()); + helper.basicItemModel(ModItems.ALLOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.ALVAREZSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.ANKYLOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.ARAMBOURGIANIA_SYRINGE.get()); + helper.basicItemModel(ModItems.CARCHARODONTOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.CEARADACTYLUS_SYRINGE.get()); + helper.basicItemModel(ModItems.CHASMOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.COELOPHYSIS_SYRINGE.get()); + helper.basicItemModel(ModItems.COELURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.CORYTHOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.DIMORPHODON_SYRINGE.get()); + helper.basicItemModel(ModItems.DRYOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.GEOSTERNBERGIA_SYRINGE.get()); + helper.basicItemModel(ModItems.GUIDRACO_SYRINGE.get()); + helper.basicItemModel(ModItems.HADROSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.HYPSILOPHODON_SYRINGE.get()); + helper.basicItemModel(ModItems.INDORAPTOR_SYRINGE.get()); + helper.basicItemModel(ModItems.INOSTRANCEVIA_SYRINGE.get()); + helper.basicItemModel(ModItems.LAMBEOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.LUDODACTYLUS_SYRINGE.get()); + helper.basicItemModel(ModItems.MAMENCHISAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.METRIACANTHOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.MOGANOPTERUS_SYRINGE.get()); + helper.basicItemModel(ModItems.NYCTOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.ORNITHOLESTES_SYRINGE.get()); + helper.basicItemModel(ModItems.ORNITHOMIMUS_SYRINGE.get()); + helper.basicItemModel(ModItems.OVIRAPTOR_SYRINGE.get()); + helper.basicItemModel(ModItems.PACHYCEPHALOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.PROCERATOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.PTERANODON_SYRINGE.get()); + helper.basicItemModel(ModItems.PTERODAUSTRO_SYRINGE.get()); + helper.basicItemModel(ModItems.QUETZALCOATLUS_SYRINGE.get()); + helper.basicItemModel(ModItems.RAJASAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.SEGISAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.TAPEJARA_SYRINGE.get()); + helper.basicItemModel(ModItems.TITANOSAURUS_SYRINGE.get()); + helper.basicItemModel(ModItems.TROODON_SYRINGE.get()); + helper.basicItemModel(ModItems.TROPEOGNATHUS_SYRINGE.get()); + helper.basicItemModel(ModItems.TUPUXUARA_SYRINGE.get()); + helper.basicItemModel(ModItems.UTAHRAPTOR_SYRINGE.get()); + helper.basicItemModel(ModItems.ZHENYUANOPTERUS_SYRINGE.get()); + + helper.simpleBlockItemModel(ModBlocks.APATOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.ALBERTOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.BRACHIOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.CERATOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.COMPSOGNATHUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.DILOPHOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.DIPLODOCUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.GALLIMIMUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INDOMINUS_REX_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.OURANOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.PARASAUROLOPHUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.SPINOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.TRICERATOPS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.TYRANNOSAURUS_REX_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.VELOCIRAPTOR_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.BARYONYX_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.CARNOTAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.CONCAVENATOR_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.DEINONYCHUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.EDMONTOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.GIGANOTOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.GUANLONG_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.HERRERASAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.MAJUNGASAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.PROCOMPSOGNATHUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.PROTOCERATOPS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.RUGOPS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.SHANTUNGOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.STEGOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.STYRACOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.THERIZINOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.DISTORTUS_REX_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.ALLOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.ALVAREZSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.ANKYLOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.ARAMBOURGIANIA_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.CARCHARODONTOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.CEARADACTYLUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.CHASMOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.COELOPHYSIS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.COELURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.CORYTHOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.DIMORPHODON_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.DRYOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.GEOSTERNBERGIA_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.GUIDRACO_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.HADROSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.HYPSILOPHODON_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INDORAPTOR_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INOSTRANCEVIA_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.LAMBEOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.LUDODACTYLUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.MAMENCHISAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.METRIACANTHOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.MOGANOPTERUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.NYCTOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.ORNITHOLESTES_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.ORNITHOMIMUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.OVIRAPTOR_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.PACHYCEPHALOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.PROCERATOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.PTERANODON_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.PTERODAUSTRO_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.QUETZALCOATLUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.RAJASAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.SEGISAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.TAPEJARA_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.TITANOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.TROODON_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.TROPEOGNATHUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.TUPUXUARA_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.UTAHRAPTOR_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.ZHENYUANOPTERUS_EGG.get()); + + helper.basicItemModel(ModBlocks.LOW_SECURITY_FENCE_POLE.get().asItem()); + helper.basicItemModel(ModBlocks.LOW_SECURITY_FENCE_WIRE.get().asItem()); + helper.basicItemModel(ModBlocks.MEDIUM_SECURITY_FENCE_POLE.get().asItem()); + helper.basicItemModel(ModBlocks.MEDIUM_SECURITY_FENCE_WIRE.get().asItem()); + + helper.wallItem(ModBlocks.GYPSUM_BRICK_WALL.get(), ModBlocks.GYPSUM_STONE_BRICKS.get()); + helper.wallItem(ModBlocks.REINFORCED_BRICK_WALL.get(), ModBlocks.REINFORCED_STONE_BRICKS.get()); + + helper.simpleBlockItemModel(ModBlocks.INCUBATED_BRACHIOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_CERATOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_DILOPHOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_TYRANNOSAURUS_REX_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_TRICERATOPS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_SPINOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_OURANOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_PARASAUROLOPHUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_INDOMINUS_REX_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_GALLIMIMUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_DIPLODOCUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_COMPSOGNATHUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_VELOCIRAPTOR_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_ALBERTOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_APATOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_BARYONYX_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_CARNOTAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_CONCAVENATOR_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_DEINONYCHUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_EDMONTOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_GIGANOTOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_GUANLONG_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_HERRERASAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_MAJUNGASAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_PROCOMPSOGNATHUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_PROTOCERATOPS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_RUGOPS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_SHANTUNGOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_STEGOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_STYRACOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_THERIZINOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_DISTORTUS_REX_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_ALLOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_ALVAREZSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_ANKYLOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_ARAMBOURGIANIA_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_CARCHARODONTOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_CEARADACTYLUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_CHASMOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_COELOPHYSIS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_COELURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_CORYTHOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_DIMORPHODON_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_DRYOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_GEOSTERNBERGIA_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_GUIDRACO_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_HADROSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_HYPSILOPHODON_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_INDORAPTOR_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_INOSTRANCEVIA_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_LAMBEOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_LUDODACTYLUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_MAMENCHISAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_METRIACANTHOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_MOGANOPTERUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_NYCTOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_ORNITHOLESTES_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_ORNITHOMIMUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_OVIRAPTOR_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_PACHYCEPHALOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_PROCERATOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_PTERANODON_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_PTERODAUSTRO_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_QUETZALCOATLUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_RAJASAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_SEGISAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_TAPEJARA_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_TITANOSAURUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_TROODON_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_TROPEOGNATHUS_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_TUPUXUARA_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_UTAHRAPTOR_EGG.get()); + helper.simpleBlockItemModel(ModBlocks.INCUBATED_ZHENYUANOPTERUS_EGG.get()); + + if (ModBlocks.ROYAL_FERN.isPresent()) helper.flowerItem(ModBlocks.ROYAL_FERN.get()); + if (ModBlocks.HORSETAIL_FERN.isPresent()) helper.flowerItem(ModBlocks.HORSETAIL_FERN.get()); + if (ModBlocks.WESTERN_SWORD_FERN.isPresent()) helper.flowerItem(ModBlocks.WESTERN_SWORD_FERN.get()); + if (ModBlocks.ONYCHIOPSIS.isPresent()) helper.flowerItem(ModBlocks.ONYCHIOPSIS.get()); + } +} diff --git a/fabricmc/build.gradle.kts b/fabricmc/build.gradle.kts index d4e2c3b..4102ab7 100644 --- a/fabricmc/build.gradle.kts +++ b/fabricmc/build.gradle.kts @@ -87,21 +87,41 @@ loom { common.project.file("../../src/main/resources/accesswideners/${commonMod.minecraft_version}-${mod.id}.accesswidener") runs { - getByName("client") { + named("client") { client() configName = "Fabric Client" ideConfigGenerated(true) } - getByName("server") { + named("server") { server() configName = "Fabric Server" ideConfigGenerated(true) } + create("datagen") { + server() + configName = "Fabric Data Generation" + ideConfigGenerated(true) + vmArg("-Dfabric-api.datagen") + vmArg("-Dfabric-api.datagen.output-dir=${file("src/main/generated")}") + vmArg("-Dfabric-api.datagen.modid=${commonMod.id}") + runDir("build/datagen") + // Ensure directory exists + file("build/datagen").mkdirs() + } + } +} + +sourceSets { + main { + resources { + srcDir("src/main/generated") + } } } tasks.named("processResources") { inputs.property("targetBytecode", targetBytecode) + duplicatesStrategy = DuplicatesStrategy.EXCLUDE filesMatching("fabric.mod.json") { expand(mapOf( diff --git a/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java b/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java new file mode 100644 index 0000000..ddb06f6 --- /dev/null +++ b/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java @@ -0,0 +1,13 @@ +package net.cmr.jurassicrevived.datagen; + +import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; +import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; + +public class DataGenerators implements DataGeneratorEntrypoint { + + @Override + public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { + FabricDataGenerator.Pack pack = fabricDataGenerator.createPack(); + pack.addProvider(FabricModModelProvider::new); + } +} diff --git a/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricModModelProvider.java b/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricModModelProvider.java new file mode 100644 index 0000000..98ae69a --- /dev/null +++ b/fabricmc/src/main/java/net/cmr/jurassicrevived/datagen/FabricModModelProvider.java @@ -0,0 +1,250 @@ +package net.cmr.jurassicrevived.datagen; + +import net.cmr.jurassicrevived.Constants; +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; +import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider; +import net.minecraft.data.models.BlockModelGenerators; +import net.minecraft.data.models.ItemModelGenerators; +import net.minecraft.data.models.blockstates.MultiVariantGenerator; +import net.minecraft.data.models.blockstates.Variant; +import net.minecraft.data.models.blockstates.VariantProperties; +import net.minecraft.data.models.model.ModelLocationUtils; +import net.minecraft.data.models.model.ModelTemplates; +import net.minecraft.data.models.model.TextureMapping; +import net.minecraft.data.models.model.TextureSlot; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.StairBlock; +import net.minecraft.world.level.block.WallBlock; +import net.minecraft.world.level.block.state.properties.BooleanProperty; + +public class FabricModModelProvider extends FabricModelProvider implements ModBlockStateProvider.BlockStateHelper, ModItemModelProvider.ItemModelHelper { + + private BlockModelGenerators blockStateGenerator; + private ItemModelGenerators itemModelGenerator; + + public FabricModModelProvider(FabricDataOutput output) { + super(output); + } + + @Override + public void generateBlockStateModels(BlockModelGenerators blockStateGenerator) { + this.blockStateGenerator = blockStateGenerator; + ModBlockStateProvider.registerBlockStates(this); + } + + @Override + public void generateItemModels(ItemModelGenerators itemModelGenerator) { + this.itemModelGenerator = itemModelGenerator; + ModItemModelProvider.registerItemModels(this); + } + + // Helper to check mode + private boolean isGeneratingBlocks() { + return blockStateGenerator != null && itemModelGenerator == null; + } + + private boolean isGeneratingItems() { + return itemModelGenerator != null; + } + + // --- BlockStateHelper Implementation --- + + @Override + public void simpleBlock(Block block, ResourceLocation texture) { + if (isGeneratingBlocks()) { + TextureMapping mapping = new TextureMapping().put(TextureSlot.ALL, texture); + ResourceLocation modelLocation = ModelTemplates.CUBE_ALL.create(block, mapping, blockStateGenerator.modelOutput); + blockStateGenerator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, modelLocation)); + } + } + + @Override + public void simpleBlock(Block block, String modelName, ResourceLocation texture) { + if (isGeneratingBlocks()) { + TextureMapping mapping = new TextureMapping().put(TextureSlot.ALL, texture); + ResourceLocation modelLocation = ModelTemplates.CUBE_ALL.create(block, mapping, blockStateGenerator.modelOutput); + blockStateGenerator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, modelLocation)); + } + } + + @Override + public void simpleBlockItem(Block block, ResourceLocation model) { + // This is called from ModBlockStateProvider, intended to register item models for blocks. + // Since we are merging, we can potentially handle this here if we are in item generation mode? + // But ModBlockStateProvider calls this during registerBlockStates, which is called during generateBlockStateModels. + // So we are in block generation mode. + // We can't generate item models here because itemModelGenerator is null. + // We should probably ignore this here and rely on ModItemModelProvider to register block items? + // OR, we can store these requests and run them later? + // But ModItemModelProvider seems to have its own logic. + // Let's assume ModItemModelProvider handles all item models, including block items. + } + + @Override + public void simpleBlockWithExistingModel(Block block, ResourceLocation model) { + if (isGeneratingBlocks()) { + blockStateGenerator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, model)); + } + } + + @Override + public void crossBlock(Block block, ResourceLocation texture) { + if (isGeneratingBlocks()) { + TextureMapping mapping = new TextureMapping().put(TextureSlot.CROSS, texture); + ResourceLocation model = ModelTemplates.CROSS.create(block, mapping, blockStateGenerator.modelOutput); + blockStateGenerator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, model)); + } + } + + @Override + public void pottedPlantBlock(Block block, ResourceLocation plantTexture) { + if (isGeneratingBlocks()) { + TextureSlot flowerPotSlot = TextureSlot.create("flowerpot"); + ResourceLocation flowerPotBlock = Constants.r2("minecraft:block/flower_pot"); + TextureMapping mapping = new TextureMapping().put(TextureSlot.PLANT, plantTexture).put(flowerPotSlot, flowerPotBlock); + ResourceLocation model = ModelTemplates.FLOWER_POT_CROSS.create(block, mapping, blockStateGenerator.modelOutput); + blockStateGenerator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, model)); + } + } + + @Override + public void blockWithItem(Block block) { + if (isGeneratingBlocks()) { + blockStateGenerator.createTrivialCube(block); + } + } + + @Override + public void horizontalFacingWithItem(Block block) { + if (isGeneratingBlocks()) { + TextureMapping mapping = TextureMapping.cube(block); + ResourceLocation modelLoc = ModelTemplates.CUBE_ALL.create(block, mapping, blockStateGenerator.modelOutput); + blockStateGenerator.blockStateOutput.accept(MultiVariantGenerator.multiVariant(block, Variant.variant().with(VariantProperties.MODEL, modelLoc)).with(BlockModelGenerators.createHorizontalFacingDispatch())); + } + } + + @Override + public void horizontalFacingLitWithItem(Block block) { + if (isGeneratingBlocks()) { + // Placeholder implementation + ResourceLocation model = ModelLocationUtils.getModelLocation(block); + blockStateGenerator.blockStateOutput.accept(MultiVariantGenerator.multiVariant(block, Variant.variant().with(VariantProperties.MODEL, model)).with(BlockModelGenerators.createHorizontalFacingDispatch())); + } + } + + @Override + public void horizontalFacingLitNoBlockstateWithItem(Block block) { + if (isGeneratingBlocks()) { + ResourceLocation model = ModelLocationUtils.getModelLocation(block); + blockStateGenerator.blockStateOutput.accept(MultiVariantGenerator.multiVariant(block, Variant.variant().with(VariantProperties.MODEL, model)).with(BlockModelGenerators.createHorizontalFacingDispatch())); + } + } + + @Override + public void eggLike(Block block) { + if (isGeneratingBlocks()) { + // Placeholder + } + } + + @Override + public void pipeMultipartWithItem(Block block, String modelBaseName) { + if (isGeneratingBlocks()) { + // Placeholder + } + } + + @Override + public void customFenceMultipart(Block block, String base, String straight, String diag, BooleanProperty ne, BooleanProperty se, BooleanProperty sw, BooleanProperty nw) { + if (isGeneratingBlocks()) { + // Placeholder + } + } + + @Override + public void stairsBlock(StairBlock block, ResourceLocation texture) { + if (isGeneratingBlocks()) { + // Placeholder + } + } + + @Override + public void slabBlock(SlabBlock block, ResourceLocation texture, ResourceLocation sideTexture) { + if (isGeneratingBlocks()) { + // Placeholder + } + } + + @Override + public void wallBlock(WallBlock block, ResourceLocation texture) { + if (isGeneratingBlocks()) { + // Placeholder + } + } + + @Override + public ResourceLocation key(Block block) { + return net.minecraft.core.registries.BuiltInRegistries.BLOCK.getKey(block); + } + + // --- ItemModelHelper Implementation --- + + @Override + public void basicItemModel(Item item) { + if (isGeneratingItems()) { + itemModelGenerator.generateFlatItem(item, ModelTemplates.FLAT_ITEM); + } + } + + @Override + public void spawnEgg(Item item) { + if (isGeneratingItems()) { + itemModelGenerator.generateFlatItem(item, ModelTemplates.FLAT_ITEM); + } + } + + @Override + public void simpleBlockItemModel(Block block) { + if (isGeneratingItems()) { + // Placeholder + } + } + + @Override + public void flowerItem(Block block) { + if (isGeneratingItems()) { + itemModelGenerator.generateFlatItem(block.asItem(), ModelTemplates.FLAT_ITEM); + } + } + + @Override + public void wallItem(Block block, Block baseBlock) { + if (isGeneratingItems()) { + // Placeholder + } + } + + @Override + public void buttonItem(Block block, Block baseBlock) { + if (isGeneratingItems()) { + // Placeholder + } + } + + @Override + public void fenceItem(Block block, Block baseBlock) { + if (isGeneratingItems()) { + // Placeholder + } + } + + @Override + public void withExistingParentModel(Item item, ResourceLocation parent) { + if (isGeneratingItems()) { + // Placeholder + } + } +} diff --git a/fabricmc/src/main/resources/fabric.mod.json b/fabricmc/src/main/resources/fabric.mod.json index 0950819..eb8db10 100644 --- a/fabricmc/src/main/resources/fabric.mod.json +++ b/fabricmc/src/main/resources/fabric.mod.json @@ -23,6 +23,9 @@ ], "modmenu": [ "net.cmr.jurassicrevived.client.config.JRModMenuIntegration" + ], + "fabric-datagen": [ + "net.cmr.jurassicrevived.datagen.DataGenerators" ] }, "mixins": [ diff --git a/minecraftforge/legacy.gradle.kts b/minecraftforge/legacy.gradle.kts index c739077..66152ea 100644 --- a/minecraftforge/legacy.gradle.kts +++ b/minecraftforge/legacy.gradle.kts @@ -80,6 +80,13 @@ legacyForge { data() ideName = "MinecraftForge Data (${project.path})" logLevel = Level.TRACE + programArguments.addAll( + "--mod", commonMod.id, + "--all", + "--output", file("src/generated/resources").absolutePath, + "--existing", file("src/main/resources").absolutePath, + "--existing", project(":common").file("src/main/resources").absolutePath + ) } register("server") { server() diff --git a/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java new file mode 100644 index 0000000..6c4d0cc --- /dev/null +++ b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java @@ -0,0 +1,23 @@ +package net.cmr.jurassicrevived.datagen; + +import net.cmr.jurassicrevived.Constants; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.data.event.GatherDataEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = Constants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class DataGenerators { + + @SubscribeEvent + public static void gatherData(GatherDataEvent event) { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + generator.addProvider(event.includeClient(), new ForgeBlockStateProvider(packOutput, existingFileHelper)); + generator.addProvider(event.includeClient(), new ForgeItemModelProvider(packOutput, existingFileHelper)); + } +} diff --git a/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeBlockStateProvider.java b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeBlockStateProvider.java new file mode 100644 index 0000000..cc636a3 --- /dev/null +++ b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeBlockStateProvider.java @@ -0,0 +1,271 @@ +package net.cmr.jurassicrevived.datagen; + +import net.cmr.jurassicrevived.Constants; +import net.cmr.jurassicrevived.block.custom.PipeBlock; +import net.minecraft.core.Direction; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.StairBlock; +import net.minecraft.world.level.block.WallBlock; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraftforge.client.model.generators.BlockStateProvider; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.client.model.generators.MultiPartBlockStateBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; + +public class ForgeBlockStateProvider extends BlockStateProvider implements ModBlockStateProvider.BlockStateHelper { + + public ForgeBlockStateProvider(PackOutput output, ExistingFileHelper exFileHelper) { + super(output, Constants.MOD_ID, exFileHelper); + } + + @Override + protected void registerStatesAndModels() { + ModBlockStateProvider.registerBlockStates(this); + } + + @Override + public void simpleBlock(Block block, ResourceLocation texture) { + super.simpleBlock(block, models().cubeAll(name(block), texture)); + } + + @Override + public void simpleBlock(Block block, String modelName, ResourceLocation texture) { + super.simpleBlock(block, models().cubeAll(modelName, texture)); + } + + @Override + public void simpleBlockItem(Block block, ResourceLocation model) { + super.simpleBlockItem(block, new ModelFile.UncheckedModelFile(model)); + } + + @Override + public void simpleBlockWithExistingModel(Block block, ResourceLocation model) { + ModelFile modelFile = new ModelFile.UncheckedModelFile(model); + super.simpleBlock(block, modelFile); + super.simpleBlockItem(block, modelFile); + } + + @Override + public void crossBlock(Block block, ResourceLocation texture) { + super.simpleBlock(block, models().cross(name(block), texture).renderType("cutout")); + } + + @Override + public void pottedPlantBlock(Block block, ResourceLocation plantTexture) { + super.simpleBlock(block, models().singleTexture(name(block), ResourceLocation.parse("flower_pot_cross"), "plant", plantTexture).renderType("cutout")); + } + + @Override + public void blockWithItem(Block block) { + super.simpleBlockWithItem(block, models().cubeAll(name(block), blockTexture(block))); + } + + @Override + public void horizontalFacingWithItem(Block block) { + ModelFile model = new ModelFile.UncheckedModelFile(modLoc("block/" + name(block))); + horizontalBlock(block, model); + simpleBlockItem(block, model); + } + + @Override + public void horizontalFacingLitWithItem(Block block) { + String base = name(block); + ModelFile unlit = new ModelFile.UncheckedModelFile(modLoc("block/" + base)); + ModelFile lit = new ModelFile.UncheckedModelFile(modLoc("block/" + base + "_lit")); + + getVariantBuilder(block) + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.NORTH).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(180).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.SOUTH).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(0).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.WEST).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(90).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.EAST).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(270).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.NORTH).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(lit).rotationY(180).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.SOUTH).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(lit).rotationY(0).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.WEST).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(lit).rotationY(90).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.EAST).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(lit).rotationY(270).addModel(); + + simpleBlockItem(block, unlit); + } + + @Override + public void horizontalFacingLitNoBlockstateWithItem(Block block) { + String base = name(block); + ModelFile unlit = new ModelFile.UncheckedModelFile(modLoc("block/" + base)); + + getVariantBuilder(block) + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.NORTH).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(180).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.SOUTH).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(0).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.WEST).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(90).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.EAST).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(270).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.NORTH).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(unlit).rotationY(180).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.SOUTH).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(unlit).rotationY(0).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.WEST).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(unlit).rotationY(90).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.EAST).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(unlit).rotationY(270).addModel(); + simpleBlockItem(block, unlit); + } + + @Override + public void eggLike(Block block) { + ModelFile eggModel = new ModelFile.UncheckedModelFile(modLoc("block/egg")); + super.simpleBlock(block, eggModel); + } + + @Override + public void pipeMultipartWithItem(Block block, String modelBaseName) { + var multipart = getMultipartBuilder(block); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + modelBaseName))) + .addModel() + .end(); + + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.UP, PipeBlock.ConnectionType.PIPE, 90, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.DOWN, PipeBlock.ConnectionType.PIPE, 270, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.NORTH, PipeBlock.ConnectionType.PIPE, 0, 180); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.EAST, PipeBlock.ConnectionType.PIPE, 0, 270); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.SOUTH, PipeBlock.ConnectionType.PIPE, 0, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.WEST, PipeBlock.ConnectionType.PIPE, 0, 90); + + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.UP, PipeBlock.ConnectionType.CONNECTOR, 90, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.DOWN, PipeBlock.ConnectionType.CONNECTOR, 270, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.NORTH, PipeBlock.ConnectionType.CONNECTOR, 0, 180); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.EAST, PipeBlock.ConnectionType.CONNECTOR, 0, 270); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.SOUTH, PipeBlock.ConnectionType.CONNECTOR, 0, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.WEST, PipeBlock.ConnectionType.CONNECTOR, 0, 90); + + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.UP, PipeBlock.ConnectionType.CONNECTOR_PULL, 90, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.DOWN, PipeBlock.ConnectionType.CONNECTOR_PULL, 270, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.NORTH, PipeBlock.ConnectionType.CONNECTOR_PULL, 0, 180); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.EAST, PipeBlock.ConnectionType.CONNECTOR_PULL, 0, 270); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.SOUTH, PipeBlock.ConnectionType.CONNECTOR_PULL, 0, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.WEST, PipeBlock.ConnectionType.CONNECTOR_PULL, 0, 90); + + ModelFile itemParent = new ModelFile.UncheckedModelFile(modLoc("block/" + modelBaseName)); + simpleBlockItem(block, itemParent); + } + + private void addDirectionalEnumPart(MultiPartBlockStateBuilder multipart, + String modelPath, + EnumProperty prop, + PipeBlock.ConnectionType value, + int rotX, + int rotY) { + multipart.part() + .modelFile(models().getExistingFile(modLoc(modelPath))) + .rotationX(rotX) + .rotationY(rotY) + .addModel() + .condition(prop, value) + .end(); + } + + @Override + public void customFenceMultipart(Block block, String baseModelName, String straightArmModelName, String diagonalArmModelName, BooleanProperty neProp, BooleanProperty seProp, BooleanProperty swProp, BooleanProperty nwProp) { + var multipart = getMultipartBuilder(block); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + baseModelName))) + .addModel() + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + straightArmModelName))) + .rotationY(0) + .addModel() + .condition(BlockStateProperties.NORTH, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + straightArmModelName))) + .rotationY(90) + .addModel() + .condition(BlockStateProperties.EAST, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + straightArmModelName))) + .rotationY(180) + .addModel() + .condition(BlockStateProperties.SOUTH, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + straightArmModelName))) + .rotationY(270) + .addModel() + .condition(BlockStateProperties.WEST, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + diagonalArmModelName))) + .rotationY(90) + .addModel() + .condition(neProp, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + diagonalArmModelName))) + .rotationY(180) + .addModel() + .condition(seProp, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + diagonalArmModelName))) + .rotationY(270) + .addModel() + .condition(swProp, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + diagonalArmModelName))) + .rotationY(0) + .addModel() + .condition(nwProp, true) + .end(); + } + + @Override + public void stairsBlock(StairBlock block, ResourceLocation texture) { + super.stairsBlock(block, texture); + } + + @Override + public void slabBlock(SlabBlock block, ResourceLocation texture, ResourceLocation sideTexture) { + super.slabBlock(block, texture, sideTexture); + } + + @Override + public void wallBlock(WallBlock block, ResourceLocation texture) { + super.wallBlock(block, texture); + } + + private String name(Block block) { + return key(block).getPath(); + } + + @Override + public ResourceLocation key(Block block) { + return net.minecraft.core.registries.BuiltInRegistries.BLOCK.getKey(block); + } +} diff --git a/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeItemModelProvider.java b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeItemModelProvider.java new file mode 100644 index 0000000..bc17579 --- /dev/null +++ b/minecraftforge/src/main/java/net/cmr/jurassicrevived/datagen/ForgeItemModelProvider.java @@ -0,0 +1,80 @@ +package net.cmr.jurassicrevived.datagen; + +import net.cmr.jurassicrevived.Constants; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.common.data.ExistingFileHelper; + +public class ForgeItemModelProvider extends ItemModelProvider implements ModItemModelProvider.ItemModelHelper { + + public ForgeItemModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) { + super(output, Constants.MOD_ID, existingFileHelper); + } + + @Override + protected void registerModels() { + ModItemModelProvider.registerItemModels(this); + } + + @Override + public ItemModelBuilder basicItem(Item item) { + return super.basicItem(item); + } + + @Override + public void basicItemModel(Item item) { + super.basicItem(item); + } + + @Override + public void spawnEgg(Item item) { + withExistingParent(name(item), mcLoc("item/template_spawn_egg")); + } + + @Override + public void simpleBlockItemModel(Block block) { + withExistingParent(name(block), mcLoc("item/generated")) + .texture("layer0", modLoc("block/" + name(block))); + } + + @Override + public void flowerItem(Block block) { + withExistingParent(name(block), mcLoc("item/generated")) + .texture("layer0", modLoc("block/" + name(block))); + } + + @Override + public void wallItem(Block block, Block baseBlock) { + withExistingParent(name(block), mcLoc("block/wall_inventory")) + .texture("wall", modLoc("block/" + name(baseBlock))); + } + + @Override + public void buttonItem(Block block, Block baseBlock) { + withExistingParent(name(block), mcLoc("block/button_inventory")) + .texture("texture", modLoc("block/" + name(baseBlock))); + } + + @Override + public void fenceItem(Block block, Block baseBlock) { + withExistingParent(name(block), mcLoc("block/fence_inventory")) + .texture("texture", modLoc("block/" + name(baseBlock))); + } + + @Override + public void withExistingParentModel(Item item, ResourceLocation parent) { + super.withExistingParent(name(item), parent); + } + + private String name(Item item) { + return net.minecraft.core.registries.BuiltInRegistries.ITEM.getKey(item).getPath(); + } + + private String name(Block block) { + return net.minecraft.core.registries.BuiltInRegistries.BLOCK.getKey(block).getPath(); + } +} diff --git a/neoforge/build.gradle.kts b/neoforge/build.gradle.kts index 3dab8d8..bbbbf42 100644 --- a/neoforge/build.gradle.kts +++ b/neoforge/build.gradle.kts @@ -84,6 +84,13 @@ neoForge { register("data") { data() ideName = "NeoForge Data (${project.path})" + programArguments.addAll( + "--mod", commonMod.id, + "--all", + "--output", file("src/generated/resources").absolutePath, + "--existing", file("src/main/resources").absolutePath, + "--existing", project(":common").file("src/main/resources").absolutePath + ) } } register("server") { diff --git a/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java new file mode 100644 index 0000000..58f653b --- /dev/null +++ b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/DataGenerators.java @@ -0,0 +1,23 @@ +package net.cmr.jurassicrevived.datagen; + +import net.cmr.jurassicrevived.Constants; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.data.event.GatherDataEvent; + +@EventBusSubscriber(modid = Constants.MOD_ID) +public class DataGenerators { + + @SubscribeEvent + public static void gatherData(GatherDataEvent event) { + DataGenerator generator = event.getGenerator(); + PackOutput packOutput = generator.getPackOutput(); + ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); + + generator.addProvider(event.includeClient(), new NeoForgeBlockStateProvider(packOutput, existingFileHelper)); + generator.addProvider(event.includeClient(), new NeoForgeItemModelProvider(packOutput, existingFileHelper)); + } +} diff --git a/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeBlockStateProvider.java b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeBlockStateProvider.java new file mode 100644 index 0000000..bdf209d --- /dev/null +++ b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeBlockStateProvider.java @@ -0,0 +1,271 @@ +package net.cmr.jurassicrevived.datagen; + +import net.cmr.jurassicrevived.Constants; +import net.cmr.jurassicrevived.block.custom.PipeBlock; +import net.minecraft.core.Direction; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.StairBlock; +import net.minecraft.world.level.block.WallBlock; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.neoforged.neoforge.client.model.generators.BlockStateProvider; +import net.neoforged.neoforge.client.model.generators.ModelFile; +import net.neoforged.neoforge.client.model.generators.MultiPartBlockStateBuilder; +import net.neoforged.neoforge.common.data.ExistingFileHelper; + +public class NeoForgeBlockStateProvider extends BlockStateProvider implements ModBlockStateProvider.BlockStateHelper { + + public NeoForgeBlockStateProvider(PackOutput output, ExistingFileHelper exFileHelper) { + super(output, Constants.MOD_ID, exFileHelper); + } + + @Override + protected void registerStatesAndModels() { + ModBlockStateProvider.registerBlockStates(this); + } + + @Override + public void simpleBlock(Block block, ResourceLocation texture) { + super.simpleBlock(block, models().cubeAll(name(block), texture)); + } + + @Override + public void simpleBlock(Block block, String modelName, ResourceLocation texture) { + super.simpleBlock(block, models().cubeAll(modelName, texture)); + } + + @Override + public void simpleBlockItem(Block block, ResourceLocation model) { + super.simpleBlockItem(block, new ModelFile.UncheckedModelFile(model)); + } + + @Override + public void simpleBlockWithExistingModel(Block block, ResourceLocation model) { + ModelFile modelFile = new ModelFile.UncheckedModelFile(model); + super.simpleBlock(block, modelFile); + super.simpleBlockItem(block, modelFile); + } + + @Override + public void crossBlock(Block block, ResourceLocation texture) { + super.simpleBlock(block, models().cross(name(block), texture).renderType("cutout")); + } + + @Override + public void pottedPlantBlock(Block block, ResourceLocation plantTexture) { + super.simpleBlock(block, models().singleTexture(name(block), ResourceLocation.parse("flower_pot_cross"), "plant", plantTexture).renderType("cutout")); + } + + @Override + public void blockWithItem(Block block) { + super.simpleBlockWithItem(block, models().cubeAll(name(block), blockTexture(block))); + } + + @Override + public void horizontalFacingWithItem(Block block) { + ModelFile model = new ModelFile.UncheckedModelFile(modLoc("block/" + name(block))); + horizontalBlock(block, model); + simpleBlockItem(block, model); + } + + @Override + public void horizontalFacingLitWithItem(Block block) { + String base = name(block); + ModelFile unlit = new ModelFile.UncheckedModelFile(modLoc("block/" + base)); + ModelFile lit = new ModelFile.UncheckedModelFile(modLoc("block/" + base + "_lit")); + + getVariantBuilder(block) + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.NORTH).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(180).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.SOUTH).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(0).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.WEST).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(90).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.EAST).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(270).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.NORTH).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(lit).rotationY(180).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.SOUTH).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(lit).rotationY(0).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.WEST).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(lit).rotationY(90).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.EAST).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(lit).rotationY(270).addModel(); + + simpleBlockItem(block, unlit); + } + + @Override + public void horizontalFacingLitNoBlockstateWithItem(Block block) { + String base = name(block); + ModelFile unlit = new ModelFile.UncheckedModelFile(modLoc("block/" + base)); + + getVariantBuilder(block) + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.NORTH).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(180).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.SOUTH).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(0).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.WEST).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(90).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.EAST).with(BlockStateProperties.LIT, false) + .modelForState().modelFile(unlit).rotationY(270).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.NORTH).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(unlit).rotationY(180).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.SOUTH).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(unlit).rotationY(0).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.WEST).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(unlit).rotationY(90).addModel() + .partialState().with(BlockStateProperties.HORIZONTAL_FACING, Direction.EAST).with(BlockStateProperties.LIT, true) + .modelForState().modelFile(unlit).rotationY(270).addModel(); + simpleBlockItem(block, unlit); + } + + @Override + public void eggLike(Block block) { + ModelFile eggModel = new ModelFile.UncheckedModelFile(modLoc("block/egg")); + super.simpleBlock(block, eggModel); + } + + @Override + public void pipeMultipartWithItem(Block block, String modelBaseName) { + var multipart = getMultipartBuilder(block); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + modelBaseName))) + .addModel() + .end(); + + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.UP, PipeBlock.ConnectionType.PIPE, 90, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.DOWN, PipeBlock.ConnectionType.PIPE, 270, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.NORTH, PipeBlock.ConnectionType.PIPE, 0, 180); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.EAST, PipeBlock.ConnectionType.PIPE, 0, 270); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.SOUTH, PipeBlock.ConnectionType.PIPE, 0, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_interchange", PipeBlock.WEST, PipeBlock.ConnectionType.PIPE, 0, 90); + + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.UP, PipeBlock.ConnectionType.CONNECTOR, 90, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.DOWN, PipeBlock.ConnectionType.CONNECTOR, 270, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.NORTH, PipeBlock.ConnectionType.CONNECTOR, 0, 180); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.EAST, PipeBlock.ConnectionType.CONNECTOR, 0, 270); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.SOUTH, PipeBlock.ConnectionType.CONNECTOR, 0, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector", PipeBlock.WEST, PipeBlock.ConnectionType.CONNECTOR, 0, 90); + + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.UP, PipeBlock.ConnectionType.CONNECTOR_PULL, 90, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.DOWN, PipeBlock.ConnectionType.CONNECTOR_PULL, 270, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.NORTH, PipeBlock.ConnectionType.CONNECTOR_PULL, 0, 180); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.EAST, PipeBlock.ConnectionType.CONNECTOR_PULL, 0, 270); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.SOUTH, PipeBlock.ConnectionType.CONNECTOR_PULL, 0, 0); + addDirectionalEnumPart(multipart, "block/" + modelBaseName + "_connector_pull", PipeBlock.WEST, PipeBlock.ConnectionType.CONNECTOR_PULL, 0, 90); + + ModelFile itemParent = new ModelFile.UncheckedModelFile(modLoc("block/" + modelBaseName)); + simpleBlockItem(block, itemParent); + } + + private void addDirectionalEnumPart(MultiPartBlockStateBuilder multipart, + String modelPath, + EnumProperty prop, + PipeBlock.ConnectionType value, + int rotX, + int rotY) { + multipart.part() + .modelFile(models().getExistingFile(modLoc(modelPath))) + .rotationX(rotX) + .rotationY(rotY) + .addModel() + .condition(prop, value) + .end(); + } + + @Override + public void customFenceMultipart(Block block, String baseModelName, String straightArmModelName, String diagonalArmModelName, BooleanProperty neProp, BooleanProperty seProp, BooleanProperty swProp, BooleanProperty nwProp) { + var multipart = getMultipartBuilder(block); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + baseModelName))) + .addModel() + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + straightArmModelName))) + .rotationY(0) + .addModel() + .condition(BlockStateProperties.NORTH, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + straightArmModelName))) + .rotationY(90) + .addModel() + .condition(BlockStateProperties.EAST, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + straightArmModelName))) + .rotationY(180) + .addModel() + .condition(BlockStateProperties.SOUTH, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + straightArmModelName))) + .rotationY(270) + .addModel() + .condition(BlockStateProperties.WEST, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + diagonalArmModelName))) + .rotationY(90) + .addModel() + .condition(neProp, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + diagonalArmModelName))) + .rotationY(180) + .addModel() + .condition(seProp, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + diagonalArmModelName))) + .rotationY(270) + .addModel() + .condition(swProp, true) + .end(); + + multipart.part() + .modelFile(models().getExistingFile(modLoc("block/" + diagonalArmModelName))) + .rotationY(0) + .addModel() + .condition(nwProp, true) + .end(); + } + + @Override + public void stairsBlock(StairBlock block, ResourceLocation texture) { + super.stairsBlock(block, texture); + } + + @Override + public void slabBlock(SlabBlock block, ResourceLocation texture, ResourceLocation sideTexture) { + super.slabBlock(block, texture, sideTexture); + } + + @Override + public void wallBlock(WallBlock block, ResourceLocation texture) { + super.wallBlock(block, texture); + } + + private String name(Block block) { + return key(block).getPath(); + } + + @Override + public ResourceLocation key(Block block) { + return net.minecraft.core.registries.BuiltInRegistries.BLOCK.getKey(block); + } +} diff --git a/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeItemModelProvider.java b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeItemModelProvider.java new file mode 100644 index 0000000..2a18c83 --- /dev/null +++ b/neoforge/src/main/java/net/cmr/jurassicrevived/datagen/NeoForgeItemModelProvider.java @@ -0,0 +1,74 @@ +package net.cmr.jurassicrevived.datagen; + +import net.cmr.jurassicrevived.Constants; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.neoforged.neoforge.client.model.generators.ItemModelProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; + +public class NeoForgeItemModelProvider extends ItemModelProvider implements ModItemModelProvider.ItemModelHelper { + + public NeoForgeItemModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) { + super(output, Constants.MOD_ID, existingFileHelper); + } + + @Override + protected void registerModels() { + ModItemModelProvider.registerItemModels(this); + } + + @Override + public void basicItemModel(Item item) { + super.basicItem(item); + } + + @Override + public void spawnEgg(Item item) { + withExistingParent(name(item), mcLoc("item/template_spawn_egg")); + } + + @Override + public void simpleBlockItemModel(Block block) { + withExistingParent(name(block), mcLoc("item/generated")) + .texture("layer0", modLoc("block/" + name(block))); + } + + @Override + public void flowerItem(Block block) { + withExistingParent(name(block), mcLoc("item/generated")) + .texture("layer0", modLoc("block/" + name(block))); + } + + @Override + public void wallItem(Block block, Block baseBlock) { + withExistingParent(name(block), mcLoc("block/wall_inventory")) + .texture("wall", modLoc("block/" + name(baseBlock))); + } + + @Override + public void buttonItem(Block block, Block baseBlock) { + withExistingParent(name(block), mcLoc("block/button_inventory")) + .texture("texture", modLoc("block/" + name(baseBlock))); + } + + @Override + public void fenceItem(Block block, Block baseBlock) { + withExistingParent(name(block), mcLoc("block/fence_inventory")) + .texture("texture", modLoc("block/" + name(baseBlock))); + } + + @Override + public void withExistingParentModel(Item item, ResourceLocation parent) { + super.withExistingParent(name(item), parent); + } + + private String name(Item item) { + return net.minecraft.core.registries.BuiltInRegistries.ITEM.getKey(item).getPath(); + } + + private String name(Block block) { + return net.minecraft.core.registries.BuiltInRegistries.BLOCK.getKey(block).getPath(); + } +}