ProjBobcat 1.21.0
See the version list below for details.
dotnet add package ProjBobcat --version 1.21.0
NuGet\Install-Package ProjBobcat -Version 1.21.0
<PackageReference Include="ProjBobcat" Version="1.21.0" />
paket add ProjBobcat --version 1.21.0
#r "nuget: ProjBobcat, 1.21.0"
// Install ProjBobcat as a Cake Addin #addin nuget:?package=ProjBobcat&version=1.21.0 // Install ProjBobcat as a Cake Tool #tool nuget:?package=ProjBobcat&version=1.21.0
ProjBobcat
简体中文
The next-generation Minecraft launcher core written in C# providing the freest, fastest and the most complete experience.
Developed and maintained by Corona Studio.
Stats
Multi-Platform Support
Currently we are working on the multi-platform support for ProjBobcat |Platform|Status| |:------:|:----:| |Windows | ✅ | |macOS | ✅ | |Linux | WIP |
CodeQL
[Ad] An Awesome Typescript Launcher Core
All you need for minecraft launcher in typescript. https://voxelum.github.io/minecraft-launcher-core-node/
Reminder before installation
Because Projbobcat uses tons of latest language features and data structures from .NET Core and .NET 5+. As the result, you need to switch you project target to at least .NET 5 or above to use this package.
Due to the limitation of the default number of connections in .NET, you need to manually override the default number of connections to ensure that some methods in <DownloadHelper> are executed normally. You can add the following code in App.xaml.cs or the entry point of the program to complete the modification (The maximum value should not exceed 1024)
using System.Net; ServicePointManager.DefaultConnectionLimit = 512;
Installation
There are two methods for the first step:
- Clone and copy ProjBobcat's source code to your solution folder, then add ProjBobcat's reference to your project.
- Directly install ProjBobcat via Nuget Package Manager or simply execute
in Package Manager Console.Install-Package ProjBobcat
After the step above is completed, you need to add two lines of code into your program's entry point (App.xaml.cs or something else):
ServiceHelper.Init();
HttpClientHelper.Init();
Roadmap
Function | Status |
---|---|
Offline Auth Model | ✅ |
Online Auth Model (Yggdrasil) | ✅ |
Online Auth Model (Microsoft) | ✅ |
Version Isolation | ✅ |
launcher_profiles.json Analysis | ✅ |
launcher_accounts.json Analysis | ✅ |
Nuget Distribution | ✅ |
Old Forge Installation Model | ✅ |
New Forge Installation Model | ✅ |
Optifine Installation Model | ✅ |
Fabric Installation Model | ✅ |
LiteLoader Installation Model | ✅ |
Resource Auto Completion (Multi-thread downloader) | ✅ |
Minecraft: Windows 10 Edition Support (Detector and launcher) | ✅ |
Game log resolver | ✅ |
Game crashing detector | WIP |
Instruction
Please note: ProjBobcat requires non-32-bit preferred compilation in your main project.
ProjBobcat provides 3 main components & a core to form the whole core framework.
Class | Parent Interface | Parent Class | Function |
---|---|---|---|
DefaultGameCore | IGameCore | NG | All Implementations of the Default Launch Core |
DefaultLaunchArgumentParser | IArgumentParser | LaunchArgumentParserBase | The Default Argument Analysis Tool |
DefaultLauncherProfileParser | ILauncherProfileParser | LauncherProfileParserBase | The Default launcher_profiles.json Analysis Module |
DefaultVersionLocator | IVersionLocator | VersionLocatorBase | Game Version Locator |
Selective components: | Class | Parent Interface | Parent Class | Function | | - | - | - | - | | DefaultResourceCompleter | IResourceCompleter | NG | All Implementations of the Default Resource Completer |
Quick Startup
Java Detection
var javaList = ProjBobcat.Class.Helper.SystemInfoHelper.FindJava(); // Returns a list of all java installations found in registry.
Core Initialization
var core = new DefaultGameCore
{
ClientToken = clientToken,
RootPath = rootPath,
VersionLocator = new DefaultVersionLocator(rootPath, clientToken)
{
LauncherProfileParser = new DefaultLauncherProfileParser(rootPath, clientToken),
LauncherAccountParser = new DefaultLauncherAccountParser(rootPath, clientToken)
},
GameLogResolver = new DefaultGameLogResolver()
};
Game Scaning
List<VersionInfo> gameList = core.VersionLocator.GetAllGames().ToList();
Resource Completion
//Here we use mcbbs' download source, change the uri to meet your need.
var drc = new DefaultResourceCompleter
{
ResourceInfoResolvers = new List<IResourceInfoResolver>(2)
{
new AssetInfoResolver
{
AssetIndexUriRoot = "https://download.mcbbs.net/",
AssetUriRoot = "https://download.mcbbs.net/assets/",
BasePath = core.RootPath,
VersionInfo = gameList[0]
},
new LibraryInfoResolver
{
BasePath = core.RootPath,
LibraryUriRoot = "https://download.mcbbs.net/maven/",
VersionInfo = gameList[0]
}
}
};
await drc.CheckAndDownloadTaskAsync().ConfigureAwait(false);
Here are some events which you could bind to your program.
Name | Method Signature | Refers to |
---|---|---|
GameResourceInfoResolveStatus | (object sender, GameResourceInfoResolveEventArgs e) | Resolver status |
DownloadFileChangedEvent | (object sender, DownloadFileChangedEventArgs e) | All files download status changed |
DownloadFileCompletedEvent | (object sender, DownloadFileCompletedEventArgs e) | Single file download completed |
Launch Configuration
var launchSettings = new LaunchSettings
{
FallBackGameArguments = new GameArguments // Default game arguments for all games in .minecraft/ as the fallback of specific game launch.
{
GcType = GcType.G1Gc, // GC type
JavaExecutable = javaPath, //The path of Java executable
Resolution = new ResolutionModel // Game Window's Resolution
{
Height = 600, // Height
Width = 800 // Width
},
MinMemory = 512, // Minimal Memory
MaxMemory = 1024 // Maximum Memory
},
Version = versionId, // The version ID of the game to launch, such as 1.7.10 or 1.15.2
VersionInsulation = false // Version Isolation
GameResourcePath = Core.RootPath, // Root path of the game resource(.minecraft/)
GamePath = path, // Root path of the game (.minecraft/versions/)
VersionLocator = Core.VersionLocator // Game's version locator
};
launchSettings.GameArguments = new GameArguments // (Optional) The arguments of specific game launch, the undefined settings here will be redirected to the fallback settings mentioned previously.
{
AdvanceArguments = specificArguments , // Advanced launch arguments
JavaExecutable = specificJavaExecutable, // JAVA's path
Resolution = specificResolution, // The window's size
MinMemory = specificMinMemory, // Minimum Memory
MaxMemory = specificMaxMemory // Maximum Memory
};
Here are some events which you could bind to your program.
Name | Method Signature | Refers to |
---|---|---|
GameExitEventDelegate | (object sender, GameExitEventArgs e) | Game Exit |
GameLogEventDelegate | (object sender, GameLogEventArgs e) | Game Log |
LaunchLogEventDelegate | (object sender, LaunchLogEventArgs e) | Core Log |
Define Auth Model
Offline:
launchSettings.Authenticator = new OfflineAuthenticator
{
Username = "Username"
LauncherAccountParser = core.VersionLocator.LauncherAccountParser // launcher_profiles.json parser
},
Online:
launchSettings.Authenticator = new YggdrasilAuthenticator
{
LauncherAccountParser = core.VersionLocator.LauncherAccountParser
Email = "example@example.com", // Registered E-mail address on Mojang authentication server.
Password = "password"
};
Launch!
var result = await Core.LaunchTaskAsync(launchSettings).ConfigureAwait(true); // Returns the launch result
License
MIT. This means that you can modify or use our code for any purpose, however copyright notice and permission notice shall be included in all copies or substantial portions of your software.
Disclaimer
ProjBobcat is not affiliated with Mojang or any part of its software.
Hall of Shame
Here we'll list all programs using our code without obeying MIT License.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 7.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
- Microsoft.Extensions.Http (>= 7.0.0)
- Microsoft.Win32.Registry (>= 5.0.0)
- Newtonsoft.Json (>= 13.0.2)
- SharpCompress (>= 0.32.2)
- System.Management (>= 7.0.0)
-
net7.0
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 7.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
- Microsoft.Extensions.Http (>= 7.0.0)
- Microsoft.Win32.Registry (>= 5.0.0)
- Newtonsoft.Json (>= 13.0.2)
- SharpCompress (>= 0.32.2)
- System.Management (>= 7.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
fix potential stuck issue
fix bugs DownloadHelper.cs
fix high memory consumption in the DownloadHelper.cs
add support for Quilt installation