Cyanide
cyanide seems to be something that will make me want to drink cyanide a lot less - Starmute, world generation datapack wizard.
A mod which substantially improves Minecraft's data driven world generation error detection and recovery mechanisms. It removes unnecessary stack traces and generates user-friendly error messages for most common issues with world generation datapacks. For some examples of what improvements Cyanide makes to error reporting, see the below list:
All errors identify the exact file, and source datapack where the error originated. Some error messages are improved for clarity or have additional context added where possible.
Parsing Error: Value provider too low (must be >= 0), got -1
at 'placement'
at 'cyanide:worldgen/placed_feature/ore_tin' defined in 'file/Test.zip'
The "Unbound values in registry" error tracks what files were referencing it.
Missing File Error: 'cyanide:worldgen/configured_feature/big_ores' was referenced but not defined
at 'cyanide:worldgen/placed_feature/big_ores' defined in 'file/Test.zip'
Illegal JSON will show the exact file location, along with the surrounding context of where it failed to parse.
Syntax Error: Expected ':' at line 3 column 13 path $.config
at:
{
"type": "minecraft:big_flowers",
"config" {
^
here
at 'cyanide:worldgen/configured_feature/flowers' defined in 'file/Test.zip'
"Feature Cycle" errors (where features are defined in different order within different biomes) trace and report the exact cycle found
A feature cycle was found.
Cycle:
At step 0
Feature 'minecraft:lake_lava_underground'
must be before 'minecraft:lake_lava_surface' (defined in 'minecraft:ocean' at index 1, 2 and 1 others)
must be before 'cyanide:big_ore' (defined in 'minecraft:ocean' at index 2, 3)
must be before 'cyanide:small_ore' (defined in 'minecraft:plains' at index 0, 1)
must be before 'minecraft:lake_lava_underground' (defined in 'minecraft:ocean' at index 0, 1 and 1 others)
All Versions
+ Add Versione491561](https://github.com/Mojang/DataFixerUpper/commit/e49156100d510cd5fb54dcdb2dfb4efb68be3d46) or [Mojang/DataFixerUpper#54](https://github.com/Mojang/DataFixerUpper/pull/54)).With these changes, come some improvements to Cyanide's error tracking, mainly in being able to handle the "Unbound values in registry" more gracefully by tracking where the unbound reference(s) came from:
``
Missing File Error: 'cyanide:worldgen/configured_feature/big_ores'
was referenced but not defined
at 'cyanide:worldgen/placed_feature/big_ores' defined in 'file/Test.zip'
`
### Changes
- Updated to Minecraft 1.21, supporting NeoForge and Fabric.
- Rewrote registry parsing (again) in order to better handle "Unbound values in registry" errors.
- Added improved error messages for
IntProvider and FloatProvider.Added various fieldOf injections for traceability across a number of different data types.Removed error reporting modifications for Biomes, Enum` types, and list indexes.### Features
For a more comprehensive list of Cyanide's existing features, [see here](https://github.com/alcatrazEscapee/cyanide?tab=readme-ov-file#cyanide).
e491561](https://github.com/Mojang/DataFixerUpper/commit/e49156100d510cd5fb54dcdb2dfb4efb68be3d46) or [Mojang/DataFixerUpper#54](https://github.com/Mojang/DataFixerUpper/pull/54)).With these changes, come some improvements to Cyanide's error tracking, mainly in being able to handle the "Unbound values in registry" more gracefully by tracking where the unbound reference(s) came from:
``
Missing File Error: 'cyanide:worldgen/configured_feature/big_ores'
was referenced but not defined
at 'cyanide:worldgen/placed_feature/big_ores' defined in 'file/Test.zip'
`
### Changes
- Updated to Minecraft 1.21, supporting NeoForge and Fabric.
- Rewrote registry parsing (again) in order to better handle "Unbound values in registry" errors.
- Added improved error messages for
IntProvider and FloatProvider.Added various fieldOf injections for traceability across a number of different data types.Removed error reporting modifications for Biomes, Enum` types, and list indexes.### Features
For a more comprehensive list of Cyanide's existing features, [see here](https://github.com/alcatrazEscapee/cyanide?tab=readme-ov-file#cyanide).
- Support Fabric's custom world gen registry API. Fixes #28, #29
- Support Fabric's custom world gen registry API. Fixes #28, #29
- Update to 1.20.1
- Support Forge's custom world gen registry API. Fixes #20, #21, and #22.
- Update to 1.20.1
- Support Forge's custom world gen registry API. Fixes #20, #21, and #22.
Mojang pulled a fast one on modders and unfortunately this is not compatible with 1.19.2. They also managed to rewrite some of their registry loading which has made Cyanide a bit more ineffective, as tracking down invalid references is no longer possible (quite unfortunately).
Mojang pulled a fast one on modders and unfortunately this is not compatible with 1.19.2. They also managed to rewrite some of their registry loading which has made Cyanide a bit more ineffective, as tracking down invalid references is no longer possible (quite unfortunately).
Nothing has particularly changed, however this is updated to both Forge and Fabric, using a new setup which should allow both mod loaders to be maintained more in parallel than was already possible.
Nothing has particularly changed, however this is updated to both Forge and Fabric, using a new setup which should allow both mod loaders to be maintained more in parallel than was already possible.
- Added some additional error reporting to placed features.
- Improved the cases in which feature cycle errors were able to be detected. Previously, this would only work with the "add datapacks" screen.
- Improve performance of data pack detection (the
at: data pack foobar.zip) error, when no errors are detected. Can result in 2-3x speedups for larger world gen data packs.
Added detection and improved error logging for feature cycles. The new error messages now identify the exact cycle, including the biomes and features by name that they were defined in (a significant improvement on printing the hash codes of the biomes).
Example of a feature cycle using Cyanide:
``
A feature cycle was found.
Cycle:
At step 7
Feature 'minecraft:patch_fire'
must be before 'minecraft:patch_soul_fire' (defined in 'minecraft:warped_forest' at index 1, 2 and 3 others)
must be before 'minecraft:glowstone_extra' (defined in 'minecraft:warped_forest' at index 2, 3 and 2 others)
must be before 'minecraft:glowstone' (defined in 'minecraft:warped_forest' at index 3, 4 and 4 others)
must be before 'minecraft:patch_crimson_roots' (defined in 'minecraft:soul_sand_valley' at index 2, 3)
must be before 'minecraft:patch_fire' (defined in 'minecraft:soul_sand_valley' at index 3, 4)
`
The same datapack in Vanilla, 1.18-pre7:
`
Failed to validate datapack
java.util.concurrent.CompletionException: java.lang.IllegalStateException: Feature order cycle found, involved biomes: [caz@5bf17128, caz@7913a77c]
... followed by a ~50 line long stacktrace ...
``- Added some additional error reporting to placed features.
- Improved the cases in which feature cycle errors were able to be detected. Previously, this would only work with the "add datapacks" screen.
- Improve performance of data pack detection (the
at: data pack foobar.zip) error, when no errors are detected. Can result in 2-3x speedups for larger world gen data packs.
Added detection and improved error logging for feature cycles. The new error messages now identify the exact cycle, including the biomes and features by name that they were defined in (a significant improvement on printing the hash codes of the biomes).
Example of a feature cycle using Cyanide:
``
A feature cycle was found.
Cycle:
At step 7
Feature 'minecraft:patch_fire'
must be before 'minecraft:patch_soul_fire' (defined in 'minecraft:warped_forest' at index 1, 2 and 3 others)
must be before 'minecraft:glowstone_extra' (defined in 'minecraft:warped_forest' at index 2, 3 and 2 others)
must be before 'minecraft:glowstone' (defined in 'minecraft:warped_forest' at index 3, 4 and 4 others)
must be before 'minecraft:patch_crimson_roots' (defined in 'minecraft:soul_sand_valley' at index 2, 3)
must be before 'minecraft:patch_fire' (defined in 'minecraft:soul_sand_valley' at index 3, 4)
`
The same datapack in Vanilla, 1.18-pre7:
`
Failed to validate datapack
java.util.concurrent.CompletionException: java.lang.IllegalStateException: Feature order cycle found, involved biomes: [caz@5bf17128, caz@7913a77c]
... followed by a ~50 line long stacktrace ...
``- Changes**
- Add improved logging for vanilla's "silent" world generation datapack errors, namely dimension errors.
- Fix trace information for structure template pool processor lists not showing up as intended.
- Changes**
- Add improved logging for vanilla's "silent" world generation datapack errors, namely dimension errors.
- Fix trace information for structure template pool processor lists not showing up as intended.