Python в Minecraft: от простых команд до автоматизации
Основной способ: библиотека mcpi (Minecraft Pi API)
Как запустить управление миром Minecraft из Python скрипта?
Библиотека mcpi предоставляет простой интерфейс для взаимодействия с Minecraft через Raspberry Jam протокол. Первоначально создана для Minecraft Pi Edition (Raspberry Pi), но также работает с Java Edition при установке плагина RaspberryJuice.
Установка:
pip install mcpiPython код майнкрафт (код 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)
Результат: на земле появляется прямоугольник из камня с пустым внутренним пространством.