Python в Minecraft: от простых команд до автоматизации

Раздел: Геймдев на Python -> Моды и скрипты

Основной способ: библиотека mcpi (Minecraft Pi API)

Как запустить управление миром Minecraft из Python скрипта?

Библиотека mcpi предоставляет простой интерфейс для взаимодействия с Minecraft через Raspberry Jam протокол. Первоначально создана для Minecraft Pi Edition (Raspberry Pi), но также работает с Java Edition при установке плагина RaspberryJuice.

Установка:

pip install mcpi

Python код майнкрафт (код minecraft на python)

Подключение:

from mcpi import minecraft
mc = minecraft.Minecraft.create()
# По умолчанию подключается к localhost:4711

Перед запуском скрипта нужно открыть мир в Minecraft (Pi Edition) или запустить сервер с плагином RaspberryJuice.

Пример: построить башню из блоков камня

import time
from mcpi import minecraft
from mcpi import block

mc = minecraft.Minecraft.create()
pos = mc.player.getPos()
x, y, z = pos.x, pos.y, pos.z
for h in range(10):
    mc.setBlock(x, y + h, z, block.STONE.id)

Этот код получает позицию игрока и ставит блоки камня на высоте от 0 до 9.

Возможные проблемы:

  • Ошибка ConnectionRefusedError означает, что Minecraft не запущен или не установлен плагин.
  • Блоки не появляются - проверьте, что игрок находится в выживании или творческом режиме.
  • Версия Minecraft должна быть совместима: для Pi Edition любая, для Java через RaspberryJuice рекомендуется версия 1.12+.

Цели использования: обучение основам программирования, автоматизация строительства, создание простых мини-игр.

Вариант 1: RaspberryJuice плагин для Java Edition

Как управлять обычной Java версией Minecraft через Python?

Если нет возможности использовать Minecraft Pi, устанавливается плагин RaspberryJuice на сервер Spigot или Paper.

Установка плагина: скачать JAR с сайта и поместить в папку plugins. Запустить сервер. В конфиге можно изменить порт (по умолчанию 4711).

Пример подключения (тот же код, что и выше) - библиотека mcpi автоматически определяет плагин.

from mcpi import minecraft
mc = minecraft.Minecraft.create("localhost", 4711)

Ошибки:

  • Плагин не загружается - требуется версия сервера 1.12–1.20, а также отключен режим online-mode=false (для пиратских клиентов).
  • Подключение висит - проверьте брандмауэр и порт.

Случаи применения: работа с обычными мирами Java Edition, совместные проекты на сервере.

Вариант 2: Grok Minecraft

Как использовать Python для обучения с готовыми уроками и визуализацией кода?

Библиотека grok-minecraft разработана для образовательного проекта Grok Learning. Она оборачивает mcpi, добавляя удобные функции.

Установка: pip install grok-minecraft

Пример: построить стену

from grok import Connection, blocks

conn = Connection()
player = conn.player()
for i in range(10):
    player.world.set_block(player.position.x + i, player.position.y, player.position.z, blocks.STONE)

Проблемы:

  • Библиотека требует версию Python 3.7+ и pip.
  • Совместима только с RaspberryJuice или Minecraft Pi.

Когда применять: в образовательных курсах, где нужен простой синтаксис и встроенные команды.

Вариант 3: RCON протокол (py-minecraft-rcon)

Как отправлять команды консоли из Python без установки модов?

Если на сервере включён RCON, можно отправлять команды напрямую через TCP.

Установка: pip install py-minecraft-rcon

Подключение и команда:

from rcon import Console

c = Console("localhost", 25575, "пароль_rcon")
out = c.run("/say Привет из Python")
print(out)

Ошибки:

  • Неверный пароль или порт - проверьте server.properties.
  • Команды не выполняются из-за прав - RCON имеет те же права, что и оператор.

Используется для: автоматизации административных задач (баны, телепорты, выдача предметов) без установки модов на клиент.

Расширенные примеры программного кода

Пример 1: Генерация случайного лабиринта

Код создаёт лабиринт из блоков камня рядом с игроком.

Пример
import random
from mcpi import minecraft, block

mc = minecraft.Minecraft.create()
x, y, z = mc.player.getPos()
for i in range(20):
    for j in range(20):
        if random.random() < 0.3:
            mc.setBlock(x + i, y, z + j, block.COBBLESTONE.id)
        else:
            mc.setBlock(x + i, y, z + j, block.AIR.id)
Результат: на земле появляется квадрат 20x20 с проходами и стенами.

Пример 2: Телепортация игрока по щелчку правой кнопкой мыши (с использованием события)

Скрипт устанавливает блок-триггер и слушает hit-события.

Пример
from mcpi import minecraft, block
import time

mc = minecraft.Minecraft.create()
mc.postToChat("Нажмите на золотой блок чтобы телепортироваться")
# ставим триггер
x, y, z = mc.player.getPos()
mc.setBlock(x, y, z, block.GOLD_BLOCK.id)

while True:
    hits = mc.events.pollBlockHits()
    for hit in hits:
        print(hit)
        # телепорт в случайное место
        import random
        nx, ny, nz = random.randint(-100,100), 50, random.randint(-100,100)
        mc.player.setPos(nx, ny, nz)
        mc.postToChat("Вы телепортированы!")
        break
    time.sleep(0.1)
Результат: при нажатии ПКМ на золотой блок игрок перемещается в случайные координаты.

Пример 3: Построение сферы из блоков

Алгоритм строит полую сферу радиусом 5.

Пример
import math
from mcpi import minecraft, block

mc = minecraft.Minecraft.create()
center = mc.player.getPos()
cx, cy, cz = int(center.x), int(center.y), int(center.z)
radius = 5
for dx in range(-radius, radius+1):
    for dy in range(-radius, radius+1):
        for dz in range(-radius, radius+1):
            dist = math.sqrt(dx*dx + dy*dy + dz*dz)
            if radius-1 <= dist <= radius:
                mc.setBlock(cx+dx, cy+dy, cz+dz, block.GLOWSTONE.id)
Результат: вокруг игрока появляется светящаяся сфера из глоустоуна.

Пример 4: Чат-бот на RCON (отправка сообщений от имени сервера)

Скрипт ждёт ввод в консоли и отправляет сообщение в чат.

Пример
from rcon import Console

c = Console("localhost", 25575, "secret123")
while True:
    msg = input("Введите сообщение: ")
    if msg == "exit":
        break
    out = c.run(f"say [PythonBot] {msg}")
    print(out)
В чате Minecraft появляется сообщение от бота.

Пример 5: Автоматическая постройка дома по шаблону из файла

Чтение схемы из текстового файла и размещение блоков.

Пример
# house.txt (вид сверху):
# X X X X X
# X . . . X
# X . . . X
# X . . . X
# X X X X X

from mcpi import minecraft, block

mc = minecraft.Minecraft.create()
player = mc.player.getPos()
sx, sy, sz = int(player.x), int(player.y), int(player.z)

with open("house.txt", "r") as f:
    lines = f.readlines()
for row_idx, line in enumerate(lines):
    for col_idx, char in enumerate(line):
        if char == "X":
            mc.setBlock(sx + col_idx, sy, sz + row_idx, block.STONE.id)
        elif char == ".":
            mc.setBlock(sx + col_idx, sy, sz + row_idx, block.AIR.id)
Результат: на земле появляется прямоугольник из камня с пустым внутренним пространством.

Код Minecraft на Python - comments

En
Python код майнкрафт (python)