diff --git a/README.md b/README.md index 30342b816..b7d18cdce 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

-**Biomes O' Plenty** is an expansive biome mod for Minecraft that adds a slew of **new, unique biomes to the Overworld and Nether!** To go along with the new biomes, it adds **new plants, flowers, trees, building blocks, and much more!** +**Biomes O' Plenty** is an expansive biome mod for Minecraft that adds a slew of **new, unique biomes to the Overworld, Nether, and End!** To go along with the new biomes, it adds **new plants, flowers, trees, building blocks, and much more!** ----------------- diff --git a/common/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 b/common/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 index 698f3c244..d417127ff 100644 --- a/common/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 +++ b/common/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 @@ -1,4 +1,4 @@ -// 1.20.4 2024-01-16T17:51:31.850639 Registries +// 1.20.4 2024-01-17T16:45:12.9697103 Registries bec08031dc5126119d3c7a1033703f8235bdf56e data/biomesoplenty/damage_type/bramble.json 41f8df67f585538edc9847b6754275d24b813e06 data/biomesoplenty/damage_type/fumarole.json 1db19ce8d33b8c131955b60ed830200bbee6a912 data/biomesoplenty/worldgen/biome/aspen_glade.json @@ -13,9 +13,9 @@ d0c0bdd9fc7b09e7d046e35faea8cc6d752b468a data/biomesoplenty/worldgen/biome/crag. 401cb408a8b99f3fd8b696f9759d9f1f8a1a945e data/biomesoplenty/worldgen/biome/dead_forest.json 506de7d82a9bf0a7caea3390590dc9d1fa2028b0 data/biomesoplenty/worldgen/biome/dryland.json d4a9226ceaef3cf4eed45892e027c1eabf9fcd72 data/biomesoplenty/worldgen/biome/dune_beach.json -b483b45bfe2934381accd8001723f45f08356c87 data/biomesoplenty/worldgen/biome/end_corruption.json -85c3f472e2c8c0fcc91a949b1d0210bf2b4e45cc data/biomesoplenty/worldgen/biome/end_reef.json -c8da42275f3e77f30df81eea9d0cfcf22f00cde1 data/biomesoplenty/worldgen/biome/end_wilds.json +0f7c6770ec15ea90b29d58f7427fedf2ecd5a227 data/biomesoplenty/worldgen/biome/end_corruption.json +5db4bd37b86665f55da93298806849f2285d5060 data/biomesoplenty/worldgen/biome/end_reef.json +5e761da3260f04936defe5a580d015e8d109e7c7 data/biomesoplenty/worldgen/biome/end_wilds.json a89d541384f1a879bb82d9c984d98c512474d27c data/biomesoplenty/worldgen/biome/erupting_inferno.json d662a9e04a7840345595d343cc34426393c04699 data/biomesoplenty/worldgen/biome/field.json 0ca60f25f9961787ec5f174f8be6f29463c4decc data/biomesoplenty/worldgen/biome/fir_clearing.json @@ -491,7 +491,7 @@ eaafc116edf17b5a3c48e7bdc68f62ba84fd2deb data/biomesoplenty/worldgen/placed_feat a0515b53a5b94f2ed1d7dbd87db0585612d83dda data/biomesoplenty/worldgen/placed_feature/nether_bramble.json 1a38b33f693e7e19b9e5975269ae2ab5cf1c2472 data/biomesoplenty/worldgen/placed_feature/nether_vines.json f3b33fbd598ab935e868bab7a4875ee1380220b0 data/biomesoplenty/worldgen/placed_feature/null_lake.json -b6593e87126d0d5ee1b9117723911931e9d2bef2 data/biomesoplenty/worldgen/placed_feature/null_tree.json +a3d701df3a8d022e81b0abe17a6f635938ae0d19 data/biomesoplenty/worldgen/placed_feature/null_tree.json 062fefe110d24798d1df521817e98394fe648a62 data/biomesoplenty/worldgen/placed_feature/oak_bush.json 2669995131b210204c99f3f718cae309ba9e822f data/biomesoplenty/worldgen/placed_feature/obsidian_splatter.json 7fcd3ef78b62a0c814a8e780b79f63c9cf9aaa87 data/biomesoplenty/worldgen/placed_feature/orange_maple_leaf_piles.json @@ -558,7 +558,7 @@ aa0d904e7a1f35d576717565f0442d01000453cc data/biomesoplenty/worldgen/placed_feat 51bf1f3cd23c08e9fa2c2189d39fd90371762bc3 data/biomesoplenty/worldgen/placed_feature/porous_flesh.json 5778dd543e43fb9e71c08554abb7f350253643cf data/biomesoplenty/worldgen/placed_feature/pumpkin_patch.json db09e9654c16f52e231da2d5b8f06e7939ea5d69 data/biomesoplenty/worldgen/placed_feature/pus_bubbles.json -01445a026f89b9644601c266db1b387144c32cb3 data/biomesoplenty/worldgen/placed_feature/radiant_hands.json +fcdffc2c2a3ff4d45d0a2855b4efb0fd1bbd664c data/biomesoplenty/worldgen/placed_feature/radiant_hands.json 717eb46bdca44e52128033b627f0fb8aefe886a8 data/biomesoplenty/worldgen/placed_feature/rainbow_birch_tree.json 87d9d03e05cd26120e64be061b4133c09059aa1b data/biomesoplenty/worldgen/placed_feature/rainforest_cliffs_vines.json 11e26339d0c1be09f94db502d5da6a780af69e7d data/biomesoplenty/worldgen/placed_feature/redwood_tree.json diff --git a/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_corruption.json b/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_corruption.json index d45bbcd6f..e7154a23f 100644 --- a/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_corruption.json +++ b/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_corruption.json @@ -9,6 +9,12 @@ "sound": "minecraft:ambient.cave", "tick_delay": 6000 }, + "particle": { + "options": { + "type": "biomesoplenty:binary" + }, + "probability": 3.75E-4 + }, "sky_color": 0, "water_color": 4159204, "water_fog_color": 329011 @@ -40,14 +46,7 @@ "axolotls": [], "creature": [], "misc": [], - "monster": [ - { - "type": "minecraft:enderman", - "maxCount": 4, - "minCount": 4, - "weight": 10 - } - ], + "monster": [], "underground_water_creature": [], "water_ambient": [], "water_creature": [] diff --git a/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_reef.json b/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_reef.json index 2cd74bc34..e4695bd3b 100644 --- a/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_reef.json +++ b/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_reef.json @@ -9,6 +9,12 @@ "sound": "minecraft:ambient.cave", "tick_delay": 6000 }, + "particle": { + "options": { + "type": "minecraft:mycelium" + }, + "probability": 0.0075 + }, "sky_color": 0, "water_color": 16777215, "water_fog_color": 3355443 diff --git a/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_wilds.json b/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_wilds.json index 418897f24..027b9efd0 100644 --- a/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_wilds.json +++ b/common/src/generated/resources/data/biomesoplenty/worldgen/biome/end_wilds.json @@ -9,6 +9,12 @@ "sound": "minecraft:ambient.cave", "tick_delay": 6000 }, + "particle": { + "options": { + "type": "biomesoplenty:end_spore" + }, + "probability": 0.005 + }, "sky_color": 0, "water_color": 4159204, "water_fog_color": 329011 diff --git a/common/src/generated/resources/data/biomesoplenty/worldgen/placed_feature/null_tree.json b/common/src/generated/resources/data/biomesoplenty/worldgen/placed_feature/null_tree.json index 73b0521f2..8f878f044 100644 --- a/common/src/generated/resources/data/biomesoplenty/worldgen/placed_feature/null_tree.json +++ b/common/src/generated/resources/data/biomesoplenty/worldgen/placed_feature/null_tree.json @@ -5,7 +5,7 @@ "type": "minecraft:block_predicate_filter", "predicate": { "type": "minecraft:matching_blocks", - "blocks": "minecraft:end_stone", + "blocks": "biomesoplenty:unmapped_end_stone", "offset": [ 0, -1, diff --git a/common/src/generated/resources/data/biomesoplenty/worldgen/placed_feature/radiant_hands.json b/common/src/generated/resources/data/biomesoplenty/worldgen/placed_feature/radiant_hands.json index ae737ae6e..1ba6703eb 100644 --- a/common/src/generated/resources/data/biomesoplenty/worldgen/placed_feature/radiant_hands.json +++ b/common/src/generated/resources/data/biomesoplenty/worldgen/placed_feature/radiant_hands.json @@ -3,7 +3,7 @@ "placement": [ { "type": "minecraft:rarity_filter", - "chance": 3 + "chance": 2 }, { "type": "minecraft:in_square" diff --git a/common/src/main/java/biomesoplenty/api/block/BOPBlocks.java b/common/src/main/java/biomesoplenty/api/block/BOPBlocks.java index b4ba0f645..b20aef3f0 100644 --- a/common/src/main/java/biomesoplenty/api/block/BOPBlocks.java +++ b/common/src/main/java/biomesoplenty/api/block/BOPBlocks.java @@ -74,6 +74,7 @@ public class BOPBlocks public static Block SMALL_ROSE_QUARTZ_BUD; public static Block ALGAL_END_STONE; + public static Block UNMAPPED_END_STONE; public static Block NULL_END_STONE; public static Block NULL_BLOCK; public static Block ANOMALY; diff --git a/common/src/main/java/biomesoplenty/api/item/BOPItems.java b/common/src/main/java/biomesoplenty/api/item/BOPItems.java index d45f66628..c458a25be 100644 --- a/common/src/main/java/biomesoplenty/api/item/BOPItems.java +++ b/common/src/main/java/biomesoplenty/api/item/BOPItems.java @@ -81,6 +81,7 @@ public class BOPItems public static Item ROSE_QUARTZ_CHUNK; public static Item ALGAL_END_STONE; + public static Item UNMAPPED_END_STONE; public static Item NULL_END_STONE; public static Item NULL_BLOCK; public static Item ANOMALY; diff --git a/common/src/main/java/biomesoplenty/biome/BOPEndBiomes.java b/common/src/main/java/biomesoplenty/biome/BOPEndBiomes.java index a33aaa7c8..ee3bf0410 100644 --- a/common/src/main/java/biomesoplenty/biome/BOPEndBiomes.java +++ b/common/src/main/java/biomesoplenty/biome/BOPEndBiomes.java @@ -4,9 +4,11 @@ ******************************************************************************/ package biomesoplenty.biome; +import biomesoplenty.init.ModParticles; import biomesoplenty.worldgen.placement.BOPEndPlacements; import biomesoplenty.worldgen.placement.BOPVegetationPlacements; import net.minecraft.core.HolderGetter; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.data.worldgen.BiomeDefaultFeatures; import net.minecraft.data.worldgen.placement.EndPlacements; import net.minecraft.world.level.biome.*; @@ -16,25 +18,6 @@ public class BOPEndBiomes { - private static Biome baseEndBiome(BiomeGenerationSettings.Builder biomeBuilder, MobSpawnSettings.Builder mobSpawnBuilder, int waterColor, int waterFogColor) { - return new Biome.BiomeBuilder() - .hasPrecipitation(false) - .temperature(0.5F) - .downfall(0.5F) - .specialEffects( - new BiomeSpecialEffects.Builder() - .waterColor(waterColor) - .waterFogColor(waterFogColor) - .fogColor(10518688) - .skyColor(0) - .ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS) - .build() - ) - .mobSpawnSettings(mobSpawnBuilder.build()) - .generationSettings(biomeBuilder.build()) - .build(); - } - public static Biome endWilds(HolderGetter placedFeatureGetter, HolderGetter> carverGetter) { MobSpawnSettings.Builder mobSpawnBuilder = new MobSpawnSettings.Builder(); @@ -45,7 +28,11 @@ public static Biome endWilds(HolderGetter placedFeatureGetter, Ho biomeBuilder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, BOPEndPlacements.FLOWER_END_WILDS); biomeBuilder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, BOPEndPlacements.PATCH_ENDERPHYTES); biomeBuilder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, BOPEndPlacements.RADIANT_HANDS); - return baseEndBiome(biomeBuilder, mobSpawnBuilder, 4159204, 329011); + + return new Biome.BiomeBuilder() + .hasPrecipitation(false).temperature(0.5F).downfall(0.5F) + .specialEffects(new BiomeSpecialEffects.Builder().waterColor(4159204).waterFogColor(329011).fogColor(10518688).skyColor(0).ambientParticle(new AmbientParticleSettings(ModParticles.END_SPORE, 0.005F)).ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS).build()) + .mobSpawnSettings(mobSpawnBuilder.build()).generationSettings(biomeBuilder.build()).build(); } public static Biome endReef(HolderGetter placedFeatureGetter, HolderGetter> carverGetter) @@ -59,18 +46,25 @@ public static Biome endReef(HolderGetter placedFeatureGetter, Hol biomeBuilder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, BOPEndPlacements.DEAD_CORAL_PATCH); biomeBuilder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, BOPEndPlacements.BARNACLES); biomeBuilder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, BOPVegetationPlacements.PATCH_DEAD_GRASS); - return baseEndBiome(biomeBuilder, mobSpawnBuilder, 0xFFFFFF, 0x333333); + + return new Biome.BiomeBuilder() + .hasPrecipitation(false).temperature(0.5F).downfall(0.5F) + .specialEffects(new BiomeSpecialEffects.Builder().waterColor(0xFFFFFF).waterFogColor(0x333333).fogColor(10518688).skyColor(0).ambientParticle(new AmbientParticleSettings(ParticleTypes.MYCELIUM, 0.0075F)).ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS).build()) + .mobSpawnSettings(mobSpawnBuilder.build()).generationSettings(biomeBuilder.build()).build(); } public static Biome endCorruption(HolderGetter placedFeatureGetter, HolderGetter> carverGetter) { MobSpawnSettings.Builder mobSpawnBuilder = new MobSpawnSettings.Builder(); - BiomeDefaultFeatures.endSpawns(mobSpawnBuilder); BiomeGenerationSettings.Builder biomeBuilder = new BiomeGenerationSettings.Builder(placedFeatureGetter, carverGetter); biomeBuilder.addFeature(GenerationStep.Decoration.SURFACE_STRUCTURES, EndPlacements.END_GATEWAY_RETURN); biomeBuilder.addFeature(GenerationStep.Decoration.LOCAL_MODIFICATIONS, BOPEndPlacements.ANOMALY); biomeBuilder.addFeature(GenerationStep.Decoration.UNDERGROUND_DECORATION, BOPEndPlacements.NULL_LAKE); biomeBuilder.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, BOPEndPlacements.TREES_END_CORRUPTION); - return baseEndBiome(biomeBuilder, mobSpawnBuilder, 4159204, 329011); + + return new Biome.BiomeBuilder() + .hasPrecipitation(false).temperature(0.5F).downfall(0.5F) + .specialEffects(new BiomeSpecialEffects.Builder().waterColor(4159204).waterFogColor(329011).fogColor(10518688).skyColor(0).ambientParticle(new AmbientParticleSettings(ModParticles.BINARY, 0.000375F)).ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS).build()) + .mobSpawnSettings(mobSpawnBuilder.build()).generationSettings(biomeBuilder.build()).build(); } } diff --git a/common/src/main/java/biomesoplenty/biome/BOPNetherBiomes.java b/common/src/main/java/biomesoplenty/biome/BOPNetherBiomes.java index d86046272..4028c678f 100644 --- a/common/src/main/java/biomesoplenty/biome/BOPNetherBiomes.java +++ b/common/src/main/java/biomesoplenty/biome/BOPNetherBiomes.java @@ -53,9 +53,9 @@ public static Biome crystallineChasm(HolderGetter placedFeatureGe addFeature(biomeBuilder, GenerationStep.Decoration.UNDERGROUND_DECORATION, BOPNetherPlacements.SMALL_CRYSTAL); return new Biome.BiomeBuilder() - .hasPrecipitation(false).temperature(2.0F).downfall(0.0F) - .specialEffects((new BiomeSpecialEffects.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x59002C).skyColor(BOPOverworldBiomes.calculateSkyColor(2.0F)).ambientParticle(new AmbientParticleSettings(ParticleTypes.ELECTRIC_SPARK, 0.0008925F)).ambientLoopSound(SoundEvents.AMBIENT_CRIMSON_FOREST_LOOP).ambientMoodSound(new AmbientMoodSettings(SoundEvents.AMBIENT_BASALT_DELTAS_MOOD, 6000, 8, 2.0D)).backgroundMusic(Musics.createGameMusic(BOPSounds.MUSIC_BIOME_CRYSTALLINE_CHASM)).build()) - .mobSpawnSettings(spawnBuilder.build()).generationSettings(biomeBuilder.build()).build(); + .hasPrecipitation(false).temperature(2.0F).downfall(0.0F) + .specialEffects((new BiomeSpecialEffects.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x59002C).skyColor(BOPOverworldBiomes.calculateSkyColor(2.0F)).ambientParticle(new AmbientParticleSettings(ParticleTypes.ELECTRIC_SPARK, 0.0008925F)).ambientLoopSound(SoundEvents.AMBIENT_CRIMSON_FOREST_LOOP).ambientMoodSound(new AmbientMoodSettings(SoundEvents.AMBIENT_BASALT_DELTAS_MOOD, 6000, 8, 2.0D)).backgroundMusic(Musics.createGameMusic(BOPSounds.MUSIC_BIOME_CRYSTALLINE_CHASM)).build()) + .mobSpawnSettings(spawnBuilder.build()).generationSettings(biomeBuilder.build()).build(); } public static Biome eruptingInferno(HolderGetter placedFeatureGetter, HolderGetter> carverGetter) @@ -89,9 +89,9 @@ public static Biome eruptingInferno(HolderGetter placedFeatureGet addFeature(biomeBuilder, GenerationStep.Decoration.UNDERGROUND_DECORATION, BOPNetherPlacements.BRIMSTONE_CLUSTER); return new Biome.BiomeBuilder() - .hasPrecipitation(false).temperature(2.0F).downfall(0.0F) - .specialEffects((new BiomeSpecialEffects.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x4F2B13).skyColor(BOPOverworldBiomes.calculateSkyColor(2.0F)).ambientParticle(new AmbientParticleSettings(ParticleTypes.SMOKE, 0.00023065104F)).ambientLoopSound(SoundEvents.AMBIENT_BASALT_DELTAS_LOOP).ambientMoodSound(new AmbientMoodSettings(SoundEvents.AMBIENT_BASALT_DELTAS_MOOD, 6000, 8, 2.0D)).ambientAdditionsSound(new AmbientAdditionsSettings(SoundEvents.AMBIENT_BASALT_DELTAS_ADDITIONS, 0.0111D)).backgroundMusic(Musics.createGameMusic(BOPSounds.MUSIC_BIOME_ERUPTING_INFERNO)).build()) - .mobSpawnSettings(spawnBuilder.build()).generationSettings(biomeBuilder.build()).build(); + .hasPrecipitation(false).temperature(2.0F).downfall(0.0F) + .specialEffects((new BiomeSpecialEffects.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x4F2B13).skyColor(BOPOverworldBiomes.calculateSkyColor(2.0F)).ambientParticle(new AmbientParticleSettings(ParticleTypes.SMOKE, 0.00023065104F)).ambientLoopSound(SoundEvents.AMBIENT_BASALT_DELTAS_LOOP).ambientMoodSound(new AmbientMoodSettings(SoundEvents.AMBIENT_BASALT_DELTAS_MOOD, 6000, 8, 2.0D)).ambientAdditionsSound(new AmbientAdditionsSettings(SoundEvents.AMBIENT_BASALT_DELTAS_ADDITIONS, 0.0111D)).backgroundMusic(Musics.createGameMusic(BOPSounds.MUSIC_BIOME_ERUPTING_INFERNO)).build()) + .mobSpawnSettings(spawnBuilder.build()).generationSettings(biomeBuilder.build()).build(); } public static Biome undergrowth(HolderGetter placedFeatureGetter, HolderGetter> carverGetter) @@ -124,9 +124,9 @@ public static Biome undergrowth(HolderGetter placedFeatureGetter, addFeature(biomeBuilder, GenerationStep.Decoration.UNDERGROUND_DECORATION, BOPNetherPlacements.NETHER_VINES); return new Biome.BiomeBuilder() - .hasPrecipitation(false).temperature(2.0F).downfall(0.0F) - .specialEffects((new BiomeSpecialEffects.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x1C2109).skyColor(BOPOverworldBiomes.calculateSkyColor(2.0F)).ambientParticle(new AmbientParticleSettings(ParticleTypes.SPORE_BLOSSOM_AIR, 0.00357F)).ambientLoopSound(SoundEvents.AMBIENT_WARPED_FOREST_LOOP).ambientMoodSound(new AmbientMoodSettings(SoundEvents.AMBIENT_CRIMSON_FOREST_MOOD, 6000, 8, 2.0D)).ambientAdditionsSound(new AmbientAdditionsSettings(SoundEvents.AMBIENT_NETHER_WASTES_ADDITIONS, 0.0111D)).backgroundMusic(Musics.createGameMusic(BOPSounds.MUSIC_BIOME_UNDERGROWTH)).build()) - .mobSpawnSettings(spawnBuilder.build()).generationSettings(biomeBuilder.build()).build(); + .hasPrecipitation(false).temperature(2.0F).downfall(0.0F) + .specialEffects((new BiomeSpecialEffects.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x1C2109).skyColor(BOPOverworldBiomes.calculateSkyColor(2.0F)).ambientParticle(new AmbientParticleSettings(ParticleTypes.SPORE_BLOSSOM_AIR, 0.00357F)).ambientLoopSound(SoundEvents.AMBIENT_WARPED_FOREST_LOOP).ambientMoodSound(new AmbientMoodSettings(SoundEvents.AMBIENT_CRIMSON_FOREST_MOOD, 6000, 8, 2.0D)).ambientAdditionsSound(new AmbientAdditionsSettings(SoundEvents.AMBIENT_NETHER_WASTES_ADDITIONS, 0.0111D)).backgroundMusic(Musics.createGameMusic(BOPSounds.MUSIC_BIOME_UNDERGROWTH)).build()) + .mobSpawnSettings(spawnBuilder.build()).generationSettings(biomeBuilder.build()).build(); } public static Biome visceralHeap(HolderGetter placedFeatureGetter, HolderGetter> carverGetter) @@ -155,9 +155,9 @@ public static Biome visceralHeap(HolderGetter placedFeatureGetter addFeature(biomeBuilder, GenerationStep.Decoration.UNDERGROUND_DECORATION, BOPNetherPlacements.HAIR); return new Biome.BiomeBuilder() - .hasPrecipitation(false).temperature(2.0F).downfall(0.0F) - .specialEffects((new BiomeSpecialEffects.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x601F18).skyColor(BOPOverworldBiomes.calculateSkyColor(2.0F)).ambientLoopSound(SoundEvents.AMBIENT_NETHER_WASTES_LOOP).ambientMoodSound(new AmbientMoodSettings(SoundEvents.AMBIENT_SOUL_SAND_VALLEY_MOOD, 6000, 8, 2.0D)).ambientAdditionsSound(new AmbientAdditionsSettings(SoundEvents.AMBIENT_CRIMSON_FOREST_ADDITIONS, 0.0111D)).backgroundMusic(Musics.createGameMusic(BOPSounds.MUSIC_BIOME_VISCERAL_HEAP)).build()) - .mobSpawnSettings(spawnBuilder.build()).generationSettings(biomeBuilder.build()).build(); + .hasPrecipitation(false).temperature(2.0F).downfall(0.0F) + .specialEffects((new BiomeSpecialEffects.Builder()).waterColor(4159204).waterFogColor(329011).fogColor(0x601F18).skyColor(BOPOverworldBiomes.calculateSkyColor(2.0F)).ambientLoopSound(SoundEvents.AMBIENT_NETHER_WASTES_LOOP).ambientMoodSound(new AmbientMoodSettings(SoundEvents.AMBIENT_SOUL_SAND_VALLEY_MOOD, 6000, 8, 2.0D)).ambientAdditionsSound(new AmbientAdditionsSettings(SoundEvents.AMBIENT_CRIMSON_FOREST_ADDITIONS, 0.0111D)).backgroundMusic(Musics.createGameMusic(BOPSounds.MUSIC_BIOME_VISCERAL_HEAP)).build()) + .mobSpawnSettings(spawnBuilder.build()).generationSettings(biomeBuilder.build()).build(); } public static Biome witheredAbyss(HolderGetter placedFeatureGetter, HolderGetter> carverGetter) diff --git a/common/src/main/java/biomesoplenty/block/FlowerBlockBOP.java b/common/src/main/java/biomesoplenty/block/FlowerBlockBOP.java index 13930c2be..b553c1682 100644 --- a/common/src/main/java/biomesoplenty/block/FlowerBlockBOP.java +++ b/common/src/main/java/biomesoplenty/block/FlowerBlockBOP.java @@ -76,7 +76,7 @@ else if (this == BOPBlocks.WILTED_LILY) } else if (this == BOPBlocks.ENDBLOOM) { - return ground == BOPBlocks.ALGAL_END_STONE || ground == Blocks.END_STONE || super.canSurvive(state, worldIn, pos); + return ground == BOPBlocks.ALGAL_END_STONE || ground == BOPBlocks.UNMAPPED_END_STONE || ground == BOPBlocks.NULL_END_STONE || ground == Blocks.END_STONE || super.canSurvive(state, worldIn, pos); } return super.canSurvive(state, worldIn, pos); diff --git a/common/src/main/java/biomesoplenty/block/FoliageBlockBOP.java b/common/src/main/java/biomesoplenty/block/FoliageBlockBOP.java index b6ce195b8..56c6280d3 100644 --- a/common/src/main/java/biomesoplenty/block/FoliageBlockBOP.java +++ b/common/src/main/java/biomesoplenty/block/FoliageBlockBOP.java @@ -90,7 +90,7 @@ public boolean canSurvive(BlockState state, LevelReader worldIn, BlockPos pos) } if (this == BOPBlocks.ENDERPHYTE) { - return ground == BOPBlocks.ALGAL_END_STONE || ground == Blocks.END_STONE; + return ground == BOPBlocks.ALGAL_END_STONE || ground == BOPBlocks.UNMAPPED_END_STONE || ground == BOPBlocks.NULL_END_STONE || ground == Blocks.END_STONE; } return super.canSurvive(state, worldIn, pos); diff --git a/common/src/main/java/biomesoplenty/block/RadiantHandsBlock.java b/common/src/main/java/biomesoplenty/block/RadiantHandsBlock.java index cfeb3f827..d71244c84 100644 --- a/common/src/main/java/biomesoplenty/block/RadiantHandsBlock.java +++ b/common/src/main/java/biomesoplenty/block/RadiantHandsBlock.java @@ -118,7 +118,7 @@ public boolean canSurvive(BlockState p_196260_1_, LevelReader p_196260_2_, Block } else { - return block == this.getHeadBlock() || block == this.getBodyBlock() || block == Blocks.END_STONE || block == BOPBlocks.ALGAL_END_STONE; + return block == this.getHeadBlock() || block == this.getBodyBlock() || block == Blocks.END_STONE || block == BOPBlocks.UNMAPPED_END_STONE || block == BOPBlocks.NULL_END_STONE || block == BOPBlocks.ALGAL_END_STONE; } } diff --git a/common/src/main/java/biomesoplenty/block/RadiantHandsPlantBlock.java b/common/src/main/java/biomesoplenty/block/RadiantHandsPlantBlock.java index 90652bb9c..b84df1dd0 100644 --- a/common/src/main/java/biomesoplenty/block/RadiantHandsPlantBlock.java +++ b/common/src/main/java/biomesoplenty/block/RadiantHandsPlantBlock.java @@ -58,7 +58,7 @@ public boolean canSurvive(BlockState p_196260_1_, LevelReader p_196260_2_, Block } else { - return block == this.getHeadBlock() || block == this.getBodyBlock() || block == Blocks.END_STONE || block == BOPBlocks.ALGAL_END_STONE; + return block == this.getHeadBlock() || block == this.getBodyBlock() || block == Blocks.END_STONE || block == BOPBlocks.UNMAPPED_END_STONE || block == BOPBlocks.NULL_END_STONE || block == BOPBlocks.ALGAL_END_STONE; } } diff --git a/common/src/main/java/biomesoplenty/block/SaplingBlockBOP.java b/common/src/main/java/biomesoplenty/block/SaplingBlockBOP.java index f9d539a5d..787359805 100644 --- a/common/src/main/java/biomesoplenty/block/SaplingBlockBOP.java +++ b/common/src/main/java/biomesoplenty/block/SaplingBlockBOP.java @@ -96,7 +96,7 @@ else if (this == BOPBlocks.DEAD_SAPLING) } else if (this == BOPBlocks.EMPYREAL_SAPLING) { - return ground == Blocks.END_STONE || ground == BOPBlocks.ALGAL_END_STONE || super.canSurvive(state, worldIn, pos); + return ground == Blocks.END_STONE || ground == BOPBlocks.UNMAPPED_END_STONE || ground == BOPBlocks.NULL_END_STONE || ground == BOPBlocks.ALGAL_END_STONE || super.canSurvive(state, worldIn, pos); } return super.canSurvive(state, worldIn, pos); diff --git a/common/src/main/java/biomesoplenty/init/ModBlocks.java b/common/src/main/java/biomesoplenty/init/ModBlocks.java index 8ab442295..83ab03b06 100644 --- a/common/src/main/java/biomesoplenty/init/ModBlocks.java +++ b/common/src/main/java/biomesoplenty/init/ModBlocks.java @@ -127,6 +127,7 @@ private static void registerBlocks(BiConsumer func) SMALL_ROSE_QUARTZ_BUD = register(func, new AmethystClusterBlock(3, 4, BlockBehaviour.Properties.ofFullCopy(ROSE_QUARTZ_CLUSTER).pushReaction(PushReaction.DESTROY).forceSolidOn().sound(SoundType.SMALL_AMETHYST_BUD).lightLevel((state) -> 5)), "small_rose_quartz_bud"); ALGAL_END_STONE = register(func, new AlgalEndStoneBlock(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).mapColor(MapColor.TERRACOTTA_YELLOW).randomTicks().requiresCorrectToolForDrops().strength(3.0F, 9.0F)), "algal_end_stone"); + UNMAPPED_END_STONE = register(func, new Block(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops().strength(3.0F, 9.0F)), "unmapped_end_stone"); NULL_END_STONE = register(func, new Block(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).requiresCorrectToolForDrops().strength(1.5F, 4.5F)), "null_end_stone"); NULL_BLOCK = register(func, new NullBlock(BlockBehaviour.Properties.of()), "null_block"); ANOMALY = register(func, new AnomalyBlock(BlockBehaviour.Properties.of().lightLevel((state) -> 5)), "anomaly"); diff --git a/common/src/main/java/biomesoplenty/init/ModClient.java b/common/src/main/java/biomesoplenty/init/ModClient.java index 1f2f148a2..3532ef244 100644 --- a/common/src/main/java/biomesoplenty/init/ModClient.java +++ b/common/src/main/java/biomesoplenty/init/ModClient.java @@ -72,6 +72,7 @@ public static void setupRenderTypes() RenderType translucentRenderType = RenderType.translucent(); RenderHelper.setRenderType(MOSSY_BLACK_SAND, transparentRenderType); + RenderHelper.setRenderType(NULL_END_STONE, cutoutRenderType); RenderHelper.setRenderType(ORIGIN_LEAVES, transparentRenderType); RenderHelper.setRenderType(FLOWERING_OAK_LEAVES, transparentRenderType); @@ -322,7 +323,9 @@ public static void registerParticleSprites(RegisterParticleSpritesEvent event) event.registerSpriteSet(ModParticles.PUS, PusParticle.Provider::new); event.registerSpriteSet(ModParticles.GLOWWORM, GlowwormParticle.Provider::new); event.registerSpriteSet(ModParticles.STEAM, SteamParticle.Provider::new); + event.registerSpriteSet(ModParticles.END_SPORE, EndSporeParticle.Provider::new); event.registerSpriteSet(ModParticles.NULL, NullParticle.Provider::new); + event.registerSpriteSet(ModParticles.BINARY, BinaryParticle.Provider::new); event.registerSpriteSet(ModParticles.JACARANDA_LEAVES, (p_277215_) -> { return (p_277217_, p_277218_, p_277219_, p_277220_, p_277221_, p_277222_, p_277223_, p_277224_) -> { return new LeafParticle(p_277218_, p_277219_, p_277220_, p_277221_, p_277215_); diff --git a/common/src/main/java/biomesoplenty/init/ModItems.java b/common/src/main/java/biomesoplenty/init/ModItems.java index d726759e9..eb5871f2c 100644 --- a/common/src/main/java/biomesoplenty/init/ModItems.java +++ b/common/src/main/java/biomesoplenty/init/ModItems.java @@ -155,6 +155,7 @@ public static void registerBlockItems(BiConsumer func) MEDIUM_ROSE_QUARTZ_BUD = register(func, "medium_rose_quartz_bud", new BlockItem(BOPBlocks.MEDIUM_ROSE_QUARTZ_BUD, new Item.Properties())); SMALL_ROSE_QUARTZ_BUD = register(func, "small_rose_quartz_bud", new BlockItem(BOPBlocks.SMALL_ROSE_QUARTZ_BUD, new Item.Properties())); ALGAL_END_STONE = register(func, "algal_end_stone", new BlockItem(BOPBlocks.ALGAL_END_STONE, new Item.Properties())); + UNMAPPED_END_STONE = register(func, "unmapped_end_stone", new BlockItem(BOPBlocks.UNMAPPED_END_STONE, new Item.Properties())); NULL_END_STONE = register(func, "null_end_stone", new BlockItem(BOPBlocks.NULL_END_STONE, new Item.Properties())); NULL_BLOCK = register(func, "null_block", new BlockItem(BOPBlocks.NULL_BLOCK, new Item.Properties())); ANOMALY = register(func, "anomaly", new BlockItem(BOPBlocks.ANOMALY, new Item.Properties())); diff --git a/common/src/main/java/biomesoplenty/init/ModParticles.java b/common/src/main/java/biomesoplenty/init/ModParticles.java index 9d3164c4a..be5c48a7e 100644 --- a/common/src/main/java/biomesoplenty/init/ModParticles.java +++ b/common/src/main/java/biomesoplenty/init/ModParticles.java @@ -26,7 +26,9 @@ public class ModParticles public static SimpleParticleType RED_MAPLE_LEAVES; public static SimpleParticleType ORANGE_MAPLE_LEAVES; public static SimpleParticleType YELLOW_MAPLE_LEAVES; + public static SimpleParticleType END_SPORE; public static SimpleParticleType NULL; + public static SimpleParticleType BINARY; public static void registerParticles(BiConsumer> func) { @@ -41,7 +43,9 @@ public static void registerParticles(BiConsumer> T register(BiConsumer> func, String name, T particle) diff --git a/common/src/main/java/biomesoplenty/init/ModTags.java b/common/src/main/java/biomesoplenty/init/ModTags.java index 9732216ed..6061350f5 100644 --- a/common/src/main/java/biomesoplenty/init/ModTags.java +++ b/common/src/main/java/biomesoplenty/init/ModTags.java @@ -32,6 +32,7 @@ private static void setup() {} public static final TagKey DEAD_WALL_CORALS = create(new ResourceLocation(BiomesOPlenty.MOD_ID, "dead_wall_corals")); public static final TagKey FLESH = create(new ResourceLocation(BiomesOPlenty.MOD_ID, "flesh")); public static final TagKey FLESH_DECORATION_PLACEABLE = create(new ResourceLocation(BiomesOPlenty.MOD_ID, "flesh_decoration_placeable")); + public static final TagKey NULL_REPLACEABLE = create(new ResourceLocation(BiomesOPlenty.MOD_ID, "null_replaceable")); public static final TagKey TIDEPOOL_REPLACEABLE = create(new ResourceLocation(BiomesOPlenty.MOD_ID, "tidepool_replaceable")); public static TagKey create(ResourceLocation name) diff --git a/common/src/main/java/biomesoplenty/particle/BinaryParticle.java b/common/src/main/java/biomesoplenty/particle/BinaryParticle.java new file mode 100644 index 000000000..79557506a --- /dev/null +++ b/common/src/main/java/biomesoplenty/particle/BinaryParticle.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright 2022, the Glitchfiend Team. + * All rights reserved. + ******************************************************************************/ +package biomesoplenty.particle; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.*; +import net.minecraft.core.particles.SimpleParticleType; + +public class BinaryParticle extends TextureSheetParticle +{ + BinaryParticle(ClientLevel p_105856_, double p_105857_, double p_105858_, double p_105859_, double p_105860_, double p_105861_, double p_105862_) + { + super(p_105856_, p_105857_, p_105858_, p_105859_); + this.setSize(0.05F, 0.05F); + this.lifetime = this.random.nextInt(32) + 32; + this.xd = p_105860_; + this.yd = -0.02D; + this.zd = p_105862_; + } + + @Override + public void tick() + { + this.xo = this.x; + this.yo = this.y; + this.zo = this.z; + if (this.age++ < this.lifetime) + { + this.move(this.xd, this.yd, this.zd); + } + else + { + this.remove(); + } + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_OPAQUE; + } + + public static class Provider implements ParticleProvider + { + private final SpriteSet sprites; + + public Provider(SpriteSet p_105899_) { + this.sprites = p_105899_; + } + + public Particle createParticle(SimpleParticleType p_105910_, ClientLevel p_105911_, double p_105912_, double p_105913_, double p_105914_, double p_105915_, double p_105916_, double p_105917_) + { + BinaryParticle particle = new BinaryParticle(p_105911_, p_105912_, p_105913_, p_105914_, p_105915_, p_105916_, p_105917_); + particle.pickSprite(this.sprites); + return particle; + } + } +} \ No newline at end of file diff --git a/common/src/main/java/biomesoplenty/particle/EndSporeParticle.java b/common/src/main/java/biomesoplenty/particle/EndSporeParticle.java new file mode 100644 index 000000000..1b0bc62a1 --- /dev/null +++ b/common/src/main/java/biomesoplenty/particle/EndSporeParticle.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright 2022, the Glitchfiend Team. + * All rights reserved. + ******************************************************************************/ +package biomesoplenty.particle; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.*; +import net.minecraft.core.particles.SimpleParticleType; + +public class EndSporeParticle extends TextureSheetParticle +{ + EndSporeParticle(ClientLevel p_105856_, double p_105857_, double p_105858_, double p_105859_, double p_105860_, double p_105861_, double p_105862_) + { + super(p_105856_, p_105857_, p_105858_, p_105859_); + this.setSize(0.05F, 0.05F); + this.lifetime = this.random.nextInt(128) + 32; + this.xd = (double)((this.random.nextFloat() - this.random.nextFloat()) / 100.0F); + this.yd = (double)(this.random.nextFloat() / 100.0F); + this.zd = (double)((this.random.nextFloat() - this.random.nextFloat()) / 100.0F); + } + + @Override + public void tick() + { + this.xo = this.x; + this.yo = this.y; + this.zo = this.z; + if (this.age++ < this.lifetime) + { + this.move(this.xd, this.yd, this.zd); + } + else + { + this.remove(); + } + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_OPAQUE; + } + + public static class Provider implements ParticleProvider + { + private final SpriteSet sprites; + + public Provider(SpriteSet p_105899_) { + this.sprites = p_105899_; + } + + public Particle createParticle(SimpleParticleType p_105910_, ClientLevel p_105911_, double p_105912_, double p_105913_, double p_105914_, double p_105915_, double p_105916_, double p_105917_) + { + EndSporeParticle particle = new EndSporeParticle(p_105911_, p_105912_, p_105913_, p_105914_, p_105915_, p_105916_, p_105917_); + particle.pickSprite(this.sprites); + return particle; + } + } +} \ No newline at end of file diff --git a/common/src/main/java/biomesoplenty/worldgen/BOPSurfaceRuleData.java b/common/src/main/java/biomesoplenty/worldgen/BOPSurfaceRuleData.java index ce4cbfa78..7570bb00a 100644 --- a/common/src/main/java/biomesoplenty/worldgen/BOPSurfaceRuleData.java +++ b/common/src/main/java/biomesoplenty/worldgen/BOPSurfaceRuleData.java @@ -45,6 +45,7 @@ public class BOPSurfaceRuleData // BOP private static final SurfaceRules.RuleSource ALGAL_END_STONE = makeStateRule(BOPBlocks.ALGAL_END_STONE); + private static final SurfaceRules.RuleSource UNMAPPED_END_STONE = makeStateRule(BOPBlocks.UNMAPPED_END_STONE); private static final SurfaceRules.RuleSource DRIED_SALT = makeStateRule(BOPBlocks.DRIED_SALT); private static final SurfaceRules.RuleSource WHITE_SAND = makeStateRule(BOPBlocks.WHITE_SAND); private static final SurfaceRules.RuleSource WHITE_SANDSTONE = makeStateRule(BOPBlocks.WHITE_SANDSTONE); @@ -341,6 +342,7 @@ public static SurfaceRules.RuleSource end() ) ) ), + SurfaceRules.ifTrue(SurfaceRules.isBiome(BOPBiomes.END_CORRUPTION), UNMAPPED_END_STONE), SurfaceRules.ifTrue( SurfaceRules.isBiome(BOPBiomes.END_REEF), SurfaceRules.sequence( diff --git a/common/src/main/java/biomesoplenty/worldgen/feature/misc/AnomalyFeature.java b/common/src/main/java/biomesoplenty/worldgen/feature/misc/AnomalyFeature.java index 3d278d0f2..f3235d187 100644 --- a/common/src/main/java/biomesoplenty/worldgen/feature/misc/AnomalyFeature.java +++ b/common/src/main/java/biomesoplenty/worldgen/feature/misc/AnomalyFeature.java @@ -6,6 +6,7 @@ import biomesoplenty.api.block.BOPBlocks; import biomesoplenty.block.AnomalyBlock; +import biomesoplenty.init.ModTags; import biomesoplenty.util.SimpleBlockPredicate; import com.mojang.serialization.Codec; import net.minecraft.core.BlockPos; @@ -22,8 +23,8 @@ public class AnomalyFeature extends Feature { - protected SimpleBlockPredicate placeOn = (world, pos) -> world.getBlockState(pos).getBlock() == Blocks.END_STONE; - protected SimpleBlockPredicate replace = (world, pos) -> world.getBlockState(pos).is(BlockTags.REPLACEABLE_BY_TREES) || world.getBlockState(pos).getBlock() instanceof BushBlock || world.getBlockState(pos).getBlock() == Blocks.END_STONE || world.getBlockState(pos).getBlock() == BOPBlocks.ALGAL_END_STONE || world.getBlockState(pos).getBlock() == BOPBlocks.WHITE_SAND || world.getBlockState(pos).getBlock() == BOPBlocks.WHITE_SANDSTONE || world.getBlockState(pos).getBlock() == BOPBlocks.NULL_END_STONE || world.getBlockState(pos).getBlock() == BOPBlocks.NULL_BLOCK; + protected SimpleBlockPredicate placeOn = (world, pos) -> world.getBlockState(pos).getBlock() == Blocks.END_STONE || world.getBlockState(pos).getBlock() == BOPBlocks.UNMAPPED_END_STONE; + protected SimpleBlockPredicate replace = (world, pos) -> world.getBlockState(pos).is(BlockTags.REPLACEABLE_BY_TREES) || world.getBlockState(pos).getBlock() instanceof BushBlock || world.getBlockState(pos).is(ModTags.Blocks.NULL_REPLACEABLE); public AnomalyFeature(Codec deserializer) { @@ -65,21 +66,34 @@ public boolean place(FeaturePlaceContext featurePlaceC { if (x == -3 || x == size+3 || z == -3 || z == size+3) { - if (rand.nextInt(3) == 0 && (world.getBlockState(pos.offset(x,y,z)).getBlock() == Blocks.END_STONE || world.getBlockState(pos.offset(x,y,z)).getBlock() == BOPBlocks.ALGAL_END_STONE || world.getBlockState(pos).getBlock() == BOPBlocks.WHITE_SAND || world.getBlockState(pos).getBlock() == BOPBlocks.WHITE_SANDSTONE || world.getBlockState(pos.offset(x,y,z)).getBlock() == BOPBlocks.NULL_END_STONE)) + if (rand.nextInt(4) == 0 && this.replace.matches(world, pos.offset(x,y,z)) && world.getBlockState(pos.offset(x,y,z)).getBlock() != BOPBlocks.NULL_BLOCK) { - world.setBlock(pos.offset(x,y,z), BOPBlocks.NULL_END_STONE.defaultBlockState(), 2); + if (!((x == -3 || x == size+3) && (z == -3 || z == size+3))) + { + world.setBlock(pos.offset(x,y,z), BOPBlocks.NULL_END_STONE.defaultBlockState(), 2); + } } } else if (x == -2 || x == size+2 || z == -2 || z == size+2) { - if (world.getBlockState(pos.offset(x,y,z)).getBlock() == Blocks.END_STONE || world.getBlockState(pos.offset(x,y,z)).getBlock() == BOPBlocks.ALGAL_END_STONE || world.getBlockState(pos).getBlock() == BOPBlocks.WHITE_SAND || world.getBlockState(pos).getBlock() == BOPBlocks.WHITE_SANDSTONE || world.getBlockState(pos.offset(x,y,z)).getBlock() == BOPBlocks.NULL_END_STONE) + if (this.replace.matches(world, pos.offset(x,y,z)) && world.getBlockState(pos.offset(x,y,z)).getBlock() != BOPBlocks.NULL_BLOCK) { - world.setBlock(pos.offset(x,y,z), BOPBlocks.NULL_END_STONE.defaultBlockState(), 2); + if (!((x == -2 || x == size+2) && (z == -2 || z == size+2))) + { + world.setBlock(pos.offset(x,y,z), BOPBlocks.NULL_END_STONE.defaultBlockState(), 2); + } } } else if (x == -1 || x == size+1 || z == -1 || z == size+1) { - this.setBlock(world, pos.offset(x,y,z), BOPBlocks.NULL_BLOCK.defaultBlockState()); + if ((x == -1 || x == size+1) && (z == -1 || z == size+1)) + { + this.setBlock(world, pos.offset(x,y,z), BOPBlocks.NULL_END_STONE.defaultBlockState()); + } + else + { + this.setBlock(world, pos.offset(x,y,z), BOPBlocks.NULL_BLOCK.defaultBlockState()); + } } else { diff --git a/common/src/main/java/biomesoplenty/worldgen/feature/misc/BarnacleFeature.java b/common/src/main/java/biomesoplenty/worldgen/feature/misc/BarnacleFeature.java index 5b6647643..b295d4f7f 100644 --- a/common/src/main/java/biomesoplenty/worldgen/feature/misc/BarnacleFeature.java +++ b/common/src/main/java/biomesoplenty/worldgen/feature/misc/BarnacleFeature.java @@ -56,7 +56,7 @@ public boolean place(FeaturePlaceContext featurePlaceC for (Direction direction : Direction.values()) { BlockState blockstate1 = worldIn.getBlockState(blockpos.relative(direction)); - if (rand.nextInt(4) == 0 && (blockstate1 == Blocks.END_STONE.defaultBlockState() || blockstate1 == BOPBlocks.ALGAL_END_STONE.defaultBlockState() || blockstate1 == BOPBlocks.WHITE_SAND.defaultBlockState() || blockstate1 == BOPBlocks.WHITE_SANDSTONE.defaultBlockState() || blockstate1.is(ModTags.Blocks.DEAD_CORAL_BLOCKS))) + if (rand.nextInt(4) == 0 && (blockstate1 == Blocks.END_STONE.defaultBlockState() || blockstate1 == BOPBlocks.UNMAPPED_END_STONE.defaultBlockState() || blockstate1 == BOPBlocks.NULL_END_STONE.defaultBlockState() || blockstate1 == BOPBlocks.ALGAL_END_STONE.defaultBlockState() || blockstate1 == BOPBlocks.WHITE_SAND.defaultBlockState() || blockstate1 == BOPBlocks.WHITE_SANDSTONE.defaultBlockState() || blockstate1.is(ModTags.Blocks.DEAD_CORAL_BLOCKS))) { barnaclestate = barnaclestate.setValue(MultifaceBlock.getFaceProperty(direction), true); faces++; diff --git a/common/src/main/java/biomesoplenty/worldgen/feature/misc/RadiantHandsFeature.java b/common/src/main/java/biomesoplenty/worldgen/feature/misc/RadiantHandsFeature.java index d669c1605..0bc290775 100644 --- a/common/src/main/java/biomesoplenty/worldgen/feature/misc/RadiantHandsFeature.java +++ b/common/src/main/java/biomesoplenty/worldgen/feature/misc/RadiantHandsFeature.java @@ -95,7 +95,7 @@ private static boolean isInvalidPlacementLocation(LevelAccessor p_67297_, BlockP else { BlockState blockstate = p_67297_.getBlockState(p_67298_.below()); - return !blockstate.is(Blocks.END_STONE) && !blockstate.is(BOPBlocks.ALGAL_END_STONE); + return !blockstate.is(Blocks.END_STONE) && !blockstate.is(BOPBlocks.UNMAPPED_END_STONE) && !blockstate.is(BOPBlocks.NULL_END_STONE) && !blockstate.is(BOPBlocks.ALGAL_END_STONE); } } } \ No newline at end of file diff --git a/common/src/main/java/biomesoplenty/worldgen/feature/tree/EmpyrealTreeFeature.java b/common/src/main/java/biomesoplenty/worldgen/feature/tree/EmpyrealTreeFeature.java index 414f3b659..cfce7f58d 100644 --- a/common/src/main/java/biomesoplenty/worldgen/feature/tree/EmpyrealTreeFeature.java +++ b/common/src/main/java/biomesoplenty/worldgen/feature/tree/EmpyrealTreeFeature.java @@ -54,7 +54,14 @@ protected boolean doPlace(WorldGenLevel world, RandomSource random, BlockPos sta BlockPos topPos = pos.above(height); - this.placeLog(world, topPos.offset(0, 0, 0), logs, config); + if (world.getRandom().nextInt(5) == 0) + { + world.setBlock(topPos.offset(0, 0, 0), Blocks.SHROOMLIGHT.defaultBlockState(), 2); + } + else + { + this.placeLog(world, topPos.offset(0, 0, 0), logs, config); + } if (random.nextInt(2) == 0) { @@ -238,6 +245,16 @@ protected boolean doPlace(WorldGenLevel world, RandomSource random, BlockPos sta this.placeLeaves(world, topPos.offset(-1, 9, 0), leaves, config); this.placeLeaves(world, topPos.offset(0, 9, 1), leaves, config); this.placeLeaves(world, topPos.offset(0, 9, -1), leaves, config); + + if (world.getRandom().nextInt(5) == 0) + { + world.setBlock(topPos.offset(0, 8, 0), Blocks.SHROOMLIGHT.defaultBlockState(), 2); + } + else + { + this.placeLeaves(world, topPos.offset(0, 8, 0), leaves, config); + } + this.placeLeaves(world, topPos.offset(1, 8, 0), leaves, config); this.placeLeaves(world, topPos.offset(-1, 8, 0), leaves, config); this.placeLeaves(world, topPos.offset(0, 8, 1), leaves, config); diff --git a/common/src/main/java/biomesoplenty/worldgen/placement/BOPEndPlacements.java b/common/src/main/java/biomesoplenty/worldgen/placement/BOPEndPlacements.java index 6ccfe098b..3ae963ec3 100644 --- a/common/src/main/java/biomesoplenty/worldgen/placement/BOPEndPlacements.java +++ b/common/src/main/java/biomesoplenty/worldgen/placement/BOPEndPlacements.java @@ -63,7 +63,7 @@ public static void bootstrap(BootstapContext context) register(context, BOPEndPlacements.JAGGED_SANDSTONE, JAGGED_SANDSTONE, List.of(RarityFilter.onAverageOnceEvery(3), InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome())); register(context, BOPEndPlacements.NULL_LAKE, NULL_LAKE, List.of(RarityFilter.onAverageOnceEvery(2), InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome())); register(context, BOPEndPlacements.PATCH_ENDERPHYTES, PATCH_ENDERPHYTES, VegetationPlacements.worldSurfaceSquaredWithCount(5)); - register(context, BOPEndPlacements.RADIANT_HANDS, RADIANT_HANDS, List.of(RarityFilter.onAverageOnceEvery(3), InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome())); + register(context, BOPEndPlacements.RADIANT_HANDS, RADIANT_HANDS, List.of(RarityFilter.onAverageOnceEvery(2), InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome())); register(context, BOPEndPlacements.TIDEPOOL, TIDEPOOL, List.of(CountPlacement.of(3), InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP_TOP_SOLID, BiomeFilter.biome())); register(context, BOPEndPlacements.TREES_END_CORRUPTION, TREES_END_CORRUPTION, treePlacement(PlacementUtils.countExtra(0, 0.2F, 1))); register(context, BOPEndPlacements.TREES_END_WILDS, TREES_END_WILDS, treePlacement(PlacementUtils.countExtra(1, 0.1F, 1))); diff --git a/common/src/main/java/biomesoplenty/worldgen/placement/BOPTreePlacements.java b/common/src/main/java/biomesoplenty/worldgen/placement/BOPTreePlacements.java index 31a2e30dc..09bd6a2f1 100644 --- a/common/src/main/java/biomesoplenty/worldgen/placement/BOPTreePlacements.java +++ b/common/src/main/java/biomesoplenty/worldgen/placement/BOPTreePlacements.java @@ -205,7 +205,7 @@ public static void bootstrap(BootstapContext context) register(context, BOPTreePlacements.MANGROVE_TWIGLET_TREE_CHECKED, MANGROVE_TWIGLET_TREE, List.of(PlacementUtils.filteredByBlockSurvival(Blocks.OAK_SAPLING))); register(context, BOPTreePlacements.RED_MAPLE_TREE_CHECKED, RED_MAPLE_TREE, List.of(PlacementUtils.filteredByBlockSurvival(BOPBlocks.RED_MAPLE_SAPLING))); register(context, BOPTreePlacements.MAPLE_TWIGLET_TREE_CHECKED, MAPLE_TWIGLET_TREE, List.of(PlacementUtils.filteredByBlockSurvival(BOPBlocks.RED_MAPLE_SAPLING))); - register(context, BOPTreePlacements.NULL_TREE_CHECKED, NULL_TREE, List.of(BlockPredicateFilter.forPredicate(BlockPredicate.matchesBlocks(new BlockPos(0, -1, 0), Blocks.END_STONE)))); + register(context, BOPTreePlacements.NULL_TREE_CHECKED, NULL_TREE, List.of(BlockPredicateFilter.forPredicate(BlockPredicate.matchesBlocks(new BlockPos(0, -1, 0), BOPBlocks.UNMAPPED_END_STONE)))); register(context, BOPTreePlacements.CHERRY_TWIGLET_TREE_CHECKED, CHERRY_TWIGLET_TREE, List.of(PlacementUtils.filteredByBlockSurvival(Blocks.CHERRY_SAPLING))); register(context, BOPTreePlacements.SNOWBLOSSOM_TWIGLET_TREE_CHECKED, SNOWBLOSSOM_TWIGLET_TREE, List.of(PlacementUtils.filteredByBlockSurvival(BOPBlocks.SNOWBLOSSOM_SAPLING))); register(context, BOPTreePlacements.OAK_BUSH_CHECKED, OAK_BUSH, List.of(PlacementUtils.filteredByBlockSurvival(Blocks.OAK_SAPLING))); diff --git a/common/src/main/resources/assets/biomesoplenty/blockstates/unmapped_end_stone.json b/common/src/main/resources/assets/biomesoplenty/blockstates/unmapped_end_stone.json new file mode 100644 index 000000000..2114fd31f --- /dev/null +++ b/common/src/main/resources/assets/biomesoplenty/blockstates/unmapped_end_stone.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "biomesoplenty:block/unmapped_end_stone" } + } +} diff --git a/common/src/main/resources/assets/biomesoplenty/lang/en_us.json b/common/src/main/resources/assets/biomesoplenty/lang/en_us.json index 58cab130b..0fba4ca1f 100644 --- a/common/src/main/resources/assets/biomesoplenty/lang/en_us.json +++ b/common/src/main/resources/assets/biomesoplenty/lang/en_us.json @@ -496,6 +496,7 @@ "block.biomesoplenty.umbran_wall_sign": "Umbran Wall Sign", "block.biomesoplenty.umbran_wall_hanging_sign": "Umbran Wall Hanging Sign", "block.biomesoplenty.umbran_wood": "Umbran Wood", + "block.biomesoplenty.unmapped_end_stone": "§mEnd Stone", "block.biomesoplenty.violet": "Violet", "block.biomesoplenty.watergrass": "Watergrass", "block.biomesoplenty.waterlily": "Waterlily", diff --git a/common/src/main/resources/assets/biomesoplenty/models/block/null_end_stone.json b/common/src/main/resources/assets/biomesoplenty/models/block/null_end_stone.json index 39b7b0683..9788e9fd3 100644 --- a/common/src/main/resources/assets/biomesoplenty/models/block/null_end_stone.json +++ b/common/src/main/resources/assets/biomesoplenty/models/block/null_end_stone.json @@ -1,6 +1,32 @@ { - "parent": "block/cube_all", - "textures": { - "all": "biomesoplenty:block/null_end_stone" - } -} + "parent": "block/block", + "textures": { + "endstone": "minecraft:block/end_stone", + "null": "biomesoplenty:block/null_overlay", + "particle": "#endstone" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "texture": "#endstone", "cullface": "down" }, + "up": { "texture": "#endstone", "cullface": "up" }, + "north": { "texture": "#endstone", "cullface": "north" }, + "south": { "texture": "#endstone", "cullface": "south" }, + "west": { "texture": "#endstone", "cullface": "west" }, + "east": { "texture": "#endstone", "cullface": "east" } + } + }, + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "texture": "#null", "cullface": "down" }, + "up": { "texture": "#null", "cullface": "up" }, + "north": { "texture": "#null", "cullface": "north" }, + "south": { "texture": "#null", "cullface": "south" }, + "west": { "texture": "#null", "cullface": "west" }, + "east": { "texture": "#null", "cullface": "east" } + } + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/biomesoplenty/models/block/null_end_stone_alt.json b/common/src/main/resources/assets/biomesoplenty/models/block/null_end_stone_alt.json index 1209f0d0f..716b6681d 100644 --- a/common/src/main/resources/assets/biomesoplenty/models/block/null_end_stone_alt.json +++ b/common/src/main/resources/assets/biomesoplenty/models/block/null_end_stone_alt.json @@ -1,6 +1,32 @@ { - "parent": "block/cube_all", - "textures": { - "all": "biomesoplenty:block/null_end_stone_alt" - } -} + "parent": "block/block", + "textures": { + "endstone": "minecraft:block/end_stone", + "null": "biomesoplenty:block/null_overlay_alt", + "particle": "#endstone" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "texture": "#endstone", "cullface": "down" }, + "up": { "texture": "#endstone", "cullface": "up" }, + "north": { "texture": "#endstone", "cullface": "north" }, + "south": { "texture": "#endstone", "cullface": "south" }, + "west": { "texture": "#endstone", "cullface": "west" }, + "east": { "texture": "#endstone", "cullface": "east" } + } + }, + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "texture": "#null", "cullface": "down" }, + "up": { "texture": "#null", "cullface": "up" }, + "north": { "texture": "#null", "cullface": "north" }, + "south": { "texture": "#null", "cullface": "south" }, + "west": { "texture": "#null", "cullface": "west" }, + "east": { "texture": "#null", "cullface": "east" } + } + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/biomesoplenty/models/block/unmapped_end_stone.json b/common/src/main/resources/assets/biomesoplenty/models/block/unmapped_end_stone.json new file mode 100644 index 000000000..9c452a945 --- /dev/null +++ b/common/src/main/resources/assets/biomesoplenty/models/block/unmapped_end_stone.json @@ -0,0 +1,21 @@ +{ + "parent": "block/block", + "textures": { + "all": "block/end_stone", + "particle": "#all" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [16, 0, 0, 1], "texture": "#all"}, + "east": {"uv": [15, 0, 16, 16], "rotation": 90, "texture": "#all"}, + "south": {"uv": [0, 15, 16, 16], "texture": "#all"}, + "west": {"uv": [0, 0, 1, 16], "rotation": 270, "texture": "#all"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#all"}, + "down": {"uv": [0, 16, 16, 0], "texture": "#all"} + } + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/biomesoplenty/models/item/radiant_hands_plant.json b/common/src/main/resources/assets/biomesoplenty/models/item/radiant_hands_plant.json new file mode 100644 index 000000000..2e243e95a --- /dev/null +++ b/common/src/main/resources/assets/biomesoplenty/models/item/radiant_hands_plant.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "biomesoplenty:block/radiant_hands_lit" + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/biomesoplenty/models/item/unmapped_end_stone.json b/common/src/main/resources/assets/biomesoplenty/models/item/unmapped_end_stone.json new file mode 100644 index 000000000..21398db8c --- /dev/null +++ b/common/src/main/resources/assets/biomesoplenty/models/item/unmapped_end_stone.json @@ -0,0 +1,3 @@ +{ + "parent": "biomesoplenty:block/unmapped_end_stone" +} diff --git a/common/src/main/resources/assets/biomesoplenty/particles/binary.json b/common/src/main/resources/assets/biomesoplenty/particles/binary.json new file mode 100644 index 000000000..d272007de --- /dev/null +++ b/common/src/main/resources/assets/biomesoplenty/particles/binary.json @@ -0,0 +1,6 @@ +{ + "textures": [ + "biomesoplenty:binary_0", + "biomesoplenty:binary_1" + ] +} diff --git a/common/src/main/resources/assets/biomesoplenty/particles/end_spore.json b/common/src/main/resources/assets/biomesoplenty/particles/end_spore.json new file mode 100644 index 000000000..db984caaa --- /dev/null +++ b/common/src/main/resources/assets/biomesoplenty/particles/end_spore.json @@ -0,0 +1,6 @@ +{ + "textures": [ + "biomesoplenty:end_spore_0", + "biomesoplenty:end_spore_1" + ] +} diff --git a/common/src/main/resources/assets/biomesoplenty/textures/block/null_end_stone.png b/common/src/main/resources/assets/biomesoplenty/textures/block/null_end_stone.png deleted file mode 100644 index 178154dca..000000000 Binary files a/common/src/main/resources/assets/biomesoplenty/textures/block/null_end_stone.png and /dev/null differ diff --git a/common/src/main/resources/assets/biomesoplenty/textures/block/null_end_stone_alt.png b/common/src/main/resources/assets/biomesoplenty/textures/block/null_end_stone_alt.png deleted file mode 100644 index b885a7133..000000000 Binary files a/common/src/main/resources/assets/biomesoplenty/textures/block/null_end_stone_alt.png and /dev/null differ diff --git a/common/src/main/resources/assets/biomesoplenty/textures/block/null_overlay.png b/common/src/main/resources/assets/biomesoplenty/textures/block/null_overlay.png new file mode 100644 index 000000000..db62e915b Binary files /dev/null and b/common/src/main/resources/assets/biomesoplenty/textures/block/null_overlay.png differ diff --git a/common/src/main/resources/assets/biomesoplenty/textures/block/null_overlay_alt.png b/common/src/main/resources/assets/biomesoplenty/textures/block/null_overlay_alt.png new file mode 100644 index 000000000..78ed2c920 Binary files /dev/null and b/common/src/main/resources/assets/biomesoplenty/textures/block/null_overlay_alt.png differ diff --git a/common/src/main/resources/assets/biomesoplenty/textures/particle/binary_0.png b/common/src/main/resources/assets/biomesoplenty/textures/particle/binary_0.png new file mode 100644 index 000000000..962daef25 Binary files /dev/null and b/common/src/main/resources/assets/biomesoplenty/textures/particle/binary_0.png differ diff --git a/common/src/main/resources/assets/biomesoplenty/textures/particle/binary_1.png b/common/src/main/resources/assets/biomesoplenty/textures/particle/binary_1.png new file mode 100644 index 000000000..b515525fb Binary files /dev/null and b/common/src/main/resources/assets/biomesoplenty/textures/particle/binary_1.png differ diff --git a/common/src/main/resources/assets/biomesoplenty/textures/particle/end_spore_0.png b/common/src/main/resources/assets/biomesoplenty/textures/particle/end_spore_0.png new file mode 100644 index 000000000..bfb92c71f Binary files /dev/null and b/common/src/main/resources/assets/biomesoplenty/textures/particle/end_spore_0.png differ diff --git a/common/src/main/resources/assets/biomesoplenty/textures/particle/end_spore_1.png b/common/src/main/resources/assets/biomesoplenty/textures/particle/end_spore_1.png new file mode 100644 index 000000000..c59d0b471 Binary files /dev/null and b/common/src/main/resources/assets/biomesoplenty/textures/particle/end_spore_1.png differ diff --git a/common/src/main/resources/data/biomesoplenty/loot_tables/blocks/unmapped_end_stone.json b/common/src/main/resources/data/biomesoplenty/loot_tables/blocks/unmapped_end_stone.json new file mode 100644 index 000000000..1e1377384 --- /dev/null +++ b/common/src/main/resources/data/biomesoplenty/loot_tables/blocks/unmapped_end_stone.json @@ -0,0 +1,44 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "biomesoplenty:unmapped_end_stone" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "name": "minecraft:end_stone" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/biomesoplenty/tags/blocks/null_replaceable.json b/common/src/main/resources/data/biomesoplenty/tags/blocks/null_replaceable.json new file mode 100644 index 000000000..cf5c45f83 --- /dev/null +++ b/common/src/main/resources/data/biomesoplenty/tags/blocks/null_replaceable.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + "#biomesoplenty:dead_coral_blocks", + "minecraft:end_stone", + "biomesoplenty:algal_end_stone", + "biomesoplenty:unmapped_end_stone", + "biomesoplenty:null_end_stone", + "biomesoplenty:null_block", + "biomesoplenty:white_sand", + "biomesoplenty:white_sandstone" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/data/minecraft/tags/blocks/dragon_immune.json b/common/src/main/resources/data/minecraft/tags/blocks/dragon_immune.json index 36313b283..da964e401 100644 --- a/common/src/main/resources/data/minecraft/tags/blocks/dragon_immune.json +++ b/common/src/main/resources/data/minecraft/tags/blocks/dragon_immune.json @@ -2,6 +2,7 @@ "values": [ "biomesoplenty:algal_end_stone", "biomesoplenty:anomaly", + "biomesoplenty:unmapped_end_stone", "biomesoplenty:null_end_stone", "biomesoplenty:null_block" ] diff --git a/common/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/common/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index f5c54373c..069810f97 100644 --- a/common/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/common/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -46,6 +46,7 @@ "biomesoplenty:blackstone_spines", "biomesoplenty:blackstone_bulb", "biomesoplenty:algal_end_stone", + "biomesoplenty:unmapped_end_stone", "biomesoplenty:null_end_stone", "biomesoplenty:barnacles" ] diff --git a/common/src/main/resources/data/minecraft/tags/blocks/sculk_replaceable.json b/common/src/main/resources/data/minecraft/tags/blocks/sculk_replaceable.json index 2213db24c..590aa9e0d 100644 --- a/common/src/main/resources/data/minecraft/tags/blocks/sculk_replaceable.json +++ b/common/src/main/resources/data/minecraft/tags/blocks/sculk_replaceable.json @@ -2,6 +2,8 @@ "values": [ "biomesoplenty:thermal_calcite", "biomesoplenty:thermal_calcite_vent", - "biomesoplenty:algal_end_stone" + "biomesoplenty:algal_end_stone", + "biomesoplenty:unmapped_end_stone", + "biomesoplenty:null_end_stone" ] } \ No newline at end of file