- Баллы
- 66
- Имя в Minecraft
- steklopaKet32_46
Нужно прочитать схематику из wordledit на питоне(зачем - рабочий секрет), которая в последствии будет вставлена в мир майнкрафта, но столкнулся с проблемой, что некоторые схематики, работают не коректно, то проподают блоки, то они ставятся хаотично. При дебаге обнаружил, что объем схематики W*L*H меньше, чем массив с id блоков (BlockData). Отсюда думаю, что в массиве блоков затясались какие не нужные блоки, которые и ломают весь процес получения их по индексу.
Вопрос - а почему так, если we вставляет их без каких либо проблем, а во время чтения возникает такой казус? И как это исправить?
Код ридера и класса схематики:
Что должно получиться
Видно странные рисунки из изумрудов, которые должны быть основой для маяка, мб они че скажут, как съехали координаты.
Еще в оригинали схематики, все до центра оси OY заполняется хорошо, но после ситуация повторяется, так же как и с куском этой схематики, только там до y=3.
Помогите...
Вопрос - а почему так, если we вставляет их без каких либо проблем, а во время чтения возникает такой казус? И как это исправить?
Код ридера и класса схематики:
Код:
from nbt import nbt
def read_schema(file_path):
nbtfile = nbt.NBTFile(file_path, 'rb')
name = nbtfile.name
width = nbtfile['Width'].value
height = nbtfile['Height'].value
length = nbtfile['Length'].value
palette = nbtfile["Palette"]
palette = dict((palette[x].value, x) for x in palette)
offsets = list(int(x) for x in nbtfile["Offset"])
block_data = list(int(x) for x in nbtfile["BlockData"])
print("sizes: {} {} {} volume: {}".format(width, height, length, width*length*height))
print("data len: {}".format(len(block_data)))
print(nbtfile['Metadata'])
print(nbtfile['Offset'])
return Schematic(name, file_path, width, height, length, palette, block_data, offsets)
class Schematic:
name: str
file_path: str
width: int
height: int
length: int
palette: dict
block_data: list[int]
size: int
def __init__(self, name: str, file_path: str, width: int, height: int, length: int,
palette: dict, block_data: list, offsets: [int]):
self.name = name
self.file_path = file_path
self.width = width
self.height = height
self.length = length
self.block_data = block_data
self.offsets = offsets
self.palette = palette
self.size = len(block_data)
def getIndex(self, x: int, y: int, z: int):
return (y * self.length + z) * self.width + x
def getBlockAt(self, x: int, y: int, z: int):
index = self.getIndex(x, y, z)
block_id = self.block_data[index]
block = self.palette[block_id]
return block, block_id
Видно странные рисунки из изумрудов, которые должны быть основой для маяка, мб они че скажут, как съехали координаты.
Еще в оригинали схематики, все до центра оси OY заполняется хорошо, но после ситуация повторяется, так же как и с куском этой схематики, только там до y=3.
Помогите...

