The Deep Dark generates at much higher Y values in Java than in Bedrock
The Deep Dark is much deeper (volume-wise) in Java 22w17a than it is in the latest Bedrock beta/preview.
Example Seed: 5085405352177541826 (Deep Dark Delver's Delight.
)
Figure 1 Coordinates: X: 423 Y: 38 Z: 342
Figure 2 Coordinates: X: 270 Y: 57 Z: 125
The Bedrock edition appears to have the Deep Dark clamped somewhere between Y 26 and Y 32, whereas Java is either unclamped or can generate the Deep Dark up to Y 74 when generating under a maximum height mountain (Y 256).
When under a maximum height mountain, seeing Deep Dark generate at such high layers in Java seems like the correct thing to do when you consider the surface is still nearly 200 blocks above.
Created Issue:
The Deep Dark generates at much higher Y values in Java than in Bedrock
The Deep Dark is much deeper (volume-wise) in Java 22w17a than it is in the latest Bedrock beta/preview.
Example Seed: 5085405352177541826 (Deep Dark Delver's Delight.
)
Figure 1 Coordinates: X: 423 Y: 38 Z: 342
Figure 2 Coordinates: X: 270 Y: 57 Z: 125
The Bedrock edition appears to have the Deep Dark clamped somewhere between Y 26 and Y 32, whereas Java is either unclamped or can generate the Deep Dark up to Y 74 when generating under a maximum height mountain (Y 256).
When under a maximum height mountain, seeing Deep Dark generate at such high layers in Java seems like the correct thing to do when you consider the surface is still nearly 200 blocks above.
This vanilla parity issue is related to MCPE-155213. The fix for that issue was to raise the Y height in the 'sculk_patch_feature.json' file to allow sculk patches to generate up to Y 256, which was successfully deployed in 1.19.0.34 / 1.19.0.35.
However, there is a related file named 'sculk_vein_feature.json' which controls generation of the isolated decorative sculk veins in the Deep Dark. This file still has its Y range limited to 20 instead of 256, causing the decorative sculk veins to stop generating at that height. (It also has its low-end value set to -64 instead of -63, which seems odd since the world bottom does not go below Y -63. But perhaps there is a technical reason for allowing generation to Y -64 with sculk veins?)
While this is not a big deal, the fix is fairly quick and it would be nice to have the decorative sculk veins in sync with their sculk patch counterparts for all the permanent worlds generated by the official 1.19 Wild Update release. Java edition already generates both the sculk patches and decorative sculk veins up to Y 256, which is why this issue is labeled as a parity issue.
Attached are screenshots highlighting the differences between Java and Bedrock. The seed and coordinates are displayed in the screenshots.
bedrockY14.jpg - proper sculk veins below Y 20.
javaY64.jpg - proper sculk veins above Y 20.
bedrockY64.jpg - missing sculk veins above Y 20.
TL;DR summary: There could be several causes for the lack of sculk patches. I created two mcaddon workarounds attached to this issue which produce much better results and can be used when creating new worlds (at the cost of losing the ability to gain Achievements) if the "Custom Biome" setting is checkboxed.
This bug is quite a mystery. The Bedrock and Java sculk feature files are functionally identical as of 1.19.10.20. The best I can determine is:
- The uniform distribution used by the sculk patch generation may not be quite as uniform as it should be. I tested this by replacing the Y coordinate picker with the line "y": "math.random_integer(-63, 255)" which appears to produce the same lack of sculk as using the built-in uniform distribution curve with an extent of -63, 256.
- The sculk generator seems to be starved even though it uses the same number of iterations (256) as Java Edition. When the sculk ceiling was increased from 20 to 256 to fix
MCPE-155213the sculk density decreased greatly. I don't know if internally the iteration count on Bedrock is internally scaled down for mobile device performance reasons, or if Java Edition has an optimization where the heightmap of the Deep Dark biome is used to focus sculk placement to just the inside of the biome, thus creating better density. - Some of the Ancient City structures in Bedrock do not seem to accept sculk growth, like the "tall ruins" structures. Also, some of the structures appear to lack the "extra_growth_chance" enablement tag which is used in the sculk feature definition to produce extra sculk and shriekers around the loot chests.
- Ancient Cites sometimes extend outside of the Deep Dark biome and sculk cannot generate outside of the Deep Dark since there is a biome filter for it in the feature file.
To combat the distribution issue, the two mcaddons I created use weighted distribution to focus more of the sculk at Y -55 where it helps the Ancient Cities the most. [^SculkAndShriekerParityMolang.mcaddon] uses a windowed Molang hermite blend to do this, while [^SculkAndShriekerParityInvGauss.mcaddon] uses the inverse gaussian curve. There are pros and cons to each approach:
- With complete control of the Y function, the Molang version maintains the 256 iteration count so it shouldn't affect mobile devices. The deal breaker is math.random is not deterministic based on the world seed so every time the same world is created, the sculk patches will change.
- The inverse gaussian version does not have that problem - world creation will be consistent. However, because a partial window cannot be created with the built-in distribution curves. Instead, I had to use the top of the deep dark biome to clip the part of the curve I didn't want applied. So the number of iterations had to increase to 512 which may affect mobile devices. I myself have a 7 year old Windows 10 box with a Skylake CPU and these changes run fine for me.
So these add-ons will fix the issue for the most part - save for the structures which don't seem to grow sculk on them, nor when the Ancient City is partially outside of the Deep Dark. Those are separate issues from this sculk patch generation bug. I also boosted the "spread_rounds" property to get the sculk shriekers to generate at Java Edition levels (which is a separate issue) from 1 to 2.




Additional notes: After comparing Bedrock's "sculk_patch_feature.json" and "sculk_vein_feature.json" to Java's corresponding "sculk_patch_deep_dark.json" and "sculk_vein.json" files, it appears that Bedrock allows patches and veins to exist between Y -63 and Y 20, whereas Java allows sculk patches to generate up to Y 256. Here are important snippets of the files:
Bedrock:
"y": { "distribution": "uniform", "extent": [ -63, 20 ] },Java:
{ "type": "minecraft:height_range", "height": { "type": "minecraft:uniform", "max_inclusive": { "absolute": 256 }, "min_inclusive": { "above_bottom": 0 } } },Fix confirmed in 1.19.0.34 and 1.19.0.35. Isolated sculk veins are still clamped to generating below Y 20, however. I will be writing a separate issue for that soon since it involves a different feature rules file.