CmlLib / CmlLib.Core

.NET Minecraft Launcher Library. All Version, Auth, Forge, Java, Crossplatform
MIT License
212 stars 43 forks source link

[BUG] Fabric Installer: System.Collections.Generic.KeyNotFoundException: 'Cannot find none' #94

Closed voidZiAD closed 7 months ago

voidZiAD commented 7 months ago

Describe the bug The Fabric Installer is not working. I'm getting an exception when I try to Save the new fabric version.

Code:

 var fabricVersionLoader = new FabricVersionLoader();
 var fabricVersions = await fabricVersionLoader.GetVersionMetadatasAsync();

 foreach (var v in fabricVersions)
 {

     if (v.Name.Contains("fabric-loader") && v.Name.EndsWith(lbMVersion.Text))
     {

         btnMPLaunch.Text = $"INSTALLING FABRIC {lbMVersion.Text}";
         btnMPLaunch.FillColor = Color.DeepSkyBlue;
         btnMPLaunch.PressedColor = Color.DeepSkyBlue;
         btnMPLaunch.HoverState.FillColor = Color.DeepSkyBlue;

         var path = new MinecraftPath();

         var fabric = fabricVersions.GetVersionMetadata(v.Name);
         await fabric.SaveAsync(path);

         // update version list
         await launcher.GetAllVersionsAsync();

         btnMPLaunch.Text = $"INSTALLING PERFORMANCE MODS";
         btnMPLaunch.FillColor = Color.DeepSkyBlue;
         btnMPLaunch.PressedColor = Color.DeepSkyBlue;
         btnMPLaunch.HoverState.FillColor = Color.DeepSkyBlue;

         try
         {

             using (WebClient client = new WebClient())
             {
                 if (lbMVersion.Text == "1.20.4")
                 {

                     client.DownloadFile(new System.Uri($"https://cdn.modrinth.com/data/AANobbMI/versions/Wzzjm5lQ/sodium-fabric-0.5.7%2Bmc1.20.3.jar"), Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + $"\\.minecraft\\mods\\sodium-fabric-0.5.7+mc1.20.3.jar");

                 }
                 else
                     client.DownloadFile(new System.Uri($"https://cdn.modrinth.com/data/AANobbMI/versions/Wzzjm5lQ/sodium-fabric-0.5.7%2Bmc{lbMVersion.Text}.jar"), Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + $"\\.minecraft\\mods\\sodium-fabric-0.5.7+mc{lbMVersion.Text}.jar");
                 client.DownloadFile(new System.Uri($"https://cdn.modrinth.com/data/YL57xq9U/versions/Xl7oywRL/iris-mc{lbMVersion.Text}-1.6.14.jar"), Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + $"\\.minecraft\\mods\\iris-mc{lbMVersion.Text}-1.6.14.jar");
             }

             LaunchGame();

         }
         catch
         {

             btnMPLaunch.Text = $"THERE WAS AN ISSUE INSTALLING PERFORMANCE MODS";
             btnMPLaunch.FillColor = Color.Firebrick;
             btnMPLaunch.PressedColor = Color.Firebrick;
             btnMPLaunch.HoverState.FillColor = Color.Firebrick;

         }

         return;

     }

 }

image

Logs No game logs, as this is before the game starts.

Environment (please complete the following information):

Additional context I am trying to install Minecraft 1.20.4 Fabric.

voidZiAD commented 7 months ago

Is this something that needs to be fixed? Or is there an already existing solution that I'm not aware of?

voidZiAD commented 7 months ago

Hello?? Am I going to get some help?

AlphaBs commented 7 months ago
var path = new MinecraftPath();
var launcher = new CMLauncher(path);

 // initialize fabric version loader
var fabricVersionLoader = new FabricVersionLoader();
var fabricVersions = await fabricVersionLoader.GetVersionMetadatasAsync();

// install
var fabric = fabricVersions.GetVersionMetadata("fabric-loader-0.15.6-1.20.4");
await fabric.SaveAsync(path);

// update version list
await launcher.GetAllVersionsAsync();

var process = await launcher.CreateProcessAsync("fabric-loader-0.15.6-1.20.4", new MLaunchOption());
process.Start();

I can install 'fabric-loader-0.15.6-1.20.4' using above code. check the version name argument when you call launcher.CreateProcessAsync method. I think you passed wrong version name. (eg. launcher.CreateProcessAsync("none", launchOption))

voidZiAD commented 7 months ago

Oh. The issue was just launcher.CreateProcessAsync. I don't know why but it wasn't passing the right version. Thank you, I appreciate your help a lot.