https://pastein.ru/t/8FX

  скопируйте уникальную ссылку для отправки


# Подключение необходимых модулей
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"


# Определение функции, которая будет печатать содержимое любого файла
# в любой x, y, z координате в мире Minecraft
# filename - имя файла для открытия
# x, y, z - это координаты начала (нижнего угла)
def print3D(filename, originx, originy, originz):
    # Открытие файла данных на чтение
    f = open(filename, "r")

    # Чтение всех строк из файла в переменную списка 'lines'
    lines = f.readlines()

    # Первая строка в файле - это метаданные, она содержит 3 размера
    # Разделите эту строку на части и установите 3 переменные, по одной для каждого размера
    coords = lines[0].split(",")
    sizex = int(coords[0])
    sizey = int(coords[1])
    sizez = int(coords[2])

    # Используйте переменную 'lineidx', чтобы отслеживать номер строки
    # в цикле ниже. Каждый раз в цикле, это будет установлено на
    # следующий номер строки, так что ваш цикл будет обрабатывать по одной строке за раз
    lineidx = 1

    # Этот первый цикл проходит через каждый вертикальный слой файла
    for y in range(sizey):
        mc.postToChat(str(y))  # чтобы вы могли видеть, что происходит

        # Переход к следующему индексу строки
        lineidx = lineidx + 1

        # Этот внутренний цикл проходит через каждую восточную/западную позицию в строке
        for x in range(sizex):
            # Получить всю строку в этом 'lineidx'
            line = lines[lineidx]

            # Переход к следующему индексу строки
            lineidx = lineidx + 1

            # Разделить эту строку на отдельные ячейки, каждый разделитель - запятая
            data = line.split(",")

            # Этот (третий) внутренний цикл проходит через каждую северную/южную позицию
            for z in range(sizez):
                # Получить идентификатор блока из строки в этой позиции z
                # Преобразовать его в число, используя int()
                blockid = int(data[z])
                # Построить блок в правильной x, y, z позиции
                mc.setBlock(originx + x, originy + y, originz + z, blockid)


# Получить позицию игрока
pos = mc.player.getTilePos()

# "3D-печать" содержимого файла FILENAME прямо рядом
print3D(FILENAME, pos.x + 1, pos.y, pos.z + 1)

# КОНЕЦ