4.5 KiB
treepuncher
an hackable headless Minecraft client, built with aiocraft
Features
- persistent storage
- configuration file
- pluggable plugin system
- event system with callbacks
- world processing
Quick Start
treepuncher
is still in development and thus not available yet on PyPI, to install it fetch directly from git:
pip install "git+https://git.alemi.dev/treepuncher.git@v0.3.0"
currently only 1.16.5 is being targeted, so while simple things should work on any version, more complex interactions may break outside 1.16.5
treepuncher
can both be run as a pluggable CLI application or as a library, depending on how much you need to customize its behaviour
as an application
treepuncher
ships as a standalone CLI application which you can run with python -m treepuncher
- prepare a runtime directory with this layout:
.
|- log/ # will contain rotating log files: MYBOT.log, MYBOT.log.1 ...
|- data/ # will contain session files: MYBOT.session
|- addons/ # put your addons here
|- MYBOT.ini # your configuration file for one session
- create your first addon (for example, a simple chat logger) inside
./addons/chat_logger.py
from dataclasses import dataclass
from treepuncher import Addon, ConfigObject
from treepuncher.events import ChatEvent
class ChatLogger(Addon):
@dataclass # must be a dataclass
class Options(ConfigObject): # must extend ConfigObject
prefix : str = ""
config : Options # must add this type annotation
def register(self): # register all callbacks and schedulers in here
@self.client.on(ChatEvent)
async def print_chat(event: ChatEvent):
print(f"{event.user} >> {event.text})
- create a config file for your session (for example,
MYBOT
):MYBOT.ini
[Treepuncher]
server = your.server.com
username = your_account_username
client_id = your_microsoft_authenticator_client_id
client_secret = your_microsoft_authenticator_client_secret
code = microsoft_auth_code
; you must specify the addon section to have it loaded,
; even if it doesn't take any config value
[ChatLogger]
prefix = CHAT |::
- run the treepuncher client :
python -m treepuncher MYBOT
(note that session name must be same as config file, minus.ini
)
as a library
under the hood treepuncher
is just a library and it's possible to invoke it programmatically
- instantiate the
treepuncher
object
from treepuncher import Treepuncher
client = Treepuncher(
"my_bot",
server="your.server.com",
)
- prepare your addons (must extend
treepuncher.Addon
) and install them
from treepuncher import Addon
class MyAddon(Addon):
pass
addon = MyAddon()
client.install(addon)
- run your client
client.run()
Authentication
treepuncher
supports both legacy Yggdrasil authentication (with options to override session and auth server) and modern Microsoft OAuth authentication. It will store the auth token inside a session file, to restart without requiring credentials again
to be able to use Microsoft authentication you will need to register an Azure application (see community and microsoft docs on how to do that).
this is a tedious process but can be done just once for many accounts, sadly Microsoft decided that only kids play minecraft and we developers should just suffer...
be warned that Microsoft may limit your account if they find your activity suspicious
once you have your client_id
and client_secret
use this page to generate a login code: put in your client_id
and any state and press auth
.
you will be brought to Microsoft login page, input your credentials, authorize your application and you will be redirected back to the msauth
page, but now there should be a code in the auth code
field
put this code in your config and you're good to go!
if you'd rather use classic Yggdrasil authentication, consider ftbsc yggdrasil (src)
legacy Yggdrasil authentication supports both an hardcoded password or a pre-authorized access token
Contributing
development is managed by ftbsc, mostly on our git. If you'd like to contribute, get in contact with any of us using any available channel!