Craft Launcher Modded
A Dart package for launching Minecraft Java Edition with mod loaders such as Fabric. This library extends the craft_launcher_core
package to provide additional functionality for modded Minecraft instances.
Features
- Minecraft mod loader support (Fabric, with planned support for Forge and Quilt)
- Custom version manifest handling for modded instances
- Automatic mod loader library management
- Custom classpath construction for mod loader requirements
- JVM arguments optimization for mod loaders
- Integration with vanilla Minecraft launcher capabilities
- Extensible modded launcher adapter system
Getting started
Add this package to your pubspec.yaml
:
dependencies:
craft_launcher_modded: ^0.0.1
craft_launcher_core: ^0.0.3
Then run:
flutter pub get
Usage
Basic Fabric Launcher Setup
import 'package:craft_launcher_modded/loaders/fabric/fabric_launcher.dart';
import 'package:craft_launcher_core/models/launcher_profiles.dart';
// Create a Fabric profile
final fabricProfile = Profile(
icon: 'grass',
name: 'FabricProfile',
type: 'custom',
created: DateTime.now().toIso8601String(),
lastUsed: DateTime.now().toIso8601String(),
lastVersionId: 'fabric-loader-0.16.14-1.21.5', // Format: fabric-loader-[loader_version]-[minecraft_version]
);
// Initialize Fabric launcher
final fabricLauncher = FabricLauncher(
gameDir: '/path/to/minecraft',
javaDir: '/path/to/java',
profiles: LauncherProfiles(
profiles: {'fabric_profile': fabricProfile},
settings: Settings(
enableSnapshots: false,
keepLauncherOpen: true,
showGameLog: true,
),
version: 3,
),
activeProfile: fabricProfile,
onOperationProgress: (operation, completed, total, percentage) {
print('$operation: $percentage%');
},
launcherName: 'CraftFabricLauncher',
launcherVersion: '1.0.0',
);
// Launch the game with Fabric
await fabricLauncher.launch(
onStdout: (data) => print('Minecraft: $data'),
onStderr: (data) => print('Error: $data'),
onExit: (code) => print('Game exited with code: $code'),
);
Using with Microsoft Authentication
import 'package:craft_launcher_modded/loaders/fabric/fabric_launcher.dart';
import 'package:craft_launcher_core/models/models.dart';
import 'package:mcid_connect/mcid_connect.dart';
// Authenticate with Microsoft (see mcid_connect package)
final authService = AuthService(
clientId: 'your-azure-app-client-id',
redirectUri: 'http://localhost:3000',
scopes: ['XboxLive.signin', 'offline_access'],
onGetDeviceCode: (deviceCodeResponse) {
print('Please visit: ${deviceCodeResponse.verificationUri}');
print('And enter this code: ${deviceCodeResponse.userCode}');
},
);
await authService.startAuthenticationFlow();
// Initialize the Fabric launcher with auth
final fabricLauncher = FabricLauncher(
// Game directory settings
gameDir: '/path/to/minecraft',
javaDir: '/path/to/java',
profiles: myProfiles,
activeProfile: fabricProfile,
// Authentication data
minecraftAccountProfile: authService.minecraftProfile,
microsoftAccount: authService.microsoftAccount,
launcherName: 'AuthenticatedFabricLauncher',
launcherVersion: '1.0.0',
);
// Launch with authentication
await fabricLauncher.launch();
Creating a Custom Modded Launcher
You can extend the AbstractModdedLauncher
class to create a custom modded launcher for other mod loaders:
import 'package:craft_launcher_modded/abstract_modded_launcher.dart';
import 'package:craft_launcher_core/models/models.dart';
class CustomModLoader extends AbstractModdedLauncher {
CustomModLoader({
required super.gameDir,
required super.javaDir,
required super.profiles,
required super.activeProfile,
});
@override
Future<void> beforeFetchVersionManifest(String versionId) async {
// Custom implementation for your mod loader
print('Preparing to fetch version manifest for $versionId');
// Your implementation here
}
@override
Future<T?> afterFetchVersionManifest<T extends VersionInfo>(
String versionId,
T? versionInfo,
) async {
// Process and modify version info for your mod loader
// Your implementation here
return versionInfo;
}
@override
Future<List<String>> beforeBuildClasspath(
VersionInfo versionInfo,
String versionId,
) async {
// Add custom libraries to the classpath
final List<String> additionalClasspath = [];
// Your implementation here
return additionalClasspath;
}
// Implement other methods as needed
}
Additional information
Requirements
- Dart SDK 3.7.2 or higher
- Flutter SDK 3.19.0 or higher
- craft_launcher_core package
- Java Runtime Environment (JRE) or Java Development Kit (JDK) for running Minecraft
- Internet connection for downloading mod loader libraries and game assets
Supported Mod Loaders
- Fabric: Current implementation supports Fabric mod loader
- Forge: Coming soon
- Quilt: Coming soon
Customization Options
You can customize various aspects of the modded launcher:
- Launcher Branding: Set custom launcher name and version that appears in game logs and crash reports
- Environment Variables: Add custom environment variables for mod loader configuration
- JVM Arguments: Customize Java arguments specific to mod loaders
- Library Management: Override library download behavior for custom repositories
Contributing
Contributions are welcome! Feel free to submit issues or pull requests on the GitHub repository.
License
This package is available under the MIT License.