Загрузка данных


# Эта программа сканирует регион в мире 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))

# КОНЕЦ