Deamonish
Активный участник
- Баллы
- 61
Помогите, с определением направлений табличек.
У меня есть код, который считывает NBTTags мира.
Для обертки данных, использую апи: https://github.com/wytrem/NBTReader
Мы берем директорию с регионами. И начинаем последовательно, считывать регионы.
В каждом регионе, пробегаемся циклом, по чанкам. И ищем tag TileEntities в котором есть
tag "id == minecraft:sign"
Исходя из документации от Mojang, в TileEntities у таблички, есть лишь информация о позиции x,y,z
и теги Text1,2,3,4. О direction информации нет. Совсем.
Ниже код, для получения позиции, и текста в табличках.
Но Как узнать направление таблички?
Как я понял, для этого, необходимо брать секцию Blocks. Она имеет такую структуру:
В секции Blocks записан байтовый массив.
Но взглянув на документацию, в этот массив записываются лишь байты, обозначающие тип блока.
И похоже, что дата блоков, обозначающая направление, хранится в секции Data.
Но как понять, где среди всех этих байтов, дата принадлежащая определенной табличке?
И как понять/высчитать, локацию таблички по этим данным?
У меня есть код, который считывает NBTTags мира.
Для обертки данных, использую апи: https://github.com/wytrem/NBTReader
Мы берем директорию с регионами. И начинаем последовательно, считывать регионы.
В каждом регионе, пробегаемся циклом, по чанкам. И ищем tag TileEntities в котором есть
tag "id == minecraft:sign"
Исходя из документации от Mojang, в TileEntities у таблички, есть лишь информация о позиции x,y,z
и теги Text1,2,3,4. О direction информации нет. Совсем.
Ниже код, для получения позиции, и текста в табличках.
Java:
public void scanMap(Rating rating){
File catalog = new File(rating.getDirMap() + File.separator + "region");
if(catalog.isDirectory() && catalog.listFiles() != null) {
for(File fileRegion : catalog.listFiles()) {
RegionFile file = new RegionFile(fileRegion);
//Обходим чанки в регионах.
for(int x = 0; x < 32; x++) {
for(int z = 0; z < 32; z++) {
if(file.hasChunk(x, z)) {
DataInputStream chunk = file.getChunkDataInputStream(x, z);
NBTTagCompound tag = CompressedStreamTools.read(chunk);
NBTTagList tagCompound = tag.getCompoundTag("Level").getTagList("TileEntities");
if(!tagCompound.toString().contains("TAG_End")){
NBTTagList list = tag.getCompoundTag("Level").getTagList("TileEntities");
for(NBTBase nbtBase : list.getTagList()) {
NBTTagCompound compound = (NBTTagCompound) nbtBase;
String id = ((NBTTagString) compound.getTag("id")).data;
if(id.contains("sign")) {
int posX = ((NBTTagInt) compound.getTag("x")).data;
int posY = ((NBTTagInt) compound.getTag("y")).data;
int posZ = ((NBTTagInt) compound.getTag("z")).data;
String[] sign = new String[4];
String text1 = ((NBTTagString) compound.getTag("Text1")).data;
String text2 = (NBTTagString) compound.getTag("Text2")).data;
String text3 = ((NBTTagString) compound.getTag("Text3")).data;
String text4 = ((NBTTagString) compound.getTag("Text4")).data;
}
}
}
chunk.close();
}
}
}
file.close();
}
}
}
Как я понял, для этого, необходимо брать секцию Blocks. Она имеет такую структуру:
Код:
Level: {
Sections: {
Blocks: {}
}
}
Но взглянув на документацию, в этот массив записываются лишь байты, обозначающие тип блока.
И похоже, что дата блоков, обозначающая направление, хранится в секции Data.
Но как понять, где среди всех этих байтов, дата принадлежащая определенной табличке?
И как понять/высчитать, локацию таблички по этим данным?