Замена ванильных блоков

Версия Minecraft
1.7.10
Доброго времени суток, задался вопросом в виде того, как или с помощью чего можно заменять ванильные блоки на свои(которые добавил в моде). Как это реализовывать и возможно ли такое провернуть, может быть через Хуки или как?
В гугле искал и в старых темах также – или слепой или ответа на мой вопрос все таки нету.
 
7,099
324
1,510
При генерации в мире или вообще? Для вообще потребуется комплексное решение: замена генерации, крафтов, дропа...
 
1,031
19
87
Я слышал, что при генерации руды указывается блок для замены, то-есть камень, а что если блоком для замены указать тот блок, который ты хочешь заменить на свой? Кажись так типа попробовать
Java:
private void genSurface(World world, Random random, int chunkX, int chunkZ){
 addOreSpawn(BlockHandler.*твой блок*.getDefaultState(), world, random, chunkX, chunkZ, 16, 16, 50, 20, 10, 100, BlockMatcher.forBlock(Blocks.*Блок для замены*));
}
 
7,099
324
1,510
Легкий способ: делаешь стандартный генератор, в нем проверяешь каждый чанк на наличие блоков подлежащих замене, сетаешь на их месте нужные. edited: Что-то вроде того скинул @SorenHyk, но будет не лишним проверить код addOreSpawn
Сложнее, но эффективнее: хукаешь имеющиеся ванильные генераторы(надо искать их в коде майна), чтобы они при выполнении сразу ставили нужные блоки. Тутор по хукам есть в учебнике.
 
1,031
19
87
Если не ошибаюсь, то при генерации руды в мире, она создается рандомно.
Ну если правильно настроить то нужный блок при генерации будет полностью заменен твоим
 
Я слышал, что при генерации руды указывается блок для замены, то-есть камень, а что если блоком для замены указать тот блок, который ты хочешь заменить на свой? Кажись так типа попробовать
Java:
private void genSurface(World world, Random random, int chunkX, int chunkZ){
addOreSpawn(BlockHandler.*твой блок*.getDefaultState(), world, random, chunkX, chunkZ, 16, 16, 50, 20, 10, 100, BlockMatcher.forBlock(Blocks.*Блок для замены*));
}
Вставил в генератор руды, для теста, ругается на getDefaultState и BlockMatcher.
 
Легкий способ: делаешь стандартный генератор, в нем проверяешь каждый чанк на наличие блоков подлежащих замене, сетаешь на их месте нужные. edited: Что-то вроде того скинул @SorenHyk, но будет не лишним проверить код addOreSpawn
Сложнее, но эффективнее: хукаешь имеющиеся ванильные генераторы(надо искать их в коде майна), чтобы они при выполнении сразу ставили нужные блоки. Тутор по хукам есть в учебнике.
Примерно как это можно сделать?
 
Последнее редактирование:
7,099
324
1,510
1,031
19
87
Я так не делал, но можно попробовать так как в том коде который я выслал ранее но о параметрах генерации (шанс, высота, размер жилы) сделать так чтобы они либо перекрыли то что заменяешь либо были одинаковым :confused:
 
1,031
19
87
7,099
324
1,510
"+" ни о чем не говорит? Работает на всех новых версиях с небольшими правками импортов
 
7,099
324
1,510
Ну да, есть такое. Авторы некоторых либ(code chicken core, например) стремятся не менять апи от версии к версии.
 

tox1cozZ

aka Agravaine
8,456
598
2,893
Легкий способ: делаешь стандартный генератор, в нем проверяешь каждый чанк на наличие блоков подлежащих замене, сетаешь на их месте нужные. edited: Что-то вроде того скинул @SorenHyk, но будет не лишним проверить код addOreSpawn
Сложнее, но эффективнее: хукаешь имеющиеся ванильные генераторы(надо искать их в коде майна), чтобы они при выполнении сразу ставили нужные блоки. Тутор по хукам есть в учебнике.
О да, с каждым таким генератором скорость генерации мира становится в пару раз медленнее.
Нужно в ChunkEvent.Populate менять сырые данные чанков.
 
О да, с каждым таким генератором скорость генерации мира становится в пару раз медленнее.
Нужно в ChunkEvent.Populate менять сырые данные чанков.
Можно подробнее о ChunkEvent.Populate и где/как его использовать?
 
Сверху