2.5.1 • Published 2 years ago

@kiwigdc/kiwilaunch v2.5.1

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

KiwiLaunchMC

Module for start and update minecraft game in NodeJS (Write in TS)

Discord support : https://discord.gg/WsyYnWSmwE

  • Log4J not fixed natively (1.17.X and older)

Support VERSION :

- VANILLA : 1.7.10, 1.8.X, 1.9.X, 1.10.X, 1.11.X, 1.12.X, 1.13.X, 1.14.X, 1.15.X, 1.16.X, 1.17.X, 1.18.X
- FORGE : 1.7.10, 1.8.8, 1.12.2

Use :

1 - Exemple (With Updater and official manifest Minecraft)

import { Launch, KLogger, Logger, DirectoryManager, GameVersion, MinecraftVersion, GameTweak, VanillaUpdater, FileDeleter, ParametersManager, JavaPath, AuthManager, ProcessManager, ProcessProfile, TextColor } from '@kiwigdc/kiwilaunch';
import * as path from "path";


(async function(){


    const kLogger = new KLogger(path.join(__dirname, "launcher_logs.log"), "[LauncherTest]");
    Logger.setLogger(kLogger);

    var dir = new DirectoryManager(path.join(DirectoryManager.DEFAULT_DIRECTORY, ".LauncherTest"), "natives", "libraries", "minecraft.jar", "assets");
    var ver = new GameVersion(MinecraftVersion.V1_8_HIGHER, GameTweak.VANILLA, "1.18", "1.18.2");
    var vanillaUpdater = new VanillaUpdater(ver, dir);
    //var forgeUpdater = new ForgeUpdater(new ForgeVersion(ver.versionManifest, "14.23.5.2860"), dir); 
    //var deleter = new FileDeleter(dir, [], vanillaUpdater, forgeUpdater);
    var deleter = new FileDeleter(dir, [], vanillaUpdater);
    var parameters = new ParametersManager(1024, 1024 , "M");
    var java = new JavaPath("java"); // Use java or directory (bin/java is add into class)
    var auth = new AuthManager("Player2042", "sry", "nope");
    var globalLaunch = new Launch(java, parameters, dir, ver, auth);
    var processManager = new ProcessManager(globalLaunch, ProcessProfile.INTERNAL);
    
    // Update game
    await vanillaUpdater.updateGame();

    
    // await forgeUpdater.addModWithUrl("https://xxxx.xxxxxx.fr/mods.json");
    // await forgeUpdater.addMod(new Mod("https://micdoodle8.com/new-builds/GC-1.12/280/MicdoodleCore-1.12.2-4.0.2.280.jar", "906B6088C54A428D7A383796E7B77283CCA7E573"));


    // await forgeUpdater.updateGame();


    // Deleter (that does not come from UPDATER and FORGE UPDATER, if forge updater is set.. )
    let badFiles = deleter.start();

    // Launch command for start the game
    let launch = await processManager.Launch();

    Logger.getLogger().print("Launch command : " + TextColor.GREEN + globalLaunch.getLaunchExternalProfile());

    launch.stdout.on('data', function (data: { toString: () => any; }) {
        Logger.getLogger().print(data.toString())
    });

    launch.stderr.on('error', function (error: { toString: () => string; }) {
        Logger.getLogger().print(TextColor.RED + error.toString())
    });


    



})();

1 - Exemple (Without Updater):

import { Launch, KLogger, Logger, DirectoryManager, GameVersion, MinecraftVersion, GameTweak, VanillaUpdater, FileDeleter, ParametersManager, JavaPath, AuthManager, ProcessManager, ProcessProfile, TextColor } from '@kiwigdc/kiwilaunch';
import * as path from "path";


(async function(){



    const kLogger = new KLogger(path.join(__dirname, "launcher_logs.log"), "[LauncherTest]");
    Logger.setLogger(kLogger);

    var dir = new DirectoryManager(path.join(DirectoryManager.DEFAULT_DIRECTORY, ".LauncherTest"), "natives", "libraries", "minecraft.jar", "assets");
    var ver = new GameVersion(MinecraftVersion.V1_8_HIGHER, GameTweak.VANILLA, "1.18", "1.18.2");
    var parameters = new ParametersManager(1024, 1024 , "M");
    var java = new JavaPath("java"); // Use java or directory (bin/java is add into class)
    var auth = new AuthManager("Player2042", "sry", "nope");
    var globalLaunch = new Launch(java, parameters, dir, ver, auth);
    var processManager = new ProcessManager(globalLaunch, ProcessProfile.INTERNAL);
    


    // Launch command for start the game
    let launch = await processManager.Launch();

    Logger.getLogger().print("Launch command : " + TextColor.GREEN + globalLaunch.getLaunchExternalProfile());

    launch.stdout.on('data', function (data: { toString: () => any; }) {
        Logger.getLogger().print(data.toString())
    });

    launch.stderr.on('error', function (error: { toString: () => string; }) {
        Logger.getLogger().print(TextColor.RED + error.toString())
    });


    



})();

Other informations :

Logger :

Logger color :

Enum's exist for color in console : TextColor, BGColor and TextFormat.

Without logger :

if(Logger.logger == undefined){Logger.logger = {print(msg: string){console.log(msg)}}}
// Logger = console.log(msg);

Exemple of custom logger :

class KLogger extends Logger 
{
    // Called for every logs
    print(msg: string) : void
    {
        // Write file,
        // Launch in space
        // etc...
        console.log("MY CUSTOM LOGGER | " + msg);
    }

Dynamic json file for self-hosted mods :

This php script generates a json :

<?php

$file = "mods/"; // Path to the mods folder
$url = "http://localhost/"; // URL to the mods folder

$json = array();
if ($handle = opendir($file)) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != ".." && !is_dir($entry)) {
            $mod = array("url" => $url . $file . $entry, "sha1" => sha1_file($file . $entry));
            array_push($json, $mod);
        }
    }
    closedir($handle);
}

echo json_encode($json);

?>

Security of FileDeleter

The fileDeleter is not a secure for cheater and other hack, because the client maybe a other launcher for forced mods list use (for exemple) : WatchDog Anti Cheat mod

2.2.4-0

2 years ago

2.3.0

2 years ago

2.2.1

2 years ago

2.2.0

2 years ago

2.5.0

2 years ago

2.2.3

2 years ago

2.4.0

2 years ago

2.2.2

2 years ago

2.5.1

2 years ago

2.1.2

2 years ago

2.1.1

2 years ago

2.1.3

2 years ago

2.1.0

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

1.2.0

2 years ago

1.1.1-0

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago