package net.minecraft.util.datafix;

import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.mojang.datafixers.DSL;
import com.mojang.datafixers.DataFix;
import com.mojang.datafixers.DataFixer;
import com.mojang.datafixers.DataFixerBuilder;
import com.mojang.datafixers.OpticFinder;
import com.mojang.datafixers.TypeRewriteRule;
import com.mojang.datafixers.DSL.TypeReference;
import com.mojang.datafixers.DataFixerBuilder.Result;
import com.mojang.datafixers.schemas.Schema;
import com.mojang.datafixers.types.Type;
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Dynamic;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import net.minecraft.SharedConstants;
import net.minecraft.Util;
import net.minecraft.util.datafix.fixes.AbstractArrowPickupFix;
import net.minecraft.util.datafix.fixes.AddFlagIfNotPresentFix;
import net.minecraft.util.datafix.fixes.AddNewChoices;
import net.minecraft.util.datafix.fixes.AdvancementsFix;
import net.minecraft.util.datafix.fixes.AdvancementsRenameFix;
import net.minecraft.util.datafix.fixes.AreaEffectCloudDurationScaleFix;
import net.minecraft.util.datafix.fixes.AreaEffectCloudPotionFix;
import net.minecraft.util.datafix.fixes.AttributeIdPrefixFix;
import net.minecraft.util.datafix.fixes.AttributeModifierIdFix;
import net.minecraft.util.datafix.fixes.AttributesRenameLegacy;
import net.minecraft.util.datafix.fixes.BannerEntityCustomNameToOverrideComponentFix;
import net.minecraft.util.datafix.fixes.BannerPatternFormatFix;
import net.minecraft.util.datafix.fixes.BedItemColorFix;
import net.minecraft.util.datafix.fixes.BeehiveFieldRenameFix;
import net.minecraft.util.datafix.fixes.BiomeFix;
import net.minecraft.util.datafix.fixes.BitStorageAlignFix;
import net.minecraft.util.datafix.fixes.BlendingDataFix;
import net.minecraft.util.datafix.fixes.BlendingDataRemoveFromNetherEndFix;
import net.minecraft.util.datafix.fixes.BlockEntityBannerColorFix;
import net.minecraft.util.datafix.fixes.BlockEntityBlockStateFix;
import net.minecraft.util.datafix.fixes.BlockEntityCustomNameToComponentFix;
import net.minecraft.util.datafix.fixes.BlockEntityFurnaceBurnTimeFix;
import net.minecraft.util.datafix.fixes.BlockEntityIdFix;
import net.minecraft.util.datafix.fixes.BlockEntityJukeboxFix;
import net.minecraft.util.datafix.fixes.BlockEntityKeepPacked;
import net.minecraft.util.datafix.fixes.BlockEntityRenameFix;
import net.minecraft.util.datafix.fixes.BlockEntityShulkerBoxColorFix;
import net.minecraft.util.datafix.fixes.BlockEntitySignDoubleSidedEditableTextFix;
import net.minecraft.util.datafix.fixes.BlockEntityUUIDFix;
import net.minecraft.util.datafix.fixes.BlockNameFlatteningFix;
import net.minecraft.util.datafix.fixes.BlockPosFormatAndRenamesFix;
import net.minecraft.util.datafix.fixes.BlockPropertyRenameAndFix;
import net.minecraft.util.datafix.fixes.BlockRenameFix;
import net.minecraft.util.datafix.fixes.BlockStateStructureTemplateFix;
import net.minecraft.util.datafix.fixes.BoatSplitFix;
import net.minecraft.util.datafix.fixes.CarvingStepRemoveFix;
import net.minecraft.util.datafix.fixes.CatTypeFix;
import net.minecraft.util.datafix.fixes.CauldronRenameFix;
import net.minecraft.util.datafix.fixes.CavesAndCliffsRenames;
import net.minecraft.util.datafix.fixes.ChestedHorsesInventoryZeroIndexingFix;
import net.minecraft.util.datafix.fixes.ChunkBedBlockEntityInjecterFix;
import net.minecraft.util.datafix.fixes.ChunkBiomeFix;
import net.minecraft.util.datafix.fixes.ChunkDeleteIgnoredLightDataFix;
import net.minecraft.util.datafix.fixes.ChunkDeleteLightFix;
import net.minecraft.util.datafix.fixes.ChunkHeightAndBiomeFix;
import net.minecraft.util.datafix.fixes.ChunkLightRemoveFix;
import net.minecraft.util.datafix.fixes.ChunkPalettedStorageFix;
import net.minecraft.util.datafix.fixes.ChunkProtoTickListFix;
import net.minecraft.util.datafix.fixes.ChunkRenamesFix;
import net.minecraft.util.datafix.fixes.ChunkStatusFix;
import net.minecraft.util.datafix.fixes.ChunkStatusFix2;
import net.minecraft.util.datafix.fixes.ChunkStructuresTemplateRenameFix;
import net.minecraft.util.datafix.fixes.ChunkTicketUnpackPosFix;
import net.minecraft.util.datafix.fixes.ChunkToProtochunkFix;
import net.minecraft.util.datafix.fixes.ColorlessShulkerEntityFix;
import net.minecraft.util.datafix.fixes.ContainerBlockEntityLockPredicateFix;
import net.minecraft.util.datafix.fixes.CriteriaRenameFix;
import net.minecraft.util.datafix.fixes.CustomModelDataExpandFix;
import net.minecraft.util.datafix.fixes.DecoratedPotFieldRenameFix;
import net.minecraft.util.datafix.fixes.DropChancesFormatFix;
import net.minecraft.util.datafix.fixes.DropInvalidSignDataFix;
import net.minecraft.util.datafix.fixes.DyeItemRenameFix;
import net.minecraft.util.datafix.fixes.EffectDurationFix;
import net.minecraft.util.datafix.fixes.EmptyItemInHotbarFix;
import net.minecraft.util.datafix.fixes.EmptyItemInVillagerTradeFix;
import net.minecraft.util.datafix.fixes.EntityArmorStandSilentFix;
import net.minecraft.util.datafix.fixes.EntityAttributeBaseValueFix;
import net.minecraft.util.datafix.fixes.EntityBlockStateFix;
import net.minecraft.util.datafix.fixes.EntityBrushableBlockFieldsRenameFix;
import net.minecraft.util.datafix.fixes.EntityCatSplitFix;
import net.minecraft.util.datafix.fixes.EntityCodSalmonFix;
import net.minecraft.util.datafix.fixes.EntityCustomNameToComponentFix;
import net.minecraft.util.datafix.fixes.EntityElderGuardianSplitFix;
import net.minecraft.util.datafix.fixes.EntityEquipmentToArmorAndHandFix;
import net.minecraft.util.datafix.fixes.EntityFallDistanceFloatToDoubleFix;
import net.minecraft.util.datafix.fixes.EntityFieldsRenameFix;
import net.minecraft.util.datafix.fixes.EntityGoatMissingStateFix;
import net.minecraft.util.datafix.fixes.EntityHealthFix;
import net.minecraft.util.datafix.fixes.EntityHorseSaddleFix;
import net.minecraft.util.datafix.fixes.EntityHorseSplitFix;
import net.minecraft.util.datafix.fixes.EntityIdFix;
import net.minecraft.util.datafix.fixes.EntityItemFrameDirectionFix;
import net.minecraft.util.datafix.fixes.EntityMinecartIdentifiersFix;
import net.minecraft.util.datafix.fixes.EntityPaintingItemFrameDirectionFix;
import net.minecraft.util.datafix.fixes.EntityPaintingMotiveFix;
import net.minecraft.util.datafix.fixes.EntityProjectileOwnerFix;
import net.minecraft.util.datafix.fixes.EntityPufferfishRenameFix;
import net.minecraft.util.datafix.fixes.EntityRavagerRenameFix;
import net.minecraft.util.datafix.fixes.EntityRedundantChanceTagsFix;
import net.minecraft.util.datafix.fixes.EntityRidingToPassengersFix;
import net.minecraft.util.datafix.fixes.EntitySalmonSizeFix;
import net.minecraft.util.datafix.fixes.EntityShulkerColorFix;
import net.minecraft.util.datafix.fixes.EntityShulkerRotationFix;
import net.minecraft.util.datafix.fixes.EntitySkeletonSplitFix;
import net.minecraft.util.datafix.fixes.EntitySpawnerItemVariantComponentFix;
import net.minecraft.util.datafix.fixes.EntityStringUuidFix;
import net.minecraft.util.datafix.fixes.EntityTheRenameningFix;
import net.minecraft.util.datafix.fixes.EntityTippedArrowFix;
import net.minecraft.util.datafix.fixes.EntityUUIDFix;
import net.minecraft.util.datafix.fixes.EntityVariantFix;
import net.minecraft.util.datafix.fixes.EntityWolfColorFix;
import net.minecraft.util.datafix.fixes.EntityZombieSplitFix;
import net.minecraft.util.datafix.fixes.EntityZombieVillagerTypeFix;
import net.minecraft.util.datafix.fixes.EntityZombifiedPiglinRenameFix;
import net.minecraft.util.datafix.fixes.EquipmentFormatFix;
import net.minecraft.util.datafix.fixes.EquippableAssetRenameFix;
import net.minecraft.util.datafix.fixes.FeatureFlagRemoveFix;
import net.minecraft.util.datafix.fixes.FilteredBooksFix;
import net.minecraft.util.datafix.fixes.FilteredSignsFix;
import net.minecraft.util.datafix.fixes.FireResistantToDamageResistantComponentFix;
import net.minecraft.util.datafix.fixes.FixProjectileStoredItem;
import net.minecraft.util.datafix.fixes.FixWolfHealth;
import net.minecraft.util.datafix.fixes.FoodToConsumableFix;
import net.minecraft.util.datafix.fixes.ForcePoiRebuild;
import net.minecraft.util.datafix.fixes.ForcedChunkToTicketFix;
import net.minecraft.util.datafix.fixes.FurnaceRecipeFix;
import net.minecraft.util.datafix.fixes.GoatHornIdFix;
import net.minecraft.util.datafix.fixes.GossipUUIDFix;
import net.minecraft.util.datafix.fixes.HeightmapRenamingFix;
import net.minecraft.util.datafix.fixes.HorseBodyArmorItemFix;
import net.minecraft.util.datafix.fixes.IglooMetadataRemovalFix;
import net.minecraft.util.datafix.fixes.InlineBlockPosFormatFix;
import net.minecraft.util.datafix.fixes.InvalidBlockEntityLockFix;
import net.minecraft.util.datafix.fixes.InvalidLockComponentFix;
import net.minecraft.util.datafix.fixes.ItemBannerColorFix;
import net.minecraft.util.datafix.fixes.ItemCustomNameToComponentFix;
import net.minecraft.util.datafix.fixes.ItemIdFix;
import net.minecraft.util.datafix.fixes.ItemLoreFix;
import net.minecraft.util.datafix.fixes.ItemPotionFix;
import net.minecraft.util.datafix.fixes.ItemRenameFix;
import net.minecraft.util.datafix.fixes.ItemShulkerBoxColorFix;
import net.minecraft.util.datafix.fixes.ItemSpawnEggFix;
import net.minecraft.util.datafix.fixes.ItemStackComponentizationFix;
import net.minecraft.util.datafix.fixes.ItemStackCustomNameToOverrideComponentFix;
import net.minecraft.util.datafix.fixes.ItemStackEnchantmentNamesFix;
import net.minecraft.util.datafix.fixes.ItemStackMapIdFix;
import net.minecraft.util.datafix.fixes.ItemStackSpawnEggFix;
import net.minecraft.util.datafix.fixes.ItemStackTheFlatteningFix;
import net.minecraft.util.datafix.fixes.ItemStackUUIDFix;
import net.minecraft.util.datafix.fixes.ItemWaterPotionFix;
import net.minecraft.util.datafix.fixes.JigsawPropertiesFix;
import net.minecraft.util.datafix.fixes.JigsawRotationFix;
import net.minecraft.util.datafix.fixes.JukeboxTicksSinceSongStartedFix;
import net.minecraft.util.datafix.fixes.LeavesFix;
import net.minecraft.util.datafix.fixes.LegacyDimensionIdFix;
import net.minecraft.util.datafix.fixes.LegacyDragonFightFix;
import net.minecraft.util.datafix.fixes.LegacyHoverEventFix;
import net.minecraft.util.datafix.fixes.LevelDataGeneratorOptionsFix;
import net.minecraft.util.datafix.fixes.LevelFlatGeneratorInfoFix;
import net.minecraft.util.datafix.fixes.LevelLegacyWorldGenSettingsFix;
import net.minecraft.util.datafix.fixes.LevelUUIDFix;
import net.minecraft.util.datafix.fixes.LockComponentPredicateFix;
import net.minecraft.util.datafix.fixes.LodestoneCompassComponentFix;
import net.minecraft.util.datafix.fixes.MapBannerBlockPosFormatFix;
import net.minecraft.util.datafix.fixes.MapIdFix;
import net.minecraft.util.datafix.fixes.MemoryExpiryDataFix;
import net.minecraft.util.datafix.fixes.MissingDimensionFix;
import net.minecraft.util.datafix.fixes.MobEffectIdFix;
import net.minecraft.util.datafix.fixes.MobSpawnerEntityIdentifiersFix;
import net.minecraft.util.datafix.fixes.NamedEntityConvertUncheckedFix;
import net.minecraft.util.datafix.fixes.NamedEntityWriteReadFix;
import net.minecraft.util.datafix.fixes.NamespacedTypeRenameFix;
import net.minecraft.util.datafix.fixes.NewVillageFix;
import net.minecraft.util.datafix.fixes.ObjectiveRenderTypeFix;
import net.minecraft.util.datafix.fixes.OminousBannerBlockEntityRenameFix;
import net.minecraft.util.datafix.fixes.OminousBannerRarityFix;
import net.minecraft.util.datafix.fixes.OminousBannerRenameFix;
import net.minecraft.util.datafix.fixes.OptionsAccessibilityOnboardFix;
import net.minecraft.util.datafix.fixes.OptionsAddTextBackgroundFix;
import net.minecraft.util.datafix.fixes.OptionsAmbientOcclusionFix;
import net.minecraft.util.datafix.fixes.OptionsForceVBOFix;
import net.minecraft.util.datafix.fixes.OptionsKeyLwjgl3Fix;
import net.minecraft.util.datafix.fixes.OptionsKeyTranslationFix;
import net.minecraft.util.datafix.fixes.OptionsLowerCaseLanguageFix;
import net.minecraft.util.datafix.fixes.OptionsMenuBlurrinessFix;
import net.minecraft.util.datafix.fixes.OptionsProgrammerArtFix;
import net.minecraft.util.datafix.fixes.OptionsRenameFieldFix;
import net.minecraft.util.datafix.fixes.OverreachingTickFix;
import net.minecraft.util.datafix.fixes.ParticleUnflatteningFix;
import net.minecraft.util.datafix.fixes.PlayerEquipmentFix;
import net.minecraft.util.datafix.fixes.PlayerHeadBlockProfileFix;
import net.minecraft.util.datafix.fixes.PlayerUUIDFix;
import net.minecraft.util.datafix.fixes.PoiTypeRemoveFix;
import net.minecraft.util.datafix.fixes.PoiTypeRenameFix;
import net.minecraft.util.datafix.fixes.PrimedTntBlockStateFixer;
import net.minecraft.util.datafix.fixes.ProjectileStoredWeaponFix;
import net.minecraft.util.datafix.fixes.RaidRenamesDataFix;
import net.minecraft.util.datafix.fixes.RandomSequenceSettingsFix;
import net.minecraft.util.datafix.fixes.RecipesFix;
import net.minecraft.util.datafix.fixes.RecipesRenameningFix;
import net.minecraft.util.datafix.fixes.RedstoneWireConnectionsFix;
import net.minecraft.util.datafix.fixes.References;
import net.minecraft.util.datafix.fixes.RemapChunkStatusFix;
import net.minecraft.util.datafix.fixes.RemoveBlockEntityTagFix;
import net.minecraft.util.datafix.fixes.RemoveEmptyItemInBrushableBlockFix;
import net.minecraft.util.datafix.fixes.RemoveGolemGossipFix;
import net.minecraft.util.datafix.fixes.RenameEnchantmentsFix;
import net.minecraft.util.datafix.fixes.RenamedCoralFansFix;
import net.minecraft.util.datafix.fixes.RenamedCoralFix;
import net.minecraft.util.datafix.fixes.ReorganizePoi;
import net.minecraft.util.datafix.fixes.SaddleEquipmentSlotFix;
import net.minecraft.util.datafix.fixes.SavedDataFeaturePoolElementFix;
import net.minecraft.util.datafix.fixes.SavedDataUUIDFix;
import net.minecraft.util.datafix.fixes.ScoreboardDisplayNameFix;
import net.minecraft.util.datafix.fixes.ScoreboardDisplaySlotFix;
import net.minecraft.util.datafix.fixes.SignTextStrictJsonFix;
import net.minecraft.util.datafix.fixes.SpawnerDataFix;
import net.minecraft.util.datafix.fixes.StatsCounterFix;
import net.minecraft.util.datafix.fixes.StatsRenameFix;
import net.minecraft.util.datafix.fixes.StriderGravityFix;
import net.minecraft.util.datafix.fixes.StructureReferenceCountFix;
import net.minecraft.util.datafix.fixes.StructureSettingsFlattenFix;
import net.minecraft.util.datafix.fixes.StructuresBecomeConfiguredFix;
import net.minecraft.util.datafix.fixes.TextComponentHoverAndClickEventFix;
import net.minecraft.util.datafix.fixes.TextComponentStringifiedFlagsFix;
import net.minecraft.util.datafix.fixes.ThrownPotionSplitFix;
import net.minecraft.util.datafix.fixes.TippedArrowPotionToItemFix;
import net.minecraft.util.datafix.fixes.TooltipDisplayComponentFix;
import net.minecraft.util.datafix.fixes.TrappedChestBlockEntityFix;
import net.minecraft.util.datafix.fixes.TrialSpawnerConfigFix;
import net.minecraft.util.datafix.fixes.TrialSpawnerConfigInRegistryFix;
import net.minecraft.util.datafix.fixes.UnflattenTextComponentFix;
import net.minecraft.util.datafix.fixes.VariantRenameFix;
import net.minecraft.util.datafix.fixes.VillagerDataFix;
import net.minecraft.util.datafix.fixes.VillagerFollowRangeFix;
import net.minecraft.util.datafix.fixes.VillagerRebuildLevelAndXpFix;
import net.minecraft.util.datafix.fixes.VillagerSetCanPickUpLootFix;
import net.minecraft.util.datafix.fixes.VillagerTradeFix;
import net.minecraft.util.datafix.fixes.WallPropertyFix;
import net.minecraft.util.datafix.fixes.WeaponSmithChestLootTableFix;
import net.minecraft.util.datafix.fixes.WorldGenSettingsDisallowOldCustomWorldsFix;
import net.minecraft.util.datafix.fixes.WorldGenSettingsFix;
import net.minecraft.util.datafix.fixes.WorldGenSettingsHeightAndBiomeFix;
import net.minecraft.util.datafix.fixes.WriteAndReadFix;
import net.minecraft.util.datafix.fixes.WrittenBookPagesStrictJsonFix;
import net.minecraft.util.datafix.fixes.ZombieVillagerRebuildXpFix;
import net.minecraft.util.datafix.schemas.NamespacedSchema;
import net.minecraft.util.datafix.schemas.V100;
import net.minecraft.util.datafix.schemas.V102;
import net.minecraft.util.datafix.schemas.V1022;
import net.minecraft.util.datafix.schemas.V106;
import net.minecraft.util.datafix.schemas.V107;
import net.minecraft.util.datafix.schemas.V1125;
import net.minecraft.util.datafix.schemas.V135;
import net.minecraft.util.datafix.schemas.V143;
import net.minecraft.util.datafix.schemas.V1451;
import net.minecraft.util.datafix.schemas.V1451_1;
import net.minecraft.util.datafix.schemas.V1451_2;
import net.minecraft.util.datafix.schemas.V1451_3;
import net.minecraft.util.datafix.schemas.V1451_4;
import net.minecraft.util.datafix.schemas.V1451_5;
import net.minecraft.util.datafix.schemas.V1451_6;
import net.minecraft.util.datafix.schemas.V1458;
import net.minecraft.util.datafix.schemas.V1460;
import net.minecraft.util.datafix.schemas.V1466;
import net.minecraft.util.datafix.schemas.V1470;
import net.minecraft.util.datafix.schemas.V1481;
import net.minecraft.util.datafix.schemas.V1483;
import net.minecraft.util.datafix.schemas.V1486;
import net.minecraft.util.datafix.schemas.V1488;
import net.minecraft.util.datafix.schemas.V1510;
import net.minecraft.util.datafix.schemas.V1800;
import net.minecraft.util.datafix.schemas.V1801;
import net.minecraft.util.datafix.schemas.V1904;
import net.minecraft.util.datafix.schemas.V1906;
import net.minecraft.util.datafix.schemas.V1909;
import net.minecraft.util.datafix.schemas.V1920;
import net.minecraft.util.datafix.schemas.V1928;
import net.minecraft.util.datafix.schemas.V1929;
import net.minecraft.util.datafix.schemas.V1931;
import net.minecraft.util.datafix.schemas.V2100;
import net.minecraft.util.datafix.schemas.V2501;
import net.minecraft.util.datafix.schemas.V2502;
import net.minecraft.util.datafix.schemas.V2505;
import net.minecraft.util.datafix.schemas.V2509;
import net.minecraft.util.datafix.schemas.V2511_1;
import net.minecraft.util.datafix.schemas.V2519;
import net.minecraft.util.datafix.schemas.V2522;
import net.minecraft.util.datafix.schemas.V2551;
import net.minecraft.util.datafix.schemas.V2568;
import net.minecraft.util.datafix.schemas.V2571;
import net.minecraft.util.datafix.schemas.V2684;
import net.minecraft.util.datafix.schemas.V2686;
import net.minecraft.util.datafix.schemas.V2688;
import net.minecraft.util.datafix.schemas.V2704;
import net.minecraft.util.datafix.schemas.V2707;
import net.minecraft.util.datafix.schemas.V2831;
import net.minecraft.util.datafix.schemas.V2832;
import net.minecraft.util.datafix.schemas.V2842;
import net.minecraft.util.datafix.schemas.V3076;
import net.minecraft.util.datafix.schemas.V3078;
import net.minecraft.util.datafix.schemas.V3081;
import net.minecraft.util.datafix.schemas.V3082;
import net.minecraft.util.datafix.schemas.V3083;
import net.minecraft.util.datafix.schemas.V3202;
import net.minecraft.util.datafix.schemas.V3203;
import net.minecraft.util.datafix.schemas.V3204;
import net.minecraft.util.datafix.schemas.V3325;
import net.minecraft.util.datafix.schemas.V3326;
import net.minecraft.util.datafix.schemas.V3327;
import net.minecraft.util.datafix.schemas.V3328;
import net.minecraft.util.datafix.schemas.V3438;
import net.minecraft.util.datafix.schemas.V3439;
import net.minecraft.util.datafix.schemas.V3439_1;
import net.minecraft.util.datafix.schemas.V3448;
import net.minecraft.util.datafix.schemas.V3682;
import net.minecraft.util.datafix.schemas.V3683;
import net.minecraft.util.datafix.schemas.V3685;
import net.minecraft.util.datafix.schemas.V3689;
import net.minecraft.util.datafix.schemas.V3799;
import net.minecraft.util.datafix.schemas.V3807;
import net.minecraft.util.datafix.schemas.V3808;
import net.minecraft.util.datafix.schemas.V3808_1;
import net.minecraft.util.datafix.schemas.V3808_2;
import net.minecraft.util.datafix.schemas.V3813;
import net.minecraft.util.datafix.schemas.V3816;
import net.minecraft.util.datafix.schemas.V3818;
import net.minecraft.util.datafix.schemas.V3818_3;
import net.minecraft.util.datafix.schemas.V3818_4;
import net.minecraft.util.datafix.schemas.V3818_5;
import net.minecraft.util.datafix.schemas.V3825;
import net.minecraft.util.datafix.schemas.V3938;
import net.minecraft.util.datafix.schemas.V4059;
import net.minecraft.util.datafix.schemas.V4067;
import net.minecraft.util.datafix.schemas.V4070;
import net.minecraft.util.datafix.schemas.V4071;
import net.minecraft.util.datafix.schemas.V4290;
import net.minecraft.util.datafix.schemas.V4292;
import net.minecraft.util.datafix.schemas.V4300;
import net.minecraft.util.datafix.schemas.V4301;
import net.minecraft.util.datafix.schemas.V4302;
import net.minecraft.util.datafix.schemas.V4306;
import net.minecraft.util.datafix.schemas.V4307;
import net.minecraft.util.datafix.schemas.V4312;
import net.minecraft.util.datafix.schemas.V4420;
import net.minecraft.util.datafix.schemas.V4421;
import net.minecraft.util.datafix.schemas.V501;
import net.minecraft.util.datafix.schemas.V700;
import net.minecraft.util.datafix.schemas.V701;
import net.minecraft.util.datafix.schemas.V702;
import net.minecraft.util.datafix.schemas.V703;
import net.minecraft.util.datafix.schemas.V704;
import net.minecraft.util.datafix.schemas.V705;
import net.minecraft.util.datafix.schemas.V808;
import net.minecraft.util.datafix.schemas.V99;

public class DataFixers {
    private static final BiFunction<Integer, Schema, Schema> SAME = Schema::new;
    private static final BiFunction<Integer, Schema, Schema> SAME_NAMESPACED = NamespacedSchema::new;
    private static final Result DATA_FIXER = createFixerUpper();
    public static final int BLENDING_VERSION = 4295;

    private DataFixers() {
    }

    public static DataFixer getDataFixer() {
        return DATA_FIXER.fixer();
    }

    private static Result createFixerUpper() {
        DataFixerBuilder dataFixerBuilder = new DataFixerBuilder(SharedConstants.getCurrentVersion().dataVersion().version());
        addFixers(dataFixerBuilder);
        return dataFixerBuilder.build();
    }

    public static CompletableFuture<?> optimize(Set<TypeReference> references) {
        if (references.isEmpty()) {
            return CompletableFuture.completedFuture(null);
        } else {
            Executor singleThreadExecutor = Executors.newSingleThreadExecutor(
                new ThreadFactoryBuilder().setNameFormat("Datafixer Bootstrap").setDaemon(true).setPriority(1).build()
            );
            return DATA_FIXER.optimize(references, singleThreadExecutor);
        }
    }

    private static void addFixers(DataFixerBuilder builder) {
        builder.addSchema(99, V99::new);
        Schema schema = builder.addSchema(100, V100::new);
        builder.addFixer(new EntityEquipmentToArmorAndHandFix(schema));
        Schema schema1 = builder.addSchema(101, SAME);
        builder.addFixer(new VillagerSetCanPickUpLootFix(schema1));
        Schema schema2 = builder.addSchema(102, V102::new);
        builder.addFixer(new ItemIdFix(schema2, true));
        builder.addFixer(new ItemPotionFix(schema2, false));
        Schema schema3 = builder.addSchema(105, SAME);
        builder.addFixer(new ItemSpawnEggFix(schema3, true));
        Schema schema4 = builder.addSchema(106, V106::new);
        builder.addFixer(new MobSpawnerEntityIdentifiersFix(schema4, true));
        Schema schema5 = builder.addSchema(107, V107::new);
        builder.addFixer(new EntityMinecartIdentifiersFix(schema5));
        Schema schema6 = builder.addSchema(108, SAME);
        builder.addFixer(new EntityStringUuidFix(schema6, true));
        Schema schema7 = builder.addSchema(109, SAME);
        builder.addFixer(new EntityHealthFix(schema7, true));
        Schema schema8 = builder.addSchema(110, SAME);
        builder.addFixer(new EntityHorseSaddleFix(schema8, true));
        Schema schema9 = builder.addSchema(111, SAME);
        builder.addFixer(new EntityPaintingItemFrameDirectionFix(schema9, true));
        Schema schema10 = builder.addSchema(113, SAME);
        builder.addFixer(new EntityRedundantChanceTagsFix(schema10, true));
        Schema schema11 = builder.addSchema(135, V135::new);
        builder.addFixer(new EntityRidingToPassengersFix(schema11, true));
        Schema schema12 = builder.addSchema(143, V143::new);
        builder.addFixer(new EntityTippedArrowFix(schema12, true));
        Schema schema13 = builder.addSchema(147, SAME);
        builder.addFixer(new EntityArmorStandSilentFix(schema13, true));
        Schema schema14 = builder.addSchema(165, SAME);
        builder.addFixer(new SignTextStrictJsonFix(schema14));
        builder.addFixer(new WrittenBookPagesStrictJsonFix(schema14));
        Schema schema15 = builder.addSchema(501, V501::new);
        builder.addFixer(new AddNewChoices(schema15, "Add 1.10 entities fix", References.ENTITY));
        Schema schema16 = builder.addSchema(502, SAME);
        builder.addFixer(
            ItemRenameFix.create(
                schema16,
                "cooked_fished item renamer",
                string -> Objects.equals(NamespacedSchema.ensureNamespaced(string), "minecraft:cooked_fished") ? "minecraft:cooked_fish" : string
            )
        );
        builder.addFixer(new EntityZombieVillagerTypeFix(schema16, false));
        Schema schema17 = builder.addSchema(505, SAME);
        builder.addFixer(new OptionsForceVBOFix(schema17, false));
        Schema schema18 = builder.addSchema(700, V700::new);
        builder.addFixer(new EntityElderGuardianSplitFix(schema18, true));
        Schema schema19 = builder.addSchema(701, V701::new);
        builder.addFixer(new EntitySkeletonSplitFix(schema19, true));
        Schema schema20 = builder.addSchema(702, V702::new);
        builder.addFixer(new EntityZombieSplitFix(schema20));
        Schema schema21 = builder.addSchema(703, V703::new);
        builder.addFixer(new EntityHorseSplitFix(schema21, true));
        Schema schema22 = builder.addSchema(704, V704::new);
        builder.addFixer(new BlockEntityIdFix(schema22, true));
        Schema schema23 = builder.addSchema(705, V705::new);
        builder.addFixer(new EntityIdFix(schema23, true));
        Schema schema24 = builder.addSchema(804, SAME_NAMESPACED);
        builder.addFixer(new ItemBannerColorFix(schema24, true));
        Schema schema25 = builder.addSchema(806, SAME_NAMESPACED);
        builder.addFixer(new ItemWaterPotionFix(schema25, false));
        Schema schema26 = builder.addSchema(808, V808::new);
        builder.addFixer(new AddNewChoices(schema26, "added shulker box", References.BLOCK_ENTITY));
        Schema schema27 = builder.addSchema(808, 1, SAME_NAMESPACED);
        builder.addFixer(new EntityShulkerColorFix(schema27, false));
        Schema schema28 = builder.addSchema(813, SAME_NAMESPACED);
        builder.addFixer(new ItemShulkerBoxColorFix(schema28, false));
        builder.addFixer(new BlockEntityShulkerBoxColorFix(schema28, false));
        Schema schema29 = builder.addSchema(816, SAME_NAMESPACED);
        builder.addFixer(new OptionsLowerCaseLanguageFix(schema29, false));
        Schema schema30 = builder.addSchema(820, SAME_NAMESPACED);
        builder.addFixer(ItemRenameFix.create(schema30, "totem item renamer", createRenamer("minecraft:totem", "minecraft:totem_of_undying")));
        Schema schema31 = builder.addSchema(1022, V1022::new);
        builder.addFixer(new WriteAndReadFix(schema31, "added shoulder entities to players", References.PLAYER));
        Schema schema32 = builder.addSchema(1125, V1125::new);
        builder.addFixer(new ChunkBedBlockEntityInjecterFix(schema32, true));
        builder.addFixer(new BedItemColorFix(schema32, false));
        Schema schema33 = builder.addSchema(1344, SAME_NAMESPACED);
        builder.addFixer(new OptionsKeyLwjgl3Fix(schema33, false));
        Schema schema34 = builder.addSchema(1446, SAME_NAMESPACED);
        builder.addFixer(new OptionsKeyTranslationFix(schema34, false));
        Schema schema35 = builder.addSchema(1450, SAME_NAMESPACED);
        builder.addFixer(new BlockStateStructureTemplateFix(schema35, false));
        Schema schema36 = builder.addSchema(1451, V1451::new);
        builder.addFixer(new AddNewChoices(schema36, "AddTrappedChestFix", References.BLOCK_ENTITY));
        Schema schema37 = builder.addSchema(1451, 1, V1451_1::new);
        builder.addFixer(new ChunkPalettedStorageFix(schema37, true));
        Schema schema38 = builder.addSchema(1451, 2, V1451_2::new);
        builder.addFixer(new BlockEntityBlockStateFix(schema38, true));
        Schema schema39 = builder.addSchema(1451, 3, V1451_3::new);
        builder.addFixer(new EntityBlockStateFix(schema39, true));
        builder.addFixer(new ItemStackMapIdFix(schema39, false));
        Schema schema40 = builder.addSchema(1451, 4, V1451_4::new);
        builder.addFixer(new BlockNameFlatteningFix(schema40, true));
        builder.addFixer(new ItemStackTheFlatteningFix(schema40, false));
        Schema schema41 = builder.addSchema(1451, 5, V1451_5::new);
        builder.addFixer(new RemoveBlockEntityTagFix(schema41, Set.of("minecraft:noteblock", "minecraft:flower_pot")));
        builder.addFixer(new ItemStackSpawnEggFix(schema41, false, "minecraft:spawn_egg"));
        builder.addFixer(new EntityWolfColorFix(schema41, false));
        builder.addFixer(new BlockEntityBannerColorFix(schema41, false));
        builder.addFixer(new LevelFlatGeneratorInfoFix(schema41, false));
        Schema schema42 = builder.addSchema(1451, 6, V1451_6::new);
        builder.addFixer(new StatsCounterFix(schema42, true));
        builder.addFixer(new BlockEntityJukeboxFix(schema42, false));
        Schema schema43 = builder.addSchema(1451, 7, SAME_NAMESPACED);
        builder.addFixer(new VillagerTradeFix(schema43));
        Schema schema44 = builder.addSchema(1456, SAME_NAMESPACED);
        builder.addFixer(new EntityItemFrameDirectionFix(schema44, false));
        Schema schema45 = builder.addSchema(1458, V1458::new);
        // CraftBukkit start
        // API allows setting player custom names, so we need to convert them.
        // This does *not* handle upgrades in any other version, but generally those shouldn't need conversion.
        builder.addFixer(new DataFix(schema45, false) {
            @Override
            protected TypeRewriteRule makeRule() {
                return this.fixTypeEverywhereTyped("Player CustomName", this.getInputSchema().getType(References.PLAYER), typed -> {
                    return typed.update(DSL.remainderFinder(), dynamic -> {
                        final String customName = dynamic.get("CustomName").asString("");
                        if (customName.isEmpty()) {
                            return dynamic.remove("CustomName");
                        }
                        return dynamic.set("CustomName", LegacyComponentDataFixUtils.createPlainTextComponent(dynamic.getOps(), customName));
                    });
                });
            }
        });
        // CraftBukkit end
        builder.addFixer(new EntityCustomNameToComponentFix(schema45));
        builder.addFixer(new ItemCustomNameToComponentFix(schema45));
        builder.addFixer(new BlockEntityCustomNameToComponentFix(schema45));
        Schema schema46 = builder.addSchema(1460, V1460::new);
        builder.addFixer(new EntityPaintingMotiveFix(schema46, false));
        Schema schema47 = builder.addSchema(1466, V1466::new);
        builder.addFixer(new AddNewChoices(schema47, "Add DUMMY block entity", References.BLOCK_ENTITY));
        builder.addFixer(new ChunkToProtochunkFix(schema47, true));
        Schema schema48 = builder.addSchema(1470, V1470::new);
        builder.addFixer(new AddNewChoices(schema48, "Add 1.13 entities fix", References.ENTITY));
        Schema schema49 = builder.addSchema(1474, SAME_NAMESPACED);
        builder.addFixer(new ColorlessShulkerEntityFix(schema49, false));
        builder.addFixer(
            BlockRenameFix.create(
                schema49,
                "Colorless shulker block fixer",
                string -> Objects.equals(NamespacedSchema.ensureNamespaced(string), "minecraft:purple_shulker_box") ? "minecraft:shulker_box" : string
            )
        );
        builder.addFixer(
            ItemRenameFix.create(
                schema49,
                "Colorless shulker item fixer",
                string -> Objects.equals(NamespacedSchema.ensureNamespaced(string), "minecraft:purple_shulker_box") ? "minecraft:shulker_box" : string
            )
        );
        Schema schema50 = builder.addSchema(1475, SAME_NAMESPACED);
        builder.addFixer(
            BlockRenameFix.create(
                schema50,
                "Flowing fixer",
                createRenamer(ImmutableMap.of("minecraft:flowing_water", "minecraft:water", "minecraft:flowing_lava", "minecraft:lava"))
            )
        );
        Schema schema51 = builder.addSchema(1480, SAME_NAMESPACED);
        builder.addFixer(BlockRenameFix.create(schema51, "Rename coral blocks", createRenamer(RenamedCoralFix.RENAMED_IDS)));
        builder.addFixer(ItemRenameFix.create(schema51, "Rename coral items", createRenamer(RenamedCoralFix.RENAMED_IDS)));
        Schema schema52 = builder.addSchema(1481, V1481::new);
        builder.addFixer(new AddNewChoices(schema52, "Add conduit", References.BLOCK_ENTITY));
        Schema schema53 = builder.addSchema(1483, V1483::new);
        builder.addFixer(new EntityPufferfishRenameFix(schema53, true));
        builder.addFixer(ItemRenameFix.create(schema53, "Rename pufferfish egg item", createRenamer(EntityPufferfishRenameFix.RENAMED_IDS)));
        Schema schema54 = builder.addSchema(1484, SAME_NAMESPACED);
        builder.addFixer(
            ItemRenameFix.create(
                schema54,
                "Rename seagrass items",
                createRenamer(ImmutableMap.of("minecraft:sea_grass", "minecraft:seagrass", "minecraft:tall_sea_grass", "minecraft:tall_seagrass"))
            )
        );
        builder.addFixer(
            BlockRenameFix.create(
                schema54,
                "Rename seagrass blocks",
                createRenamer(ImmutableMap.of("minecraft:sea_grass", "minecraft:seagrass", "minecraft:tall_sea_grass", "minecraft:tall_seagrass"))
            )
        );
        builder.addFixer(new HeightmapRenamingFix(schema54, false));
        Schema schema55 = builder.addSchema(1486, V1486::new);
        builder.addFixer(new EntityCodSalmonFix(schema55, true));
        builder.addFixer(ItemRenameFix.create(schema55, "Rename cod/salmon egg items", createRenamer(EntityCodSalmonFix.RENAMED_EGG_IDS)));
        Schema schema56 = builder.addSchema(1487, SAME_NAMESPACED);
        builder.addFixer(
            ItemRenameFix.create(
                schema56,
                "Rename prismarine_brick(s)_* blocks",
                createRenamer(
                    ImmutableMap.of(
                        "minecraft:prismarine_bricks_slab",
                        "minecraft:prismarine_brick_slab",
                        "minecraft:prismarine_bricks_stairs",
                        "minecraft:prismarine_brick_stairs"
                    )
                )
            )
        );
        builder.addFixer(
            BlockRenameFix.create(
                schema56,
                "Rename prismarine_brick(s)_* items",
                createRenamer(
                    ImmutableMap.of(
                        "minecraft:prismarine_bricks_slab",
                        "minecraft:prismarine_brick_slab",
                        "minecraft:prismarine_bricks_stairs",
                        "minecraft:prismarine_brick_stairs"
                    )
                )
            )
        );
        Schema schema57 = builder.addSchema(1488, V1488::new);
        builder.addFixer(
            BlockRenameFix.create(
                schema57,
                "Rename kelp/kelptop",
                createRenamer(ImmutableMap.of("minecraft:kelp_top", "minecraft:kelp", "minecraft:kelp", "minecraft:kelp_plant"))
            )
        );
        builder.addFixer(ItemRenameFix.create(schema57, "Rename kelptop", createRenamer("minecraft:kelp_top", "minecraft:kelp")));
        builder.addFixer(
            new NamedEntityWriteReadFix(schema57, true, "Command block block entity custom name fix", References.BLOCK_ENTITY, "minecraft:command_block") {
                @Override
                protected <T> Dynamic<T> fix(Dynamic<T> tag) {
                    return BlockEntityCustomNameToComponentFix.fixTagCustomName(tag);
                }
            }
        );
        builder.addFixer(
            new DataFix(schema57, false) {
                @Override
                protected TypeRewriteRule makeRule() {
                    Type<?> type = this.getInputSchema().getType(References.ENTITY);
                    OpticFinder<String> opticFinder = DSL.fieldFinder("id", NamespacedSchema.namespacedString());
                    OpticFinder<?> opticFinder1 = type.findField("CustomName");
                    OpticFinder<Pair<String, String>> opticFinder2 = DSL.typeFinder(
                        (Type<Pair<String, String>>)this.getInputSchema().getType(References.TEXT_COMPONENT)
                    );
                    return this.fixTypeEverywhereTyped(
                        "Command block minecart custom name fix",
                        type,
                        typed -> {
                            String string = typed.getOptional(opticFinder).orElse("");
                            return !"minecraft:commandblock_minecart".equals(string)
                                ? typed
                                : typed.updateTyped(
                                    opticFinder1,
                                    typed1 -> typed1.update(opticFinder2, pair -> pair.mapSecond(LegacyComponentDataFixUtils::createTextComponentJson))
                                );
                        }
                    );
                }
            }
        );
        builder.addFixer(new IglooMetadataRemovalFix(schema57, false));
        Schema schema58 = builder.addSchema(1490, SAME_NAMESPACED);
        builder.addFixer(BlockRenameFix.create(schema58, "Rename melon_block", createRenamer("minecraft:melon_block", "minecraft:melon")));
        builder.addFixer(
            ItemRenameFix.create(
                schema58,
                "Rename melon_block/melon/speckled_melon",
                createRenamer(
                    ImmutableMap.of(
                        "minecraft:melon_block",
                        "minecraft:melon",
                        "minecraft:melon",
                        "minecraft:melon_slice",
                        "minecraft:speckled_melon",
                        "minecraft:glistering_melon_slice"
                    )
                )
            )
        );
        Schema schema59 = builder.addSchema(1492, SAME_NAMESPACED);
        builder.addFixer(new ChunkStructuresTemplateRenameFix(schema59, false));
        Schema schema60 = builder.addSchema(1494, SAME_NAMESPACED);
        builder.addFixer(new ItemStackEnchantmentNamesFix(schema60, false));
        Schema schema61 = builder.addSchema(1496, SAME_NAMESPACED);
        builder.addFixer(new LeavesFix(schema61, false));
        Schema schema62 = builder.addSchema(1500, SAME_NAMESPACED);
        builder.addFixer(new BlockEntityKeepPacked(schema62, false));
        Schema schema63 = builder.addSchema(1501, SAME_NAMESPACED);
        builder.addFixer(new AdvancementsFix(schema63, false));
        Schema schema64 = builder.addSchema(1502, SAME_NAMESPACED);
        builder.addFixer(new NamespacedTypeRenameFix(schema64, "Recipes fix", References.RECIPE, createRenamer(RecipesFix.RECIPES)));
        Schema schema65 = builder.addSchema(1506, SAME_NAMESPACED);
        builder.addFixer(new LevelDataGeneratorOptionsFix(schema65, false));
        Schema schema66 = builder.addSchema(1510, V1510::new);
        builder.addFixer(BlockRenameFix.create(schema66, "Block renamening fix", createRenamer(EntityTheRenameningFix.RENAMED_BLOCKS)));
        builder.addFixer(ItemRenameFix.create(schema66, "Item renamening fix", createRenamer(EntityTheRenameningFix.RENAMED_ITEMS)));
        builder.addFixer(new NamespacedTypeRenameFix(schema66, "Recipes renamening fix", References.RECIPE, createRenamer(RecipesRenameningFix.RECIPES)));
        builder.addFixer(new EntityTheRenameningFix(schema66, true));
        builder.addFixer(
            new StatsRenameFix(
                schema66,
                "SwimStatsRenameFix",
                ImmutableMap.of("minecraft:swim_one_cm", "minecraft:walk_on_water_one_cm", "minecraft:dive_one_cm", "minecraft:walk_under_water_one_cm")
            )
        );
        Schema schema67 = builder.addSchema(1514, SAME_NAMESPACED);
        builder.addFixer(new ScoreboardDisplayNameFix(schema67, "ObjectiveDisplayNameFix", References.OBJECTIVE));
        builder.addFixer(new ScoreboardDisplayNameFix(schema67, "TeamDisplayNameFix", References.TEAM));
        builder.addFixer(new ObjectiveRenderTypeFix(schema67));
        Schema schema68 = builder.addSchema(1515, SAME_NAMESPACED);
        builder.addFixer(BlockRenameFix.create(schema68, "Rename coral fan blocks", createRenamer(RenamedCoralFansFix.RENAMED_IDS)));
        Schema schema69 = builder.addSchema(1624, SAME_NAMESPACED);
        builder.addFixer(new TrappedChestBlockEntityFix(schema69, false));
        Schema schema70 = builder.addSchema(1800, V1800::new);
        builder.addFixer(new AddNewChoices(schema70, "Added 1.14 mobs fix", References.ENTITY));
        builder.addFixer(ItemRenameFix.create(schema70, "Rename dye items", createRenamer(DyeItemRenameFix.RENAMED_IDS)));
        Schema schema71 = builder.addSchema(1801, V1801::new);
        builder.addFixer(new AddNewChoices(schema71, "Added Illager Beast", References.ENTITY));
        Schema schema72 = builder.addSchema(1802, SAME_NAMESPACED);
        builder.addFixer(
            BlockRenameFix.create(
                schema72,
                "Rename sign blocks & stone slabs",
                createRenamer(
                    ImmutableMap.of(
                        "minecraft:stone_slab",
                        "minecraft:smooth_stone_slab",
                        "minecraft:sign",
                        "minecraft:oak_sign",
                        "minecraft:wall_sign",
                        "minecraft:oak_wall_sign"
                    )
                )
            )
        );
        builder.addFixer(
            ItemRenameFix.create(
                schema72,
                "Rename sign item & stone slabs",
                createRenamer(ImmutableMap.of("minecraft:stone_slab", "minecraft:smooth_stone_slab", "minecraft:sign", "minecraft:oak_sign"))
            )
        );
        Schema schema73 = builder.addSchema(1803, SAME_NAMESPACED);
        builder.addFixer(new ItemLoreFix(schema73));
        Schema schema74 = builder.addSchema(1904, V1904::new);
        builder.addFixer(new AddNewChoices(schema74, "Added Cats", References.ENTITY));
        builder.addFixer(new EntityCatSplitFix(schema74, false));
        Schema schema75 = builder.addSchema(1905, SAME_NAMESPACED);
        builder.addFixer(new ChunkStatusFix(schema75, false));
        Schema schema76 = builder.addSchema(1906, V1906::new);
        builder.addFixer(new AddNewChoices(schema76, "Add POI Blocks", References.BLOCK_ENTITY));
        Schema schema77 = builder.addSchema(1909, V1909::new);
        builder.addFixer(new AddNewChoices(schema77, "Add jigsaw", References.BLOCK_ENTITY));
        Schema schema78 = builder.addSchema(1911, SAME_NAMESPACED);
        builder.addFixer(new ChunkStatusFix2(schema78, false));
        Schema schema79 = builder.addSchema(1914, SAME_NAMESPACED);
        builder.addFixer(new WeaponSmithChestLootTableFix(schema79, false));
        Schema schema80 = builder.addSchema(1917, SAME_NAMESPACED);
        builder.addFixer(new CatTypeFix(schema80, false));
        Schema schema81 = builder.addSchema(1918, SAME_NAMESPACED);
        builder.addFixer(new VillagerDataFix(schema81, "minecraft:villager"));
        builder.addFixer(new VillagerDataFix(schema81, "minecraft:zombie_villager"));
        Schema schema82 = builder.addSchema(1920, V1920::new);
        builder.addFixer(new NewVillageFix(schema82, false));
        builder.addFixer(new AddNewChoices(schema82, "Add campfire", References.BLOCK_ENTITY));
        Schema schema83 = builder.addSchema(1925, SAME_NAMESPACED);
        builder.addFixer(new MapIdFix(schema83));
        Schema schema84 = builder.addSchema(1928, V1928::new);
        builder.addFixer(new EntityRavagerRenameFix(schema84, true));
        builder.addFixer(ItemRenameFix.create(schema84, "Rename ravager egg item", createRenamer(EntityRavagerRenameFix.RENAMED_IDS)));
        Schema schema85 = builder.addSchema(1929, V1929::new);
        builder.addFixer(new AddNewChoices(schema85, "Add Wandering Trader and Trader Llama", References.ENTITY));
        Schema schema86 = builder.addSchema(1931, V1931::new);
        builder.addFixer(new AddNewChoices(schema86, "Added Fox", References.ENTITY));
        Schema schema87 = builder.addSchema(1936, SAME_NAMESPACED);
        builder.addFixer(new OptionsAddTextBackgroundFix(schema87, false));
        Schema schema88 = builder.addSchema(1946, SAME_NAMESPACED);
        builder.addFixer(new ReorganizePoi(schema88, false));
        Schema schema89 = builder.addSchema(1948, SAME_NAMESPACED);
        builder.addFixer(new OminousBannerRenameFix(schema89));
        Schema schema90 = builder.addSchema(1953, SAME_NAMESPACED);
        builder.addFixer(new OminousBannerBlockEntityRenameFix(schema90, false));
        Schema schema91 = builder.addSchema(1955, SAME_NAMESPACED);
        builder.addFixer(new VillagerRebuildLevelAndXpFix(schema91, false));
        builder.addFixer(new ZombieVillagerRebuildXpFix(schema91, false));
        Schema schema92 = builder.addSchema(1961, SAME_NAMESPACED);
        builder.addFixer(new ChunkLightRemoveFix(schema92, false));
        Schema schema93 = builder.addSchema(1963, SAME_NAMESPACED);
        builder.addFixer(new RemoveGolemGossipFix(schema93, false));
        Schema schema94 = builder.addSchema(2100, V2100::new);
        builder.addFixer(new AddNewChoices(schema94, "Added Bee and Bee Stinger", References.ENTITY));
        builder.addFixer(new AddNewChoices(schema94, "Add beehive", References.BLOCK_ENTITY));
        builder.addFixer(
            new NamespacedTypeRenameFix(schema94, "Rename sugar recipe", References.RECIPE, createRenamer("minecraft:sugar", "minecraft:sugar_from_sugar_cane"))
        );
        builder.addFixer(
            new AdvancementsRenameFix(
                schema94,
                false,
                "Rename sugar recipe advancement",
                createRenamer("minecraft:recipes/misc/sugar", "minecraft:recipes/misc/sugar_from_sugar_cane")
            )
        );
        Schema schema95 = builder.addSchema(2202, SAME_NAMESPACED);
        builder.addFixer(new ChunkBiomeFix(schema95, false));
        Schema schema96 = builder.addSchema(2209, SAME_NAMESPACED);
        UnaryOperator<String> unaryOperator = createRenamer("minecraft:bee_hive", "minecraft:beehive");
        builder.addFixer(ItemRenameFix.create(schema96, "Rename bee_hive item to beehive", unaryOperator));
        builder.addFixer(new PoiTypeRenameFix(schema96, "Rename bee_hive poi to beehive", unaryOperator));
        builder.addFixer(BlockRenameFix.create(schema96, "Rename bee_hive block to beehive", unaryOperator));
        Schema schema97 = builder.addSchema(2211, SAME_NAMESPACED);
        builder.addFixer(new StructureReferenceCountFix(schema97, false));
        Schema schema98 = builder.addSchema(2218, SAME_NAMESPACED);
        builder.addFixer(new ForcePoiRebuild(schema98, false));
        Schema schema99 = builder.addSchema(2501, V2501::new);
        builder.addFixer(new FurnaceRecipeFix(schema99, true));
        Schema schema100 = builder.addSchema(2502, V2502::new);
        builder.addFixer(new AddNewChoices(schema100, "Added Hoglin", References.ENTITY));
        Schema schema101 = builder.addSchema(2503, SAME_NAMESPACED);
        builder.addFixer(new WallPropertyFix(schema101, false));
        builder.addFixer(
            new AdvancementsRenameFix(
                schema101, false, "Composter category change", createRenamer("minecraft:recipes/misc/composter", "minecraft:recipes/decorations/composter")
            )
        );
        Schema schema102 = builder.addSchema(2505, V2505::new);
        builder.addFixer(new AddNewChoices(schema102, "Added Piglin", References.ENTITY));
        builder.addFixer(new MemoryExpiryDataFix(schema102, "minecraft:villager"));
        Schema schema103 = builder.addSchema(2508, SAME_NAMESPACED);
        builder.addFixer(
            ItemRenameFix.create(
                schema103,
                "Renamed fungi items to fungus",
                createRenamer(ImmutableMap.of("minecraft:warped_fungi", "minecraft:warped_fungus", "minecraft:crimson_fungi", "minecraft:crimson_fungus"))
            )
        );
        builder.addFixer(
            BlockRenameFix.create(
                schema103,
                "Renamed fungi blocks to fungus",
                createRenamer(ImmutableMap.of("minecraft:warped_fungi", "minecraft:warped_fungus", "minecraft:crimson_fungi", "minecraft:crimson_fungus"))
            )
        );
        Schema schema104 = builder.addSchema(2509, V2509::new);
        builder.addFixer(new EntityZombifiedPiglinRenameFix(schema104));
        builder.addFixer(ItemRenameFix.create(schema104, "Rename zombie pigman egg item", createRenamer(EntityZombifiedPiglinRenameFix.RENAMED_IDS)));
        Schema schema105 = builder.addSchema(2511, SAME_NAMESPACED);
        builder.addFixer(new EntityProjectileOwnerFix(schema105));
        Schema schema106 = builder.addSchema(2511, 1, V2511_1::new);
        builder.addFixer(new NamedEntityConvertUncheckedFix(schema106, "SplashPotionItemFieldRenameFix", References.ENTITY, "minecraft:potion"));
        Schema schema107 = builder.addSchema(2514, SAME_NAMESPACED);
        builder.addFixer(new EntityUUIDFix(schema107));
        builder.addFixer(new BlockEntityUUIDFix(schema107));
        builder.addFixer(new PlayerUUIDFix(schema107));
        builder.addFixer(new LevelUUIDFix(schema107));
        builder.addFixer(new SavedDataUUIDFix(schema107));
        builder.addFixer(new ItemStackUUIDFix(schema107));
        Schema schema108 = builder.addSchema(2516, SAME_NAMESPACED);
        builder.addFixer(new GossipUUIDFix(schema108, "minecraft:villager"));
        builder.addFixer(new GossipUUIDFix(schema108, "minecraft:zombie_villager"));
        Schema schema109 = builder.addSchema(2518, SAME_NAMESPACED);
        builder.addFixer(new JigsawPropertiesFix(schema109, false));
        builder.addFixer(new JigsawRotationFix(schema109));
        Schema schema110 = builder.addSchema(2519, V2519::new);
        builder.addFixer(new AddNewChoices(schema110, "Added Strider", References.ENTITY));
        Schema schema111 = builder.addSchema(2522, V2522::new);
        builder.addFixer(new AddNewChoices(schema111, "Added Zoglin", References.ENTITY));
        Schema schema112 = builder.addSchema(2523, SAME_NAMESPACED);
        builder.addFixer(
            new AttributesRenameLegacy(
                schema112,
                "Attribute renames",
                createRenamerNoNamespace(
                    ImmutableMap.<String, String>builder()
                        .put("generic.maxHealth", "minecraft:generic.max_health")
                        .put("Max Health", "minecraft:generic.max_health")
                        .put("zombie.spawnReinforcements", "minecraft:zombie.spawn_reinforcements")
                        .put("Spawn Reinforcements Chance", "minecraft:zombie.spawn_reinforcements")
                        .put("horse.jumpStrength", "minecraft:horse.jump_strength")
                        .put("Jump Strength", "minecraft:horse.jump_strength")
                        .put("generic.followRange", "minecraft:generic.follow_range")
                        .put("Follow Range", "minecraft:generic.follow_range")
                        .put("generic.knockbackResistance", "minecraft:generic.knockback_resistance")
                        .put("Knockback Resistance", "minecraft:generic.knockback_resistance")
                        .put("generic.movementSpeed", "minecraft:generic.movement_speed")
                        .put("Movement Speed", "minecraft:generic.movement_speed")
                        .put("generic.flyingSpeed", "minecraft:generic.flying_speed")
                        .put("Flying Speed", "minecraft:generic.flying_speed")
                        .put("generic.attackDamage", "minecraft:generic.attack_damage")
                        .put("generic.attackKnockback", "minecraft:generic.attack_knockback")
                        .put("generic.attackSpeed", "minecraft:generic.attack_speed")
                        .put("generic.armorToughness", "minecraft:generic.armor_toughness")
                        .build()
                )
            )
        );
        Schema schema113 = builder.addSchema(2527, SAME_NAMESPACED);
        builder.addFixer(new BitStorageAlignFix(schema113));
        Schema schema114 = builder.addSchema(2528, SAME_NAMESPACED);
        builder.addFixer(
            ItemRenameFix.create(
                schema114,
                "Rename soul fire torch and soul fire lantern",
                createRenamer(ImmutableMap.of("minecraft:soul_fire_torch", "minecraft:soul_torch", "minecraft:soul_fire_lantern", "minecraft:soul_lantern"))
            )
        );
        builder.addFixer(
            BlockRenameFix.create(
                schema114,
                "Rename soul fire torch and soul fire lantern",
                createRenamer(
                    ImmutableMap.of(
                        "minecraft:soul_fire_torch",
                        "minecraft:soul_torch",
                        "minecraft:soul_fire_wall_torch",
                        "minecraft:soul_wall_torch",
                        "minecraft:soul_fire_lantern",
                        "minecraft:soul_lantern"
                    )
                )
            )
        );
        Schema schema115 = builder.addSchema(2529, SAME_NAMESPACED);
        builder.addFixer(new StriderGravityFix(schema115, false));
        Schema schema116 = builder.addSchema(2531, SAME_NAMESPACED);
        builder.addFixer(new RedstoneWireConnectionsFix(schema116));
        Schema schema117 = builder.addSchema(2533, SAME_NAMESPACED);
        builder.addFixer(new VillagerFollowRangeFix(schema117));
        Schema schema118 = builder.addSchema(2535, SAME_NAMESPACED);
        builder.addFixer(new EntityShulkerRotationFix(schema118));
        Schema schema119 = builder.addSchema(2537, SAME_NAMESPACED);
        builder.addFixer(new LegacyDimensionIdFix(schema119));
        Schema schema120 = builder.addSchema(2538, SAME_NAMESPACED);
        builder.addFixer(new LevelLegacyWorldGenSettingsFix(schema120));
        Schema schema121 = builder.addSchema(2550, SAME_NAMESPACED);
        builder.addFixer(new WorldGenSettingsFix(schema121));
        Schema schema122 = builder.addSchema(2551, V2551::new);
        builder.addFixer(new WriteAndReadFix(schema122, "add types to WorldGenData", References.WORLD_GEN_SETTINGS));
        Schema schema123 = builder.addSchema(2552, SAME_NAMESPACED);
        builder.addFixer(
            new NamespacedTypeRenameFix(schema123, "Nether biome rename", References.BIOME, createRenamer("minecraft:nether", "minecraft:nether_wastes"))
        );
        Schema schema124 = builder.addSchema(2553, SAME_NAMESPACED);
        builder.addFixer(new NamespacedTypeRenameFix(schema124, "Biomes fix", References.BIOME, createRenamer(BiomeFix.BIOMES)));
        Schema schema125 = builder.addSchema(2558, SAME_NAMESPACED);
        builder.addFixer(new MissingDimensionFix(schema125, false));
        builder.addFixer(new OptionsRenameFieldFix(schema125, false, "Rename swapHands setting", "key_key.swapHands", "key_key.swapOffhand"));
        Schema schema126 = builder.addSchema(2568, V2568::new);
        builder.addFixer(new AddNewChoices(schema126, "Added Piglin Brute", References.ENTITY));
        Schema schema127 = builder.addSchema(2571, V2571::new);
        builder.addFixer(new AddNewChoices(schema127, "Added Goat", References.ENTITY));
        Schema schema128 = builder.addSchema(2679, SAME_NAMESPACED);
        builder.addFixer(new CauldronRenameFix(schema128, false));
        Schema schema129 = builder.addSchema(2680, SAME_NAMESPACED);
        builder.addFixer(ItemRenameFix.create(schema129, "Renamed grass path item to dirt path", createRenamer("minecraft:grass_path", "minecraft:dirt_path")));
        builder.addFixer(
            BlockRenameFix.create(schema129, "Renamed grass path block to dirt path", createRenamer("minecraft:grass_path", "minecraft:dirt_path"))
        );
        Schema schema130 = builder.addSchema(2684, V2684::new);
        builder.addFixer(new AddNewChoices(schema130, "Added Sculk Sensor", References.BLOCK_ENTITY));
        Schema schema131 = builder.addSchema(2686, V2686::new);
        builder.addFixer(new AddNewChoices(schema131, "Added Axolotl", References.ENTITY));
        Schema schema132 = builder.addSchema(2688, V2688::new);
        builder.addFixer(new AddNewChoices(schema132, "Added Glow Squid", References.ENTITY));
        builder.addFixer(new AddNewChoices(schema132, "Added Glow Item Frame", References.ENTITY));
        Schema schema133 = builder.addSchema(2690, SAME_NAMESPACED);
        ImmutableMap<String, String> map = ImmutableMap.<String, String>builder()
            .put("minecraft:weathered_copper_block", "minecraft:oxidized_copper_block")
            .put("minecraft:semi_weathered_copper_block", "minecraft:weathered_copper_block")
            .put("minecraft:lightly_weathered_copper_block", "minecraft:exposed_copper_block")
            .put("minecraft:weathered_cut_copper", "minecraft:oxidized_cut_copper")
            .put("minecraft:semi_weathered_cut_copper", "minecraft:weathered_cut_copper")
            .put("minecraft:lightly_weathered_cut_copper", "minecraft:exposed_cut_copper")
            .put("minecraft:weathered_cut_copper_stairs", "minecraft:oxidized_cut_copper_stairs")
            .put("minecraft:semi_weathered_cut_copper_stairs", "minecraft:weathered_cut_copper_stairs")
            .put("minecraft:lightly_weathered_cut_copper_stairs", "minecraft:exposed_cut_copper_stairs")
            .put("minecraft:weathered_cut_copper_slab", "minecraft:oxidized_cut_copper_slab")
            .put("minecraft:semi_weathered_cut_copper_slab", "minecraft:weathered_cut_copper_slab")
            .put("minecraft:lightly_weathered_cut_copper_slab", "minecraft:exposed_cut_copper_slab")
            .put("minecraft:waxed_semi_weathered_copper", "minecraft:waxed_weathered_copper")
            .put("minecraft:waxed_lightly_weathered_copper", "minecraft:waxed_exposed_copper")
            .put("minecraft:waxed_semi_weathered_cut_copper", "minecraft:waxed_weathered_cut_copper")
            .put("minecraft:waxed_lightly_weathered_cut_copper", "minecraft:waxed_exposed_cut_copper")
            .put("minecraft:waxed_semi_weathered_cut_copper_stairs", "minecraft:waxed_weathered_cut_copper_stairs")
            .put("minecraft:waxed_lightly_weathered_cut_copper_stairs", "minecraft:waxed_exposed_cut_copper_stairs")
            .put("minecraft:waxed_semi_weathered_cut_copper_slab", "minecraft:waxed_weathered_cut_copper_slab")
            .put("minecraft:waxed_lightly_weathered_cut_copper_slab", "minecraft:waxed_exposed_cut_copper_slab")
            .build();
        builder.addFixer(ItemRenameFix.create(schema133, "Renamed copper block items to new oxidized terms", createRenamer(map)));
        builder.addFixer(BlockRenameFix.create(schema133, "Renamed copper blocks to new oxidized terms", createRenamer(map)));
        Schema schema134 = builder.addSchema(2691, SAME_NAMESPACED);
        ImmutableMap<String, String> map1 = ImmutableMap.<String, String>builder()
            .put("minecraft:waxed_copper", "minecraft:waxed_copper_block")
            .put("minecraft:oxidized_copper_block", "minecraft:oxidized_copper")
            .put("minecraft:weathered_copper_block", "minecraft:weathered_copper")
            .put("minecraft:exposed_copper_block", "minecraft:exposed_copper")
            .build();
        builder.addFixer(ItemRenameFix.create(schema134, "Rename copper item suffixes", createRenamer(map1)));
        builder.addFixer(BlockRenameFix.create(schema134, "Rename copper blocks suffixes", createRenamer(map1)));
        Schema schema135 = builder.addSchema(2693, SAME_NAMESPACED);
        builder.addFixer(new AddFlagIfNotPresentFix(schema135, References.WORLD_GEN_SETTINGS, "has_increased_height_already", false));
        Schema schema136 = builder.addSchema(2696, SAME_NAMESPACED);
        ImmutableMap<String, String> map2 = ImmutableMap.<String, String>builder()
            .put("minecraft:grimstone", "minecraft:deepslate")
            .put("minecraft:grimstone_slab", "minecraft:cobbled_deepslate_slab")
            .put("minecraft:grimstone_stairs", "minecraft:cobbled_deepslate_stairs")
            .put("minecraft:grimstone_wall", "minecraft:cobbled_deepslate_wall")
            .put("minecraft:polished_grimstone", "minecraft:polished_deepslate")
            .put("minecraft:polished_grimstone_slab", "minecraft:polished_deepslate_slab")
            .put("minecraft:polished_grimstone_stairs", "minecraft:polished_deepslate_stairs")
            .put("minecraft:polished_grimstone_wall", "minecraft:polished_deepslate_wall")
            .put("minecraft:grimstone_tiles", "minecraft:deepslate_tiles")
            .put("minecraft:grimstone_tile_slab", "minecraft:deepslate_tile_slab")
            .put("minecraft:grimstone_tile_stairs", "minecraft:deepslate_tile_stairs")
            .put("minecraft:grimstone_tile_wall", "minecraft:deepslate_tile_wall")
            .put("minecraft:grimstone_bricks", "minecraft:deepslate_bricks")
            .put("minecraft:grimstone_brick_slab", "minecraft:deepslate_brick_slab")
            .put("minecraft:grimstone_brick_stairs", "minecraft:deepslate_brick_stairs")
            .put("minecraft:grimstone_brick_wall", "minecraft:deepslate_brick_wall")
            .put("minecraft:chiseled_grimstone", "minecraft:chiseled_deepslate")
            .build();
        builder.addFixer(ItemRenameFix.create(schema136, "Renamed grimstone block items to deepslate", createRenamer(map2)));
        builder.addFixer(BlockRenameFix.create(schema136, "Renamed grimstone blocks to deepslate", createRenamer(map2)));
        Schema schema137 = builder.addSchema(2700, SAME_NAMESPACED);
        builder.addFixer(
            BlockRenameFix.create(
                schema137,
                "Renamed cave vines blocks",
                createRenamer(ImmutableMap.of("minecraft:cave_vines_head", "minecraft:cave_vines", "minecraft:cave_vines_body", "minecraft:cave_vines_plant"))
            )
        );
        Schema schema138 = builder.addSchema(2701, SAME_NAMESPACED);
        builder.addFixer(new SavedDataFeaturePoolElementFix(schema138));
        Schema schema139 = builder.addSchema(2702, SAME_NAMESPACED);
        builder.addFixer(new AbstractArrowPickupFix(schema139));
        Schema schema140 = builder.addSchema(2704, V2704::new);
        builder.addFixer(new AddNewChoices(schema140, "Added Goat", References.ENTITY));
        Schema schema141 = builder.addSchema(2707, V2707::new);
        builder.addFixer(new AddNewChoices(schema141, "Added Marker", References.ENTITY));
        builder.addFixer(new AddFlagIfNotPresentFix(schema141, References.WORLD_GEN_SETTINGS, "has_increased_height_already", true));
        Schema schema142 = builder.addSchema(2710, SAME_NAMESPACED);
        builder.addFixer(
            new StatsRenameFix(schema142, "Renamed play_one_minute stat to play_time", ImmutableMap.of("minecraft:play_one_minute", "minecraft:play_time"))
        );
        Schema schema143 = builder.addSchema(2717, SAME_NAMESPACED);
        builder.addFixer(
            ItemRenameFix.create(
                schema143,
                "Rename azalea_leaves_flowers",
                createRenamer(ImmutableMap.of("minecraft:azalea_leaves_flowers", "minecraft:flowering_azalea_leaves"))
            )
        );
        builder.addFixer(
            BlockRenameFix.create(
                schema143,
                "Rename azalea_leaves_flowers items",
                createRenamer(ImmutableMap.of("minecraft:azalea_leaves_flowers", "minecraft:flowering_azalea_leaves"))
            )
        );
        Schema schema144 = builder.addSchema(2825, SAME_NAMESPACED);
        builder.addFixer(new AddFlagIfNotPresentFix(schema144, References.WORLD_GEN_SETTINGS, "has_increased_height_already", false));
        Schema schema145 = builder.addSchema(2831, V2831::new);
        builder.addFixer(new SpawnerDataFix(schema145));
        Schema schema146 = builder.addSchema(2832, V2832::new);
        builder.addFixer(new WorldGenSettingsHeightAndBiomeFix(schema146));
        builder.addFixer(new ChunkHeightAndBiomeFix(schema146));
        Schema schema147 = builder.addSchema(2833, SAME_NAMESPACED);
        builder.addFixer(new WorldGenSettingsDisallowOldCustomWorldsFix(schema147));
        Schema schema148 = builder.addSchema(2838, SAME_NAMESPACED);
        builder.addFixer(
            new NamespacedTypeRenameFix(schema148, "Caves and Cliffs biome renames", References.BIOME, createRenamer(CavesAndCliffsRenames.RENAMES))
        );
        Schema schema149 = builder.addSchema(2841, SAME_NAMESPACED);
        builder.addFixer(new ChunkProtoTickListFix(schema149));
        Schema schema150 = builder.addSchema(2842, V2842::new);
        builder.addFixer(new ChunkRenamesFix(schema150));
        Schema schema151 = builder.addSchema(2843, SAME_NAMESPACED);
        builder.addFixer(new OverreachingTickFix(schema151));
        builder.addFixer(
            new NamespacedTypeRenameFix(
                schema151, "Remove Deep Warm Ocean", References.BIOME, createRenamer("minecraft:deep_warm_ocean", "minecraft:warm_ocean")
            )
        );
        Schema schema152 = builder.addSchema(2846, SAME_NAMESPACED);
        builder.addFixer(
            new AdvancementsRenameFix(
                schema152,
                false,
                "Rename some C&C part 2 advancements",
                createRenamer(
                    ImmutableMap.of(
                        "minecraft:husbandry/play_jukebox_in_meadows",
                        "minecraft:adventure/play_jukebox_in_meadows",
                        "minecraft:adventure/caves_and_cliff",
                        "minecraft:adventure/fall_from_world_height",
                        "minecraft:adventure/ride_strider_in_overworld_lava",
                        "minecraft:nether/ride_strider_in_overworld_lava"
                    )
                )
            )
        );
        Schema schema153 = builder.addSchema(2852, SAME_NAMESPACED);
        builder.addFixer(new WorldGenSettingsDisallowOldCustomWorldsFix(schema153));
        Schema schema154 = builder.addSchema(2967, SAME_NAMESPACED);
        builder.addFixer(new StructureSettingsFlattenFix(schema154));
        Schema schema155 = builder.addSchema(2970, SAME_NAMESPACED);
        builder.addFixer(new StructuresBecomeConfiguredFix(schema155));
        Schema schema156 = builder.addSchema(3076, V3076::new);
        builder.addFixer(new AddNewChoices(schema156, "Added Sculk Catalyst", References.BLOCK_ENTITY));
        Schema schema157 = builder.addSchema(3077, SAME_NAMESPACED);
        builder.addFixer(new ChunkDeleteIgnoredLightDataFix(schema157));
        Schema schema158 = builder.addSchema(3078, V3078::new);
        builder.addFixer(new AddNewChoices(schema158, "Added Frog", References.ENTITY));
        builder.addFixer(new AddNewChoices(schema158, "Added Tadpole", References.ENTITY));
        builder.addFixer(new AddNewChoices(schema158, "Added Sculk Shrieker", References.BLOCK_ENTITY));
        Schema schema159 = builder.addSchema(3081, V3081::new);
        builder.addFixer(new AddNewChoices(schema159, "Added Warden", References.ENTITY));
        Schema schema160 = builder.addSchema(3082, V3082::new);
        builder.addFixer(new AddNewChoices(schema160, "Added Chest Boat", References.ENTITY));
        Schema schema161 = builder.addSchema(3083, V3083::new);
        builder.addFixer(new AddNewChoices(schema161, "Added Allay", References.ENTITY));
        Schema schema162 = builder.addSchema(3084, SAME_NAMESPACED);
        builder.addFixer(
            new NamespacedTypeRenameFix(
                schema162,
                "game_event_renames_3084",
                References.GAME_EVENT_NAME,
                createRenamer(
                    ImmutableMap.<String, String>builder()
                        .put("minecraft:block_press", "minecraft:block_activate")
                        .put("minecraft:block_switch", "minecraft:block_activate")
                        .put("minecraft:block_unpress", "minecraft:block_deactivate")
                        .put("minecraft:block_unswitch", "minecraft:block_deactivate")
                        .put("minecraft:drinking_finish", "minecraft:drink")
                        .put("minecraft:elytra_free_fall", "minecraft:elytra_glide")
                        .put("minecraft:entity_damaged", "minecraft:entity_damage")
                        .put("minecraft:entity_dying", "minecraft:entity_die")
                        .put("minecraft:entity_killed", "minecraft:entity_die")
                        .put("minecraft:mob_interact", "minecraft:entity_interact")
                        .put("minecraft:ravager_roar", "minecraft:entity_roar")
                        .put("minecraft:ring_bell", "minecraft:block_change")
                        .put("minecraft:shulker_close", "minecraft:container_close")
                        .put("minecraft:shulker_open", "minecraft:container_open")
                        .put("minecraft:wolf_shaking", "minecraft:entity_shake")
                        .build()
                )
            )
        );
        Schema schema163 = builder.addSchema(3086, SAME_NAMESPACED);
        builder.addFixer(
            new EntityVariantFix(
                schema163, "Change cat variant type", References.ENTITY, "minecraft:cat", "CatType", Util.make(new Int2ObjectOpenHashMap<String>(), map5 -> {
                    map5.defaultReturnValue("minecraft:tabby");
                    map5.put(0, "minecraft:tabby");
                    map5.put(1, "minecraft:black");
                    map5.put(2, "minecraft:red");
                    map5.put(3, "minecraft:siamese");
                    map5.put(4, "minecraft:british");
                    map5.put(5, "minecraft:calico");
                    map5.put(6, "minecraft:persian");
                    map5.put(7, "minecraft:ragdoll");
                    map5.put(8, "minecraft:white");
                    map5.put(9, "minecraft:jellie");
                    map5.put(10, "minecraft:all_black");
                })::get
            )
        );
        ImmutableMap<String, String> map3 = ImmutableMap.<String, String>builder()
            .put("textures/entity/cat/tabby.png", "minecraft:tabby")
            .put("textures/entity/cat/black.png", "minecraft:black")
            .put("textures/entity/cat/red.png", "minecraft:red")
            .put("textures/entity/cat/siamese.png", "minecraft:siamese")
            .put("textures/entity/cat/british_shorthair.png", "minecraft:british")
            .put("textures/entity/cat/calico.png", "minecraft:calico")
            .put("textures/entity/cat/persian.png", "minecraft:persian")
            .put("textures/entity/cat/ragdoll.png", "minecraft:ragdoll")
            .put("textures/entity/cat/white.png", "minecraft:white")
            .put("textures/entity/cat/jellie.png", "minecraft:jellie")
            .put("textures/entity/cat/all_black.png", "minecraft:all_black")
            .build();
        builder.addFixer(
            new CriteriaRenameFix(
                schema163, "Migrate cat variant advancement", "minecraft:husbandry/complete_catalogue", string -> map3.getOrDefault(string, string)
            )
        );
        Schema schema164 = builder.addSchema(3087, SAME_NAMESPACED);
        builder.addFixer(
            new EntityVariantFix(
                schema164, "Change frog variant type", References.ENTITY, "minecraft:frog", "Variant", Util.make(new Int2ObjectOpenHashMap<String>(), map5 -> {
                    map5.put(0, "minecraft:temperate");
                    map5.put(1, "minecraft:warm");
                    map5.put(2, "minecraft:cold");
                })::get
            )
        );
        Schema schema165 = builder.addSchema(3090, SAME_NAMESPACED);
        builder.addFixer(
            new EntityFieldsRenameFix(schema165, "EntityPaintingFieldsRenameFix", "minecraft:painting", Map.of("Motive", "variant", "Facing", "facing"))
        );
        Schema schema166 = builder.addSchema(3093, SAME_NAMESPACED);
        builder.addFixer(new EntityGoatMissingStateFix(schema166));
        Schema schema167 = builder.addSchema(3094, SAME_NAMESPACED);
        builder.addFixer(new GoatHornIdFix(schema167));
        Schema schema168 = builder.addSchema(3097, SAME_NAMESPACED);
        builder.addFixer(new FilteredBooksFix(schema168));
        builder.addFixer(new FilteredSignsFix(schema168));
        Map<String, String> map4 = Map.of("minecraft:british", "minecraft:british_shorthair");
        builder.addFixer(new VariantRenameFix(schema168, "Rename british shorthair", References.ENTITY, "minecraft:cat", map4));
        builder.addFixer(
            new CriteriaRenameFix(
                schema168,
                "Migrate cat variant advancement for british shorthair",
                "minecraft:husbandry/complete_catalogue",
                string -> map4.getOrDefault(string, string)
            )
        );
        builder.addFixer(new PoiTypeRemoveFix(schema168, "Remove unpopulated villager PoI types", Set.of("minecraft:unemployed", "minecraft:nitwit")::contains));
        Schema schema169 = builder.addSchema(3108, SAME_NAMESPACED);
        builder.addFixer(new BlendingDataRemoveFromNetherEndFix(schema169));
        Schema schema170 = builder.addSchema(3201, SAME_NAMESPACED);
        builder.addFixer(new OptionsProgrammerArtFix(schema170));
        Schema schema171 = builder.addSchema(3202, V3202::new);
        builder.addFixer(new AddNewChoices(schema171, "Added Hanging Sign", References.BLOCK_ENTITY));
        Schema schema172 = builder.addSchema(3203, V3203::new);
        builder.addFixer(new AddNewChoices(schema172, "Added Camel", References.ENTITY));
        Schema schema173 = builder.addSchema(3204, V3204::new);
        builder.addFixer(new AddNewChoices(schema173, "Added Chiseled Bookshelf", References.BLOCK_ENTITY));
        Schema schema174 = builder.addSchema(3209, SAME_NAMESPACED);
        builder.addFixer(new ItemStackSpawnEggFix(schema174, false, "minecraft:pig_spawn_egg"));
        Schema schema175 = builder.addSchema(3214, SAME_NAMESPACED);
        builder.addFixer(new OptionsAmbientOcclusionFix(schema175));
        Schema schema176 = builder.addSchema(3319, SAME_NAMESPACED);
        builder.addFixer(new OptionsAccessibilityOnboardFix(schema176));
        Schema schema177 = builder.addSchema(3322, SAME_NAMESPACED);
        builder.addFixer(new EffectDurationFix(schema177));
        Schema schema178 = builder.addSchema(3325, V3325::new);
        builder.addFixer(new AddNewChoices(schema178, "Added displays", References.ENTITY));
        Schema schema179 = builder.addSchema(3326, V3326::new);
        builder.addFixer(new AddNewChoices(schema179, "Added Sniffer", References.ENTITY));
        Schema schema180 = builder.addSchema(3327, V3327::new);
        builder.addFixer(new AddNewChoices(schema180, "Archaeology", References.BLOCK_ENTITY));
        Schema schema181 = builder.addSchema(3328, V3328::new);
        builder.addFixer(new AddNewChoices(schema181, "Added interaction", References.ENTITY));
        Schema schema182 = builder.addSchema(3438, V3438::new);
        builder.addFixer(
            BlockEntityRenameFix.create(
                schema182, "Rename Suspicious Sand to Brushable Block", createRenamer("minecraft:suspicious_sand", "minecraft:brushable_block")
            )
        );
        builder.addFixer(new EntityBrushableBlockFieldsRenameFix(schema182));
        builder.addFixer(
            ItemRenameFix.create(
                schema182,
                "Pottery shard renaming",
                createRenamer(
                    ImmutableMap.of(
                        "minecraft:pottery_shard_archer",
                        "minecraft:archer_pottery_shard",
                        "minecraft:pottery_shard_prize",
                        "minecraft:prize_pottery_shard",
                        "minecraft:pottery_shard_arms_up",
                        "minecraft:arms_up_pottery_shard",
                        "minecraft:pottery_shard_skull",
                        "minecraft:skull_pottery_shard"
                    )
                )
            )
        );
        builder.addFixer(new AddNewChoices(schema182, "Added calibrated sculk sensor", References.BLOCK_ENTITY));
        Schema schema183 = builder.addSchema(3439, V3439::new);
        builder.addFixer(new BlockEntitySignDoubleSidedEditableTextFix(schema183, "Updated sign text format for Signs", "minecraft:sign"));
        Schema schema184 = builder.addSchema(3439, 1, V3439_1::new);
        builder.addFixer(new BlockEntitySignDoubleSidedEditableTextFix(schema184, "Updated sign text format for Hanging Signs", "minecraft:hanging_sign"));
        Schema schema185 = builder.addSchema(3440, SAME_NAMESPACED);
        builder.addFixer(
            new NamespacedTypeRenameFix(
                schema185,
                "Replace experimental 1.20 overworld",
                References.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST,
                createRenamer("minecraft:overworld_update_1_20", "minecraft:overworld")
            )
        );
        builder.addFixer(new FeatureFlagRemoveFix(schema185, "Remove 1.20 feature toggle", Set.of("minecraft:update_1_20")));
        Schema schema186 = builder.addSchema(3447, SAME_NAMESPACED);
        builder.addFixer(
            ItemRenameFix.create(
                schema186,
                "Pottery shard item renaming to Pottery sherd",
                createRenamer(
                    Stream.of(
                            "minecraft:angler_pottery_shard",
                            "minecraft:archer_pottery_shard",
                            "minecraft:arms_up_pottery_shard",
                            "minecraft:blade_pottery_shard",
                            "minecraft:brewer_pottery_shard",
                            "minecraft:burn_pottery_shard",
                            "minecraft:danger_pottery_shard",
                            "minecraft:explorer_pottery_shard",
                            "minecraft:friend_pottery_shard",
                            "minecraft:heart_pottery_shard",
                            "minecraft:heartbreak_pottery_shard",
                            "minecraft:howl_pottery_shard",
                            "minecraft:miner_pottery_shard",
                            "minecraft:mourner_pottery_shard",
                            "minecraft:plenty_pottery_shard",
                            "minecraft:prize_pottery_shard",
                            "minecraft:sheaf_pottery_shard",
                            "minecraft:shelter_pottery_shard",
                            "minecraft:skull_pottery_shard",
                            "minecraft:snort_pottery_shard"
                        )
                        .collect(Collectors.toMap(Function.identity(), string -> string.replace("_pottery_shard", "_pottery_sherd")))
                )
            )
        );
        Schema schema187 = builder.addSchema(3448, V3448::new);
        builder.addFixer(new DecoratedPotFieldRenameFix(schema187));
        Schema schema188 = builder.addSchema(3450, SAME_NAMESPACED);
        builder.addFixer(
            new RemapChunkStatusFix(
                schema188,
                "Remove liquid_carvers and heightmap chunk statuses",
                createRenamer(Map.of("minecraft:liquid_carvers", "minecraft:carvers", "minecraft:heightmaps", "minecraft:spawn"))
            )
        );
        Schema schema189 = builder.addSchema(3451, SAME_NAMESPACED);
        builder.addFixer(new ChunkDeleteLightFix(schema189));
        Schema schema190 = builder.addSchema(3459, SAME_NAMESPACED);
        builder.addFixer(new LegacyDragonFightFix(schema190));
        Schema schema191 = builder.addSchema(3564, SAME_NAMESPACED);
        builder.addFixer(new DropInvalidSignDataFix(schema191, "minecraft:sign"));
        Schema schema192 = builder.addSchema(3564, 1, SAME_NAMESPACED);
        builder.addFixer(new DropInvalidSignDataFix(schema192, "minecraft:hanging_sign"));
        Schema schema193 = builder.addSchema(3565, SAME_NAMESPACED);
        builder.addFixer(new RandomSequenceSettingsFix(schema193));
        Schema schema194 = builder.addSchema(3566, SAME_NAMESPACED);
        builder.addFixer(new ScoreboardDisplaySlotFix(schema194));
        Schema schema195 = builder.addSchema(3568, SAME_NAMESPACED);
        builder.addFixer(new MobEffectIdFix(schema195));
        Schema schema196 = builder.addSchema(3682, V3682::new);
        builder.addFixer(new AddNewChoices(schema196, "Added Crafter", References.BLOCK_ENTITY));
        Schema schema197 = builder.addSchema(3683, V3683::new);
        builder.addFixer(new PrimedTntBlockStateFixer(schema197));
        Schema schema198 = builder.addSchema(3685, V3685::new);
        builder.addFixer(new FixProjectileStoredItem(schema198));
        Schema schema199 = builder.addSchema(3689, V3689::new);
        builder.addFixer(new AddNewChoices(schema199, "Added Breeze", References.ENTITY));
        builder.addFixer(new AddNewChoices(schema199, "Added Trial Spawner", References.BLOCK_ENTITY));
        Schema schema200 = builder.addSchema(3692, SAME_NAMESPACED);
        UnaryOperator<String> unaryOperator1 = createRenamer(Map.of("minecraft:grass", "minecraft:short_grass"));
        builder.addFixer(BlockRenameFix.create(schema200, "Rename grass block to short_grass", unaryOperator1));
        builder.addFixer(ItemRenameFix.create(schema200, "Rename grass item to short_grass", unaryOperator1));
        Schema schema201 = builder.addSchema(3799, V3799::new);
        builder.addFixer(new AddNewChoices(schema201, "Added Armadillo", References.ENTITY));
        Schema schema202 = builder.addSchema(3800, SAME_NAMESPACED);
        UnaryOperator<String> unaryOperator2 = createRenamer(Map.of("minecraft:scute", "minecraft:turtle_scute"));
        builder.addFixer(ItemRenameFix.create(schema202, "Rename scute item to turtle_scute", unaryOperator2));
        Schema schema203 = builder.addSchema(3803, SAME_NAMESPACED);
        builder.addFixer(
            new RenameEnchantmentsFix(schema203, "Rename sweeping enchant to sweeping_edge", Map.of("minecraft:sweeping", "minecraft:sweeping_edge"))
        );
        Schema schema204 = builder.addSchema(3807, V3807::new);
        builder.addFixer(new AddNewChoices(schema204, "Added Vault", References.BLOCK_ENTITY));
        Schema schema205 = builder.addSchema(3807, 1, SAME_NAMESPACED);
        builder.addFixer(new MapBannerBlockPosFormatFix(schema205));
        Schema schema206 = builder.addSchema(3808, V3808::new);
        builder.addFixer(new HorseBodyArmorItemFix(schema206, "minecraft:horse", "ArmorItem", true));
        Schema schema207 = builder.addSchema(3808, 1, V3808_1::new);
        builder.addFixer(new HorseBodyArmorItemFix(schema207, "minecraft:llama", "DecorItem", false));
        Schema schema208 = builder.addSchema(3808, 2, V3808_2::new);
        builder.addFixer(new HorseBodyArmorItemFix(schema208, "minecraft:trader_llama", "DecorItem", false));
        Schema schema209 = builder.addSchema(3809, SAME_NAMESPACED);
        builder.addFixer(new ChestedHorsesInventoryZeroIndexingFix(schema209));
        Schema schema210 = builder.addSchema(3812, SAME_NAMESPACED);
        builder.addFixer(new FixWolfHealth(schema210));
        Schema schema211 = builder.addSchema(3813, V3813::new);
        builder.addFixer(new BlockPosFormatAndRenamesFix(schema211));
        Schema schema212 = builder.addSchema(3814, SAME_NAMESPACED);
        builder.addFixer(
            new AttributesRenameLegacy(
                schema212, "Rename jump strength attribute", createRenamer("minecraft:horse.jump_strength", "minecraft:generic.jump_strength")
            )
        );
        Schema schema213 = builder.addSchema(3816, V3816::new);
        builder.addFixer(new AddNewChoices(schema213, "Added Bogged", References.ENTITY));
        Schema schema214 = builder.addSchema(3818, V3818::new);
        builder.addFixer(new BeehiveFieldRenameFix(schema214));
        builder.addFixer(new EmptyItemInHotbarFix(schema214));
        Schema schema215 = builder.addSchema(3818, 1, SAME_NAMESPACED);
        builder.addFixer(new BannerPatternFormatFix(schema215));
        Schema schema216 = builder.addSchema(3818, 2, SAME_NAMESPACED);
        builder.addFixer(new TippedArrowPotionToItemFix(schema216));
        Schema schema217 = builder.addSchema(3818, 3, V3818_3::new);
        builder.addFixer(new WriteAndReadFix(schema217, "Inject data component types", References.DATA_COMPONENTS));
        Schema schema218 = builder.addSchema(3818, 4, V3818_4::new);
        builder.addFixer(new ParticleUnflatteningFix(schema218));
        Schema schema219 = builder.addSchema(3818, 5, V3818_5::new);
        builder.addFixer(new ItemStackComponentizationFix(schema219));
        Schema schema220 = builder.addSchema(3818, 6, SAME_NAMESPACED);
        builder.addFixer(new AreaEffectCloudPotionFix(schema220));
        Schema schema221 = builder.addSchema(3820, SAME_NAMESPACED);
        builder.addFixer(new PlayerHeadBlockProfileFix(schema221));
        builder.addFixer(new LodestoneCompassComponentFix(schema221));
        Schema schema222 = builder.addSchema(3825, V3825::new);
        builder.addFixer(new ItemStackCustomNameToOverrideComponentFix(schema222));
        builder.addFixer(new BannerEntityCustomNameToOverrideComponentFix(schema222));
        builder.addFixer(new TrialSpawnerConfigFix(schema222));
        builder.addFixer(new AddNewChoices(schema222, "Added Ominous Item Spawner", References.ENTITY));
        Schema schema223 = builder.addSchema(3828, SAME_NAMESPACED);
        builder.addFixer(new EmptyItemInVillagerTradeFix(schema223));
        Schema schema224 = builder.addSchema(3833, SAME_NAMESPACED);
        builder.addFixer(new RemoveEmptyItemInBrushableBlockFix(schema224));
        Schema schema225 = builder.addSchema(3938, V3938::new);
        builder.addFixer(new ProjectileStoredWeaponFix(schema225));
        Schema schema226 = builder.addSchema(3939, SAME_NAMESPACED);
        builder.addFixer(new FeatureFlagRemoveFix(schema226, "Remove 1.21 feature toggle", Set.of("minecraft:update_1_21")));
        Schema schema227 = builder.addSchema(3943, SAME_NAMESPACED);
        builder.addFixer(new OptionsMenuBlurrinessFix(schema227));
        Schema schema228 = builder.addSchema(3945, SAME_NAMESPACED);
        builder.addFixer(new AttributeModifierIdFix(schema228));
        builder.addFixer(new JukeboxTicksSinceSongStartedFix(schema228));
        Schema schema229 = builder.addSchema(4054, SAME_NAMESPACED);
        builder.addFixer(new OminousBannerRarityFix(schema229));
        Schema schema230 = builder.addSchema(4055, SAME_NAMESPACED);
        builder.addFixer(new AttributeIdPrefixFix(schema230));
        Schema schema231 = builder.addSchema(4057, SAME_NAMESPACED);
        builder.addFixer(new CarvingStepRemoveFix(schema231));
        Schema schema232 = builder.addSchema(4059, V4059::new);
        builder.addFixer(new FoodToConsumableFix(schema232));
        Schema schema233 = builder.addSchema(4061, SAME_NAMESPACED);
        builder.addFixer(new TrialSpawnerConfigInRegistryFix(schema233));
        Schema schema234 = builder.addSchema(4064, SAME_NAMESPACED);
        builder.addFixer(new FireResistantToDamageResistantComponentFix(schema234));
        Schema schema235 = builder.addSchema(4067, V4067::new);
        builder.addFixer(new BoatSplitFix(schema235));
        builder.addFixer(new FeatureFlagRemoveFix(schema235, "Remove Bundle experimental feature flag", Set.of("minecraft:bundle")));
        Schema schema236 = builder.addSchema(4068, SAME_NAMESPACED);
        builder.addFixer(new LockComponentPredicateFix(schema236));
        builder.addFixer(new ContainerBlockEntityLockPredicateFix(schema236));
        Schema schema237 = builder.addSchema(4070, V4070::new);
        builder.addFixer(new AddNewChoices(schema237, "Added Pale Oak Boat and Pale Oak Chest Boat", References.ENTITY));
        Schema schema238 = builder.addSchema(4071, V4071::new);
        builder.addFixer(new AddNewChoices(schema238, "Added Creaking", References.ENTITY));
        builder.addFixer(new AddNewChoices(schema238, "Added Creaking Heart", References.BLOCK_ENTITY));
        Schema schema239 = builder.addSchema(4081, SAME_NAMESPACED);
        builder.addFixer(new EntitySalmonSizeFix(schema239));
        Schema schema240 = builder.addSchema(4173, SAME_NAMESPACED);
        builder.addFixer(new EntityFieldsRenameFix(schema240, "Rename TNT Minecart fuse", "minecraft:tnt_minecart", Map.of("TNTFuse", "fuse")));
        Schema schema241 = builder.addSchema(4175, SAME_NAMESPACED);
        builder.addFixer(new EquippableAssetRenameFix(schema241));
        builder.addFixer(new CustomModelDataExpandFix(schema241));
        Schema schema242 = builder.addSchema(4176, SAME_NAMESPACED);
        builder.addFixer(new InvalidBlockEntityLockFix(schema242));
        builder.addFixer(new InvalidLockComponentFix(schema242));
        Schema schema243 = builder.addSchema(4180, SAME_NAMESPACED);
        builder.addFixer(new FeatureFlagRemoveFix(schema243, "Remove Winter Drop toggle", Set.of("minecraft:winter_drop")));
        Schema schema244 = builder.addSchema(4181, SAME_NAMESPACED);
        builder.addFixer(new BlockEntityFurnaceBurnTimeFix(schema244, "minecraft:furnace"));
        builder.addFixer(new BlockEntityFurnaceBurnTimeFix(schema244, "minecraft:smoker"));
        builder.addFixer(new BlockEntityFurnaceBurnTimeFix(schema244, "minecraft:blast_furnace"));
        Schema schema245 = builder.addSchema(4187, SAME_NAMESPACED);
        builder.addFixer(
            new EntityAttributeBaseValueFix(
                schema245, "Villager follow range fix undo", "minecraft:villager", "minecraft:follow_range", d -> d == 48.0 ? 16.0 : d
            )
        );
        builder.addFixer(
            new EntityAttributeBaseValueFix(schema245, "Bee follow range fix", "minecraft:bee", "minecraft:follow_range", d -> d == 48.0 ? 16.0 : d)
        );
        builder.addFixer(
            new EntityAttributeBaseValueFix(schema245, "Allay follow range fix", "minecraft:allay", "minecraft:follow_range", d -> d == 48.0 ? 16.0 : d)
        );
        builder.addFixer(
            new EntityAttributeBaseValueFix(schema245, "Llama follow range fix", "minecraft:llama", "minecraft:follow_range", d -> d == 40.0 ? 16.0 : d)
        );
        builder.addFixer(
            new EntityAttributeBaseValueFix(
                schema245, "Piglin Brute follow range fix", "minecraft:piglin_brute", "minecraft:follow_range", d -> d == 16.0 ? 12.0 : d
            )
        );
        builder.addFixer(
            new EntityAttributeBaseValueFix(schema245, "Warden follow range fix", "minecraft:warden", "minecraft:follow_range", d -> d == 16.0 ? 24.0 : d)
        );
        Schema schema246 = builder.addSchema(4290, V4290::new);
        builder.addFixer(new UnflattenTextComponentFix(schema246));
        Schema schema247 = builder.addSchema(4291, SAME_NAMESPACED);
        builder.addFixer(new LegacyHoverEventFix(schema247));
        builder.addFixer(new TextComponentStringifiedFlagsFix(schema247));
        Schema schema248 = builder.addSchema(4292, V4292::new);
        builder.addFixer(new TextComponentHoverAndClickEventFix(schema248));
        Schema schema249 = builder.addSchema(4293, SAME_NAMESPACED);
        builder.addFixer(new DropChancesFormatFix(schema249));
        Schema schema250 = builder.addSchema(4294, SAME_NAMESPACED);
        builder.addFixer(
            new BlockPropertyRenameAndFix(
                schema250,
                "CreakingHeartBlockStateFix",
                "minecraft:creaking_heart",
                "active",
                "creaking_heart_state",
                string -> string.equals("true") ? "awake" : "uprooted"
            )
        );
        Schema schema251 = builder.addSchema(4295, SAME_NAMESPACED);
        builder.addFixer(new BlendingDataFix(schema251));
        Schema schema252 = builder.addSchema(4296, SAME_NAMESPACED);
        builder.addFixer(new AreaEffectCloudDurationScaleFix(schema252));
        Schema schema253 = builder.addSchema(4297, SAME_NAMESPACED);
        builder.addFixer(new ForcedChunkToTicketFix(schema253));
        Schema schema254 = builder.addSchema(4299, SAME_NAMESPACED);
        builder.addFixer(new EntitySpawnerItemVariantComponentFix(schema254));
        Schema schema255 = builder.addSchema(4300, V4300::new);
        builder.addFixer(new SaddleEquipmentSlotFix(schema255));
        Schema schema256 = builder.addSchema(4301, V4301::new);
        builder.addFixer(new EquipmentFormatFix(schema256));
        Schema schema257 = builder.addSchema(4302, V4302::new);
        builder.addFixer(new AddNewChoices(schema257, "Added Test and Test Instance Block Entities", References.BLOCK_ENTITY));
        Schema schema258 = builder.addSchema(4303, SAME_NAMESPACED);
        builder.addFixer(new EntityFallDistanceFloatToDoubleFix(schema258, References.ENTITY));
        builder.addFixer(new EntityFallDistanceFloatToDoubleFix(schema258, References.PLAYER));
        Schema schema259 = builder.addSchema(4305, SAME_NAMESPACED);
        builder.addFixer(
            new BlockPropertyRenameAndFix(schema259, "rename test block mode", "minecraft:test_block", "test_block_mode", "mode", string -> string)
        );
        Schema schema260 = builder.addSchema(4306, V4306::new);
        builder.addFixer(new ThrownPotionSplitFix(schema260));
        Schema schema261 = builder.addSchema(4307, V4307::new);
        builder.addFixer(new TooltipDisplayComponentFix(schema261));
        Schema schema262 = builder.addSchema(4309, SAME_NAMESPACED);
        builder.addFixer(new RaidRenamesDataFix(schema262));
        builder.addFixer(new ChunkTicketUnpackPosFix(schema262));
        Schema schema263 = builder.addSchema(4311, SAME_NAMESPACED);
        builder.addFixer(
            new AdvancementsRenameFix(
                schema263, false, "Use lodestone category change", createRenamer("minecraft:nether/use_lodestone", "minecraft:adventure/use_lodestone")
            )
        );
        Schema schema264 = builder.addSchema(4312, V4312::new);
        builder.addFixer(new PlayerEquipmentFix(schema264));
        Schema schema265 = builder.addSchema(4314, SAME_NAMESPACED);
        builder.addFixer(new InlineBlockPosFormatFix(schema265));
        Schema schema266 = builder.addSchema(4420, V4420::new);
        builder.addFixer(new NamedEntityConvertUncheckedFix(schema266, "AreaEffectCloudCustomParticleFix", References.ENTITY, "minecraft:area_effect_cloud"));
        Schema schema267 = builder.addSchema(4421, V4421::new);
        builder.addFixer(new AddNewChoices(schema267, "Added Happy Ghast", References.ENTITY));
        Schema schema268 = builder.addSchema(4424, SAME_NAMESPACED);
        builder.addFixer(new FeatureFlagRemoveFix(schema268, "Remove Locator Bar experimental feature flag", Set.of("minecraft:locator_bar")));
    }

    private static UnaryOperator<String> createRenamerNoNamespace(Map<String, String> renameMap) {
        return string -> renameMap.getOrDefault(string, string);
    }

    private static UnaryOperator<String> createRenamer(Map<String, String> renameMap) {
        return string -> renameMap.getOrDefault(NamespacedSchema.ensureNamespaced(string), string);
    }

    private static UnaryOperator<String> createRenamer(String oldName, String newName) {
        return string -> Objects.equals(NamespacedSchema.ensureNamespaced(string), oldName) ? newName : string;
    }
}
