Я пытаюсь создать и сохранить файлы .nbt (структурный блок) в Minecraft, используя nbtlib. Сначала я попробовал посмотреть, смогу ли я отредактировать с его помощью существующий файл, и это сработало хорошо, но я пытаюсь создать новый с нуля. Проблема, с которой я столкнулся, заключается в том, что когда я пытаюсь сохранить эту новую, в чате Minecraft появляется сообщение «Структура «minecraft:t3» недоступна» («t3» — это имя структуры, которую я сохраняю).
Я пытался выяснить, не делаю ли я неправильный формат, класс или что-то еще, поэтому я сравнил тот, который изначально сохранял, с тем, который я создавал с нуля (структура сам по себе один и тот же для обоих) с простой настройкой типа print(initial == mine), которая возвращала True. Это меня очень смутило, потому что это было одно и то же, но один работал, а другой нет, хотя они были одинаковыми?
Я использую это впервые, поэтому я возможно, что-то не так с библиотекой.
Это код:
from nbtlib import tag, File
import os
folderPath = r"C:\Users\fullw\AppData\Roaming\.minecraft\saves\Python Generated\generated\minecraft\structures"
def path(name: str) -> str:
return os.path.join(folderPath, name + ".nbt")
# Load the .nbt file
file = File.load(path("t4"), gzipped=True)
def toNBT(data: dict | list | int | str) -> tag.Base:
if isinstance(data, dict):
return tag.Compound({key: toNBT(value) for key, value in data.items()})
elif isinstance(data, list):
return tag.List([toNBT(element) for element in data])
elif isinstance(data, int):
return tag.Int(data)
elif isinstance(data, str):
return tag.String(data)
else:
raise ValueError(f"Unsupported data type: {type(data)}")
class Structure():
def __init__(self, size: list[int], replaceWithAir: str = False):
self.replaceWithAir = replaceWithAir
self.structure = {"size": size, "blocks": [], "palette": [], "entities": [], "DataVersion": 3700}
def finaliseStructure(self) -> File:
result = File()
for key, value in self.structure.items():
result[key] = toNBT(value)
return result
def save(self, name: str) -> None:
file = self.finaliseStructure()
file.save(path(name))
struct = Structure([1,1,1])
print(struct.finaliseStructure() == file) # prints True
file = struct.finaliseStructure() # If this is uncommented, it doesn't work. If it is commented, it does.
file.save(path("t6"))
Это код, который я использовал для редактирования только одного, прежде чем создать приведенный выше код:
from nbtlib import File, tag
import os
folderPath = r"C:\Users\fullw\AppData\Roaming\.minecraft\saves\Python Generated\generated\minecraft\structures"
def path(name: str) -> str:
return os.path.join(folderPath, name + ".nbt")
# Load the .nbt file
file = File.load(path("t1"), gzipped=True)
# Access and modify data
file["blocks"][0]["state"] = tag.Int(1)
del file["blocks"][0]
# Save the changes back to the file
file.save(path("t6"))
Подробнее здесь: https://stackoverflow.com/questions/783 ... ile-object
Как мне правильно сохранить файл .nbt с новым объектом nbtlib.tag.File? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение