Coder Social home page Coder Social logo

mindstorm38 / portablemc Goto Github PK

View Code? Open in Web Editor NEW
302.0 302.0 22.0 8.06 MB

A fast, reliable and cross-platform command-line Minecraft launcher and API for developers. Including fast and easy installation of common mod loaders such as Fabric, Forge, NeoForge and Quilt.

Home Page: https://pypi.org/project/portablemc/

License: GNU General Public License v3.0

Python 100.00%
cli fabric forge launcher minecraft minecraft-launcher neoforge python python3 quilt

portablemc's People

Contributors

aeknt avatar blucobalt avatar jamikettunen avatar mindstorm38 avatar misilelab avatar ristovski avatar tickingfeather avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

portablemc's Issues

Download assets in parallel

Right now, it seems that portablemc downloads all assets sequentially, which is quite slow.

A better solution would be to download all assets in parallel with a configurable amount of threads, defaulting to some sane value.

Any ideas what the official launcher does?

Microsoft Login

I'm unsure if this launcher let's you login using the new standard Microsoft accounts

Yggdrasil session data not being loaded

Version 2.0.6 does not seem to load the saved session data with yggdrasil auth:

$ python3 ./portablemc.py login [redacted]
[  ..  ] Authenticating [redacted] with Mojang...
         Password: 
[  OK  ] Logged in
$ python3 ./portablemc.py show auth
┌──────┬───────┬──────────┬──────┐
│ Type │ Email │ Username │ UUID │
├──────┼───────┼──────────┼──────┤
└──────┴───────┴──────────┴──────┘

however, portablemc_auth.json does get created:

~/.minecraft $ cat portablemc_auth.json 
{
  "client_id": "[redacted]",
  "yggdrasil": {
    "sessions": {
      "[redacted]": {
        "access_token": "[redacted]",
        "username": "Ristovski",
        "uuid": "[redacted]",
        "client_id": "[redacted]"
      }
    }
  }
}

This causes a password prompt to pop up on every launch.
The logout command also states that there is currently no session.

Client Support

Can you play with a custom client like: Forge, Impact and so on? If you can't, I think it would be great if you could add it in the main project...

JVM arguments are hard to edit

It's not easy to change JVM arguments, even when using double quotes in the command line, JVM arguments are interpreted as portablemc arguments. It would be cool to improve the modification of this command line, maybe via giving a file path with an argument list, or escaping the sequence of arguments with some brackets for example.

Demande d'intégration

Bonjour,

J'ai développé une petite interface graphique en Python avec tkinter pour utiliser votre launcher, et je voudrais savoir si il y avait moyen de lancer le jeu via votre launcher sans garder la fênetre console ouverte, et si ce n'est pas le cas, ce serait une bonne amélioration à penser pour la prochaine version 😉

Pour l'instant, je lance le launcher avec un os.system('start ./bin/portablemc.py -u '+getInGameName()+' -v '+getSelectedVersion() + ' --main-dir ./data --jvm ./bin/bin/java.exe'), mais c'est pas très joli de devoir garder la fenêtre ouverte en arrière-plan :(

Je précise que l'interface graphique est pour une utilisation dans un projet scolaire ^^

Cordialement,
SyFizz_

offline UUID support

Is this possible? Non-legitimate players can set an UUID player skin??? Or no????

No such file or directory with login subcommand

Describe the bug
When using login sub command with and non-existing working directory.

To Reproduce
PortableMC version: 2.0.3
Python version: 3.8.10
Add-ons: none
Steps to reproduce the behavior:

  • Ensure that the working directory does not exists.
  • Use portablemc login [-m] <email>
Traceback (most recent call last):
  File "~/.local/bin/portablemc", line 8, in <module>
    sys.exit(main())
  File "~/.local/lib/python3.8/site-packages/portablemc/cli.py", line 126, in main
    handler(ns, new_context(ns))
  File "~/.local/lib/python3.8/site-packages/portablemc/cli.py", line 508, in cmd_login
    sess = prompt_authenticate(ctx, ns.email_or_username, True, ns.microsoft)
  File "~/.local/lib/python3.8/site-packages/portablemc/cli.py", line 775, in prompt_authenticate
    auth_db.save()
  File "~/.local/lib/python3.8/site-packages/portablemc/__init__.py", line 985, in save
    with open(self.filename, "wt") as fp:
FileNotFoundError: [Errno 2] No such file or directory: '~/.minecraft/portablemc_auth.json

Expected behavior
The authentication session must be saved to the <working_dir>/portablemc_auth.json.

Screenshots
None

Additional context
None

Support for Optifine

Hi there,
is it possible to add support for Optifine, or is there already a way to enable Optifine?
thanks for your amazing work

Minecraft Archives support

I recently discovered archives related to really important versions in the history of Minecraft thanks to the @lunasorcery's thread on twitter. This thread tells us how she managed to find the famous missing alpha 1.1.1.

This thread inspired me to work on a launcher feature that allows searching and running old archived versions available on archives.org. Maybe in the first time I will try to make an add-on archived-versions or something similar.

Omniarchive discord: https://discord.gg/h45wxnE

The two importants item directories are:

Suggestion: Add password argument

Hello!

I'm pretty sure this has been suggested before, but I don't understand why not implemented.
Please add password argument.

Yes, I know this might be a security issue, but still make it users decision not technical restriction.
Thanks!

type object 'datetime.datetime' has no attribute 'fromisoformat'

Describe the bug
type object 'datetime.datetime' has no attribute 'fromisoformat'

To Reproduce
PortableMC version: current latest
Python version: 3.6 (this is important!)
Add-ons: 1.12.2
use PYTHON3.6 and run it a 2nd time after having run it once initially.

Expected behavior
it launches again

Screenshots
not necessary

Additional context
type object 'datetime.datetime' has no attribute 'fromisoformat' see this link and it says python3.6 doesnt support this so ur gonna wanna like polyfill it or something

Not working on macOS Big Sur (11.2.1)

English : (sorry, it's not my native language so my english is so-so)

The launcher doesn't work on macOS 11.2.1, the Terminal windows display the logs correctly, but the game windows doesn't appear.

French :

Le launcher ne fonctionne pas sous MacOS Big Sur, la fenêtre du Terminal affiche bien les logs du jeu, mais le jeu ne se lance
jamais (On entend aussi la musique).
Voici les logs, si ça peut être utile :

Starting game ...
=> Extracting natives...
=> Running...
=> Command line: java -XstartOnFirstThread -Djava.library.path=/Users/Psy/LPOCraft/Game/bin/f056fccf-4ed0-416d-95a4-13efba45979b -Dminecraft.launcher.brand=portablemc -Dminecraft.launcher.version=1.0.0 -cp /Users/Psy/LPOCraft/Game/versions/1.8.9/1.8.9.jar:/Users/Psy/LPOCraft/Game/libraries/com/mojang/netty/1.6/netty-1.6.jar:/Users/Psy/LPOCraft/Game/libraries/oshi-project/oshi-core/1.1/oshi-core-1.1.jar:/Users/Psy/LPOCraft/Game/libraries/net/java/dev/jna/jna/3.4.0/jna-3.4.0.jar:/Users/Psy/LPOCraft/Game/libraries/net/java/dev/jna/platform/3.4.0/platform-3.4.0.jar:/Users/Psy/LPOCraft/Game/libraries/com/ibm/icu/icu4j-core-mojang/51.2/icu4j-core-mojang-51.2.jar:/Users/Psy/LPOCraft/Game/libraries/net/sf/jopt-simple/jopt-simple/4.6/jopt-simple-4.6.jar:/Users/Psy/LPOCraft/Game/libraries/com/paulscode/codecjorbis/20101023/codecjorbis-20101023.jar:/Users/Psy/LPOCraft/Game/libraries/com/paulscode/codecwav/20101023/codecwav-20101023.jar:/Users/Psy/LPOCraft/Game/libraries/com/paulscode/libraryjavasound/20101123/libraryjavasound-20101123.jar:/Users/Psy/LPOCraft/Game/libraries/com/paulscode/librarylwjglopenal/20100824/librarylwjglopenal-20100824.jar:/Users/Psy/LPOCraft/Game/libraries/com/paulscode/soundsystem/20120107/soundsystem-20120107.jar:/Users/Psy/LPOCraft/Game/libraries/io/netty/netty-all/4.0.23.Final/netty-all-4.0.23.Final.jar:/Users/Psy/LPOCraft/Game/libraries/com/google/guava/guava/17.0/guava-17.0.jar:/Users/Psy/LPOCraft/Game/libraries/org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2.jar:/Users/Psy/LPOCraft/Game/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar:/Users/Psy/LPOCraft/Game/libraries/commons-codec/commons-codec/1.9/commons-codec-1.9.jar:/Users/Psy/LPOCraft/Game/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar:/Users/Psy/LPOCraft/Game/libraries/net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar:/Users/Psy/LPOCraft/Game/libraries/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar:/Users/Psy/LPOCraft/Game/libraries/com/mojang/authlib/1.5.21/authlib-1.5.21.jar:/Users/Psy/LPOCraft/Game/libraries/com/mojang/realms/1.7.59/realms-1.7.59.jar:/Users/Psy/LPOCraft/Game/libraries/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.jar:/Users/Psy/LPOCraft/Game/libraries/org/apache/httpcomponents/httpclient/4.3.3/httpclient-4.3.3.jar:/Users/Psy/LPOCraft/Game/libraries/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:/Users/Psy/LPOCraft/Game/libraries/org/apache/httpcomponents/httpcore/4.3.2/httpcore-4.3.2.jar:/Users/Psy/LPOCraft/Game/libraries/org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9.jar:/Users/Psy/LPOCraft/Game/libraries/org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9.jar:/Users/Psy/LPOCraft/Game/libraries/org/lwjgl/lwjgl/lwjgl/2.9.2-nightly-20140822/lwjgl-2.9.2-nightly-20140822.jar:/Users/Psy/LPOCraft/Game/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.2-nightly-20140822/lwjgl_util-2.9.2-nightly-20140822.jar:/Users/Psy/LPOCraft/Game/libraries/tv/twitch/twitch/6.5/twitch-6.5.jar -Xmx2G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M -Dlog4j.configurationFile=/Users/Psy/LPOCraft/Game/assets/log_configs/client-1.7.xml net.minecraft.client.main.Main --username SyFizz_ --version 1.8.9 --gameDir /Users/Psy/LPOCraft/Game --assetsDir /Users/Psy/LPOCraft/Game/assets --assetIndex 1.8 --uuid de0e506836624c5bb0b5b3c7dcb84ba9 --accessToken  --userProperties {} --userType mojang
================================================
  <log4j:Event logger="ave" timestamp="1615733469232" level="INFO" thread="Client thread">
    <log4j:Message><![CDATA[Setting user: SyFizz_]]></log4j:Message>
  </log4j:Event>
  <log4j:Event logger="ave" timestamp="1615733469235" level="INFO" thread="Client thread">
    <log4j:Message><![CDATA[(Session ID is token::de0e506836624c5bb0b5b3c7dcb84ba9)]]></log4j:Message>
  </log4j:Event>
  <log4j:Event logger="ave" timestamp="1615733471787" level="INFO" thread="Client thread">
    <log4j:Message><![CDATA[LWJGL Version: 2.9.2]]></log4j:Message>
  </log4j:Event>
  <log4j:Event logger="bnn" timestamp="1615733472728" level="INFO" thread="Client thread">
    <log4j:Message><![CDATA[Reloading ResourceManager: Default]]></log4j:Message>
  </log4j:Event>
  <log4j:Event logger="bpx" timestamp="1615733473280" level="INFO" thread="Sound Library Loader">
    <log4j:Message><![CDATA[Starting up SoundSystem...]]></log4j:Message>
  </log4j:Event>
  <log4j:Event logger="bpx" timestamp="1615733473605" level="INFO" thread="Thread-5">
    <log4j:Message><![CDATA[Initializing LWJGL OpenAL]]></log4j:Message>
  </log4j:Event>
  <log4j:Event logger="bpx" timestamp="1615733473605" level="INFO" thread="Thread-5">
    <log4j:Message><![CDATA[(The LWJGL binding of OpenAL.  For more information, see http://www.lwjgl.org)]]></log4j:Message>
  </log4j:Event>
  <log4j:Event logger="bpx" timestamp="1615733474100" level="INFO" thread="Thread-5">
    <log4j:Message><![CDATA[OpenAL initialized.]]></log4j:Message>
  </log4j:Event>
  <log4j:Event logger="bpx" timestamp="1615733474104" level="INFO" thread="Sound Library Loader">
    <log4j:Message><![CDATA[Sound engine started]]></log4j:Message>
  </log4j:Event>
  <log4j:Event logger="bmh" timestamp="1615733477002" level="INFO" thread="Client thread">
    <log4j:Message><![CDATA[Created: 512x512 textures-atlas]]></log4j:Message>
  </log4j:Event>```

Launching error + Asking for permission

I don't get this problem but my friend did when they try to launch. The error line:
Error: Could not find or load main class net.fabricmc.loader.launch.knot.KnotClient
Caused by: java.lang.ClassNotFoundException: net.fabricmc.loader.launch.knot.KnotClient

add a -P (--password) authentication command

could you add a --password command for login?
would be great to have automatic starters.

i had a look in your code if i could add it myself, and if you have no time for that i will do and try so later this year.

Raspberry Pi 4B LWJGL error

Describe the bug
I logged in with a microsoft account, installed openjdk 17 but failed to launch minecraft 1.8.9.

$ uname -a
Linux rpi 5.15.21-2-rpi-ARCH #1 SMP PREEMPT Thu Feb 10 05:54:08 MST 2022 aarch64 GNU/Linux
$ portablemc start 1.8.9 --lwjgl 3.2.3 --jvm java
[  OK  ] Resolved version 1.8.9.    
[  OK  ] Fixed LWJGL version to 3.2.3
[  OK  ] Loaded version JAR.    
[  OK  ] Checked 734 assets.
[  OK  ] Loaded pretty logger.
[  OK  ] Loaded 47 libraries. 
Exception in thread "main" java.lang.UnsatisfiedLinkError: 'int org.lwjgl.DefaultSysImplementation.getPointerSize()'
	at org.lwjgl.DefaultSysImplementation.getPointerSize(Native Method)
	at org.lwjgl.Sys.<clinit>(Sys.java:118)
	at ave.J(SourceFile:2539)
	at net.minecraft.client.main.Main.main(SourceFile:41)

To Reproduce
PortableMC version: 2.3.0
Python version: 3.10.2-1

Expected behavior
Launch minecraft 1.8.9.

Additional context
Line with username removed. lwjgl 3.3.0 has this same output. I tried java-11-openjdk and java-17-openjdk using archlinux-java, both have this same output. There is no log file in ~/.minecraft/ directly. Where should one be?

Supporting auto-download of JVM

The official launcher automatically download the adapted Java Virtual Machine, in fact I've found in the launcher DLL that the asset https://launchermeta.mojang.com/v1/products/java-runtime/2ec0cc96c44e5a76b9c8b7c39df7210883d12871/all.json list all JVMs for each platform.

The JVM version used was 1.8 since the beginning of modern official Minecraft launchers (the "launchwrapper" was used to launch older versions that are using old applets). But recently for 1.17 snapshots, Mojang officially support (and require) Java 16 to be used, in fact the class files are compiled for these versions and this can cause issues if you are using your own JVM because most peoples don't use latest JVMs.

This issue is labelled as "bug" because the 1.17 snapshot could not be started until you had JVM for Java 16, and I want to fix it before the 1.17 first release.

Missing License?

I would like to use this in my project, is the licensefile missing from this repo or are all the rights reserved?

Example for API Documents

Can you give at least one example for each functions in API Documents to make it easy to understand?
I have been reading it for a while. I still don't know where to begin.

Cannot start Fabric via API

Hello, I'm currently writing some code for not much reason, and it seems I cannot start Fabric from the API. Is there a way to do this?

Can I write an introduction post for this project on MCBBS?

This project is very cool! I like it very much. I hope to let more people know this project.
So I want to write an introduction post for this project on mcbbs (a Minecraft forum in China).
I will introduce the usage, installation method and more of this project.
Of course, I will add a link to this project and indicate the author.

Thanks!

@mindstorm38

Printing issue with NoneType in downloading Fabric versions

I'll give the full log, but it's on line 1471 of portablemc.py

C:\Users\Matthew\Documents>py portablemc.py start fabric:1.16.5
Addon 'Richer' requires module 'prompt_toolkit' to load. You can try to install it using 'pip install prompt_toolkit' or search for it on the web.
Resolving latest version of fabric loader for Minecraft 1.16.5...
=> The version is not cached, generating...
Resolving version 1.16.5
=> Found cached metadata, loading...
=> Version loaded.
=> Generated!
Resolving version fabric-1.16.5-0.11.3
=> Found cached metadata, loading...
=> Version loaded.
=> Parent version: 1.16.5
Resolving version 1.16.5
=> Found cached metadata, loading...
=> Version loaded.
Loading release fabric-1.16.5-0.11.3...
Loading jar file...
Downloading fabric-1.16.5-0.11.3.jar... 100.00% 36MB/s
Loading assets...
=> Verifying assets...
Loading logger config...
Loading libraries and natives...
Traceback (most recent call last):
File "portablemc.py", line 1556, in
PortableMC().start(sys.argv[1:])
File "portablemc.py", line 1108, in start
exit(self.start_subcommand(subcommand, args))
File "portablemc.py", line 1113, in start_subcommand
return getattr(self, builtin_func_name)(args)
File "portablemc.py", line 1351, in cmd_start
runner=runner
File "portablemc.py", line 494, in wrapper
return func(old_func, *args, **kwargs)
File "C:\Users\Matthew\Documents\MCC\standalone\addons\modloader_fabric\fabric.py", line 303, in game_start
old(cmd_args=cmd_args, version=version, **kwargs)
File "portablemc.py", line 1408, in game_start
super().core_start(**kwargs)
File "portablemc.py", line 258, in core_start
classpath_libs, native_libs = self.core_ensure_libraries(version_meta)
File "portablemc.py", line 452, in core_ensure_libraries
self.download_file(DownloadEntry(lib_url, lib_path, name=lib_name))
File "portablemc.py", line 1473, in download_file
res = super().download_file(entry, start_size=start_size, total_size=total_size, progress_callback=progress_callback)
File "portablemc.py", line 528, in download_file
progress_callback(dl_size, entry.size, start_size, total_size)
File "portablemc.py", line 1471, in progress_callback
self.print("download.progress", entry.name, p_dl_size / p_size * 100, speed, of_total, end="")
TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'

LWJGL latest version and ARM support

SYSTEM INFORMATION
Applicable neofetch(1) output:

OS: Manjaro ARM Linux aarch64 
Host: Raspberry Pi 400 Rev 1.0 
Kernel: 5.10.83-1-MANJARO-ARM-RPI 
Packages: 425 (pacman) 
Shell: bash 5.1.12

SOFTWARE VERSIONS

  • portablemc v2.2.2
  • openjdk version "1.8.0_292"
  • Python 3.9.9

EXPECTED RESULT

  • Functioning Minecraft client, 1.8.9
  • Full add-on support

ACTUAL RESULT
Output of portablemc start 1.8.9 --jvm java (username excluded):

[  OK  ] Resolved version 1.8.9.    
[  OK  ] Loaded version JAR.    
[  OK  ] Checked 734 assets.
[  OK  ] Loaded pretty logger.
[  OK  ] Loaded 33 libraries. 
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (cppInterpreter_zero.cpp:835), pid=65814, tid=0x0000ffff9a487150
#  Error: Unimplemented()
#
# JRE version:  (8.0_292-b10) (build )
# Java VM: OpenJDK 64-Bit Zero VM (25.292-b10 interpreted mode linux-aarch64 )
# Core dump written. Default location: /home/goose/.minecraft/core or core.65814
#
# An error report file with more information is saved as:
# /home/goose/.minecraft/hs_err_pid65814.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

STEPS TO REPRODUCE

  • Start Arch Linux
  • Install portablemc
  • Execute portablemc start --jvm

NOTES

  • PortableMC initially complains about a "Missing JVM," which I've worked around using --jvm

Thanks for reviewing!
hs_err_pid1139.log

cant login to ms account (solved)

im just getting this warning when I used the -m argument:
Even if you are using -m (--microsoft), you must use -l argument with your Microsoft email.

idk why

EDIT: i just used the wrong launch args I used start instead of login lol

Transferring authentication tokens and runtime binaries to working directory

To allow the user to use a separated read-only main directory (with versions, assets, libraries) from a user one (in read/write access, saves, screenshots), I will deprecate the argument --work-dir-bin because the runtime binaries will be stored in working directory by default instead of main directory. Also, the authentication tokens file portablemc_tokens currently in the main directory will be moved to working directory, to do that the --work-dir will be moved out of the start sub-command to the main command arguments.

Python 3.5 support

In a recent update portablemc lost support for older python3 versions. Can you make it compatible with them? If it causes too big of an issue then I will update on my end but it is just a small annoyance.

Make PMC into library Module.

It would be useful if we can import it like a library module.
Example:

import pmc

pmc.start("argument to start...")

download Java automatically

Hi,
This is not quite an issue, but I'd like to know how you achieved to download the latest Java. I'm making a project for a Minecraft / Discord communication, so if you could help me, it'd be great!
Thanks!

Log4Shell RCE exploit: Update the launcher to the latest version 2.2.0 when possible

Temporary fix:

Delete directory <main_dir>/assets/log_configs AND your version directory if you already have a copy of it under <main_dir>/versions. Usually, <main_dir> is your .minecraft if you don't use --main-dir argument.

https://twitter.com/slicedlime/status/1469150993527017483?t=17nPyfxTXExSTF1zsLwK9w&s=19

A release should be available soon to fix this issue, all versions will get a flag added if it's not already.

--jvm-args not working

My commands line
pmc.exe start fabric:1.17.1 --jvm-args -Xmx2G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M
image

Huge rework of internal code

I plan to rework the internal code for a future version called 1.2.0. This release may replace the planned 1.1.5.

In this release I will split up the code in even more classes, all this will stay in a single file (except for add-ons obviously).
You can find planned changes in the following list:

  • Remove class CorePortableMC.
  • Create a class McContext, stores main, work directories and many methods to interact the structure of Minecraft's directory.
  • Create a class McStart, requires a context for instantiation, used to start Minecraft using a builder-like pattern to set all configuration and then prepare, start or both at the same time.
  • The PortableMC class will no longer extends CorePortableMC as it will be removed. This class will instead instantiate classes previously mentioned. Doing this will allow more flexibility for add-ons.
  • The launcher will be installable via Python PIP, this will add a common executable and also a public lib made for developers. In this case add-ons will be installed in another place, not defined for now.
  • Allows add-ons to directly import classes from the PMC script, I don't know how to do that for now.
  • Provide a better documentation, at least for the library part of the script.

These class names and concepts are subject to modification in the future. This update might replace the planned version 1.1.5.

Support for new game arguments

The new version manifest such as the one of the latest snapshot 21w38a contains unsupported arguments by the launcher such as clientId and auth_xuid. This seems to be related to the new Microsoft authentication. The argument user_type also need to be set to another value than mojang when authenticated using Microsoft.

Deterministic offline username and UUID

Currently, a new UUID (v4, random one) is used for offline start if -i option is not used and the username is just a sub string of the UUID. This behavior is often annoying (multiple starts, and you can lose your stuff, on offline-mode servers at least) and rarely useful (if you want multiple bots).

The fix will include two main cases:

  • No username is given (using -u): a UUID from a local computer constant like host name or something like this, the username will be a sub string of the UUID.
  • A username is given: the UUID will be generated from the username, using a hash function.

Forge failed to install for lower versions

Forge addon fails to install when on lower versions maybe version > 1.16.5 ( Like 1.8.9). From what I knew it might be a Java problem. Since the newer version needs Java16 but in the older version, it may need Java8 to install the forge installer.

Risugami mod loader

ModLoader addon for:
https://mcarchive.net/mods/modloader

This is just a random idea, not planned in the near future.
It would be cool to run old mods again easily instead of being stuck with complicated procedure to install them.

With support for the MCArchive API to install mods.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.