GenericGeyserMappingBuilder
Produces the final Geyser custom-item v2 mappings file from the generic pipeline's MappedItemRegistry (one entry list per base item). Both modern definition mappings and pre-1.21.4 legacy mappings are emitted.
Modern-entry field order mirrors GeyserBaseDefinition.MAP_CODEC: type, bedrock_identifier, display_name, predicate, bedrock_options, components, model. Legacy entries place the required custom_model_data directly after type.
Within each items.<base> array, entries are sorted by (predicate count asc, bedrock_identifier asc) so unconditional defaults appear LAST — Rainbow's matcher checks longer predicate chains first, so the entry without a predicate must come last to act as the default fall-through case.