- 95
- 4
- 6
Мне нужно проверять правильно ли игрок построил многоблочную структуру. Дело в том что моя структура довольно большая (13x13x7) и проверять каждый блок - это мазохизм. Можно ли проверять структуру, например, с помощью nbt файла, созданного через структурный блок?
Я попробовал решить эту проблему так:
И в конечном итоге написал класс структуры который принимает двумерный массив и словари на блоки и теги. После чего написал в нём жутко громоздкий метод для перебора и проверки этого двумерного(по сути трёхмерного, тк строка в каждом массиве в конечном итоге представляется в виде массива символов). Такое решение конечно туповатое, но лучше уж хотя бы заполнить 3-х мерный массив чем писать кучу строк с проверкой каждого блока, а и ещё это проще отлаживать. Но мне всё равно не очень нравится это решение, ибо построить что-то в самой игре и сохранить через структурный блок - это и интереснее, и нагляднее, и проще
Я попробовал решить эту проблему так:
Создал подобные массивы для каждого слоя структуры:
static String[] myStructureLayer0 = new String[]{
"sssssssssssss",
"s s s",
"s s s",
"s sssssss s",
"s s s s",
"s s s s s",
"ssss s s ssss",
"s s s s s",
"s s s s",
"s sssssss s",
"s s s",
"s s s",
"sssssssssssss"};
Потом создал функции для получения словаря:
static Map<String,Block> getBlockMapMyStructure(){
Map<String,Block> a = new HashMap<>();
a.put("g", ModBlocks.ENGRAVED_CRYSTALLINE_STONE.get());
a.put("b", ModBlocks.EMBOSSED_CRYSTALLINE_STONE.get());
a.put("e", ModBlocks.CRYSTALLINE_STONE_BEAM.get());
a.put("c", ModBlocks.CRYSTALLINE_STONE_COLUMN.get());
a.put("C", Blocks.COAL_BLOCK);
a.put("l", Blocks.LAPIS_BLOCK);
return a;
}
static Map<String, TagKey<Block>> getBlockTagMapMyStructure(){
Map<String,TagKey<Block>> a = new HashMap<>();
a.put("s",ModTags.Blocks.CRYSTALLINE_STONE_LIKE);
return a;
}
И в конечном итоге написал класс структуры который принимает двумерный массив и словари на блоки и теги. После чего написал в нём жутко громоздкий метод для перебора и проверки этого двумерного(по сути трёхмерного, тк строка в каждом массиве в конечном итоге представляется в виде массива символов). Такое решение конечно туповатое, но лучше уж хотя бы заполнить 3-х мерный массив чем писать кучу строк с проверкой каждого блока, а и ещё это проще отлаживать. Но мне всё равно не очень нравится это решение, ибо построить что-то в самой игре и сохранить через структурный блок - это и интереснее, и нагляднее, и проще
Последнее редактирование: