static bool Prefix(SpellBookMetamagicMixer __instance, Kingmaker.UnitLogic.Feature feature, MetamagicBuilder ___m_MetamagicBuilder)
        {
            var unit = ___m_MetamagicBuilder?.Spellbook?.Owner;

            if (unit == null)
            {
                return(true);
            }

            var arcanist_part = unit.Get <SpellManipulationMechanics.UnitPartArcanistPreparedMetamagic>();

            if (arcanist_part == null)
            {
                return(true);
            }

            if (arcanist_part.spellbook != ___m_MetamagicBuilder.Spellbook.Blueprint)
            {
                return(true);
            }

            var current_metamagic_data = __instance.CurrentTemporarySpell?.MetamagicData;

            if (current_metamagic_data == null)
            {
                return(true);
            }

            var metamagic = feature.Get <AddMetamagicFeat>().Metamagic;
            var metamagic_after_removal = current_metamagic_data.MetamagicMask & ~metamagic;

            if (!arcanist_part.authorisedMetamagic(__instance.CurrentTemporarySpell.Blueprint, metamagic_after_removal))
            {
                return(false);
            }

            return(true);
        }