Массовая замена вида блоков на другой вид блоков

Версия Minecraft
1.12.2

GoogleTan

Картошка :3
1,353
43
310
Короче надо ВО ВСЕМ ЭНДЕ заменить эндстоун на другой блок. Кстати, все что будет дальше генерироваться должно будет сделано из нового блока, но это хук. Меня волнует, что это слишком много блоков. Либо как вариант дать всем им нбт, а самому сделать эндерняк с нбт. Есть идеи?
 
Решение
Делал когда-то такую штучку...
Быстрый способ замены одного блока другим. Думаю, переписать под свои нужды будет не проблема.
Смысл в том, что тут не используется setBlockState();
Остаётся только где-нибудь в эвенте загрузки чанков пробежаться по нему и заменить все блоки на нужные.
Ну и... Имеет смысл использовать не конкретно данный метод, а добывать ExtendedBlockStorage и пробегаться уже по нему.

Java:
public static void simpleSetBlock(World world, BlockPos pos, IBlockState state, boolean nullCheck) {
    if (nullCheck) {
        ExtendedBlockStorage ebs = world.getChunkFromBlockCoords(pos).getBlockStorageArray()[pos.getY() >> 4];
        if (ebs != Chunk.NULL_BLOCK_STORAGE) ebs.set(pos.getX() & 15, pos.getY() & 15...
Дело не в том как, а в том, что команда филл на 100*100*100 блоков грузит средний пк очень сильно, а если игорок уже крепость находил? Это будет заменить где-то 100*1000*1000(ну примерно) блоков Это в 100 раз больше. Не думаю, что смогу протестить собственный мод.
 
Я и не планировала ее использовать. Главное что она заменяет блоки на блоки. Я не думаю, что смогу сделать что-то подобное с лучшей оптимизацией. Потому и спрашиваю.
 
А как ты будешь определять, кем поставлен блок?
Тип сгенерился он сам или его поставил игрок?
 
Делал когда-то такую штучку...
Быстрый способ замены одного блока другим. Думаю, переписать под свои нужды будет не проблема.
Смысл в том, что тут не используется setBlockState();
Остаётся только где-нибудь в эвенте загрузки чанков пробежаться по нему и заменить все блоки на нужные.
Ну и... Имеет смысл использовать не конкретно данный метод, а добывать ExtendedBlockStorage и пробегаться уже по нему.

Java:
public static void simpleSetBlock(World world, BlockPos pos, IBlockState state, boolean nullCheck) {
    if (nullCheck) {
        ExtendedBlockStorage ebs = world.getChunkFromBlockCoords(pos).getBlockStorageArray()[pos.getY() >> 4];
        if (ebs != Chunk.NULL_BLOCK_STORAGE) ebs.set(pos.getX() & 15, pos.getY() & 15, pos.getZ() & 15, state);
    } else world.getChunkFromBlockCoords(pos).getBlockStorageArray()[pos.getY() >> 4].set(pos.getX() & 15, pos.getY() & 15, pos.getZ() & 15, state);
}

У меня, вроде, не грузит.
 
Назад
Сверху