# Эта программа сканирует регион в мире Minecraft и сохраняет
# представление объекта в файле CSV.
# Импорт необходимых модулей
import mcpi.minecraft as minecraft
import mcpi.block as block
import collections
collections.Iterable = collections.abc.Iterable
# Подключение к игре Minecraft
mc = minecraft.Minecraft.create()
# Создание некоторых констант для имени файла, который вы хотите отсканировать
# и размера объекта, который вы хотите отсканировать
FILENAME = "tree.csv"
SIZEX = 6
SIZEY = 6
SIZEZ = 6
# Определение функции, которая будет сканировать в позиции x,y,z в файл
# filename - имя файла для создания
# originx, originy, originz - x,y,z координаты начала сканируемого объекта
def scan3D(filename, originx, originy, originz):
# Открыть файл в режиме записи
f = open(filename, "w")
# Записать метаданные, которые содержат 3 размера, разделенные запятыми
# \n - это символ новой строки (он нажимает ENTER для вас в конце)
f.write(str(SIZEX) + "," + str(SIZEY) + "," + str(SIZEZ) + "\n")
# Цикл по всем y координатам пространства для сканирования
for y in range(SIZEY):
# Записать пустую строку в начале каждого слоя данных
f.write("\n")
# Цикл по всем x координатам пространства для сканирования
for x in range(SIZEX):
# Создать переменную "line", она начинается пустой
line = ""
# Цикл по всем z координатам пространства для сканирования
for z in range(SIZEZ):
# Получить идентификатор блока в этой x,y,z позиции
blockid = mc.getBlock(originx + x, originy + y, originz + z)
# Если переменная "line" пуста, это первый блок
# на этой линии, поэтому ему не нужна запятая
if line != "":
# 'line' не пуста, значит, вам нужна запятая, добавьте ее
line = line + ","
# Добавить идентификатор этого блока в конец переменной 'line'
line = line + str(blockid)
# Обратите внимание на отступ. Это часть цикла 'for x'
# записать всю строку и нажать 'ENTER' в конце
f.write(line + "\n")
# Обратите внимание на отступ. Это не часть никакого цикла
# Закрыть файл по завершении, чтобы другие программы могли его использовать
f.close()
# Получить позицию игрока
pos = mc.player.getTilePos()
# Сканировать область в файл FILENAME
# Он охватывает SIZEX, SIZEY, SIZEZ, сосредоточенные вокруг игрока,
# но обратите внимание, что он не "копает" под игроком,
# поэтому здесь используется pos.y
scan3D(FILENAME, pos.x - (SIZEX / 2), pos.y, pos.z - (SIZEZ / 2))
# КОНЕЦ