diff --git a/common/src/main/java/net/cmr/jurassicrevived/CommonClass.java b/common/src/main/java/net/cmr/jurassicrevived/CommonClass.java index 2d582d6..e941d9d 100755 --- a/common/src/main/java/net/cmr/jurassicrevived/CommonClass.java +++ b/common/src/main/java/net/cmr/jurassicrevived/CommonClass.java @@ -14,6 +14,7 @@ import net.cmr.jurassicrevived.screen.ModMenuTypes; import net.cmr.jurassicrevived.sound.ModSounds; import net.cmr.jurassicrevived.util.FenceClimbHandler; import net.cmr.jurassicrevived.util.ModEvents; +import net.cmr.jurassicrevived.worldgen.ModWorldGeneration; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.item.Items; @@ -54,7 +55,7 @@ public class CommonClass LifecycleEvent.SETUP.register(() -> { ModBlocks.setupPots(); - //ModEntities.registerSpawnPlacements(); + ModEntities.registerSpawnPlacements(); }); ModBlockEntities.register(); @@ -65,5 +66,7 @@ public class CommonClass ModSounds.register(); ModPackets.register(); + + ModWorldGeneration.generateWorldGen(); } } \ No newline at end of file diff --git a/common/src/main/java/net/cmr/jurassicrevived/entity/ModEntities.java b/common/src/main/java/net/cmr/jurassicrevived/entity/ModEntities.java index b82398f..e98c5a8 100644 --- a/common/src/main/java/net/cmr/jurassicrevived/entity/ModEntities.java +++ b/common/src/main/java/net/cmr/jurassicrevived/entity/ModEntities.java @@ -409,18 +409,97 @@ public class ModEntities { EntityAttributeRegistry.register(TROODON, TroodonEntity::createAttributes); EntityAttributeRegistry.register(UTAHRAPTOR, UtahraptorEntity::createAttributes); } - + public static void registerSpawnPlacements() { - if (!JRConfigManager.get().enableDinosaurs) { -/*? if >1.20.1 {*/ - /*SpawnPlacementsRegistry.register(ALBERTOSAURUS, SpawnPlacementTypes.ON_GROUND, - Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules); -*//*?} else {*/ - SpawnPlacementsRegistry.register(ALBERTOSAURUS, SpawnPlacements.Type.ON_GROUND, - Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules); -/*?}*/ - // ... repeat for all your dinos ... + Constants.LOG.info("Natural dinosaur spawn placement config loaded as: {}", JRConfigManager.get().naturallySpawning); + + if (!JRConfigManager.get().naturallySpawning) { + Constants.LOG.info("Skipping dinosaur spawn placement registration"); + return; } + + Constants.LOG.info("Registering dinosaur spawn placements"); + + registerGroundAnimalSpawn(ALBERTOSAURUS); + registerGroundAnimalSpawn(ALLOSAURUS); + registerGroundAnimalSpawn(ALVAREZSAURUS); + registerGroundAnimalSpawn(ANKYLOSAURUS); + registerGroundAnimalSpawn(APATOSAURUS); + registerGroundAnimalSpawn(ARAMBOURGIANIA); + registerGroundAnimalSpawn(BARYONYX); + registerGroundAnimalSpawn(BRACHIOSAURUS); + registerGroundAnimalSpawn(CARCHARODONTOSAURUS); + registerGroundAnimalSpawn(CARNOTAURUS); + registerGroundAnimalSpawn(CEARADACTYLUS); + registerGroundAnimalSpawn(CERATOSAURUS); + registerGroundAnimalSpawn(CHASMOSAURUS); + registerGroundAnimalSpawn(COELOPHYSIS); + registerGroundAnimalSpawn(COELURUS); + registerGroundAnimalSpawn(COMPSOGNATHUS); + registerGroundAnimalSpawn(CONCAVENATOR); + registerGroundAnimalSpawn(CORYTHOSAURUS); + registerGroundAnimalSpawn(DEINONYCHUS); + registerGroundAnimalSpawn(DILOPHOSAURUS); + registerGroundAnimalSpawn(DIMORPHODON); + registerGroundAnimalSpawn(DIPLODOCUS); + registerGroundAnimalSpawn(DRYOSAURUS); + registerGroundAnimalSpawn(EDMONTOSAURUS); + registerGroundAnimalSpawn(GALLIMIMUS); + registerGroundAnimalSpawn(GEOSTERNBERGIA); + registerGroundAnimalSpawn(GIGANOTOSAURUS); + registerGroundAnimalSpawn(GUANLONG); + registerGroundAnimalSpawn(GUIDRACO); + registerGroundAnimalSpawn(HADROSAURUS); + registerGroundAnimalSpawn(HERRERASAURUS); + registerGroundAnimalSpawn(HYPSILOPHODON); + registerGroundAnimalSpawn(INOSTRANCEVIA); + registerGroundAnimalSpawn(LAMBEOSAURUS); + registerGroundAnimalSpawn(LUDODACTYLUS); + registerGroundAnimalSpawn(MAJUNGASAURUS); + registerGroundAnimalSpawn(MAMENCHISAURUS); + registerGroundAnimalSpawn(METRIACANTHOSAURUS); + registerGroundAnimalSpawn(MOGANOPTERUS); + registerGroundAnimalSpawn(NYCTOSAURUS); + registerGroundAnimalSpawn(ORNITHOLESTES); + registerGroundAnimalSpawn(ORNITHOMIMUS); + registerGroundAnimalSpawn(OURANOSAURUS); + registerGroundAnimalSpawn(OVIRAPTOR); + registerGroundAnimalSpawn(PACHYCEPHALOSAURUS); + registerGroundAnimalSpawn(PARASAUROLOPHUS); + registerGroundAnimalSpawn(PROCERATOSAURUS); + registerGroundAnimalSpawn(PROCOMPSOGNATHUS); + registerGroundAnimalSpawn(PROTOCERATOPS); + registerGroundAnimalSpawn(PTERANODON); + registerGroundAnimalSpawn(PTERODAUSTRO); + registerGroundAnimalSpawn(QUETZALCOATLUS); + registerGroundAnimalSpawn(RAJASAURUS); + registerGroundAnimalSpawn(RUGOPS); + registerGroundAnimalSpawn(SEGISAURUS); + registerGroundAnimalSpawn(SHANTUNGOSAURUS); + registerGroundAnimalSpawn(SPINOSAURUS); + registerGroundAnimalSpawn(STEGOSAURUS); + registerGroundAnimalSpawn(STYRACOSAURUS); + registerGroundAnimalSpawn(TAPEJARA); + registerGroundAnimalSpawn(THERIZINOSAURUS); + registerGroundAnimalSpawn(TITANOSAURUS); + registerGroundAnimalSpawn(TRICERATOPS); + registerGroundAnimalSpawn(TROODON); + registerGroundAnimalSpawn(TROPEOGNATHUS); + registerGroundAnimalSpawn(TUPUXUARA); + registerGroundAnimalSpawn(TYRANNOSAURUS_REX); + registerGroundAnimalSpawn(UTAHRAPTOR); + registerGroundAnimalSpawn(VELOCIRAPTOR); + registerGroundAnimalSpawn(ZHENYUANOPTERUS); + } + + private static void registerGroundAnimalSpawn(RegistrySupplier> entityType) { +/*? if >1.20.1 {*/ + /*SpawnPlacementsRegistry.register(entityType, SpawnPlacementTypes.ON_GROUND, + Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules); +*//*?} else {*/ + SpawnPlacementsRegistry.register(entityType, SpawnPlacements.Type.ON_GROUND, + Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules); +/*?}*/ } public static void register() { diff --git a/common/src/main/java/net/cmr/jurassicrevived/worldgen/ModWorldGeneration.java b/common/src/main/java/net/cmr/jurassicrevived/worldgen/ModWorldGeneration.java new file mode 100644 index 0000000..57ccdbf --- /dev/null +++ b/common/src/main/java/net/cmr/jurassicrevived/worldgen/ModWorldGeneration.java @@ -0,0 +1,215 @@ +package net.cmr.jurassicrevived.worldgen; + +import dev.architectury.registry.level.biome.BiomeModifications; +import net.cmr.jurassicrevived.block.ModBlocks; +import net.cmr.jurassicrevived.Constants; +import net.cmr.jurassicrevived.config.JRConfigManager; +import net.cmr.jurassicrevived.entity.ModEntities; +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceKey; +import net.minecraft.tags.BiomeTags; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.Biomes; +import net.minecraft.world.level.biome.MobSpawnSettings; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.VerticalAnchor; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; +import net.minecraft.world.level.levelgen.placement.BiomeFilter; +import net.minecraft.world.level.levelgen.placement.CountPlacement; +import net.minecraft.world.level.levelgen.placement.HeightRangePlacement; +import net.minecraft.world.level.levelgen.placement.InSquarePlacement; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest; +import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest; + +import java.util.List; +import java.util.function.Predicate; +import java.util.function.Supplier; + +public class ModWorldGeneration { + private static final RuleTest STONE_REPLACEABLES = new TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES); + private static final RuleTest DEEPSLATE_REPLACEABLES = new TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES); + + private static final Supplier GYPSUM_STONE = () -> oreFeature( + STONE_REPLACEABLES, + () -> ModBlocks.GYPSUM_STONE.get().defaultBlockState(), + 18, + 20, + 32, + 64 + ); + + private static final Supplier STONE_FOSSIL = () -> oreFeature( + STONE_REPLACEABLES, + () -> ModBlocks.STONE_FOSSIL.get().defaultBlockState(), + 8, + 15, + 0, + 64 + ); + + private static final Supplier DEEPSLATE_FOSSIL = () -> oreFeature( + DEEPSLATE_REPLACEABLES, + () -> ModBlocks.DEEPSLATE_FOSSIL.get().defaultBlockState(), + 8, + 15, + -32, + 0 + ); + + private static final Supplier AMBER_ORE = () -> oreFeature( + STONE_REPLACEABLES, + () -> ModBlocks.AMBER_ORE.get().defaultBlockState(), + 3, + 4, + 0, + 32 + ); + + private static final Supplier DEEPSLATE_ICE_SHARD_ORE = () -> oreFeature( + DEEPSLATE_REPLACEABLES, + () -> ModBlocks.DEEPSLATE_ICE_SHARD_ORE.get().defaultBlockState(), + 3, + 6, + -32, + 0 + ); + + public static void generateWorldGen() { + addOverworldOre(GYPSUM_STONE); + addOverworldOre(STONE_FOSSIL); + addOverworldOre(DEEPSLATE_FOSSIL); + addOverworldOre(AMBER_ORE); + addOverworldOre(DEEPSLATE_ICE_SHARD_ORE); + + Constants.LOG.info("Natural dinosaur spawning config loaded as: {}", JRConfigManager.get().naturallySpawning); + + if (JRConfigManager.get().naturallySpawning) { + Constants.LOG.info("Registering natural dinosaur biome spawns"); + addSpawns(); + } else { + Constants.LOG.info("Skipping natural dinosaur biome spawns"); + } + } + + private static void addOverworldOre(Supplier placedFeature) { + BiomeModifications.addProperties( + context -> context.hasTag(BiomeTags.IS_OVERWORLD), + (context, properties) -> properties.getGenerationProperties() + .addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, Holder.direct(placedFeature.get())) + ); + } + + private static PlacedFeature oreFeature(RuleTest replaceables, Supplier blockState, int veinSize, int count, int minY, int maxY) { + ConfiguredFeature configuredFeature = new ConfiguredFeature<>( + Feature.ORE, + new OreConfiguration( + List.of(OreConfiguration.target(replaceables, blockState.get())), + veinSize + ) + ); + + return new PlacedFeature( + Holder.direct(configuredFeature), + List.of( + CountPlacement.of(count), + InSquarePlacement.spread(), + HeightRangePlacement.uniform(VerticalAnchor.absolute(minY), VerticalAnchor.absolute(maxY)), + BiomeFilter.biome() + ) + ); + } + + private static void addSpawns() { + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA), ModEntities.ALBERTOSAURUS, 12, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.ALLOSAURUS, 10, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.ALVAREZSAURUS, 28, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_FOREST), ModEntities.ANKYLOSAURUS, 14, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.APATOSAURUS, 10, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.ARAMBOURGIANIA, 6, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.BARYONYX, 8, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.BRACHIOSAURUS, 7, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.CARCHARODONTOSAURUS, 6, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.CARNOTAURUS, 11, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BEACH) || biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.CEARADACTYLUS, 6, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.CERATOSAURUS, 9, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.CHASMOSAURUS, 18, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_TAIGA), ModEntities.COELOPHYSIS, 30, 3, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.COELURUS, 28, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.COMPSOGNATHUS, 36, 3, 6); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.CONCAVENATOR, 10, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.CORYTHOSAURUS, 24, 3, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_FOREST), ModEntities.DEINONYCHUS, 14, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE), ModEntities.DILOPHOSAURUS, 22, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.DIMORPHODON, 7, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_TAIGA), ModEntities.DIPLODOCUS, 8, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.DRYOSAURUS, 32, 3, 6); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.EDMONTOSAURUS, 22, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.GALLIMIMUS, 36, 3, 6); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BEACH) || biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.GEOSTERNBERGIA, 7, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.GIGANOTOSAURUS, 3, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.GUANLONG, 20, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.GUIDRACO, 7, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.HADROSAURUS, 26, 3, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_FOREST), ModEntities.HERRERASAURUS, 24, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.HYPSILOPHODON, 34, 3, 6); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA), ModEntities.INOSTRANCEVIA, 5, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.LAMBEOSAURUS, 24, 3, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE) || biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.LUDODACTYLUS, 6, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.MAJUNGASAURUS, 8, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE), ModEntities.MAMENCHISAURUS, 7, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE) || biome.hasTag(BiomeTags.IS_FOREST), ModEntities.METRIACANTHOSAURUS, 10, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE) || biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.MOGANOPTERUS, 7, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BEACH) || biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.NYCTOSAURUS, 6, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.ORNITHOLESTES, 30, 3, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.ORNITHOMIMUS, 30, 3, 6); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.OURANOSAURUS, 22, 3, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.OVIRAPTOR, 34, 3, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.PACHYCEPHALOSAURUS, 22, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.PARASAUROLOPHUS, 22, 3, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_TAIGA), ModEntities.PROCERATOSAURUS, 24, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.PROCOMPSOGNATHUS, 34, 3, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.PROTOCERATOPS, 28, 3, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BEACH) || biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.PTERANODON, 8, 2, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BEACH) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.PTERODAUSTRO, 12, 2, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.QUETZALCOATLUS, 4, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.RAJASAURUS, 10, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_FOREST) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.RUGOPS, 10, 2, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.SEGISAURUS, 36, 3, 6); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE) || biome.hasTag(BiomeTags.IS_FOREST), ModEntities.SHANTUNGOSAURUS, 8, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.SPINOSAURUS, 3, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.STEGOSAURUS, 14, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_FOREST), ModEntities.STYRACOSAURUS, 22, 2, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE) || biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.TAPEJARA, 6, 2, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE) || biome.hasTag(BiomeTags.IS_FOREST), ModEntities.THERIZINOSAURUS, 8, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.TITANOSAURUS, 7, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.TRICERATOPS, 20, 3, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_FOREST), ModEntities.TROODON, 28, 3, 6); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.TROPEOGNATHUS, 6, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_JUNGLE) || biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.TUPUXUARA, 6, 2, 5); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.TYRANNOSAURUS_REX, 5, 1, 2); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_TAIGA) || biome.hasTag(BiomeTags.IS_FOREST), ModEntities.UTAHRAPTOR, 16, 1, 3); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BADLANDS) || biome.hasTag(BiomeTags.IS_OVERWORLD), ModEntities.VELOCIRAPTOR, 26, 2, 4); + addSpawn(biome -> biome.hasTag(BiomeTags.IS_BEACH) || biome.hasTag(BiomeTags.IS_MOUNTAIN), ModEntities.ZHENYUANOPTERUS, 7, 2, 5); + } + + private static boolean is(BiomeModifications.BiomeContext biome, ResourceKey key) { + return biome.hasTag(BiomeTags.IS_TAIGA) || biome.getKey().equals(key); + } + + private static void addSpawn(Predicate biomeSelector, Supplier> entityType, int weight, int minCount, int maxCount) { + BiomeModifications.addProperties( + biomeSelector, + (context, properties) -> properties.getSpawnProperties().addSpawn( + MobCategory.CREATURE, + new MobSpawnSettings.SpawnerData(entityType.get(), weight, minCount, maxCount) + ) + ); + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/jurassicrevived/textures/block/corythosaurus_egg.png b/common/src/main/resources/assets/jurassicrevived/textures/block/corythosaurus_egg.png index fecb435..11f984f 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/block/corythosaurus_egg.png and b/common/src/main/resources/assets/jurassicrevived/textures/block/corythosaurus_egg.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/block/diplodocus_egg.png b/common/src/main/resources/assets/jurassicrevived/textures/block/diplodocus_egg.png index 5ea6348..d7e2658 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/block/diplodocus_egg.png and b/common/src/main/resources/assets/jurassicrevived/textures/block/diplodocus_egg.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/block/distortus_rex_egg.png b/common/src/main/resources/assets/jurassicrevived/textures/block/distortus_rex_egg.png index df7fcc3..b1f1c91 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/block/distortus_rex_egg.png and b/common/src/main/resources/assets/jurassicrevived/textures/block/distortus_rex_egg.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_corythosaurus_egg.png b/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_corythosaurus_egg.png index 526897e..5b0becd 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_corythosaurus_egg.png and b/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_corythosaurus_egg.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_diplodocus_egg.png b/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_diplodocus_egg.png index f658903..933dbc6 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_diplodocus_egg.png and b/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_diplodocus_egg.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_distortus_rex_egg.png b/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_distortus_rex_egg.png index f6fa333..6ff4642 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_distortus_rex_egg.png and b/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_distortus_rex_egg.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_titanosaurus_egg.png b/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_titanosaurus_egg.png index 8e9fa37..59faf1d 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_titanosaurus_egg.png and b/common/src/main/resources/assets/jurassicrevived/textures/block/incubated_titanosaurus_egg.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/block/titanosaurus_egg.png b/common/src/main/resources/assets/jurassicrevived/textures/block/titanosaurus_egg.png index f179f75..3e87b38 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/block/titanosaurus_egg.png and b/common/src/main/resources/assets/jurassicrevived/textures/block/titanosaurus_egg.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/item/corythosaurus_dna.png b/common/src/main/resources/assets/jurassicrevived/textures/item/corythosaurus_dna.png index 4e8ccce..8f1559a 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/item/corythosaurus_dna.png and b/common/src/main/resources/assets/jurassicrevived/textures/item/corythosaurus_dna.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/item/diplodocus_dna.png b/common/src/main/resources/assets/jurassicrevived/textures/item/diplodocus_dna.png index 08b85b7..3b99e34 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/item/diplodocus_dna.png and b/common/src/main/resources/assets/jurassicrevived/textures/item/diplodocus_dna.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/item/distortus_rex_dna.png b/common/src/main/resources/assets/jurassicrevived/textures/item/distortus_rex_dna.png index 69f7166..3da47e7 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/item/distortus_rex_dna.png and b/common/src/main/resources/assets/jurassicrevived/textures/item/distortus_rex_dna.png differ diff --git a/common/src/main/resources/assets/jurassicrevived/textures/item/titanosaurus_dna.png b/common/src/main/resources/assets/jurassicrevived/textures/item/titanosaurus_dna.png index 8fd48e4..242ca8b 100644 Binary files a/common/src/main/resources/assets/jurassicrevived/textures/item/titanosaurus_dna.png and b/common/src/main/resources/assets/jurassicrevived/textures/item/titanosaurus_dna.png differ