Python MC Mod

This mod adds python coding to fabric.

7

Python MC Mod

PythonMC

PythonMC is a server-side Fabric mod that adds lightweight Python scripting to Minecraft 1.21.1.

It lets server owners write simple Python scripts for common automation, player messages, server events, and command-driven behavior without recompiling the mod.

Features

- Loads Python scripts from the server config folder. - Starts and manages a local Python 3.8+ script host automatically. - Provides server lifecycle, tick, and player connection events. - Exposes a small API for logging, broadcasting, private messages, and server command execution. - Includes `/pythonmc` admin commands for status, reloads, restarts, custom events, and quick Python snippets. - Ships with an example script on first launch.

Requirements

- Minecraft 1.21.1 - Fabric Loader 0.18.4 or newer - Fabric API - Java 21 - Python 3.8 or newer installed on the server

Python must be available as `python3` or `python` on the server `PATH`.

If Python is installed somewhere else, set one of these before launching Minecraft:

```text -Dpythonmc.python=/path/to/python ```

or:

```text PYTHONMC_PYTHON=/path/to/python ```

Installation

1. Install Fabric Loader for Minecraft 1.21.1. 2. Install Fabric API. 3. Put the PythonMC jar in the server `mods` folder. 4. Make sure Python 3.8+ is installed on the machine running the server. 5. Start the server once.

PythonMC will create this folder:

```text config/pythonmc/scripts ```

It will also create a starter script:

```text config/pythonmc/scripts/main.py ```

Writing Scripts

Scripts are normal `.py` files inside:

```text config/pythonmc/scripts ```

Files whose names start with `_` are ignored. After editing scripts, reload them in-game or from the server console:

```text /pythonmc reload ```

Basic example:

```python import pythonmc_api as mc

def on_server_started(ctx): mc.log("PythonMC script loaded.")

def on_player_join(ctx): mc.tell(ctx["name"], "Welcome! This message came from PythonMC.") ```

Script API

Import the bundled API like this:

```python import pythonmc_api as mc ```

Available functions:

```python mc.log(message, level="info") mc.broadcast(message) mc.tell(player_name, message) mc.execute(command) ```

`mc.execute(command)` runs a Minecraft server command as the server command source. Use it carefully.

Events

PythonMC calls functions in your scripts when matching events happen.

Supported event handlers:

```python def on_server_started(ctx): ... def on_server_stopping(ctx): ... def on_server_tick(ctx): ... def on_player_join(ctx): ... def on_player_leave(ctx): ... def on_shutdown(ctx): ... def on_event(event_name, ctx): ... ```

The `ctx` object contains event data. It supports both dictionary-style access and `.get()`:

```python def on_player_join(ctx): player_name = ctx["name"] player_uuid = ctx.get("uuid") ```

Common player event fields:

```text name uuid ```

Common server event fields:

```text players max_players tick scripts_dir ```

Commands

All commands require permission level 4.

```text /pythonmc status /pythonmc start /pythonmc stop /pythonmc restart /pythonmc reload /pythonmc py <python code> /pythonmc event <event_name> ```

Command details:

- `/pythonmc status` shows whether the Python host is running and where scripts are loaded from. - `/pythonmc start` starts the Python script host if it is stopped. - `/pythonmc stop` stops the Python script host. - `/pythonmc restart` restarts the Python script host. - `/pythonmc reload` reloads scripts from `config/pythonmc/scripts`. - `/pythonmc py <python code>` runs a Python snippet in the host process. - `/pythonmc event <event_name>` sends a custom event to scripts.

Custom event example:

```python import pythonmc_api as mc

def on_event(event_name, ctx): if event_name == "maintenance": mc.broadcast("Server maintenance is starting soon.") ```

Then run:

```text /pythonmc event maintenance ```

Security Notes

PythonMC scripts run on the server machine with the permissions of the Minecraft server process.

Only install or write scripts you trust. A Python script can perform normal Python file and process operations, and `mc.execute()` can run Minecraft commands from the server command source.

For public or shared servers, restrict `/pythonmc` command access to trusted operators only.

Server Side Only

PythonMC is intended for server-side scripting. Clients do not need to install the mod when connecting to a server that uses it, unless your modpack or server setup requires matching mod lists.

Troubleshooting

If scripts do not start:

- Run `/pythonmc status`. - Confirm Python 3.8+ is installed. - Confirm `python3` or `python` works from the same environment that launches the Minecraft server. - Set `-Dpythonmc.python=/path/to/python` if needed. - Check the server log for messages tagged with `pythonmc` or `[python]`.

If script changes do not apply:

- Make sure the file is in `config/pythonmc/scripts`. - Make sure the filename ends in `.py`. - Make sure the filename does not start with `_`. - Run `/pythonmc reload`. - Check the server log for Python traceback output.

ADS