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)
# КОНЕЦ