func (i *Instance) AreDependenciesOutdated() (bool, error) {
	lock := i.Lockfile
	mani := i.Manifest
	if lock == nil || lock.Dependencies == nil {
		return true, nil
	}
	deps := mani.InterpretedDependencies()
	for _, dep := range deps {
		if dep.Provider == "dummy" {
			continue
		}
		if dep.Provider != "minepkg" {
			return true, nil
		}
		packageDep, err := semver.NewConstraint(dep.Source)
		if err != nil {
			return false, err
		}
		lockEntry, ok := lock.Dependencies[dep.Name]
		if !ok {
			return true, nil
		}
		if dep.Source == lockEntry.Version {
			continue
		}
		sVersion, err := semver.NewVersion(lockEntry.Version)
		if err != nil {
			return true, nil
		}
		if !packageDep.Check(sVersion) {
			return true, nil
		}
	}
	for _, lock := range lock.Dependencies {
		if lock.Dependend == "" || lock.Dependend == i.Manifest.Package.Name {
			if lock.Name == "minepkg-companion" {
				continue
			}
			if _, ok := mani.Dependencies[lock.Name]; !ok {
				return true, nil
			}
		}
	}
	return false, nil
}
AreDependenciesOutdated returns true if the dependencies of this instance do not
match what is currently set in the lockfile. Dependencies should be updated with
"UpdateLockfileDependencies" in most cases if this is true
package instances
import (
	"github.com/Masterminds/semver/v3"
	"github.com/minepkg/minepkg/pkg/manifest"
)
func (i *Instance) AreRequirementsOutdated() (bool, error) {
	lock := i.Lockfile
	mani := i.Manifest
	if lock == nil || !lock.HasRequirements() {
		return true, nil
	}
	mcVersionReq, err := semver.NewConstraint(mani.Requirements.Minecraft)
	if err != nil {
		return false, err
	}
	if !mcVersionReq.Check(semver.MustParse(lock.MinecraftVersion())) {
		return true, nil
	}
	platform := mani.PlatformString()
	if platform == manifest.PlatformVanilla {
		return false, nil
	}
	platformVersionReq, err := semver.NewConstraint(mani.PlatformVersion())
	if err != nil {
		return false, err
	}
	if !platformVersionReq.Check(semver.MustParse(lock.PlatformLock().PlatformVersion())) {
		return true, nil
	}
	return false, nil
}